Experiment formal installation release run 03 - kmosoti/FabricO11y GitHub Wiki
Executed 2026-10-12 under installation-release protocol revision 4. All four positive cells passed; all six deliberately defective package controls were detected at their registered checks. These are finite local guest measurements, not deployment qualification or authenticated-console acceptance.
Frozen source a5dbda7a4fd6465c94f6505b3214cbcbc2130c82; minimal source snapshot f23830d5f70dd3029d540def41fdaf50fe0facf3. PR #53 was merged with a merge commit, preserving all six commits and separate trust-boundary changes. Its exact tested tree was retained. Epic #33 supersedes historical #32.
Debian 0.1.0~alpha.1 SHA-256 54cddf548c1a307aade8c3ac4332ede2007e2bc9603ab0cba72d8297287d6cee. RPM 0.1.0-0.alpha.1 SHA-256 982ad6923e17f64b35700dcfafb2994ed68e32b2c6b368589a8b6a0d550cac79. Both package families were built twice with matching hashes; all twelve packaged console files matched with diff exit 0 and no output. RPM repackages the exact Debian12-sysroot binaries; it is not an independent Fedora compiler result.
Build and provenance record; CANDIDATE-PROVENANCE.json SHA-256 b02f2ebbf66e61b4b2b9133174fd787516af1a54701a6c02fd26041454b59f90. Rust 1.99.0, default features, epoch 1791817558, Cargo.lock SHA-256 b8c9010b1a694b809ac35c4b3eaf1e6882eda83278db0ae0906797f8126f2a8c. P1 package content checks were completed in that record; L1 separately rechecked installed console hashes after upgrade.
| Run ID | Result | Actual guest exit / detector exit | Seconds | Checks |
|---|---|---|---|---|
service-opening-deb-life-01 |
passed | 0 / 0 | 312.472 | A1, A2a, A2b, A3, A3b, A4, A5, A6, A7, A8, A8h, A9, A10, A11, A12, L1, L2, A13a, A13b |
service-opening-deb-base-01 |
passed | 0 / 0 | 225.654 | A1, A2a, A2b, A2c, A2d, A3, A3b, A4, A5, A6, A7, A8, A8h, A9, A10, A11, A12, A13a, A13b |
service-opening-rpm-life-01 |
passed | 0 / 0 | 537.397 | F1, A1, A2a, A2b, A3, A3b, A4, A5, A6, A7, A8, A8h, A9, A10, A11, A12, F2, F3, L1, L2, A13a, A13b, F4 |
service-opening-rpm-base-01 |
passed | 0 / 0 | 436.692 | F1, A1, A2a, A2b, A2c, A2d, A3, A3b, A4, A5, A6, A7, A8, A8h, A9, A10, A11, A12, A13a, A13b, F2, F3 |
service-opening-deb-mut-root-user-01 |
named rejection confirmed | 1 / 0 | 283.477 | A10, A6, A7 |
service-opening-deb-mut-no-collision-check-01 |
named rejection confirmed | 1 / 0 | 297.433 | A2a, A2b, A2c, A2d, A3, A6 |
service-opening-deb-mut-no-memory-max-01 |
named rejection confirmed | 1 / 0 | 287.591 | A8 |
service-opening-rpm-mut-root-user-01 |
named rejection confirmed | 1 / 0 | 414.279 | A10, A6, A7 |
service-opening-rpm-mut-no-collision-check-02 |
named rejection confirmed | 1 / 0 | 498.744 | A2a, A2b, A2c, A2d, A3, A6 |
service-opening-rpm-mut-no-memory-max-01 |
named rejection confirmed | 1 / 0 | 419.900 | A8 |
Positive baseline cells used the exact replacement packages on fresh guests. Upgrade cells first accepted the registered older predecessor, then separately graded replacement L1, L2, A13a/A13b and Fedora F4. A passing predecessor baseline is not attributed to the replacement candidate. L1 preserved exact row identities, configuration, credentials, account identity, Spool and history; L2 required a genuinely different boot ID and active services after reboot.
Predecessor fixture hashes: Debian alpha.0 27a733e1bcef571ac9c1b110131b1afedefa6b3806233c24e639f6b0bf0e85c3; constructed Fedora alpha.0 3c0a64a10b088a9add12e8837c12ad2f8d6aad01c3ce3dab55cfd75baad469a3. They are registered migration fixtures, not claims of historical RPM release acceptance.
The root-user controls required A6; no-collision-check required A2a and A2b; no-memory-max required A8. Every control had actual guest exit 1 and detector exit 0, the named failures were present, and no check was NOT-RUN. Additional failures shown in the table are retained. Mutated packages are labelled negative controls and are never candidates.
DEB baseline guest:
os=debian:13
systemd=systemd 257 (257.13-1~deb13u1)
pid1=systemd
cgroup=cgroup2fs
controllers=cpuset cpu io memory hugetlb pids rdma misc
MemTotal: 6073784 kB
2
kernel=6.12.111+deb13-cloud-amd64
RPM baseline guest:
os=fedora:44
systemd=systemd 259 (259.5-1.fc44)
pid1=systemd
cgroup=cgroup2fs
controllers=cpuset cpu io memory hugetlb pids rdma misc dmem
MemTotal: 6053248 kB
2
kernel=6.19.10-300.fc44.x86_64
Images were rechecked against official HTTPS manifests before each boot: Debian 13 genericcloud amd64 build 20261001-2618, SHA-512 f46f0671a6e5bdec5291ab8972bae2f10e5408c2f64a74078f11efc2f06a436a9d0313ed50e0472542eeabf780e9f7c792ac0a314c6c20507fcd9fd81b468c3d; Fedora Cloud Base Generic 44-1.7 x86_64, SHA-256 28680fe5b371a5a82ebf43a31926e086a168e59949d03969c5093e7071f90b7f. This does not claim independent OpenPGP signature validation.
Fedora remained SELinux Enforcing before delivery and after reboot/removal, and its boot audits contained no Fabric-process AVC. No permissive switch or broad allow policy was used. RPM removal retained state and configuration; A13b explicitly deleted the disposable fixture as an operator reset. RPM has no purge guarantee. Debian exercised native removal and purge.
Both roles were exercised: server with its mandatory companion Spindle, and a standalone Spindle. Supplemental read-only process observations saw all three live processes before removal, then absent binaries, both services inactive and no Fabric process after removal. The unchanged harness supplied the removal verdict; these observations supplement it.
| Family | Before removal UTC | Post-removal observations UTC | Witness SHA-256 |
|---|---|---|---|
| deb | 2026-10-12T16:26:42Z | 2026-10-12T16:27:36Z, 2026-10-12T16:27:39Z | 61a034d0c82e30089548d4e9ccfa78831b5a812bb20f7d0c56b47b24256b58b6 |
| rpm | 2026-10-12T16:33:30Z | 2026-10-12T16:35:20Z, 2026-10-12T16:35:26Z, 2026-10-12T16:35:30Z | f7f18ae272a6beb66ed0a590e598eb87d40966ae307f27d642daea42daef868a |
Each project command ran through python3 -B tools/resource_group.py --; QEMU verified a stricter 7 GiB high / 8 GiB maximum, no swap, 1,800-second deadline, two vCPUs, 6 GiB guest RAM and an 8 GiB disk. Only one guest ran at a time. All scratch and caches used the mounted data drive. Admission reserved 9 GiB against the unchanged 95 GB line; strict namespace observations counted every path, including hard-linked paths, and stopped on observation failure. Observed aggregate peak across these cells: 85,744,200,311 bytes. Every cell recorded QEMU process cleanup, owned scratch removal and stopped outer cgroup.
The frozen runner automatically removes successfully detected guest-repacked Debian controls, but retains stopped external RPM control disks. Their original receipts still record scratch_removed=false. Separate capped cleanup dry runs checked ownership, no remaining processes or mounts, hashes of all archived logs/harness copies and the exact defective RPM; execution then removed only those owned disks. This follows the same evidence-preservation boundary without editing the frozen runner or regrading a result. The table below binds the separate follow-ups.
| Run ID | Cleanup follow-up SHA-256 | Cleanup command exits |
|---|---|---|
service-opening-rpm-mut-root-user-01 |
98de348928567f3986485f9adf726ccb3ea802801152590424c3164600a3b8a4 |
dry run 0; execution 0 |
service-opening-rpm-mut-no-collision-check-02 |
28c32d6a5fa3b8d99aa3abdc2a51c9a2b5f7bc3fb582a507651f7f8b92295795 |
dry run 0; execution 0 |
service-opening-rpm-mut-no-memory-max-01 |
af6939114ef26655f16079673f2586e144564d8b72e91704f9c054d4a8f2ebbf |
dry run 0; execution 0 |
The first no-collision RPM VM attempt was NOT RUN: aggregate admission refused its full disk reservation while the correctly detected root-user disk was retained. After that stopped scratch was cleaned, a new run ID was used. No admission ceiling or reservation was reduced. The read-only compiler-cache cleanup preview was not executed; no additional compiler cache was removed.
All commands used the source snapshot above and --memory-stressor parallel. Baselines used run-qemu.py --family debian|fedora --package EXACT_PACKAGE --run-id RUN_ID; lifecycle cells additionally used --upgrade-from EXACT_PREDECESSOR. Debian controls used the exact baseline package plus --mutate NAME. Fedora controls first used the unchanged packaging/build-rpm.sh OWNED_EXISTING_OUTPUT EXACT_DEB --candidate-deb EXACT_DEB_RECEIPT --mutate=NAME, then run-qemu.py --family fedora --package MUTANT --expected-mutation NAME. Exact argument vectors and exit statuses remain in the data-drive command receipts.
Controlled archive: results/installation-qemu/<run-id> contains receipts, acceptance output, journals and exact harness copies. results/service-opening-candidate/installation-completion.json SHA-256 f027638744c5440052bcfd39756a2d08b35cae639360b20f76a88ec258a5fdb0 binds the ten cells and process observations. No credentials, private keys, binaries or bulk telemetry are published here.
| Run ID | Receipt SHA-256 | Acceptance output SHA-256 |
|---|---|---|
service-opening-deb-life-01 |
d3df048206a2808f33d8601ebbf211a47b682cfe5dcf57db82c5a00decd16fca |
ab29883ffdf8c92fed804646a0cd51f82c21187e9dbbd41e1d504bd174aef06c |
service-opening-deb-base-01 |
827cb0d5b5babc6bae7c50c3f04867dd7d18dd575ddba6d4beb46ad30c421ef2 |
c2cefa58f3ae37b644d6079585cbadb2b507cbf7fff164ba858cb98ee5cd4042 |
service-opening-rpm-life-01 |
3461e37322ff0d5fff7a92e2db023413aa37bd36b3422f2a54ef2e2636232edd |
827ddc6959086835b95e5ba8b144992f22faeb9bb48916c14997d1d9eb9a96cc |
service-opening-rpm-base-01 |
5b425f0abe7937e6f4cf4a39acc61ebc1b7580912154f9967af01ccc1fe13642 |
6d130a1ba52fa5d16ee799fdf97e2be9d784a7a23b3b11d3b700f46edc217198 |
service-opening-deb-mut-root-user-01 |
e4ede105e75e14898bbf500a5dd87e52628c86cc7d81c7451426c179c339ff24 |
d6a253f272716ea5d4945e730c892c1a9afe080ca74440be34fd8276a946b9f0 |
service-opening-deb-mut-no-collision-check-01 |
c5181351bde463b7aa69a46b2142ae2e5742eb35fcabafbb8640a902560572f8 |
cc680681d7ae4bb157881122bb3b18367b2ed12e2df4aa2c10ec35ff7c2cfad2 |
service-opening-deb-mut-no-memory-max-01 |
70ea62b066d6731aba9d3caa0d1d19c992c229b73cc3bbba60aa4aec68b90df6 |
eccdbec8f735ce8793f09fcd842bd045f27a561bef1449eee7861d758c4a335d |
service-opening-rpm-mut-root-user-01 |
c179691f5262672b5dc5e1dafadaf4adf9b63b841aa7e3976af216afa393dc8c |
0960e7a83a7407e618b39c9ac04f2cb16ae1f1bdfb71df8171c7f06ba805d326 |
service-opening-rpm-mut-no-collision-check-02 |
1f35b2128ab0a413ea53c67c141ba81d2426883b86cfb342d93828e453b5b156 |
a35421d7260ac2eebcc87a82f313ab0c77c29de86cb21cac540c100eedb1250b |
service-opening-rpm-mut-no-memory-max-01 |
6c3eccfd90ae4a832fc7dce4156df9463c6acd6b077f85ce82375d62f650ef55 |
b67f6e6ae255a6e2e0016ba51b2fd2c5d91008252bca4c3d286d25bc6f8fc2a9 |
All cells retained the same source-bound acceptance and lifecycle helpers; the lifecycle header’s stale “Revision3” comment was left unchanged. A first Fedora mutant construction exited 1 before staging because its output directory was missing. That failure and its stopped cgroup were retained; the corrected caller setup used a fresh retry label and did not change the package recipe, candidate, protocol or grader. An earlier private bookkeeping guard mistook the expected guest exit 1 for a detector failure; it was corrected from the existing raw receipts without rerunning or regrading those completed controls.
Previous failed candidate run 02 remains failed and preserved. Service-opening repair records the native causal regression. This replacement acceptance does not erase earlier failures.
These legacy-admin installation/migration fixtures do not establish passkey roles or the authenticated production console. #42–#46 remain separate exact-candidate gates; #47 requires the complete ledger before release approval. Packages remain private and no tag or release has been published.