Experiment formal service log opening run 01 - kmosoti/FabricO11y GitHub Wiki
Service-compatible log opening — run 01
Date: 2026-10-12. Repair source 084d0aa0c2c67601f3996eb4f12cf24ff0e18d2a on milestone/service-log-opening; base frozen candidate ca84d9823b5e3f8f39f40647cedffef0acff3aac. This is native regression evidence for an unmerged repair, with rebuilt-package acceptance pending.
Rejected candidate and origin
Debian lifecycle rel-deb-life-01 exited 2: the required RestrictSUIDSGID=yes filter denied mandatory openat2 with ENOSYS in the dedicated Spindle preflight, and the server exited. The installation failure record retains the guest controls and exact failure.
| Artifact | SHA-256 |
|---|---|
| Rejected Debian candidate | 241679e2d63d75f0ec628376baaff80a1070dc44991c7ca8c430dd9c66542219 |
| Rejected RPM candidate | 43ee9a896713e60ae9fd26d92757c16661c61dfcfd60e1bee48465058ce32bad |
The owner authorized preparing and verifying a product fix. The old packages remain private failure evidence and are excluded from release acceptance.
Mechanism and registered checks
The registered amendment replaces mandatory openat2 with a root-anchored, descriptor-relative openat walk. Each intermediate component uses O_PATH | O_NOFOLLOW | O_CLOEXEC and descriptor metadata; the leaf uses read-only, no-follow, nonblocking access and must be regular. Every error propagates. Parent descriptors remain pinned across rename and Rust ownership bounds descriptors to two. No path is canonicalized or reopened, and the unit hardening stays byte-identical. This does not authenticate hardlinks/content or confine mount changes.
The isolated child test actually returns ENOSYS for the retained old syscall before checking production reads. On 73f7d90553dc32a64d4b45e2958b8f6a870769a8, the regression exited 101 at the ordinary backlog read with errno 38. After the replacement it exited 0, retaining exact nine-byte backlog/cursor checks, leaf/parent refusal, numeric-PID proc magic-link refusal and the deterministic parent-replacement control.
Commands and observed exits
Every command used python3 -B tools/resource_group.py -- COMMAND, with mounted data-drive storage and pinned Rust 1.99.0. The table shows COMMAND; local administrative run labels bind the complete command and outer receipt.
| Run | Command | Exit / observation | Outer receipt SHA-256 |
|---|---|---|---|
focused-security-final |
rustup run 1.99.0 python3 -B tools/ci/security_checks.py |
0; 11 Linux + 11 node + 10 server security tests; formatting passed | 2e892980a026232a401e4586caae33b6cc4487825c3390ff9c540e30b862f0a6 |
fast-checks-admitted |
rustup run 1.99.0 cargo xtask checks --profile fast |
0; all 20 fast receipts passed on a clean source tree | 245ed04bc4785db8f7c5402938d4651f0128e1a5936e8a639e381ca3841ae8e3 |
documentation-final |
/run/media/kmosoti/data/FabricO11y/tools/bun-1.4.0/bun tools/docs/check.mjs |
0; documentation checker | 4625274e7d3652bec1b2c76b4e7a07a1b9151df61351c64dc99f47670665735a |
documentation-probes-final |
env PATH=/run/media/kmosoti/data/FabricO11y/tools/bun-1.4.0:/home/kmosoti/.cargo/bin:/usr/local/bin:/usr/bin:/bin bun tools/docs/check.test.mjs |
0; 55/55 positive and negative probes | 768de719fcca6d6e30da84eb574f273d52f0888515427039fbef8ce6d17897e3 |
documentation-hooks-final |
env PATH=/run/media/kmosoti/data/FabricO11y/tools/bun-1.4.0:/home/kmosoti/.cargo/bin:/usr/local/bin:/usr/bin:/bin python3 -B tools/docs/test_hooks.py |
0; hook tests | fe2853a9d7e824917950c3e8dbfb02ed008b5149503fa53564f7c489abd96428 |
Retained failures and cleanup
The initial full fast run on 5a933e6 exited 1: its outside-scratch control derived a path from the checkout, but that checkout was itself beneath scratch. The runner correctly admitted the inside path; mocked process state then failed JSON serialization. The separately committed fixture repair chooses a sibling of the actual scratch root and asserts the outside precondition, retaining every original refusal/no-launch/no-creation assertion. All 21 runner tests then exited 0, and the final fast profile also passed that gate.
The first full build grew the strict regular-path census above the 95 GB admission limit. A final run was mistakenly started after admission failed, then explicitly stopped; its launcher exit 2 and partial receipts remain interrupted. A subsequent guarded attempt was denied before launch. No failed or stopped run is counted as a pass. The administrative launcher now checks admission before execution and samples storage every 30 seconds.
Cleanup removed 3,603,504,590 bytes of repair-created incremental compiler scratch, using birth times and source/target identity; preexisting cache directories and completed binaries/fingerprints remain. Ownership assumes no other project build was admitted during these commands. Raw failures, bad-layout fixture, receipts and frozen packages were retained before cleanup. The old cached Bun copy failed the pinned-version check (1.4.2 versus 1.4.0), and an initial doc probe lacked Bun in child PATH; both failures are retained. The official pinned Bun 1.4.0 asset was checksum-verified, installed only under the data drive, and the corrected complete documentation checks passed.
Final cached verification began at 93,813,453,212 strict regular-path bytes with a 1 GB reserve. Its sampled maximum was 93906049474 bytes. Default 16/20 GiB memory high/max, zero swap and 1800-second deadline were enforced; every final command stopped and cleaned its private temporary directory. Final fast cgroup observations:
{
"memory.peak": "1722368000",
"memory.events": "low 0\nhigh 0\nmax 0\noom 0\noom_kill 0\noom_group_kill 0\nsock_throttled 0",
"cpu.stat": "usage_usec 602105648\nuser_usec 563532372\nsystem_usec 38573276\nnice_usec 0\ncore_sched.force_idle_usec 0\nnr_periods 0\nnr_throttled 0\nthrottled_usec 0\nnr_bursts 0\nburst_usec 0"
}
Remaining acceptance and decision impact
The architecture pages, current state, capability ledger, verification matrix and counterexample registry distinguish the native repair from package acceptance. The implementation and trust-boundary changes are separate commits. Owner merge uses a merge commit, then a replacement frozen commit needs fresh Debian/RPM builds, hashes/provenance and the affected installation/security/extended gates. Historical extended evidence cannot cover this changed code. #41 criteria remain unchecked; later #42–#47 exact-candidate gates are pending.
Private raw evidence: /run/media/kmosoti/data/FabricO11y/results/service-log-opening/ (controlled local archive, not publicly downloadable). completion-evidence.json SHA-256: 7ce896ba235314d796da86d3e24b1171e3d4579294dc964f0fb300f8697deefb. No package, credential, raw telemetry or compiled binary is uploaded with this report.