Clean-slate v2 pivot persisted + Phase 2.3 course module eyebrow - #552
Merged
Conversation
Contributor
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
pftg
force-pushed
the
redesign-v2-kickoff
branch
from
August 21, 2026 11:56
a69e988 to
09674b7
Compare
pftg
added a commit
that referenced
this pull request
Aug 21, 2026
Codex pre-merge on #552 returned 4 findings. Three accepted, one declined. ACCEPTED - all three are the same failure: records written before the opus review changed the implementation, never swept after. 1. OKF log and 20.06 described a tag-first derivation; the shipped template is prefix-only (the tag branch was deleted as dead code in review). A future maintainer could have restored deleted code or debugged nonexistent behavior. Both records now state prefix-only + name dict. 2. 20.06's gate line said "verifiers on sonnet" blanket - written before Paul's routing table finalized. Now stage-specific: code review = opus, design critique = fable, mechanical = sonnet. 3. The cold-session ledger still scheduled the Linux dispatch and Direction 2, both complete. Rows updated; judging now correctly blocked on Paul's Claude Design pass alone. DECLINED - recording macOS course/chapter baselines from this machine. The merge-base run measured 13 failures on UNTOUCHED master here, so a local macOS record poisons the repo with machine drift (the exact mechanism #540 reverted). Cost acknowledged: those two keys stay red on macOS runs (diff 3.2%/11.4% vs 0.03 tolerance) until recorded on a healthy Mac - now tracked as an OUTSTANDING item in the 20.06 ledger, not just the PR body. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Paul approved the revised strategy (plan mode) and asked that all project artifacts let a separate session finish the work when interrupted. The approved plan lived only in a session-local plans file - invisible to a cold session - so this commit moves the whole state into the repo. New plan of record: docs/projects/2608-site-design-system/20-29-strategy/ 20.06-clean-slate-v2-plan.md - the dual-run v2 rail (root layouts/next/, clean bundles, functional partials reused verbatim), /next/ non-indexed production staging, page-by-page cutover, legacy frozen with the 780 button sites and 39 blacks dropped as work-done-twice. Carries a COLD-SESSION STATE LEDGER with per-item status and exact next actions, updated in the same commit as the work it describes. Decisions of record captured: 2-direction design competition, FULLY OPEN (rebrand allowed - ruby/LIGHT hold on the live site only until Paul picks); Claude Design and stitch COLLABORATE (the old "Rescue Room" project renders extraction, which is why previews looked like course reuse); sub-agent model routing - code review on opus, docs/panels on sonnet, mechanical on haiku, Fable never inherited by spawns (CLAUDE.md updated). Supersession markers placed where a cold session would otherwise read stale direction as current: 2608 README pivot banner + inline markers on the "no authority" paragraph and the phase table; 20.01 Phase-2 banner; OKF site-redesign-rollout.md pivoted (old lane model kept under a superseded heading) + log entry. Author != verifier: a sonnet reviewer attacked the staged diff against its own acceptance bar and returned 3 findings, all fixed before this commit - two unmarked stale assertions in the README (the file a cold session reads FIRST) and a ledger status claiming IN PROGRESS for work not yet started. Its spot-checks verified bin/qtest:69-78 hole, enhanced-meta-tags noindex, sitemap private-filter, and all three fl-line counts as written. Gates: bin/hugo-build clean; v0.2 okf_validate exits 0; concept stamped with measured UTC. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Course lessons carry the canonical eyebrow (12px/700/0.14em/uppercase/ruby) above the H1: "Module 2 · Validate the Problem". Derived from the "N.N ·" title prefix; names mirror the canonical module map in how-this-course-works. 25 lessons render (census 5/6/2/5/7 across Modules 1-5); quickstart, faq, walkthroughs, reference pages correctly get none. Browser-measured: computed spec exact (letter-spacing 1.68px = 0.14em @ 12px), 5.13:1 on white - AA pass. Desktop 1920 + mobile 390 inspected. Opus diff review (author != verifier) returned 4 findings; all addressed before this commit: - F2/F3: the module-N tag branch was DEAD CODE - the 6 tagged lessons are a strict subset of the 25 prefixed ones, and hasPrefix "module-" without a digit check would render "Module card" from an unrelated tag. Tag branch deleted; derivation is the anchored prefix regex alone (11 lines -> 6). - F4 (design): the digit-only eyebrow duplicated the number already visible in the H1 one line below - decorative, not helpful, failing CLAUDE.md's own gate language. Fixed by adding the module NAME, which the H1 does not carry. - F1 (baselines): course/chapter desktop+mobile baselines are invalidated by design. Handling per the recorded procedure - see the attribution run in the next commit / PR body; local macOS records are untrustworthy on this machine, Linux records ride a CI dispatch on the branch, screened. The reviewer also verified: regex safe against every real title (rendered census, zero false positives on digit-leading titles), findRESubmatch empty slice guarded by `with`, eyebrow rule survives production PurgeCSS verbatim, no competing cascade (the one other header-p rule is @media print). Also rides: model routing final form in CLAUDE.md (critical decisions + editing/outlining = fable; coding, code review, content writing = opus; mechanical = sonnet), 20.06 ledger status, OKF log entry. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
One brief, two tools: the identical fully-open contract runs in stitch (agent- driven; direction 2 generating now) and in a NEW Claude Design project (Paul- driven) - identical wording keeps outputs comparable, and the doc warns off the old "Rescue Room" project, which renders the extracted system this competition steps back from. Carries its own status ledger per the cold-session rule. Constraints are only the hard ones: no stock people, no logo walls/carousels/ repeated CTAs, claims-canon on any company fact, no extraction from the current site. Everything else - palette, typography, identity - open, per Paul's fully-open decision. Routing refinements from Paul recorded in CLAUDE.md: design critique joins fable (with critical decisions and editing/outlining); the /impeccable judging panel therefore runs on fable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Dark midnight-navy/charcoal, IBM Plex Sans, forensic-artifact narrative. Canon flags recorded for judging: invents a 90-day guarantee (not in canon); dark chrome contradicts the peer-set evidence ADR-0003 cited - panel weighs both, since the brief was fully open. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The branch dispatch recorded 72 baselines for a change that adds one line to one template. Screened per the recorded procedure (ci-gates.md): kept exactly the 2 course keys this PR invalidates - desktop +0.84%, mobile +1.71%, both consistent with an added eyebrow line - and dropped the other 70, which are whole-site record noise and would fold unrelated drift into this PR (the blog/tag.png content-drift incident, 2026-08-21). The bot's whole-record commit is replaced by this screened one via force-with-lease; backup of the bot ref is the run itself (32479029380). macOS course/chapter keys remain UNRECORDED deliberately - the merge-base run proved this machine's macOS render is drifted (13 failures on untouched master), so local records would poison the repo. Listed in the PR handoff. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codex pre-merge on #552 returned 4 findings. Three accepted, one declined. ACCEPTED - all three are the same failure: records written before the opus review changed the implementation, never swept after. 1. OKF log and 20.06 described a tag-first derivation; the shipped template is prefix-only (the tag branch was deleted as dead code in review). A future maintainer could have restored deleted code or debugged nonexistent behavior. Both records now state prefix-only + name dict. 2. 20.06's gate line said "verifiers on sonnet" blanket - written before Paul's routing table finalized. Now stage-specific: code review = opus, design critique = fable, mechanical = sonnet. 3. The cold-session ledger still scheduled the Linux dispatch and Direction 2, both complete. Rows updated; judging now correctly blocked on Paul's Claude Design pass alone. DECLINED - recording macOS course/chapter baselines from this machine. The merge-base run measured 13 failures on UNTOUCHED master here, so a local macOS record poisons the repo with machine drift (the exact mechanism #540 reverted). Cost acknowledged: those two keys stay red on macOS runs (diff 3.2%/11.4% vs 0.03 tolerance) until recorded on a healthy Mac - now tracked as an OUTSTANDING item in the 20.06 ledger, not just the PR body. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
pftg
force-pushed
the
redesign-v2-kickoff
branch
from
August 21, 2026 12:06
c065f53 to
dd9c2f1
Compare
Paul pointed out DesignSync reaches claude.ai/design from here - no copy-paste handoff needed. Created "JetThoughts - From-Scratch Competition (2608)" (a5f25203-6dd9-45c6-a978-5842152d1389) and seeded 8 files: the fully-open BRIEF.md, both directions' DESIGN.md summaries (with the ruby-locked disclosure on D1 and the canon flags on D2), and both full-page renders (2560px) as preview cards. The old "Rescue Room" project stays untouched - it renders the extracted system. Paul's move shrinks to: open the project, run/iterate the brief, or critique the two seeded directions. Everything cross-pollinates before the fable critic and the judging board. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Screenshot diffs detected
|
pftg
added a commit
that referenced
this pull request
Aug 21, 2026
…pting The macOS visual suite has been red on master since #540. `bin/rake test:system` at clean HEAD: 79 runs, 26 failures, 134 screenshots compared, 48 failures. All 48 are correctly-detected staleness, not regressions - nothing here was verified by difference_level alone. Why they went stale: a green run restores the git-HEAD image over the fresh capture, so any change small enough to pass fossilizes the baseline. #540 was large enough to fail and simply was not re-recorded; the rest had been accumulating under the old 0.02 default since #520 and #528. Classification (baseline-vs-candidate pixel transitions, not diff levels): 42 #540 dark-surface recolour. rgb(0,0,0) -> rgb(20,17,15) accounts for 94-100% of every changed pixel in each file (--surface-ink #14110f). Footers, CTA bands, contact_us, both pagination frames, codeblock frames - the same surfaces #540's own commit message lists as failing. 3 Post `description` backfilled by #520, which the post template renders as a grey lead above the body, pushing content down. Verified the rendered text is the frontmatter string verbatim, e.g. stimulus-keyboard-event-filter: "In the last update of Stimulus v3.2.2, the ability to filter the event by PageDown and PageUp keys was added." (desktop+mobile code_highlight_post, inline_style_post) 2 Course module eyebrow added by #552 - "MODULE 1 - HYPOTHESIS & SMOKE TEST" now renders in ruby above the H1, shifting the page down. (desktop+mobile course/chapter) 1 services/_testimonials-header: a 1px vertical offset from #528's eyebrow consolidation. #528 touched services-critical.css and content-block.css and re-recorded only the two sections that exceeded 0.02; the sections below the eyebrow shifted 1px, passed under the old default, and fossilized. Measured, not inferred: realigning the baseline by dy=+1 drops the residual to exactly 0.0000, i.e. the content is pixel-identical and only its position moved. Evidence that these are stale baselines rather than flaky rendering: two consecutive runs of DesktopSiteTest#test_services reported difference_levels identical to 17 decimal places (_technologies 0.013838252314814815, _use-cases 0.01749807098765432, _testimonials-header 0.005922550154320988), and a second full-suite run produced the same 48-file set. One instrument error worth recording, since it nearly became a finding: the first transition script loaded each baseline from a reused temp filename, and libvips caches operations by filename - so runs 2..n silently re-compared image 1. It reported services/_footer's baseline as a pure-black frame. A brightness audit over all 155 tracked macOS baselines refuted it (darkest mean is 69/255, none below 1.0), and reloading from git buffers fixed it. The control that keeps the rewritten script honest: an unchanged baseline (desktop/vibe_code_rescue) reports exactly 0 changed pixels. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011SP5gaqXEgUie8pdFrmbeJ
pftg
added a commit
that referenced
this pull request
Aug 22, 2026
* Re-record 48 stale macOS baselines: every diff classified before accepting The macOS visual suite has been red on master since #540. `bin/rake test:system` at clean HEAD: 79 runs, 26 failures, 134 screenshots compared, 48 failures. All 48 are correctly-detected staleness, not regressions - nothing here was verified by difference_level alone. Why they went stale: a green run restores the git-HEAD image over the fresh capture, so any change small enough to pass fossilizes the baseline. #540 was large enough to fail and simply was not re-recorded; the rest had been accumulating under the old 0.02 default since #520 and #528. Classification (baseline-vs-candidate pixel transitions, not diff levels): 42 #540 dark-surface recolour. rgb(0,0,0) -> rgb(20,17,15) accounts for 94-100% of every changed pixel in each file (--surface-ink #14110f). Footers, CTA bands, contact_us, both pagination frames, codeblock frames - the same surfaces #540's own commit message lists as failing. 3 Post `description` backfilled by #520, which the post template renders as a grey lead above the body, pushing content down. Verified the rendered text is the frontmatter string verbatim, e.g. stimulus-keyboard-event-filter: "In the last update of Stimulus v3.2.2, the ability to filter the event by PageDown and PageUp keys was added." (desktop+mobile code_highlight_post, inline_style_post) 2 Course module eyebrow added by #552 - "MODULE 1 - HYPOTHESIS & SMOKE TEST" now renders in ruby above the H1, shifting the page down. (desktop+mobile course/chapter) 1 services/_testimonials-header: a 1px vertical offset from #528's eyebrow consolidation. #528 touched services-critical.css and content-block.css and re-recorded only the two sections that exceeded 0.02; the sections below the eyebrow shifted 1px, passed under the old default, and fossilized. Measured, not inferred: realigning the baseline by dy=+1 drops the residual to exactly 0.0000, i.e. the content is pixel-identical and only its position moved. Evidence that these are stale baselines rather than flaky rendering: two consecutive runs of DesktopSiteTest#test_services reported difference_levels identical to 17 decimal places (_technologies 0.013838252314814815, _use-cases 0.01749807098765432, _testimonials-header 0.005922550154320988), and a second full-suite run produced the same 48-file set. One instrument error worth recording, since it nearly became a finding: the first transition script loaded each baseline from a reused temp filename, and libvips caches operations by filename - so runs 2..n silently re-compared image 1. It reported services/_footer's baseline as a pure-black frame. A brightness audit over all 155 tracked macOS baselines refuted it (darkest mean is 69/255, none below 1.0), and reloading from git buffers fixed it. The control that keeps the rewritten script honest: an unchanged baseline (desktop/vibe_code_rescue) reports exactly 0 changed pixels. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011SP5gaqXEgUie8pdFrmbeJ * Delete the SECTION_CONFIGS shield - its exit condition was met, and measured SECTION_CONFIGS was introduced one day ago as an explicitly TEMPORARY shield holding ~22 section screenshots at the old 0.02 tolerance while their drift was unmeasured, with the exit condition written into its own comment: "delete it once they are measured and re-recorded." Measured both ways on the full macOS system suite, same environment, only this variable changed: shield in place 134 screenshots compared, 48 failures shield emptied 134 screenshots compared, 50 failures Cost of deleting it: +2 screenshots, both on /services/ - desktop/services/_use-cases (0.017498) and desktop/services/_technologies (0.013838). Both are the same 1px vertical offset from #528's eyebrow consolidation already classified in the previous commit: realigning baseline to candidate by one pixel drops the residual to exactly 0.0000 in several bands, so the content is pixel-identical and only its position moved. Both are re-recorded here, which is the last thing the exit condition asked for. Deleted: SECTION_CONFIGS, screenshot_config_for, extract_section_key, test/support/screenshot_section_config.rb and its unit test. That file existed so the table could be unit-tested without booting Hugo or Capybara; with the table gone there is no logic left to test, only a constant. DEFAULT_SCREENSHOT_CONFIG moves onto ApplicationSystemTestCase unchanged at 0.0001. Per-call tolerances are untouched - ~30 calls pin their own, mostly 0.03, and those still win over the default. Gates, all on this exact tree: bin/rake test:unit 287 runs, 6143 assertions, 0 failures bin/hugo-build clean, 8 validators passed bin/rake test:system 79 runs, 218 assertions, 0 failures [snap_diff] 134 screenshots compared, no failures The suite was run with the shield deleted BEFORE these two baselines were accepted, and reported exactly the 2 predicted failures and no others - so the deletion is measured, not assumed. .okf/build/test-gates.md is updated: the shield paragraph is replaced by the measurement, and a misattribution is corrected. That file claimed all five failing /services/ screenshots were the #540 dark-surface recolour; only the two large ones are. The three small ones carry 0.13% or less of the black->ink transition and are #528's 1px shift. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011SP5gaqXEgUie8pdFrmbeJ * chore: update screenshot baselines [ci skip] * Screen the CI Linux record: drop 6 zero-difference rewrites, keep 77 The re-record was dispatched to CI on this branch (run 32526977795, native amd64 - the only trusted way to record linux/ baselines; local ARM Docker plants false drift) and succeeded. FORCE_SCREENSHOT_UPDATE re-records EVERYTHING, so the bot commit touched 83 files and needed screening. Screened with the gate's OWN instrument rather than by eye or by file size: capybara-screenshot-diff counts a pixel as differing only above perceptual_threshold = 2.0 dE00, and the default tolerance is now 0.0001 of the frame. Computing that same libvips dE00 fraction for every file in the bot commit splits it cleanly: keep 77 would FAIL the gate, so the rewrite is real drop 6 difference_level exactly 0.00000000 - would have PASSED The 6 dropped are pure encoder churn with zero perceptual difference: desktop+mobile course/landing, desktop+mobile blog/special/codeblocks/text, clients/agent-inbox/_overview, clients/single-full. Of the 77 kept, 8 are NEW keys with no linux baseline at all - friday_report (desktop+mobile) and the three register pilots next/{editorial,precision, rescue-room} (desktop+mobile) - and the rest span 0.000139 to 0.973. Why the Linux set is broader than the macOS one (77 vs 50), which looks wrong until you check it: earlier PRs re-recorded only the macOS side. #528 committed macos/mobile/services.png and left its linux/ twin stale, so linux/mobile/services carries a visible vertical shift that macOS no longer has - confirmed by painting the dE00 mask over the capture: identical content, offset position. The reverse also holds - linux/desktop/blog/special/inline_style_post barely moves (0.000139) because the Linux blog baselines were already re-recorded after #520, while macOS was 25% stale. Neither OS is a subset of the other. Two kept files were inspected directly rather than accepted on their number: linux/desktop/404.png (0.001235) is a 4px-wide strip at the right edge - a scrollbar artifact, page content identical, and 4 x 640 px is exactly the reported difference_level; linux/mobile/services.png (0.1389) is the #528 shift above. Both render correctly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011SP5gaqXEgUie8pdFrmbeJ * OKF: how to screen a CI re-record, and why neither OS baseline set is a subset of the other Records the Linux leg of the re-record in .okf/log.md and lifts two rules into test-gates.md that were learned doing it: - Screen a FORCE_SCREENSHOT_UPDATE record with the gate's own instrument (the libvips dE00 fraction above perceptual_threshold 2.0, compared to the 0.0001 default), not by eye or file size. 83 files split 77 keep / 6 drop with no judgement call. - Neither OS baseline set is a subset of the other, because earlier PRs re-recorded only the OS they ran on. Do not reason about one from the other. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011SP5gaqXEgUie8pdFrmbeJ * Correct four overclaims the re-record itself introduced Independent review measured what the evidence actually supports: - run-to-run noise is ~1e-6, not 0 (test-gates said 0.0 while the code comment in the same PR said 1e-6 - one PR, two numbers) - realigning 1px zeroes SEVERAL BANDS, not the page: a sub-pixel shift re-rasterizes glyphs, so _use-cases still differs in 22,895 px after the best alignment. Content identical on inspection; the conclusion holds, the sentence did not - "nothing unexplained" is really "every dominant cause explained" - three files carry a secondary 1px shift and two carry #540's sibling --ruby-on-ink token - 20.10 still pointed at test/support/screenshot_section_config.rb, which this PR deletes Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011SP5gaqXEgUie8pdFrmbeJ --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.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.
Two commits: the clean-slate v2 pivot persisted so any session can resume it, and Phase 2.3 shipped — the course module eyebrow.
Commit 1 — the pivot, in-repo
Paul approved the revised strategy (plan mode) and asked that all artifacts survive session interruption. The approved plan lived in a session-local file — invisible to a cold session. Now:
20.06-clean-slate-v2-plan.md— plan of record: dual-run v2 rail (rootlayouts/next/, clean bundles, functional partials reused verbatim),/next/non-indexed production staging, page-by-page cutover, legacy frozen (780 button sites + 39 blacks dropped as work-done-twice). Carries a COLD-SESSION STATE LEDGER.bin/qtest:69-78hole, noindex plumbing, and all fl-line counts.Commit 2 — Phase 2.3
Module 2 · Validate the Problemabove every prefixed lesson H1 — canonical eyebrow spec, names mirroring the module map inhow-this-course-works. Census: 25 lessons render (5/6/2/5/7 across Modules 1–5); quickstart/faq/walkthroughs/reference correctly get none.Opus diff review (author ≠ verifier) returned 4 findings, all addressed pre-commit:
module-Ntag branch was dead code — the 6 tagged lessons are a strict subset of the 25 prefixed;hasPrefix "module-"would even render "Module card" from an unrelated tagReviewer also verified: zero regex false positives across every real title (rendered census, not mental trace),
findRESubmatchguard holds, rule survives production PurgeCSS verbatim, no competing cascade.Evidence
Browser-measured: computed spec exact (
letter-spacing 1.68px= 0.14em @ 12px), 5.13:1 on white — AA pass. Desktop 1920 + mobile 390 inspected.Merge-base attribution run (both suites, same machine, fixtures reset between):
desktop/course/chapter,mobile/course/chapterThe delta is precisely the intended change.
Baseline handoff
The 13-failure base proves this machine cannot record trustworthy macOS baselines (same class as #540's revert). Invalidated by this PR and not recorded locally:
Linux: CI record dispatched on this branch after opening; screened by size-delta and only
course/*keys kept (whole-site records carry other people's content drift — learned on #540).🤖 Generated with Claude Code