Skip to content

CAP-PFM-DJE-011Upload a bounded file for reliable job input

Markdown

CAP-PFM-DJE-011

Upload a bounded file for reliable job input

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleData Job EngineRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
File parts travel directly to storage.Clients can resume from parts already received.Completion checks declared size and supported digest verification.
Surfaces
consoleapi
Intent sources
services-platform:docs/milestones/plans/PLAT-M19-plan.md#A10services-platform:docs/milestones/plans/PLAT-M19-plan.md#S16services-platform:docs/milestones/plans/PLAT-M19-plan.md#S18services-crm:docs/milestones/CRM-M7-data-operations.md#E-16

Controls

39 controls apply, from the corpus control catalogue.

TC-AVL-004 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-CHG-001 TC-CHG-002 TC-CHG-003 TC-CHG-004 TC-CHG-005 TC-CHG-006 TC-CHG-007 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-CRY-004 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-DAT-004 TC-DAT-005 TC-IAM-001 TC-IAM-002 TC-IAM-004 TC-IAM-005 TC-LOG-001 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-004 TC-PI-005 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.data-jobs.uploadapitenant

Business Rules

11 rules, 9 to be proved before approval. A rule's product intent is derived from its origin: 11 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Upload operations, including session reads and listings, require upload permission and an authorized workspace in the caller’s security context.
permissionapitest
services-platform:modules/data-jobs/tests/e2e/data-jobs.e2e.spec.js#refuses reading a session, because which files a tenant loaded is not a read-only user’s business
02must prove
Confirmed
An upload declaration specifies a slash-free filename of at most 255 characters, a supported content type and an exact size from one byte to 5 TiB, with an optional SHA-256 digest; invalid declarations create no session.
validationapi, servicetest
services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses a declaration before it creates anything in S3, so a refused request leaves no upload behind
03must prove
Confirmed
Part size is at least 16 MiB, otherwise the declared size divided by 9,000 rounded upward to a whole MiB; clients use that size.
calculationservicetest
services-platform:modules/data-jobs/tests/unit/part-sizing.spec.ts#rounds a part size the division leaves between whole MiB up to the next whole MiB
04must prove
Confirmed
Clients can request at most 100 signed part addresses at once, each valid for one hour; requests can be repeated only while the session is open.
policyservicetest
services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses more than a hundred parts at a time, which is the page the protocol presigns
05must prove
Confirmed
Completion supplies every part once with its storage receipt; Rhythm sorts them by part number and refuses a size mismatch by settling the session as aborted.
validationserviceobserved
06must prove
Confirmed
Declared digests are measured for files up to 256 MiB, or checked against a digest supplied by storage; mismatches abort completion, while larger files without a storage digest retain an unverified declaration.
validationserviceobserved
07must prove
Confirmed
Open sessions settle as completed, aborted or expired; completion cannot be aborted, repeated abort is harmless and reads settle storage-abandoned sessions as expired.
lifecycleservice, databasetest
services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses to abort a completed session, whose object a job may already be reading
08must prove
Confirmed
Completion with missing storage parts returns a descriptive refusal and leaves the session open for repair.
policyservicetest
services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses in words a completion naming a part S3 does not hold, rather than failing as a server fault
09must prove
Confirmed
Session metadata omits internal storage coordinates; another workspace’s session is indistinguishable from a missing session, while signed part addresses provide the upload destination.
invariantserviceobserved
10
Confirmed
Storage lifecycle policies retain ordinary uploads for 30 days unless tagged to keep, chunks for 14 days and exports for seven days, including stored versions, and abandon incomplete parts after two days.
lifecycleservicedocumented
11
Confirmed
Workspace deletion removes upload records and stored file versions, while reset preserves uploaded input.
lifecycleservicedocumented

Scenarios

IdGivenWhenThenProvenance
01A producer has a file containing exactly 200 GiB.It requests an upload session.The part-sizing calculation gives 8,534 parts at 24 MiB, which the client can upload directly to storage.inferred

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.