evidence · 6.2 KiB

README.md

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

Open raw source

Existing Memory image with volatile idle polling

Group 5k.1 is a host-only controller increment. Typed --uart-progress-memory-poll-idle requires minimal mode and all previous same-image shell, progress, Memory and no-stimulus selectors. It reuses existing Memory qualification and checks the same dev/config and linked Image hashes, exactly one CONFIG_GENERIC_IDLE_POLL_SETUP=y and one NUL-terminated nohlt setup. It then reconstructs the qualified literal command with only trailing bare nohlt; hlt, value forms, duplicates, arbitrary additions and unsafe transport fail closed before UART access. Defaults are unchanged. No kernel, DT, initrd, card, profile or firmware changes are made.

The strict fresh arguments/summary parser and zero-candidate-input capture are unchanged. The policy retains NOT_REQUESTED receipt, zero attempts and RX NOT_TESTED, 180-second passive capture, no retry/reboot on unknown, and independent ordered normal-return/protected identity checks. An observed summary would support dependence on the changed idle/tick policy without isolating WFI, timer, IRQ, firmware or scheduler causation. Missing output remains inconclusive, including whether the final DBCN output returned. Polling is a temporary comparison, not a production power policy or ordinary-root/glass acceptance. The exact source audit identifies IRQ-enabled forced polling and tick restart in the selected source.

Host tests on 2026-10-04 UTC used Python 3.14 and TMPDIR=$HOME/tmp:

Fixture proofs are distinct from actual artifact preparation. Actual group 5k.2 preparation PASSED on controller d10b8fa0 with TMPDIR=$HOME/tmp python3 "$HOME/tmp/k230-mainline-uart-memory-poll-idle-host-qualification/qualify.py". The safe receipt preserves UTC times, command/source hashes and exact artifacts. The executed qualifier preserves same-derivation dev/config, source/Image, archive and manifest checks; its private expected-root-revision.txt selected the actual successful original full build 7af8f7b8b5849c75df61d39ee772c2cc8f38542c. No output was built implicitly.

The same lznjjfx1 bundle, 1pvqbm4 dev, worker SHA256 307d7c0588499dd32826c1d05476e0bf6d46ca0c8939d42e0b4f7180545b98dc, Image SHA256 dd4466aae08927dd3eb7e2bcbc28c81d7279c341c52bd002ae67fcc04dde42af and config SHA256 52e7470b108ad094dbdf88b94e3e8838564edbda9e7a015b4279012e6765c9f1 matched the prior actual Memory proof. The same protected manifest, hardware DT, wrapped initrd and archived Bash/systemd/common loader were requalified. Exact Memory arguments gained only trailing bare nohlt, changing literal transport 381→387 bytes. The qualified Image contains the unique linked setup at byte 19425483. String/config evidence alone is not runtime selection proof; the operator controller still requires exact received candidate arguments.

The historical shared preparation functions/constants are AST-identical to original build source 7af8f7b8; unchanged preparation/parser functions are AST-identical to reviewed 5k base 691279d0. Because the transport function was extended, the qualifier compares the five previous shell/progress/breadcrumb/ post-sample/Memory outputs explicitly instead of claiming unchanged transport AST. Every old output matched. The passive observer is unchanged.

An initial harness failure is preserved: the first invocation asked the older original build controller to contain the later no-stimulus helper/parser. It failed before artifact preparation or output creation. The corrected qualifier separates historical shared preparations from unchanged reviewed-base parsing, then passed. This was a host script error, not an artifact/build/hardware failure.

The protected historical normal report and wrapper CRC anchor host preparation; no new live preflight, recovery or wrapper readback was performed. Registration absence remains an assertion in the future pre/post helper. Baseline/prepared material stays private. Actual archive inspection used Python 3.14 native Zstd. No build/UART/physical action occurred in this host task. The subsequent NEW operator reset passed protected normal recovery. Physical polling observation/recovery and ordinary acceptance 5b.5 remain UNVERIFIED.

After fresh protected recovery and actual artifact preparation, the sole board operator may use fresh private output paths:

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

A historical protected report used by a host qualifier is not the new physical recovery/preflight required by this command.