Records an uploaded object: HEADs it, then upserts the live row, bumping updated_at.
A 15-minute download link for the file at path; null when there is none.
The live nodes directly under folder, folders first, then by orderBy (name A–Z).
Upserts the live file row at folder/name, creating missing parent
folders and bumping updated_at. For a writer that put the bytes itself
(scripts/upload-assets.ts); null when a folder holds the path.
Soft-deletes a node and everything under it; the S3 object stays, versioned.
A 5-minute presigned PUT for assets/<folder>/<name>; confirm with completeUpload.
StatickeyThe object key a file at folder/name lives under.
The global asset set templates reference by path:
pdf_assetrows over the versioned asset bucket. The renderer caches bytes by(s3_key, updated_at), so a replaced file must bumpupdated_at; the audit row is the action's.