2.5 KiB
2.5 KiB
Stage: archive
Purpose
Publish run records and promoted session artifacts to object storage, then atomically advance the remote current pointer.
Inputs and Outputs
Inputs:
- session manifest and prerequisite stage records
- run root contents under
runs/{run_id}/ - promotion sources from session root (
archive.promote_artifacts)
Outputs:
- uploaded run files under
{session_prefix}/runs/{run_id}/... - uploaded promoted artifacts under
{session_prefix}/... {session_prefix}/current/manifest.json{session_prefix}/current/run_id.txtwritten last
Boundaries
Owns:
- Archive enable/disable gate behavior
- Prerequisite stage success enforcement
- Run file collection and upload (excluding
audio/) - Promotion rule resolution and upload
- Commit pointer publish order
Does not own:
- Stage execution before archive
- Post-archive local cleanup policy execution (handled by app cleanup logic)
Config Fields Used
pipeline.archive.enabledpipeline.archive.upload_runpipeline.archive.promote_artifactspipeline.storage.s3.bucketpipeline.storage.s3.root_prefixpipeline.workspace.rootsession.campaignsession.session_id
External Adapters Used
- Object storage backend (
env.ObjectStore) for upload/list primitives.
State and Manifest Behavior
- Requires
prepare,transcribe,merge,polish,normalize,trim, andanalyzestatussucceeded. - Resolves bucket/prefix from manifest identity first, then config fallback.
- Writes metadata including:
- upload counts/paths
current_manifest_keycurrent_run_id_keycurrent_pointer_written
- On skipped archive path, returns metadata with
skipped=trueand pointer not written.
Skip and Resume Behavior
- Stage may self-skip (metadata skip) when archive disabled or run upload disabled.
- Runner-level skip also applies for previously succeeded stage unless forced.
Failure Behavior
- Fails on missing prerequisite success, missing object store when required, missing run root, missing required promotion source, upload failures, or pointer write failures.
- Pointer semantics are fail-safe:
current/run_id.txtis not written if prior required uploads fail.
Tests to Inspect Before Changing
internal/stage/archive_test.gointernal/app/post_archive_cleanup_test.go
Architectural Invariants
- Run upload excludes
audio/subtree. current/manifest.jsonuploads beforecurrent/run_id.txt.current/run_id.txtis the remote publish commit marker.