evidence · 6.3 KiB

README.md

Committed at docs/evidence/mainline-uart-progress-memory/no-stimulus-host/README.md. This is what grounds the requirements that cite it.

Open raw source

Memory controller with no candidate stimulus

This host-only change implements group 5j.1. The optional typed --uart-progress-memory-no-stimulus requires minimal mode and all of --same-image-shell-pid1 --uart-progress --uart-progress-memory. Existing Memory source/config/Image/initrd qualification, boot arguments, five protected loads/CRCs, and literal U-Boot transport are unchanged. No kernel argument is added by the new selector. Other modes retain their previous behavior.

After bootm, this policy sends zero candidate bytes: no receipt, carriage return, interrupt, command, retry, guard or reboot. It records receipt status NOT_REQUESTED, zero stimulus attempts and RX NOT_TESTED. Fresh Bash readiness is a historical observation; it cannot authorize input. The capture remains passive for at most 180 seconds, including missing/malformed output, read errors and unknown completion. Strict summary validity, worker completion, completion-wait timeout, readiness and protected recovery remain independent. A valid complete summary can qualify this diagnostic without a receipt only when this explicit policy is selected; it proves neither RX delivery nor usable root/touch acceptance. Missing output does not identify a worker, firmware, scheduler or hardware fault.

The only later host writes permitted are protected normal postflight helpers following ordered fresh SPL, exact normal 6.6.36 banner, login and normal prompt. Candidate normal-looking text cannot authorize them. Exact normal identities, fresh boot ID, eight protected hashes, three services and registration-marker absence still require independent guarded verification. Otherwise operator recovery remains required. There is no candidate reboot path in this mode.

Host fixture proof on 2026-10-04 UTC (Python 3.14, TMPDIR=$HOME/tmp):

Fixture evidence is separate from actual archive/artifact preparation. Actual group 5j.2 host preparation passed on controller c62ad389 using TMPDIR=$HOME/tmp python3 "$HOME/tmp/k230-mainline-uart-memory-no-stimulus-host-qualification/qualify.py". The safe receipt preserves command/time/hash identities; the exact executed qualifier preserves fail-closed checks. Its private expected-root-revision.txt contained the reviewed original full build revision 7af8f7b8b5849c75df61d39ee772c2cc8f38542c. The actual build receipt returned zero and both selected bundle and matching dev output already existed. No implicit build or UART action occurred.

The qualifier ran actual prepare_trial and prepare_uart_progress(..., uart_progress_memory=True), accepted the same protected manifest, and verified exact equality with previous Memory source, Image, linked summary/gate, config, archive, system, DT and arguments. The selected policy adds zero kernel tokens and retains the exact 381-byte literal transport. Preparation functions/constants are AST-identical to both the frozen build controller and reviewed 5j base 136dbf91. The receipt’s legacy prior_literal_transport_bytes=353 is the progress-only parent comparison; the one-stimulus Memory command and zero-stimulus command are both 381 bytes. The immutable selected kernel/dev derive from the same exact kernel derivation:

Actual wrapped initrd inspection verified archived Bash, original systemd and common dynamic loader; Image byte identity and compiled unique summary/setup were verified separately from .config. The historical protected normal report and existing wrapper CRC anchored this host-only preparation; the previous verified board readback is not a new host wrapper readback or current preflight. Registration absence is asserted by the future pre/post helper, not performed on hardware by this qualifier. Python 3.14 native Zstd supports the actual archive inspection. All raw/prepared baseline material remains in a protected private directory. Physical zero-stimulus comparison and new protected recovery remain UNVERIFIED. The preceding Memory trial still needs its newly requested operator reset. Task 5b.5 remains open.

After protected normal recovery, the sole board operator may run the reviewed controller with fresh private output paths and matching baseline/manifest:

python3 tools/mainline-drm-initrd-shell-trial.py --mode minimal \
  --same-image-shell-pid1 --uart-progress --uart-progress-memory \
  --uart-progress-memory-no-stimulus \
  --bundle /nix/store/lznjjfx1kzm8mp2j0r06c87h2vdymkhd-k230-mainline-drm-trial-boot-files \
  --manifest "$HOME/tmp/k230-mainline-uart-memory-no-stimulus-board/candidate-manifest.json" \
  --normal-report "$HOME/tmp/k230-mainline-uart-memory-no-stimulus-board/normal-report.json" \
  --log "$HOME/tmp/k230-mainline-uart-memory-no-stimulus-board/trial.private.log" \
  --result "$HOME/tmp/k230-mainline-uart-memory-no-stimulus-board/result.private.json"

The normal report for this physical command must follow the new verified reset; a historical host-qualification report is not a live preflight or recovery proof.