docs: current audit, forward plan, and a corrected skins contract - #11
Merged
Merged
Conversation
Adds docs/PLAN_2026-09-14.md — every offline gate re-run against v0.3.4
(549 Rust tests, 41 harness scenarios, 23 C/C++ files, 234 golden hashes,
all green) plus what those gates cannot see, ordered by consequence.
Three findings worth naming here:
* CLAUDE.md was seven weeks stale and is loaded into every session
automatically, so it is the most expensive stale file in the tree. Its
banner claimed the last code change was 2026-07-03, that host tests were
"39 UI + 8 DB", and that the critical path was blocked on one device
session. All three were wrong. Bannered, with the old text kept verbatim
as history — the same fix AUDIT_2026-09-01 §D2 applied to ROADMAP.md.
* SHORTCOMINGS.md §A1 ("41% never compiled by any automated gate") now
overstates the gap: CI gained syntax checks, 9 self-tests, the harness,
shellcheck and the launcher matrix. The honest residual claim is narrower
and stated in §A1 — nothing in CI links or executes an ARM build, so a
change that parses but does not link reaches a tag unnoticed.
* PLAN_skins.md's step-2 contract registers hit regions as they are drawn.
Of the 229 coordinate-driven interactions in nav.rs's tests, exactly 5
call render() first, so 224 would look up taps in an empty hit map and
the headless suite could not run at all. Part C replaces it with a pure
layout(&View) -> LayoutMap that both render and tap call: same guarantee
that the two cannot disagree, without making hit-testing depend on paint
order or on having painted. render_bench puts layout at 2.3% of the frame
it belongs to, so resolving on demand costs nothing.
Skins-only is recorded as the owner's decision; layouts-as-data stays out
of scope. PLAN_skins.md and docs/README.md cross-link the revision.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqjAR2jJm1LzBYUNMqPAhg
…-design-system-ri7im7
- A4: branch protection IS applied (six required checks, strict, no force pushes); what is missing is enforce_admins, which is why the owner's direct pushes land. B0 #3 becomes the owner's decision on that. - A5 / B0 #1 / CLAUDE.md: the owner has run the v0.3.3 installer, and installer/ is identical to v0.3.4 apart from the version number; platform and log still to be recorded for 11.9. - D1: Reddit is unreachable from the cloud environment only; the owner's machine reads the thread's Atom feed. D2: the watch drafts replies for the owner instead of posting them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
Adds
docs/PLAN_2026-09-14.md— a current audit of the tree at v0.3.4 with every offline gate re-run rather than quoted, an ordered forward plan, and a revised contract for the skins design system. BannersCLAUDE.md, which was seven weeks stale, and cross-links the revision fromPLAN_skins.mdanddocs/README.md. Documentation only; no code changes.Why
Three findings drove it.
CLAUDE.mdis the most expensive stale file in the repository, because it is loaded into every session automatically — it is the first thing any new reader believes. Its banner claimed the last code change was 2026-07-03, that host tests were "39 UI + 8 DB", and that the entire critical path was blocked on one device session. Measured today: 549 Rust tests, v0.3.4 shipped, USB-DAC→LDAC executed. This is the identical failure already caught forROADMAP.mdinAUDIT_2026-09-01§D2 — "a roadmap that is five weeks stale is worse than no roadmap, because unlike a dated audit it is supposed to be current" — and it gets the identical fix: a banner, with the old text kept verbatim below it as history.SHORTCOMINGS.md§A1 now overstates the gap in the project's favour. Its "41% of the tree is never compiled by any automated gate" predates CI gaining the syntax check, nine self-tests, the harness, shellcheck and the launcher matrix. Since §A1 is cited by ID from other documents, leaving it overstated devalues the citations. The honest residual claim is narrower and is stated in the new §A1: nothing in CI links or executes an ARM build —host_syntax_check.shis-fsyntax-only, so a change that parses but does not link, or that raises the glibc-2.23 floor, reaches a tag before anything notices.PLAN_skins.md's step-2 contract would break 224 tests on contact. It specifies the hit map as populated while drawing (ui.hit(rect, Hit::Play)insiderender). Measured on7860396: of the 229 coordinate-driven interactions innav.rs's tests, exactly 5 callrender()first. The other 224 construct anAppand tap it without ever painting, so they would look up taps in an empty hit map — and the headless suite is the thing that makes refactoring a 13,267-lineAppsurvivable.The problem is not the tests; it is what they reveal. Paint-time registration means a tap before the first paint has no defined answer, a tap after a state change is tested against the previous frame's geometry, and a control under a clip silently stops being tappable. Part C keeps the actual goal — render and hit-test cannot disagree — and changes the mechanism to a pure
layout(&View) -> LayoutMapthat bothrenderandtapcall.render_benchon this tree puts layout at 2.3% of the frame it belongs to (up_next::layout5.8 µs vsrender_view249 µs; a blank canvas fill alone is 42.6 µs), so resolving it on demand costs nothing measurable. It also makes the contract tests cheaper, since "every region ≥ 44 px, none overlapping" becomes an assertion on aLayoutMaprather than on a rendered frame.Skins-only is recorded as the owner's decision; layouts-as-data stays out of scope, as
PLAN_skins.mdrecommended.Blast radius
player/cinder-ui) — cannot brick anythingplayer/cinder-db)cinder-home/src/cinder-*.c)cinder-audio/, hand-recovered vtable offsets — a wrong argument shape reboots the device)Checks
All run on this branch. Every number quoted in the new document came from these runs, not from a previous audit.
tools/host_syntax_check.sh— 23 files, all parsetools/shell_check.sh— all clear, butshellcheckwas not installed in this environment, so onlybash -nran; CI's pinnedshellcheck-py==0.11.0.1is the real gatecinder-home/harness/run.sh— 41 scenarios passedbash cinder-home/tools/test_launcher.sh— 63 passed, 0 failed(cd player && cargo test --release)— 549 passed, 0 failed(cd installer && cargo test --release)— 47 passed, 0 failedcargo run -p cinder-host -- --check— 234 golden hashes, every preview matchesDevice verification
Documentation only — nothing in this diff is compiled into a device binary.
One thing this document flags that is worth reading before anything else
installer/src/stage.rs's Windows SCSI pass-through path is compiled but, perSTATUS.md(2026-09-12), has never been executed on Windows — and since Sony's updater was removed it is the only way a Windows user can install. It is live in v0.3.4 with 2 Windows downloads so far.DEVICE_CHECKLIST.md11.9 already describes the test; it is re-opened and unrun. The window to test it before an audience arrives is open and small.🤖 Generated with Claude Code
https://claude.ai/code/session_01LqjAR2jJm1LzBYUNMqPAhg
Generated by Claude Code