evidence · 4.2 KiB

serial-console-only-host-2026-10-03.md

Committed at docs/evidence/mainline-uart-observer-trial/serial-console-only-host-2026-10-03.md. This is what grounds the requirements that cite it.

Open raw source

Optional UART-only console comparison: host preparation

Worktree ~/tmp/k230-mainline-uart-observer-serial-console, branch mainline-uart-observer-serial-console, base 667d45388ee1b5599278fdeb18e36528473a6b74. Only the observer controller, its tests and this note are owned. No board/UART, build, helper/Nix, card or profile change was performed. This remains a bounded diagnostic within mainline 5b.5.

The READY-only physical observation does not prove the helper’s kernel-log write returned. A synchronous legacy console flush after UART output is a source-supported hypothesis, not a proven cause or proof of fbcon involvement. This option isolates the volatile console selection without changing the built helper, kernel, initrd or hardware DT.

--serial-console-only requires exactly one console=tty0, exactly one console=ttyS0,115200n8 and exactly one consoleblank=0 in the original bundle arguments. Absent, duplicate or other console forms are rejected. It removes only console=tty0; the consoleblank setting, sole immutable init, five qualified controls and three fresh identity arguments remain. The default argument string and default U-Boot append command remain unchanged.

For this comparison, U-Boot first imports the checked original artifact, then sets the complete base argument value with only tty0 removed, then appends the existing controls and identities. The prefix is computed against that replaced base, preventing duplicate init/control arguments. Both literal values reject expansion/substitution/quote/control syntax, each command is below a conservative 512-byte bound, and exact printenv bootargs equality remains required before boot. Argument commands are validated during host preparation before opening UART. No environment save or persistent boot selection is performed.

Host commands on 2026-10-03 UTC:

python3 -m unittest discover -s tests -p test_mainline_drm_uart_observer_trial.py
openspec validate the-board-runs-a-mainline-kernel --strict
git diff --cached --check

32 focused tests passed in 8.266 seconds; strict change validation passed. New cases cover unchanged default arguments/transport, one-token comparison, duplicate init/control prevention, unsafe console/shell syntax, result selector, fresh normal identity selection, an actual command-transport model and refusal to boot after a printed-argument mismatch. Existing observer/archive/unknown recovery tests remain included. The actual 16cp… bundle argument file was also read without board access: a fixed host test nonce/UUID produced exactly the one-token deletion and command lengths 28, 206, 387 bytes.

After protected normal recovery is qualified and the root operator reserves the board, use the already inspected/staged bundle with fresh private output paths:

nix shell --inputs-from . nixpkgs#dtc --command \
  python3 tools/mainline-drm-uart-observer-trial.py \
  --serial-console-only \
  --bundle /nix/store/16cpjjiifxgwyb6bndhi39vfmlvcdw6h-k230-mainline-uart-observer-boot-files \
  --manifest "$HOME/tmp/k230-mainline-uart-observer-board/candidate-manifest.json" \
  --normal-report "$HOME/tmp/k230-mainline-uart-observer-board/normal-report.json" \
  --blkid-result "$HOME/tmp/k230-mainline-blkid-board/trial-result.json" \
  --log "$HOME/tmp/k230-mainline-uart-observer-board/serial-console-uart.log" \
  --result "$HOME/tmp/k230-mainline-uart-observer-board/serial-console-result.json"

Host Python 3.14 Zstandard inspection remains required. The result explicitly records the comparison selector and exact expected arguments. READY/before plus a fresh primary prompt still permit only one receipt; afterward the host only receives until fresh protected normal return permits postflight. Failed or unknown observer work cannot become a passed diagnostic merely through reset or normal return. No host reboot retry is added.

ordinary usable mainline root, real glass touch and a diagnosed console fault remain unverified by this source/test change. Task 5b.5 stays open; coordinator review/landing precedes a separate reserved trial.