Repository navigation
feat: publish complete local file export sets - #1074
Conversation
Register phlo.export as an executable capability asset. Stage each attempt independently, retain immutable run directories, and atomically replace the current manifest pointer. Add lifecycle and Dagster discovery tests plus runnable export documentation.
|
Note This drawing shows
1 finding · reviewed 🟠 A file output can block another output’s parent directory ·
|
Review at
|
Summary
Closes #1062.
Add
@phlo.exportthrough executableAssetSpec/RunSpecregistration. Each complete export set is one asset with named artifacts, SHA-256 checksums, byte sizes, run identity, routing metadata, and writer-recorded upstream version references.Every attempt uses fresh staging. Complete run directories remain immutable through the API; an atomic current-manifest pointer selects the visible set. Identical retries reuse the published run, changed content is rejected, concurrent successes use last-publication-wins, and prior runs are retained. Consumers resolve the manifest once. The initial backend is local filesystem only, with its limits documented.
Verification
make setupandmake checkpassed: 5,805 tests passed, 4 existing skips, 228 integration tests deselected.uv run --locked pytest tests/runtime/test_exports.py tests/runtime/test_exports_integration.py -q --tb=short: 16 passed. Covers discovery, orchestration metadata, second-writer failure, missing outputs, checksums, retries, concurrent publication, and pointer failure recovery. These in-process integration tests run in the baseline because they need no external services.make test-core-regression: 360 passed.-m integration.make docs-clean && make docs-buildpassed. Executed both guide code blocks and verified both artifacts and checksums; inspected the rendered guide.git diff --checkpassed.No remote storage, serializers, delivery mechanisms, or changes for #1064–1067.