evidence · 7.1 KiB

README.md

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

Open raw source

Memory matching host artifacts and exact configured objects

Evidence class: completed matching host artifacts and actual selected-header RISC-V object compilation/API/layout inspection. No board/UART/camera action, concurrent worker/observer execution, physical summary/receipt/root/touch or recovery was tested here. Physical tasks 5i.5–6 and task 5b.5 remain UNVERIFIED; positive controller/physical evidence is separate.

The coordinator’s full matching invocation used frozen revision 7af8f7b8b5849c75df61d39ee772c2cc8f38542c and returned 0, 2026-10-04T04:16:00.152160+00:00–04:47:18.845096+00:00. The exact command, times and outputs are retained in proof.json. No full build was duplicated. The narrow object invocation used worktree /home/jadams/tmp/k230-mainline-uart-progress-memory, branch mainline-uart-progress-memory, source checkpoint 29979175f000a92ca687ce7a990fb18e0e3d4595.

Only after the actual successful full-build receipt and immutable dev presence did we acquire the shared lock nonblocking. The offline dry run selected only exact-object derivation 86bw9hjq…, with no fetch/full rebuild. The narrow receipt records return0, 2026-10-04T04:48:37.513368+00:00–04:48:48.757130+00:00; lock released.

flock -n /tmp/k230-nix-build.lock nix build \
  .#kernelMainlineUartProgressMemoryExactObjects --offline --no-link \
  --print-out-paths --max-jobs 1 --cores 2
python3 docs/evidence/mainline-uart-progress-memory/exact-full-host/verify.py \
  /nix/store/v5b3a2ny1gsiyd9fbwqrhq1c9g4lc6xf-k230-mainline-uart-progress-exact-objects \
  ~/tmp/k230-mainline-uart-memory-board/full-build-result.private.json \
  docs/evidence/mainline-uart-progress-memory/exact-full-host

Read-only verifier passed, including the added target API/compiler excerpt. Owned changes are this exact/full evidence and only task 5i.2–3 proof; source/protocol/recipes/defaults/controller/protected files are unchanged.

ArtifactExact installed identity
Bundle/nix/store/lznjjfx1kzm8mp2j0r06c87h2vdymkhd-k230-mainline-drm-trial-boot-files
System/nix/store/sja2fw7arlkkjws7ax7h1r2b9can7y8j-nixos-system-nixos-26.11.20260919.20b1ddd
Kernel/nix/store/zk5rbsrgqgp40bk1314mj0i50qhn260m-linux-riscv64-unknown-linux-gnu-7.3.0-rc5
Dev/nix/store/1pvqbm4r3gqcvsabgkz5wvrpxfbk5k1v-linux-riscv64-unknown-linux-gnu-7.3.0-rc5-dev
Source/nix/store/f7xg031sjb9dy3bswm5s3qjr9xwx1g02-linux-mainline-k230-uart-progress-memory-src
Exact objects/nix/store/v5b3a2ny1gsiyd9fbwqrhq1c9g4lc6xf-k230-mainline-uart-progress-exact-objects

Kernel/dev share reviewed derivation c7rd5pii…; bundle matches lm3s9n0w…. Actual worker SHA-256: 307d7c0588499dd32826c1d05476e0bf6d46ca0c8939d42e0b4f7180545b98dc. Realized source derivation layers exactly over immutable PostSample wnvb… with only the Memory patch. Six cached getter/timer source/header/Kconfig files are byte-identical to that parent, with per-file SHA-256 receipts.

All three objects are ELF64 little-endian RISC-V relocatables from GCC15.3.0, W=1. The exact recipe compiles actual selected worker/getter/timer C against installed selected dev config/generated headers, with no CONFIG overlay. The installed dev source is a prepared build skeleton rather than a symlink to complete selected source; its Makefile matches that source. Actual config/ autoconf bytes match selected dev before/after compilation and also parent PostSample js4…. Config SHA-256: 52e7470b108ad094dbdf88b94e3e8838564edbda9e7a015b4279012e6765c9f1; autoconf SHA-256: 99f44d781b246202edab1d5ef8c4836b15ae99c590999ff268541dfd673865d0. Effective config differences are empty. Reporter/SBI/8250/DW/OF/timer dependencies remain built-in; 4KiB pages, VMAP_STACK=y and KUNIT disabled. The compile log retains the pahole-version mismatch (kernel131/object environment0); no C warning was observed. Checksums passed.

Worker/observer ELF inspection shows ordinary .text worker, Memory observer and active helper; flags plus four-byte atomic state in .sbss; completion in ordinary .data, size32. Memory summary buffer is ordinary .bss, size256/alignment256/offset0; inherited numeric buffer remains size256/alignment256/offset256. Each is page-contained, not VMAP_STACK or init-freed storage. Four inherited fixed arrays remain ordinary .rodata, alignment64, offsets0/64/128/192 and sizes31/35/35/33 including NUL. Only setup/ late-init functions use .init.text; publication helper is inlined. Ordinary 8250 getter and timer getter/state lifetimes are inspected too.

The actual matching object references wait_for_completion_timeout and complete. Target instruction excerpt shows the observer’s single state lw followed by acquire fence r,rw, bit-field decoding, and an inlined release publication fence rw,w followed by state sw. These match the source’s one packed release/acquire observation without retries. Compilation/API/instruction inspection is not proof of concurrent runtime progress or hardware memory ordering under a stalled kernel.

The existing inspector passed selected Image equality, selected system initrd payload equality, uImage header/data CRCs and sizes, all hashes, DT bootargs, nonempty registration and all629 closure paths including selected system/kernel. Selected init is executable. Linked Image contains the unique exact Memory format and setup key, inherited four records/three setup keys and numeric reporter strings. Artifact arguments exactly retain parent params plus sole selected init: sole ttyS0 and original two trace tokens; no rdinit/async/reporter/Breadcrumbs/PostSample/Memory/retained-console comparison gate is baked in. Host typing will transform those qualified args separately.

Complete hardware DT matches parent PostSample fjmx… after copying immutable DTBs, deleting only /chosen/bootargs via fdtput -d and comparing sorted dtc -I dtb -O dts -s. Canonical SHA-256: c36085249e61fc1ed6f8f586b1ccbf11f22a4e27428a3e7e23b046384268fc02. Original DTBs are untouched. Source identity receipt preserves all99 existing package and12 exposed kernel source/config identities.

These performed host gates justify only 5i.2–3. Coordinator owns integration/ CI, actual positive controller preparation, protected staging and any typed --mode minimal --same-image-shell-pid1 --uart-progress --uart-progress-memory physical comparison. Suppressed worker output and the added observer change workload/timing: this is an intervention. One received summary proves recorded progress before its final firmware call, not that call’s return, a firmware/IRQ cause, Bash RX or ordinary root/touch. Missing summary leaves worker/observer/ timer/scheduler/output unknown; M-mode can prevent S-mode observer execution. Kernel timeout/attempt count is not a firmware wall-clock guarantee; recovery and receipt remain separate facts.