CSS Phase C sprint C2: de-obfuscate the shared layer - 17 semantic re-keys, last hash-named file retired#372
Conversation
Class rename only (data-node attrs kept - system tests select on them). Gate: every compiled bundle byte-identical after reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…r-col Class rename only; gate: all bundles byte-identical after reverse substitution (first run was build flicker; converged rerun clean). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: all bundles byte-identical after reverse substitution (clean-destination rebuild). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…ading Class rename only; gate: converged builds, all bundles byte-identical after reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…g-count Class rename only; gate: converged builds, all bundles byte-identical after reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…ws-section Class rename only; gate: converged builds, all bundles byte-identical after reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…-col Class rename only; gate: converged builds, all bundles byte-identical after reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…ws (+ purge safelist companion) The reviews-module rename needs a safelist companion: PowerPack runtime classes (pp-swiper-button, pp-review-image) are never in hugo_stats.json and pre-C2 survived PurgeCSS only because their selectors contained an fl-node-* class, which /^fl-node/ keeps greedily. New greedy entries /^testimonials-/ + /^cta-banner/ give semantic component prefixes the same protection (precedent: /^use-cases/ already in the list). C2.1 COMPLETE: all 10 testimonial nodes semantic. Gate: every compiled bundle byte-identical after reverse substitution - pixel parity by construction. Discovered for Paul (follow-up, NOT shipped): .jt-reviews-box swiper arrow styling (hover arrows at 44%, bottom placement) has been silently purged in production all along - pp-swiper classes are runtime-only and those selectors have no shield. Restoring it = intentional visual change; needs a design decision. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after guarded reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after guarded reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after guarded reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after guarded reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after guarded reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after guarded reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Class rename only; gate: converged builds, all bundles byte-identical after guarded reverse substitution. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
…n.css Last hash-named CSS file retired (success criterion 2). git mv + sed of all 16 template refs (15 in themes/ + the root-level layouts/course/list.html override the themes-scoped grep missed) + comment refs in critical/ files + live docs; archived docs untouched. NAME NOT PRE-APPROVED: 'legacy-theme-skin.css' - single-commit revertable if Paul prefers another name. Gate: converged builds, every bundle fingerprint byte-identical (file content unchanged; concat output is content-addressed). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Node-id 590 retired with the homepage delta port (R9). Both ExecuteAsTemplate call sites keep their output name, so the published resource is unchanged. Gate: all bundle fingerprints byte-identical. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
… 586.css Deferred cascade hardening from the burn-down. The #F5F6F8 declaration never painted: (1) style.css's .blog pre #282a36 loads later at equal specificity on every page that renders .single-content inside .blog; (2) Chroma noClasses=true inlines the dracula background on every fenced block; (3) the only .single-content contexts without a .blog wrapper (simple pages, careers) contain no <pre> at all (audit-verified). Gate: per-bundle decl-diff = exactly this one declaration across the 16 586-carrying bundles, 0 extra; codeblock screenshot lock green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
'affects pages' + ownership-map pointer on 586.css, style.css, theme-main.css, component-bundle.css, legacy-theme-skin.css (criterion 4 closure for the legacy layer). Comment-only; gate: all bundle fingerprints byte-identical. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (48)
📝 WalkthroughWalkthroughThe change replaces builder-generated CSS hooks with semantic CTA and testimonials classes, updates critical CSS selectors and PurgeCSS safelisting, renames shared skin and dynamic 404 assets, adjusts bundle references, and records the Phase C migration status. ChangesCSS asset wiring and migration documentation
Semantic component markup
Component and page CSS
Critical CSS
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
What this is
Phase C sprint C2 (spec §Phase C): the shared partials'
fl-node-<hash>classes become semantic names, the last hash-named CSS file is retired, and the deferred cascade hardening lands. 22 commits, every one independently gated and revertable.C2.1 + C2.2 — 17 semantic re-keys (one node per commit)
testimonials-header/-header-col/-label/-heading/-subheading/-rating/-rating-count/-reviews-section/-quote-col/-reviewscta-banner/-box/-eyebrow/-heading/-text/-spacer/-button-row, swept across the partial and the 6 inline template copies (home, page/services, page/use-cases, services/single, use-cases/single, clients/single)data-nodeattributes kept — system tests select on them; class strings only.Gate per re-key: converged builds; every compiled bundle byte-identical after guarded reverse substitution — pixel parity by construction.
Purge-safelist companion (in the
testimonials-reviewscommit): PowerPack runtime classes (pp-swiper-button,pp-review-image) are never in hugo_stats.json and pre-C2 survived PurgeCSS only via the greedy/^fl-node/entry matching their selectors. New greedy entries/^testimonials-/+/^cta-banner/give semantic prefixes the same protection (precedent:/^use-cases/). Caught by the gate when 10 declarations vanished; the safelist scope was chosen to preserve current rendering exactly.C2.3-C2.6
skin-65eda28877e04.css→legacy-theme-skin.css— last hash-named file (criterion 2). 16 template refs swept, including the root-levellayouts/course/list.htmlthat a themes-scoped grep misses. Name not pre-approved — one-commit revertable if you prefer another. Gate: every bundle fingerprint byte-identical.dynamic-404-590.css→dynamic-404.css(node 590 retired in R9); ExecuteAsTemplate output names unchanged. Byte-identical..single-content pre { background-color:#F5F6F8 }never painted (style.css's.blog pre #282a36wins the tie later in every bundle; Chroma inlines dracula on fenced blocks; the two non-.blog.single-contentcontexts contain no<pre>— audit-verified). Gate: per-bundle decl-diff is exactly this one declaration across the 16 carrying bundles; codeblock screenshot lock green.Verification
bin/dtest-allon the branch headfl-*refs down by the 17 shared-partial nodes; zero hash-named CSS files remainFlagged for Paul
legacy-theme-skin.cssname — say the word and it's one commit to change..jt-reviews-boxswiper-arrow design (hover arrows, 44% placement) has been silently purged in production all along — restoring it is an intentional visual change needing your design call.🤖 Generated with Claude Code
https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Summary by CodeRabbit
New Features
Bug Fixes
Documentation