Fixed info/console child: controller host proof
Prepared at 2026-10-05T02:47:30Z in branch mainline-initrd-info-controller,
worktree ~/tmp/k230-mainline-initrd-info-controller, based on
6bb1e8eed3e5ed1c2d71a3f03575c329130cf359. Owned paths are the ordinary
controller, the new info test file and this note. No UART, board, camera or
build reservation was taken. This is source/fixture proof for task 5p.1.
The typed begin-only --initrd-info-logging selector requires
--wait-initramfs-in-initcall --without-boot-markers and excludes
--initrd-debug-logging. It selects exactly
rd.systemd.log_level=info rd.systemd.log_target=console. The only difference
from the debug comparison’s arguments is debug → info: 356 → 355 argument
bytes and 374 → 373 literal U-Boot command bytes. The existing safe literal
transport and 512-byte bound remain. A small common helper checks both logging
selectors’ types/exclusion and supplies their fixed controls; inherited alias
and competing-control rejection is shared without changing unselected policy.
Protected state records the typed info selection, restores it for touch/finish, and defaults false for old states. Invalid modes/types/combinations, malformed saved selections and inherited plain/initrd logging aliases fail before output creation or UART opening. Exact live arguments retain both singleton controls. The new fixtures exercise successful mocked begin/finish, resumed touch preparation, five guarded loads/CRCs through the shared transport, and a failed readiness run that preserves the selection without further candidate input.
The common boot/readiness/identity/exchange/recovery functions are AST-identical to the reviewed base. The existing debug tests therefore continue to provide the actual-pump proof of split fresh readiness beyond the 131072-byte rolling buffer cap with complete private logging and unknown-no-input write spies. No kernel record/argument sanitization or new readiness rule is introduced.
Commands used TMPDIR="$HOME/tmp" and PYTHONDONTWRITEBYTECODE=1:
python3 -B tests/test_mainline_initrd_info_logging.py
python3 -B tests/test_mainline_initrd_debug_logging.py
python3 -B tests/test_mainline_drm_system_trial.py
openspec validate the-board-runs-a-mainline-kernel --strict
git diff --check
Results: new 10 tests passed in 2.450 seconds; debug 13 passed in 1.831 seconds;
ordinary 36 passed in 2.827 seconds. Strict validation and whitespace checking
passed. The initial new-test run failed only because an AST fixture referred
to a nonexistent candidate_checks function; changing the fixture to the
actual identity function produced the final pass. This was a host harness
error, without hardware involvement. Tests use isolated scratch paths and
mocked wire/artifact responses; they do not perform actual artifact preparation.
7239be4923e15cb699d96cf8465ca6345d8f5900ef95c3667f4bf261bbe95beb tools/mainline-drm-system-trial.py
09be7251413a98676a359bf4b1635455b13d14a14e24b72a30ae175e1b9e25ec tests/test_mainline_initrd_info_logging.py
Actual preparation is a separate coordinator gate:
prepare(bundle, manifest, normal_report, wait_initramfs_in_initcall=True, without_boot_markers=True, initrd_info_logging=True).
It must qualify the same immutable p2 artifacts and normal anchors before an
operator uses fresh protected state/log/result paths with
begin --wait-initramfs-in-initcall --without-boot-markers --initrd-info-logging.
That physical use requires NEW protected recovery and the operator’s exclusive
board/UART reservation. This note establishes neither a fresh normal preflight
nor a physical comparison/recovery result.
The selected source and bounded comparison analysis
ties systemd 261.2 to exact official commit/archive hashes and raw-file startup
and logging references. The prior debug/console result lacked a systemd banner;
it did not establish /init exec success or a blocked console operation. A
change in observed progress with info would show sensitivity to one changed
value, without identifying a call or hardware cause. Silence cannot separate
earlier PID1 setup from console open/write. Ordinary root/panel/glass acceptance
and task 5b.5 remain UNVERIFIED.