Repository navigation
fix(presigned-url): read file liveness from status on every files table - #1952
Conversation
Every files table runs the confirm-upload lifecycle, so the plugin always selects status and treats uploaded/processed rows as live; the per-module flag and the S3 HEAD fallback are gone. node-type-registry drops the matching storage option.
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
|
Review complete. 🟠 1 high 💬 Inline comments (1)
This change drops the Note: one scan flagged a residual compatibility risk it could not fully confirm — legacy deployed modules whose files tables lack a
Reviewed commit: fb3b3d7 |
There was a problem hiding this comment.
The PR removes the hasConfirmUpload config branch, making the status-based file liveness check and confirm-upload lifecycle unconditional across the presigned-url plugin and node-type-registry codegen.
Key findings
- 🟠 Status-only liveness breaks modules without confirm-upload — file-lifecycle.ts:15
This comment has been minimized.
This comment has been minimized.
The presigned-url plugin now always selects status; the fixture files tables carry it and the dedup cases mark the row uploaded after the PUT.
Summary
Every files table runs the confirm-upload lifecycle, and the presigned-url plugin reads file liveness from it:
file-lifecycle.ts:isLiveFileRow(row)checksrow.statusagainstLIVE_FILE_STATUSES(uploaded,processed). Callers inplugin.ts/managed-upload.tsalways selectstatus; arequestedrow is not a dedup hit, so the plugin deletes it and issues a fresh upload URL.storage-module-cache.ts/types.ts:StorageModuleConfigcarries only the per-module settings the plugin needs (confirm_upload_delayamong them).node-type-registry:StorageModuleOptionsand the generated blueprint types describeconfirm_upload_delayas the one confirm setting.graphql/server-testfixtures: the storage files tables carry astatuscolumn, and the dedup cases mark a rowuploadedafter the PUT.Tests assert liveness on row status for
requested/rejected/expiredvsuploaded/processed, with no S3 HEAD on the dedup path.