Experiment formal candidate artifact build plan 01 - kmosoti/FabricO11y GitHub Wiki
Candidate artifact build plan
Current plan for frozen 8fb6f413179b094288316e25845c137440ba23fa. All18 active cells actually exited0 with confirmed cgroup stops. Separate console A/B builds and staged/packaged console diffs had no output. Both DEBs compare byte-for-byte after matched build-image/source/toolchain guards; both canonical-DEB-input RPM rebuilds compare byte-for-byte. The mismatched-image control refused before comparison and the forged console-binding control observed inspector2/exact named rejection. Final inspector exited0. These are artifact-build results; installation, browser and service acceptance remain pending. Marker-control01's initial stub failure and its raw receipt/failure evidence remain preserved; the corrected unique marker-control02 exited0 with all three refusals. The green frozen record supplies CI admission.
Tree e77f61ee6b3ea3e9f22283c3496dd945293cf8b5; parents af2d9804fc281aeca29eaf2ce99bb2ce4c5b86b0 and 7eac20973829aae03104efc781338e281e47783e; epoch 1791841113; Cargo.lock SHA256 b8c9010b1a694b809ac35c4b3eaf1e6882eda83278db0ae0906797f8126f2a8c. A/B are clean detached frozen checkouts. No historical candidate build/acceptance result is reused.
Serial default containment:16GiB high/20GiB max/no swap/1800s. Each isolated DEB independently uses7/8GiB/no swap/1500s. Both drivers set CARGO_HOME=/run/media/kmosoti/data/FabricO11y/toolchain-cache/cargo and RUSTUP_HOME=/run/media/kmosoti/data/FabricO11y/toolchain-cache/rustup. Pinned Rust1.99.0 and repository UI tools/default features remain unchanged. No changed limits are proposed.
Strict full-namespace DATA census before each run and every30s, stop95,000,000,000 bytes, unchanged100GB ceiling. Census+full reservation must be<=95GB; unreadable paths fail closed. Prior measured census85,548,822,013 bytes is bound to /run/media/kmosoti/data/FabricO11y/results/service-opening-candidate/stress-pagination-evidence-docs-hooks-path-02.json, SHA256 5c27773fbd1fe00e2367c7046479a9f8104a730997f38d94b096e866d21e5e38, exit0/stopped. This is historical observation, never future admission.
| Cells | Reservation bytes | Maximum admission census bytes |
|---|---|---|
| UI/tools/console | 2,147,483,648 | 92,852,516,352 |
| Isolated DEB | 8,589,934,592 | 86,410,065,408 |
| Cleanup/compare/RPM/inspect | 1,073,741,824 | 93,926,258,176 |
| Later #41 VM | 9,663,676,416 | 85,336,323,584 |
Active exact command inventory: /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/build-command-plan-amended.json SHA256 27b097f883de7bd0965c905c032754d9b7b53c0741ef3b69bbdadb6cc66f6f5a. Original build-command-plan.json is archived historical proposal, consumed by no current driver or inspector; its stale vectors do not govern execution.
| Prepared file (under /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01) | SHA256 |
|---|---|
run-step-a.py |
22e11438447b1822ea090fb716016ebfd3f391012cca089d873b880dfa624e57 |
run-step-b.py |
1d52dfa32fd68f95229a5dd12a378cf24cd7ba05246474f8d94477d8ccd0ccd0 |
census.py |
399bc25f8c5c4f2bc5c386f286369815db7ee432b02d5be9301f13833eb0a495 |
cleanup-fresh-console-targets.py |
7fbdf2db556bc4cd7179983914f4ff52bece9074a4f31442768657ab10c7c383 |
negative-console-target-markers.py |
00c1db37049d519b69cf1ff576cb24b2872f3480a77a012bba1cb481b2c4746e |
guard-deb-reproducibility.py |
d3eb7ce47113b82726fb5fd5912c05d7c47fc1084d2fa69872a1b0bca4dfba76 |
inspect-candidate.py |
82a104d669d4a0adedb7bb8e8009dd5784c69f12e8927fb288570b50d21bb075 |
negative-console-binding.py |
685bd98ac703d0bacb96c1fb6d70cd9a1517d30a9ff61dfac91bd414f45bc306 |
candidate-admission.json |
fc37ad5c5d39b7ce1b6f2825ad1812c6240c90edd38813b9e69e6005eb83b4a6 |
console-target-forged-marker.json |
ce3149990ceca17e8193a6d9ecbc546954087490620cba668679190350319c40 |
console-target-forged-marker-side.json |
17ec766856374a9c74b1a26dfcde3156d53c20e7c6c494b4cd8f81ecd024d3c9 |
console-target-forged-marker-path.json |
9a1b0bd39206b1013f89964ea29ef71dcf601b9b0a608a706c3d400a5ff9a7e0 |
Actual completed outer receipts (same META directory):
| Receipt | SHA256 | Result |
|---|---|---|
fresh-8fb6f413179b-01-ui-tools.json |
e2ca3c389d889cc75c885c43ba07de3889c74e6e922455e6bc1405a216e9c637 |
exit0; stopped |
fresh-8fb6f413179b-01-cargo-fetch.json |
ee509fd61ab34b4501e80c1d125970f10a09d203c73b5088e4f49305b0a204e7 |
exit0; stopped |
fresh-8fb6f413179b-01-console-a.json |
9f02ec0764355ce42bc04dcd83bc2dc732390acbc00f34c343ebc7c5b715bc33 |
exit0; stopped |
fresh-8fb6f413179b-01-console-b.json |
133dd275471098db1ac6e42daffa36bf07a24693c04b66d507240aec23e0d423 |
exit0; stopped |
fresh-8fb6f413179b-01-console-diff.json |
7d4f6e5702305dc4f938174d42c82533cd213bdb45ff55b96133b0b19dcfa523 |
exit0; stopped |
fresh-8fb6f413179b-01-console-target-hardlink-controls-01.json |
2497969454360a5997ae12fdc068760cb7406d11b98261f2b945f0f16ad6d9bf |
exit0; stopped |
fresh-8fb6f413179b-01-console-target-marker-controls-02.json |
87dd63b0ad9a3aa5e7685c6ea4908bd73eef2fb91a01997b3b1040c81475b50f |
exit0; stopped |
fresh-8fb6f413179b-01-console-target-dry-run-01.json |
87a4c1e29b5b874b7369f0162faa4795ef7405eed33cd1d39a14170d32b12140 |
exit0; stopped |
fresh-8fb6f413179b-01-console-target-cleanup-01.json |
aaedff334119d792c392bd0625abafec79f1ae371620bc852c8810bbaeff9543 |
exit0; stopped |
fresh-8fb6f413179b-01-deb-a.json |
e4531d0c72c3bf295c36c3be91ceab17664e200374b1e0dfb8c6647689b4cb2d |
exit0; stopped |
fresh-8fb6f413179b-01-deb-b.json |
8d0a0a5213264f965e5b84ddb5899fd9536e625df323503c1167f29b9e17641d |
exit0; stopped |
fresh-8fb6f413179b-01-deb-image-negative-01.json |
b80ba6b3da7f50340c192deea20d0bc01eac129776661e902837f32fc3cfd9ee |
exit0; stopped |
fresh-8fb6f413179b-01-deb-compare-01.json |
a8f0fced6843d5c082c38056e8e192415e39c0e689e48190039a5d27f2c00aa9 |
exit0; stopped |
fresh-8fb6f413179b-01-rpm-a.json |
710de7d7d4359988c3604d9f180a52a8b4dd0560dfb791fb099b2181b8859bc7 |
exit0; stopped |
fresh-8fb6f413179b-01-rpm-b.json |
1d00b0d81000cfe21f347a0fedac6249931890d13f22956d02548a6cc9b34da8 |
exit0; stopped |
fresh-8fb6f413179b-01-rpm-diff.json |
ca0633f2b46adc2de7d5058fb868af43bc66cce483933c33c19ad2c6f65d3d7e |
exit0; stopped |
fresh-8fb6f413179b-01-negative-console-binding.json |
e93f542d0429f786926ba326511b48578492f53e63d2e7e8324b17899e354995 |
exit0; stopped |
fresh-8fb6f413179b-01-package-inspect.json |
03115270f0e7d48dd83ec9f6b421f3d47ae1b45107455c7cd9afc7b321ddace3 |
exit0; stopped |
Each complete invocation follows in execution order. Read/answer new #59 requests before every step and after each run. Continue only after expected success and confirmed stop. Any unexpected control outcome, nonzero actual dry-run/execute or partial removal stops the sequence before DEB admission, preserves evidence and posts BLOCKED with observed sizes. A retry after partial removal needs a new inventory and pre-flight review.
fresh-8fb6f413179b-01-ui-tools— Verify/install repository-pinned UI tools once.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-ui-tools 2147483648 python3 -B tools/ci/install-ui-tools.py
fresh-8fb6f413179b-01-cargo-fetch— Prepare pinned offline Cargo inputs once.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-cargo-fetch 2147483648 cargo +1.99.0 fetch --locked
fresh-8fb6f413179b-01-console-a— Independent console distribution from fresh clean checkout A.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-console-a 2147483648 env SOURCE_DATE_EPOCH=1791841113 CARGO_TARGET_DIR=/run/media/kmosoti/data/FabricO11y/scratch/console-target-fresh-8fb6f413179b-01-a python3 -B tools/ui/build.py --out /run/media/kmosoti/data/FabricO11y/results/console-fresh-8fb6f413179b-01-a
fresh-8fb6f413179b-01-console-b— Independent console distribution from fresh clean checkout B.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-b
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-b.py fresh-8fb6f413179b-01-console-b 2147483648 env SOURCE_DATE_EPOCH=1791841113 CARGO_TARGET_DIR=/run/media/kmosoti/data/FabricO11y/scratch/console-target-fresh-8fb6f413179b-01-b python3 -B tools/ui/build.py --out /run/media/kmosoti/data/FabricO11y/results/console-fresh-8fb6f413179b-01-b
fresh-8fb6f413179b-01-console-diff— Compare every dist file; do not compare path-bearing receipts for byte equality.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-console-diff 1073741824 diff -ru /run/media/kmosoti/data/FabricO11y/results/console-fresh-8fb6f413179b-01-a/dist /run/media/kmosoti/data/FabricO11y/results/console-fresh-8fb6f413179b-01-b/dist
fresh-8fb6f413179b-01-console-target-hardlink-controls-01— Five synthetic ownership/identity/mount observations, all true, wrapper exit0.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-console-target-hardlink-controls-01 1073741824 python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/cleanup-fresh-console-targets.py --hardlink-controls
fresh-8fb6f413179b-01-console-target-marker-controls-02— Three exact main-return1/named marker refusals; wrapper exit0, no inventory/deletion.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-console-target-marker-controls-02 1073741824 python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/negative-console-target-markers.py
fresh-8fb6f413179b-01-console-target-dry-run-01— Immutable inventory plus successful stopped dry-run, exit0.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-console-target-dry-run-01 1073741824 python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/cleanup-fresh-console-targets.py --inventory /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/fresh-console-targets-inventory.json
fresh-8fb6f413179b-01-console-target-cleanup-01— Execute only after binding actual prior inventory SHA256; exit0 and targets absent.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-console-target-cleanup-01 1073741824 python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/cleanup-fresh-console-targets.py --inventory /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/fresh-console-targets-inventory.json --execute --expected-inventory-sha256 ACTUAL_DRY_RUN_SHA256
fresh-8fb6f413179b-01-deb-a— Clean isolated DEB build A with corresponding independent console output.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-deb-a 8589934592 env SOURCE_DATE_EPOCH=1791841113 python3 -B tools/qualification/install/build-isolated.py --family debian --run-id fresh-8fb6f413179b-01-deb-a --console-build /run/media/kmosoti/data/FabricO11y/results/console-fresh-8fb6f413179b-01-a
fresh-8fb6f413179b-01-deb-b— Clean isolated DEB build B with corresponding independent console output.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-b
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-b.py fresh-8fb6f413179b-01-deb-b 8589934592 env SOURCE_DATE_EPOCH=1791841113 python3 -B tools/qualification/install/build-isolated.py --family debian --run-id fresh-8fb6f413179b-01-deb-b --console-build /run/media/kmosoti/data/FabricO11y/results/console-fresh-8fb6f413179b-01-b
fresh-8fb6f413179b-01-deb-image-negative-01— Observe exact forged-image ValueError in shared guard, no cmp, wrapper exit0.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-deb-image-negative-01 1073741824 python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/guard-deb-reproducibility.py --negative-control
fresh-8fb6f413179b-01-deb-compare-01— Require actual matched image and receipt/operand inputs, record cmp_argv and raw cmp exit0.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-deb-compare-01 1073741824 python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/guard-deb-reproducibility.py
fresh-8fb6f413179b-01-rpm-a— RPM metadata execution A from the same canonical validated DEB A receipt.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-rpm-a 1073741824 python3 -B tools/packaging/build_candidate_rpm.py --deb-receipt /run/media/kmosoti/data/FabricO11y/results/installation-package-build/fresh-8fb6f413179b-01-deb-a/receipt.json --out /run/media/kmosoti/data/FabricO11y/results/packages/fresh-8fb6f413179b-01-rpm-a
fresh-8fb6f413179b-01-rpm-b— RPM metadata execution B from the same canonical validated DEB A receipt.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-b
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-b.py fresh-8fb6f413179b-01-rpm-b 1073741824 python3 -B tools/packaging/build_candidate_rpm.py --deb-receipt /run/media/kmosoti/data/FabricO11y/results/installation-package-build/fresh-8fb6f413179b-01-deb-a/receipt.json --out /run/media/kmosoti/data/FabricO11y/results/packages/fresh-8fb6f413179b-01-rpm-b
fresh-8fb6f413179b-01-rpm-diff— Require equal RPM bytes for two executions from receipt A.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-rpm-diff 1073741824 cmp /run/media/kmosoti/data/FabricO11y/results/packages/fresh-8fb6f413179b-01-rpm-a/fabrico11y-0.1.0-0.alpha.1.x86_64.rpm /run/media/kmosoti/data/FabricO11y/results/packages/fresh-8fb6f413179b-01-rpm-b/fabrico11y-0.1.0-0.alpha.1.x86_64.rpm
fresh-8fb6f413179b-01-negative-console-binding— Inspector actual in-process exit2 with b-matching-console-receipt mismatch, wrapper exit0.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-negative-console-binding 1073741824 python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/negative-console-binding.py
fresh-8fb6f413179b-01-package-inspect— Final artifact inspection including both guarded DEB reports and stopped outer receipts, exit0.
Working directory: /run/media/kmosoti/data/FabricO11y/scratch/candidate-build-fresh-8fb6f413179b-01-a
python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/run-step-a.py fresh-8fb6f413179b-01-package-inspect 1073741824 python3 -B /run/media/kmosoti/data/FabricO11y/results/candidate-build-fresh-8fb6f413179b-01/inspect-candidate.py package-inspection.json
Cleanup conditions: --hardlink-controls requires exit0 and all five named observations true: two_owned_links_removed, outside_link_rejected_before_deletion, changed_identity_rejected_before_deletion, moved_root_rejected_before_deletion, descendant_mount_rejected. Moved-root case preserves original and replacement markers plus original hardlink fixture files, with zero removed paths/bytes before refusal. All fixtures are tiny, synthetic, launcher-owned disk scratch; no actual target deletion by these controls.
During actual main() the marker wrapper configures raising stubs for inventory/remove_tree, raw os.unlink/remove/rmdir/rename/replace and every mkdir except a modeled EEXIST for the exact already-existing canonical owned DATA root, write-mode builtins.open/io.open (including Path.open/write_text/write_bytes), and write-capable os.open; required reads remain available. Its report write occurs outside these stubs. Marker wrapper requires exactly three distinct one-field corruptions (frozen, side, path), observed main() return1, its exact actual validated cgroup banner, and exact CONSOLE-TARGET-MARKER-BINDING diagnostic, unchanged target-marker hashes, no inventory and intercepted inventory/deletion boundaries. It exits0 only when every rejection is detected. This is an in-process entry-point control; no subprocess exit is fabricated.
Actual cleanup requires console A/B and dist-diff outer exit0/confirmed stopped, the successful stopped dry-run, and no other active fabric unit; target marker SHA256 A=d0006b9f933cb63a8e94ea3b5a398a815260c7948ee0836931c77156d1f6e129, B=4b10e6bd2949d6ade3faec9bde46e2c4a39a9995cafe311f15403e040f85e60c. Actual cleanup admits only the exact marker-owned fresh console targets. Each marker is a regular single-link owner-UID1000 mode0600 file, schema fabric-console-target-v1, exact frozen commit/run/side/absolute target path and integer uid1000; symlink ancestors refuse. Before first unlink it compares the entire current entry set/identity/hash inventory with the immutable dry-run inventory, checks complete hardlink accounting across both trees, canonical held-root identity, owner UID, same-device membership and no target/descendant mounts in /proc/self/mountinfo. Every member is rechecked through no-follow held FDs. Only own unlink link/ctime transitions update sibling expectations; outside hardlinks, unaccounted changes, extra/missing entries and mountpoints refuse. Root identity is checked before any member deletion and again before marker removal. Sources, console distributions, receipts, failures and all other cache paths are protected. Fenn independently reviewed the earlier root/marker correction; Fenn also independently rereviewed the current mount guard and marker wrapper at their published hashes with no actionable static finding. No controls or deletion ran during those reviews.
DEB guard receipt paths are fixed to:
/run/media/kmosoti/data/FabricO11y/results/installation-package-build/fresh-8fb6f413179b-01-deb-a/receipt.json./run/media/kmosoti/data/FabricO11y/results/installation-package-build/fresh-8fb6f413179b-01-deb-b/receipt.json.
Both actual receipts require state=built and a resolved image_digest matching ^docker\.io/library/debian@sha256:[0-9a-f]{64}$, equal A/B. The image_tag_resolved field is the constant input tag, not evidence that the tag was resolved; only actual image_digest establishes image identity. All toolchain/registry/build inputs must match. Semantic source equality requires original_head, source_date_epoch, source_commit, source_tree, every source_files hash/size, and source_diff_sha256. Each side independently requires actual manifest SHA256/content equality to its source receipt, actual bundle SHA256 integrity, and an intact empty source-diff.patch. Bundle and manifest A/B hashes are recorded with equality flags; differing pack bytes alone do not reject equal source content. Each receipt package path equals its fixed operand; SHA256 is checked at admission and again immediately before cmp. Any mismatch exits nonzero and stops before RPM construction. Normal report records exact cmp_argv, raw stdout/stderr/exit and unchanged original receipt/package hashes.
Only after the guard admits those same operands does it execute:
cmp '/run/media/kmosoti/data/FabricO11y/results/installation-package-build/fresh-8fb6f413179b-01-deb-a/fabrico11y_0.1.0~alpha.1_amd64.deb' '/run/media/kmosoti/data/FabricO11y/results/installation-package-build/fresh-8fb6f413179b-01-deb-b/fabrico11y_0.1.0~alpha.1_amd64.deb'
The literal forged-image negative uses the same guard function and requires exact observed ValueError image_digest mismatch; no reproducibility verdict, cmp_invoked:false and untouched original receipts/packages. This is function-level detection, not an invented subprocess exit.
Final inspector reads deb-reproducibility-01.json and deb-reproducibility-negative-control-01.json from META, requires their current script/original receipt/control bindings, successful cmp on those exact operands and both matching stopped outer receipts. It independently compares actual DEB image/tool/source inputs and artifact/payload hashes. It never looks for the obsolete deb-diff receipt. The false-console-binding control still requires inspector exit2 and exact B binding rejection, with A binding success and all six original receipts unchanged.
Completion output includes actual package/binary SHA256, dependency floors/ELF GLIBC<=2.34, PNG timelessness, console dist/payload comparisons, static-file equality, minimized snapshot semantic identity and per-side manifest/bundle integrity, both tool/image/registry input bindings, source cleanliness and cleanup receipts. CANDIDATE-PROVENANCE.json exact bytes/hash and package inspection remain private under META until report publication; packages remain private until #48.
Both RPM executions deliberately use the complete canonical DEB(A) receipt. This supports two RPM executions from one canonical receipt; it does not claim independent Fedora compilation or source-only reproduction from differing receipts. Preserve this #47 limitation. No build/snapshot/receipt identity is borrowed from older candidates.
All final results go to a pinned wiki report; #40 receives its pointer and hashes. This amended plan documents only completed console/tool steps and prospective remaining work.