Repository navigation
docs: fold the #476 syndication and skill-sync lessons into the CLAUDE.md files - #477
Conversation
…E.md files PR #476's review surfaced rules that lived only in session context: two CodeRabbit nitpicks were false positives sourced from the guideline files (PackageManagerTabs in a syndicated post; root-relative links to generated LLM artifacts), the blog runbook steered syndicated image posts into the .devto-publish basename collision, and the skill-bundling docs claimed sync-skills.mjs copies all of skills/ when it copies a hardcoded allowlist. States the bundling mechanism neutrally and leaves the bestax-migrate policy to #385. Also extracts the pixel-cover core (font, palette, canvas helpers behind the #476 covers) into docs/scripts/pixel-cover-lib.mjs for future covers.
|
Warning Review limit reached
Next review available in: 27 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
WalkthroughThe PR updates documentation for skill bundling and syndicated blog posts. It also adds a reusable pixel-art SVG cover library with deterministic rendering, pixel text, beveled shapes, accessibility output, and starfield generation. ChangesSkill bundling guidance
Blog publishing and cover tooling
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ 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 |
Preview DeploymentPreview URL: https://29a045bb.bestax.pages.dev |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@create-bestax/CLAUDE.md`:
- Around line 25-27: Update the checklist in create-bestax/CLAUDE.md to include
the scaffolded-app roster, specifically create-bestax/src/constants.ts and its
CLAUDE_MD template, alongside the existing allowlist, skills README, and
documentation roster requirements.
In `@docs/scripts/pixel-cover-lib.mjs`:
- Around line 256-264: Update Canvas.svg() to XML-escape ariaLabel before
interpolating it into the SVG’s aria-label attribute, including at least
ampersands and quotes (and other attribute-sensitive characters as appropriate).
Preserve the existing SVG structure while ensuring labels containing special
characters serialize as valid XML for rasterize-cover.mjs.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 43bd93a4-0dda-476e-814b-50460bdca9fa
📒 Files selected for processing (6)
bestax-migrate/CLAUDE.mdcreate-bestax/CLAUDE.mddocs/CLAUDE.mddocs/blog/CLAUDE.mddocs/scripts/pixel-cover-lib.mjsskills/CLAUDE.md
There was a problem hiding this comment.
Deep review — 0 blocking · 1 advisory
| # | Severity | Area | Finding | Location |
|---|---|---|---|---|
| 1 | 🔵 Advisory | Robustness | svg(ariaLabel) interpolates the alt string raw into aria-label="…"; an alt containing &, ", or < (e.g. "colors & branding") emits malformed XML — caught by the rasterizer's parse check, but with a misleading "did not parse as an SVG document" message. |
docs/scripts/pixel-cover-lib.mjs:258 |
Overall: The change is sound and lands mostly-documentation with one new helper. I verified every ground-truth claim against source rather than taking the PR body's word: the SKILLS allowlist in sync-skills.mjs (7 entries incl. bestax-migrate), its emptyDir + SKILLS.length success line, the README's three hardcoded rosters (lines 20/33/86), docs/docs/skills/intro.md, the CLAUDE_MD skill roster in constants.ts, the absent conformance check, and the dev.to rewrite scope (/(?:docs|blog)/ regex at devto-preprocessor.js:189) all match the prose exactly. The riskiest part is the new pixel-cover-lib.mjs, but it emits SVG that satisfies the rasterize-cover.mjs contract by construction (literal 1200x630, matching viewBox, opaque full-bleed bg rect), and its font table / helpers are pure axis-aligned rects. The human should focus on the advisory below only if a future cover's alt text is expected to carry &/".
Residual risk:
- A doc claim silently drifts from code — refuted: I re-derived each of the six factual claims from the actual files (allowlist, rosters, conformance absence, rewrite regex) and all agreed.
- The lib emits SVG that fails the rasterize gate — refuted for the normal path: the
svg()output hard-codes width/height/viewBox and paintsPALETTE.bg(opaque, nofill-opacity) as the first rect, exactly what the contract atrasterize-cover.mjs:83-144checks. The only way it fails is the advisory's special-char case, and that fails loud (gate refuses), never shipping a broken PNG. - Silently-broken accessibility label — refuted: the breaking characters (
&/"/<) make the SVG unparseable, so the rasterizer rejects it before the cover ships; there is no path where a truncatedaria-labelreaches production.
🏄 Pure glassy conditions on this one, dude — it's mostly doc cleanup that actually matches the code for once, and the little pixel-art lib paddles right into the rasterizer's contract without a wipeout. Only ripple is unescaped
&in alt text, and even that just bails you at the gate instead of dragging you under. Ship it. 🌊
…r in the sync checklist
Preview DeploymentPreview URL: https://4a2b4e2b.bestax.pages.dev |
|
🎉 This PR is included in version 5.8.1 🎉 The release is available on: Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 4.0.2 🎉 The release is available on: Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 1.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 2.0.1 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Guideline updates mined from the #476 (flagship post, PR #476) session. Every item corrects a rule that was wrong, missing, or session-only knowledge; future contributors' agents and both AI reviewers read these files as ground truth.
Lesson → edit
docs/blog/CLAUDE.md): the JSX warning was scoped to cover images only. Generalized: no JSX, no:::admonitions, plain fences instead of<PackageManagerTabs>. Retires a CodeRabbit false positive on docs: add the fighting AI training bias agent skills post #476, which cited the docs-tree rule.<PackageManagerTabs>rule to docs-tree pages (docs/CLAUDE.md), pointing at the blog syndication section for the exception.docs/blog/CLAUDE.mdlinks bullet):/llms.txt,/llms-full.txt, and.mdtwins must be linked fully qualified; root-relative failsonBrokenLinks: 'throw'and the dev.to rewriter only covers/docs+/blog. Retires the second CodeRabbit false positive.docs/blog/CLAUDE.md): the old rule ('folder form when the post ships images') steered syndicated posts intobuild/.devto-publish/<basename>collisions (every folder post emitsindex.md). Now: syndicated posts stay flat with/img/<slug>*assets; folder form is for never-syndicated posts (State of React keeps it).canonical_urlis slug-based (docs/blog/CLAUDE.md): generalized out of the State of React runbook; child issues kept speccing the legacy date-path form.docs/blog/CLAUDE.md): same 1200x630 contract per in-body image, PNG embeds except the top banner, long-literal alt text mirrored intoaria-label(previously undocumented house pattern).sync-skills.mjscopies an allowlist, notskills/(create-bestax/CLAUDE.md): the old bullet's claim was false. Documented the silent failure modes (unlisted skill never bundles, delisted skill vanishes, success line reports array length either way, no CI drift check) and the rosters that must stay in agreement. Policy stays neutral pending [Bug] Settled: create-bestax bundles the bestax-migrate skill; two docs still say otherwise #385.skills/CLAUDE.md): every roster to update in the same PR (SKILLS allowlist + scaffolded CLAUDE_MD template when bundling, README's three hardcoded rosters, docs skills pages).bestax-migrate/CLAUDE.md: it said the skill is 'deliberately not bundled... keep sync-skills.mjs untouched', which has been false since feat(bulma-ui): ship agent-discovery files in the npm tarball #345. Now states the contested reality and defers to [Bug] Settled: create-bestax bundles the bestax-migrate skill; two docs still say otherwise #385.docs/scripts/pixel-cover-lib.mjs: the reusable pixel-art core behind the five docs: add the fighting AI training bias agent skills post #476 covers (5x7 font, house palette, canvas/bevel/starfield helpers), so the five remaining blog-revival posts can script covers instead of rebuilding tooling. Referenced from the blog runbook's cover section. Smoke-tested end to end: a demo scene generated through the lib passesrasterize-cover.mjs's contract check.Verified
pnpm lint(covers docs/scripts),pnpm format:check, and the docs production build all green; lib output accepted by the rasterizer.Follow-up (not in this PR)
A conformance check comparing the
SKILLSallowlist againstskills/*directories (scripts/check-conformance.mjs) would turn the silent bundling drift into a CI failure — best landed together with the #385 policy decision.Summary by CodeRabbit