Rejection Cycle Artifact Preservation

When a pipeline run has rejection cycles (FAIL → fix → PASS), intermediate artifacts are lost. The Verify agent correctly deletes previous reports before writing fresh ones — this ensures write independence across rounds. But the FAIL-round verify report, its companion YAML, and the pre-fix build report are gone by the time `artifact save` runs. The proof chain entry records `rejection_cycles` count and `previous_failures` summaries, but the full artifacts are permanently lost.

verdict PASSscore 16 / 16findings 5 (0 risk · 2 debt · 3 obs)duration 52mrejection cycles 0shipped May 6, 2026

Pipeline timeline

Intent to proven code in 52m across Think, Plan, Build, and Verify.

Think
1m
Plan
9m
Build
42m
Verify
0m

Assertion ledger

16 claims, each independently verified. Showing 8 — show all →

IDSaysMatcher
A001A previously committed verify report is preserved when a new version is savedverifiedok
A002The archived verify report contains the original content, not the new versionverifiedok
A003A previously committed verify data file is preserved alongside the reportverifiedok
A004The archived verify data contains the original contentverifiedok
A005A previously committed build report is preserved when a new version is savedverifiedok
A006The archived build report contains the original contentverifiedok
A007Second rejection creates a second archive instead of overwriting the firstverifiedok
A008Both archive rounds are preserved after multiple rejectionsverifiedok

Findings 5 total

debtpackages/cli/tests/commands/artifact.test.tsscope
A014 test does not exercise actual archive failure (catch branch). Tests first-save no-op, not error recovery.
obspackages/cli/src/commands/artifact.tsclosed
archivePreviousVersion uses string equality for content comparison — could produce false archives on Windows with CRLF line endings from git
obspackages/cli/src/commands/artifact.tsclosed
No upper bound on round numbers — a slug that goes through many rejection cycles will accumulate archive files with no cleanup mechanism
debtpackages/cli/src/commands/artifact.tsclosed
Double YAML parse in companion success message (pre-existing, not introduced by this build)
obspackages/cli/tests/commands/artifact.test.tsclosed
A010 test catches process.exit(0) as throw — structurally correct but test name suggests content-identity check while the code path is no-changes-to-commit

Integrity seal

scopesha256:15a42c0ac67ef...
contractsha256:e3cbee6d7997a...
plansha256:dac18f45f0ee5...
specsha256:bdf481ef6ad65...
build-reportsha256:2070bc726a044...
verify-reportsha256:9f2622d68139e...
build-datasha256:1e7ede2c2db83...
verify-datasha256:4b30fc11d3dd0...
audit cmd$ ana proof audit rejection-artifact-preservation   → all hashes match