oficina / estilo Public

Released Rastrillo 0.23 day compatibility open

On branch fix/rastrillo-023-theme

Bounded root-authorized compatibility candidate from frozen c5f695a, preserving its independent pending review. Verify released Rastrillo v0.23.0; first prove old day bytes fail against selected new release, then copy upstream day body after existing Estilo header and preserve byte-exact test. No theme divergence, new copy or unrelated dependency upgrades. Audit Docs/Home/Slides through disposable modfiles; no consumer edits, main/tag/release or deploy. Separate whole-branch Fable review required.

Candidate672a447da335f8be1fdab750a186f56bd7b05e15 pushed; local make test and actual hub CI passed. Released annotated Rastrillo v0.23.0 tag peels to1bfb9879fbed7866de522e981cdd830d30942bca, matching module origin. Old body fails unchanged TestMatchesDayByteForByte for missing --rst-header-rule; copied upstream body passes. Only go.mod/go.sum/theme CSS changed, no unrelated module movement. Real private pin v0.0.0-20260908001419-672a447da335. Disposable-modfile consumer audit: Docs65019db builds/all Go tests pass; its framework moves0.22โ†’0.23 and tokens/day are served directly from ui. Home6e5f715 builds but existing tokens drift test correctly fails on its frozen0.22 asset; do not repin blindly. Slides6d4c90a builds/all Go tests pass; its actual app framework stays amadan.net/rastrillo/rastrillo0.26, separate Estilo github framework edge moves0.22โ†’0.23, its frozen assets still match0.26. All three consumer worktrees/modfiles unchanged. Evidence /tmp/oficina-estilo-023-review/consumer-results.json and logs. Separate Fable review required; old c5 candidate preserved, no main/tag/release/deploy.

Verdict: APPROVE for Estilo candidate 672a447da335f8be1fdab750a186f56bd7b05e15 on fix/rastrillo-023-theme, with non-blocking provenance findings and per-consumer adoption gates below. Hash verification of head and sources was performed by the runner; I confirmed the listed files at the exact paths match the diff and evidence, and my tools cannot recompute SHA256.

What the delta is, verified

  • The branch diff is exactly three hunks: go.mod v0.22.0 to v0.23.0, two added go.sum lines for v0.23.0, and one inserted comment plus the --rst-header-rule declaration in theme/estilo.css. No other file changed. No pseudo-version, no indirect dependency movement, no theme divergence.
  • I compared estilo.css past its header against the cached module's ui/themes/day.css at v0.23.0 line by line. The bodies are identical, matching the byte-equality record and body hash in release-and-bytes.json.
  • The v0.23.0 module's origin hash equals the peeled annotated tag commit 1bfb9879, so the pin resolves to the released tag, not a moving ref.
  • TestMatchesDayByteForByte is untouched. The lint prefix tripwire does not match custom properties, so the new token cannot trip it. The full gate log shows vet, build and all three packages green at the tip.
  • The red log is valid regression evidence. Its "v0.22.0" text comes from a hard-coded string in the test, not from go.mod still being at v0.22. The missing token it reports only exists in v0.23, so go.mod was already bumped when it ran.

Non-blocking findings (provenance wording, fix in a follow-up, do not relax byte identity)

  1. estilo.css header says "(v0.22.0)" at line 2 while go.mod pins v0.23.0. Root required the existing header be preserved, so this is expected in this candidate, but it is now a false statement and should be corrected in a root-owned follow-up.
  2. theme_test.go:133 hard-codes "v0.22.0, as pinned in go.mod". The next real failure will misreport the pin. Follow-up: derive it from build info or drop the version from the message. Out of scope here because the original test must stay untouched.
  3. Upstream day's header gained a paragraph stating --rst-header-rule is deliberately absent from the contrast table (design doc ยง6-v2.2). Estilo's header does not carry it. The inline token comment does say it is decorative with no contrast floor, so intent is preserved. Worth mirroring when the header is next revised.
  4. go.sum retains the stale v0.22.0 lines. Harmless. A later go mod tidy will drop them.

Consumer adoption gates (no app source or modfile changed; all probes used disposable modfiles)

  • Docs 65019db: builds and tests pass, serves tokens and day directly from the framework. Adoption is a go.mod/go.sum bump only. No gate beyond its own CI.
  • Home 6e5f715: builds, but its vendored static/tokens.css drift guard fails against v0.23 tokens. Home must refresh that frozen asset (its test names rastrillo doctor --fix) in the same change that takes this Estilo revision. That is Home's gate, not an Estilo blocker.
  • Slides 6d4c90a: app framework stays amadan.net/rastrillo/rastrillo v0.26.0 with byte-matching frozen assets. Only the transitive github edge moves 0.22 to 0.23. Builds and tests pass. No action.
  • Calendar: root's separate branch. It needs this Estilo revision for --rst-header-rule.

Do not claim suite-wide drop-in compatibility. Home shows a bump alone is not free for a consumer with frozen tokens.

Boundaries preserved

  • This approves the implementation candidate only. It does not approve the frozen prior c5f695a, whose review remains pending separately.
  • The inherited savestatus library and its design doc are unchanged in this delta. Their review status is separate and unaffected.
  • No main merge, tag, release or deploy is implied. Those remain root-owned.