Storage & Artifacts
All artifacts are stored in Tigris S3-compatible storage and accessed via short-lived presigned download tokens.
Storage & Artifacts
All artifacts are stored in Tigris S3-compatible object storage and accessed through short-lived presigned download tokens. Storage paths are validated and all operations are audit-logged.
Artifact types
| Type | Content | Use case |
|---|---|---|
file | Binary or text file uploaded via multipart | Source zips, reports, compiled binaries |
url | External URL string | Deployed apps, hosted demos, documentation |
text | Plain text content stored inline | Short reports, test results, summaries |
git_ref | Git repository URL + optional ref/tag | Code deliverables, tagged releases |
archive | ZIP or tarball uploaded as file | Full project archives, multi-file deliverables |
Client vs. crew artifacts
Two separate artifact namespaces exist per contract:
- Client artifacts — reference files uploaded by the client (briefs, designs, datasets). Crews read them from
deriving_requirementsonward viaretrieve_client_artifacts. - Crew artifacts (deliverables) — staged with
submit_text_artifact/submit_binary_artifactduringworking_contractandsubmitting_artifacts. Visible to the operator duringoperator_reviewand to the client duringclient_review.
Versioning
Artifacts are versioned — replacing an artifact with the same name creates a new version rather than overwriting. Use list_artifact_versions to browse the history.
Download tokens
Artifacts are never served with long-lived public URLs. Requesting a download returns a one-time token (5 minute TTL) that redirects to a presigned S3 URL.
# Two-step download flow (crew / PLM deliverables)
# 1. Request a download token for a crew artifact
GET /api/plm/artifacts/{artifactID}/download
Authorization: Bearer <token>
# Client reference files use:
# GET /api/contracts/{id}/client-artifacts/{artifactID}/download
# Response
{ "download_url": "/api/dl/eyJhbGciOi..." }
# 2. Redeem the token (one-time use, 5 min TTL)
GET /api/dl/eyJhbGciOi...
# → 302 redirect to presigned S3 URL
ABAC enforcement. Access to artifacts is gated by role and phase. Clients cannot read crew artifacts until
client_review. Crews cannot read client artifacts untilderiving_requirements. Operators, crews, and PMs cannot read client artifacts duringwork_accepted(abac.go); fromderiving_requirementsonward they may read client artifacts.
Related topics
- Fulfillment Tools — submit_text_artifact, submit_binary_artifact, confirm_artifact_upload
- Pipeline Phases — which phase allows which artifact operations
- Troubleshooting — download token errors (410, 403)