Repository navigation
fix(create-bestax): concrete inline-style → helper-prop mapping for the never-inline rule - #357
Conversation
…he never-inline rule
The scaffolded CLAUDE.md's 'never inline style={{}}' rule stated the
prohibition and named prop families but gave no lookup path from the
inline value an agent is about to write to the helper prop it should
write instead — and an A/B experiment showed it being violated 47 times
in one run (#350).
- CLAUDE_MD template (constants.ts): House style now carries a compact
mapping table (spacing scale, textAlign, textColor/bgColor palette,
textSize/textWeight, textTransform, display/flex props, flexGrow,
visibility/responsive display) plus the explicit fallback for values
with no helper equivalent: a named class in src/App.css via className,
still never inline style.
- Mirrored the same table into the two skills that generate the most
JSX — bestax-layout-scaffold (new mapping section + checklist) and
bestax-custom-component (styling-ladder rung 1 + checklist), so it is
in context exactly when pages are scaffolded.
- Tests assert the table rows and the fallback are present in the
generated CLAUDE.md.
Closes #350
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8Hayvdw6o35sYcxmh88ER
Preview DeploymentPreview URL: https://e0c1c379.bestax.pages.dev |
|
Warning Review limit reached
Next review available in: 26 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. 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 (5)
WalkthroughExpanded inline-style guidance in generated ChangesInline style guidance
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 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 |
There was a problem hiding this comment.
Deep review — 0 blocking · 1 advisory
| No. | Severity | Area | Finding | Location |
|---|---|---|---|---|
| 1 | 🔵 Advisory | Correctness | "Every component accepts these" overstates the textColor/bgColor reach — Tag, Menu, Tabs, Panel, Breadcrumb do not expose those props, so on them the model would emit an inert textColor attribute. In practice the scaffolded, text-bearing components it targets (Box/Block/Title/Content/Notification/Hero) all do accept them, so the guidance lands where it is used. |
skills/bestax-layout-scaffold/SKILL.md (mapping intro) |
Overall: The change is sound and well-verified. This is pure prompt-guidance (CLAUDE.md template + two skills) closing issue 350 gap by adding a concrete inline-style to helper-prop table. Every factual claim I could check against the source of truth holds: the spacing scale matches Bulma 1.0.4 $spacing-values exactly (1=0.25rem to 6=3rem, so mt="4"=1rem), and textAlign/textWeight/textTransform/textSize/flexGrow/display-prop values all match bulma-ui/src/helpers/bulmaClassHelpers.ts. textColor/bgColor — which at first glance looked wrong versus the raw color/backgroundColor helpers — are in fact the correct remapped props on the 43 high-level components scaffolding composes (Box omits color/backgroundColor and re-adds textColor/bgColor). The src/App.css fallback target exists in the Vite react-ts scaffold, skills are re-bundled at build/prepack (no stale committed copy), and all 199 create-bestax tests pass. The human should focus on whether textColor/bgColor is the right universal recommendation given the handful of components that only take color.
Residual risk:
- Wrong prop name in guidance elsewhere: refuted — I cross-checked every prop name and value token in all three copies of the table against
bulmaClassHelpers.tsand Bulmaspacing.scss; the only imperfect mapping is thetextColor/bgColoruniversality caveat above (advisory). - Broken fallback file reference: refuted —
src/App.cssships in the Vite react-ts template the scaffolder builds on. - Stale bundled skill copy shipping old text: refuted —
create-bestax/package.jsonrunssync-skills.mjson bothbuildandprepack, and there is no committedcreate-bestax/skillscopy to drift.
🏄 Pure vibes on this one, dude — no new code to crash, just a cleaner map from gnarly inline style to the chill helper prop. Numbers all check out against the source, tests are green, so paddle it out. Only ripple is calling the color props "every component" when a couple of the little dudes do not take em — totally mergeable.
Deep-review advisory on #357: 'every component accepts these' overstated the reach of textColor/bgColor — Tag, Tabs, and Panel expose a semantic color variant instead and Breadcrumb takes neither, so the guidance now names the content components that do take them and points the color- variant components at their color prop. Spacing/typography/flex helpers remain universal, and the wording is corrected in all three copies of the mapping (CLAUDE_MD template and both skills). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q8Hayvdw6o35sYcxmh88ER
Preview DeploymentPreview URL: https://659cdb83.bestax.pages.dev |
|
@coderabbitai review Generated by Claude Code |
|
✅ Action performedReview finished.
|
|
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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/src/__tests__/constants.test.ts`:
- Around line 237-257: Extend the tests in the inline-style documentation
assertions to cover the complete fallback contract: in the no-helper test,
assert that unsupported values use a named class via className, and add
assertions protecting the documented Grid/Columns gap exception. Keep the
existing src/App.css and no-inline-style assertions unchanged.
In `@skills/bestax-layout-scaffold/SKILL.md`:
- Around line 62-86: Replace the detailed inline-style helper mapping in
skills/bestax-layout-scaffold/SKILL.md lines 62-86 with a concise summary and
link to a references/ document containing the complete guidance. Apply the same
replacement in skills/bestax-custom-component/SKILL.md lines 105-126, ensuring
both skills link to the shared detailed mapping and retain only essential
always-loaded guidance.
- Around line 62-86: Update the layout helper guidance in
skills/bestax-layout-scaffold/SKILL.md (lines 62-86) to state that ordinary flex
layouts lack a gap helper, while Grid and Columns support gap. Narrow the no-gap
rule in skills/bestax-custom-component/SKILL.md (lines 103-106) so it applies
only to flex layouts, preserving the existing guidance for Grid and Columns.
🪄 Autofix (Beta)
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: 011e3929-d27f-4b15-ad31-821f7ff5af8f
📒 Files selected for processing (4)
create-bestax/src/__tests__/constants.test.tscreate-bestax/src/constants.tsskills/bestax-custom-component/SKILL.mdskills/bestax-layout-scaffold/SKILL.md
…ntract test assertions CodeRabbit review on #357: the skills' mapping guidance now carries the same gap exception as the scaffolded CLAUDE.md (flex layouts have no gap helper — space children with margins; Grid and Columns take a gap prop), via a table row in bestax-layout-scaffold and narrowed rung-1 wording in bestax-custom-component. Tests now also pin the className fallback wording and the Grid/Columns gap exception in the generated CLAUDE.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q8Hayvdw6o35sYcxmh88ER
Preview DeploymentPreview URL: https://a5bf8c6f.bestax.pages.dev |
…50-y25o9z # Conflicts: # create-bestax/src/__tests__/constants.test.ts
Preview DeploymentPreview URL: https://92c37998.bestax.pages.dev |
There was a problem hiding this comment.
Deep review — 0 blocking · 1 advisory
| # | Severity | Area | Finding | Location |
|---|---|---|---|---|
| 1 | 🔵 Advisory | Robustness | The mapping table now exists in three copies (constants.ts + both skills) but only the constants.ts copy is test-guarded — the skill copies can silently drift from the helper source. |
skills/bestax-*/SKILL.md |
Overall: The change is sound. It is a documentation/template-only PR that turns the "never inline style={{}}" prohibition into a concrete inline-style → helper-prop lookup table, exactly as issue #350 requested. I verified every factual claim in the table against bulma-ui/src/helpers/bulmaClassHelpers.ts and the component sources: the spacing scale (1=0.25rem … 6=3rem, Bulma's default $spacing-values), textAlign alignments, the textColor/bgColor palette, textSize 1–7 (1 largest), textWeight, textTransform, the flex prop names, flexGrow (valid 0–5), visibility="hidden" (→ is-hidden → display:none), and displayMobile/displayTablet all match. The content-vs-semantic-color nuance is correct too: textColor/bgColor live on content components (Box in elements/, Card, etc.) while Tag/Tabs/Panel take color. SubTitle exists. The 35 constants.test.ts cases pass. The riskiest part is just long-term drift of the triplicated table (advisory #1) — the human should confirm they're comfortable maintaining three copies rather than a single sourced constant.
Residual risk:
- Table factual accuracy — refuted: cross-checked each row's prop name and value set against
bulmaClassHelpers.ts(validSizes,validTextSizes,validAlignments,validTextWeights,validTextTransforms,validFlexGrowShrink,validVisibilities,BulmaDisplayProps) and the component prop declarations; all consistent. - Skill-vs-template divergence — real but low: the
constants.tscopy is asserted by tests; the twoSKILL.mdcopies are not, and thebestax-layout-scaffoldcopy already carries an extragap:row the others lack. Not a defect today (all rows are correct), just a maintenance seam recorded above. - Sync mechanism — not exercised here: skills are re-bundled into create-bestax by
sync-skills.mjsat build/prepack, outside this diff; nothing in the PR changes that path.
🏄 Pure cruise, dude — no code waves to wipe out on, just a clean map from
style={{}}to the right helper prop, and every value checks out against the source. Send it.
…mapping Deep-review advisory on #357: the inline-style → helper-prop mapping is deliberately triplicated (create-bestax CLAUDE_MD template + the two JSX-generating skills) so it stays in context at generation time, but only the template copy was jest-guarded. The new check asserts the load-bearing facts — spacing scale, helper prop names and value sets, the gap rule, the named-class fallback — appear in all three copies, normalizing the TS template's escaped backticks so one comparison works for both file kinds. CI now fails if any copy drifts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q8Hayvdw6o35sYcxmh88ER
…50-y25o9z # Conflicts: # skills/bestax-layout-scaffold/SKILL.md
There was a problem hiding this comment.
Pull request overview
This PR updates the create-bestax scaffold guidance and the two most JSX-heavy skills to make the “never inline style={{}}” house rule actionable by adding a concrete inline-style → helper-prop mapping (plus an explicit fallback when no helper exists). It also adds automated safeguards (Jest + conformance) to keep the three intentionally duplicated copies in sync.
Changes:
- Added a compact mapping table (inline style patterns → helper props) and a named-class fallback rule to the scaffolded
CLAUDE.mdtemplate. - Mirrored the same mapping into
bestax-layout-scaffoldandbestax-custom-componentso it’s present at generation time. - Added a conformance gate to ensure the three mapping copies stay synchronized, and added Jest assertions for the template output.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| skills/bestax-layout-scaffold/SKILL.md | Adds an “Inline style → helper prop mapping” section and updates the checklist/rules to reference it. |
| skills/bestax-custom-component/SKILL.md | Extends the “Styling ladder” rung-1 guidance with the mapping table and a clear no-helper fallback. |
| scripts/check-conformance.mjs | Adds style-mapping-sync conformance check to keep the triplicated mapping consistent. |
| create-bestax/src/constants.ts | Updates the scaffolded CLAUDE_MD house-style block with the mapping table and fallback order. |
| create-bestax/src/tests/constants.test.ts | Adds tests asserting the generated CLAUDE.md includes the mapping, fallback, and gap guidance. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Preview DeploymentPreview URL: https://1805e425.bestax.pages.dev |
…ping guidance Notification omits `backgroundColor` from BulmaClassesProps and re-adds only `textColor`, so a `bgColor` on it is inert — its background comes from the semantic `color` prop. The layout-scaffold skill listed Notification among the components that take `textColor`/`bgColor`; all three copies of the mapping now call it out as the mixed case, with a test pinning the generated CLAUDE.md.
The FACTS list pins the rows that exist today, which leaves two gaps: a row added to (or dropped from) one copy but not the others is invisible to it, and a prop name that is wrong in all three copies is consistent but still inert. Parses the mapping table out of each copy and adds two assertions on top of the existing literal-fact pinning: the three tables must name the same prop set, and every prop named must be declared somewhere in bulma-ui/src. Verified by fault injection — dropping a row, typo-ing a prop in one copy, and adding a nonexistent prop to all three each fail with a message naming the file.
|
@coderabbitai review Generated by Claude Code |
|
✅ Action performedReview finished.
|
Preview DeploymentPreview URL: https://a8d8c8f4.bestax.pages.dev |
## [3.7.1](https://github.com/allxsmith/bestax/compare/create-bestax@3.7.0...create-bestax@3.7.1) (2026-07-29) ### Bug Fixes * **create-bestax:** concrete inline-style → helper-prop mapping for the never-inline rule ([#357](#357)) ([5f72a90](5f72a90)), closes [#350](#350) [#350](#350)
|
🎉 This PR is included in version 3.7.1 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Picks up #357 (inline-style -> helper-prop mapping table). Four conflict hunks, all "both sides rewrote the same never-inline-style rule": - create-bestax/src/constants.ts — took main's table-based treatment wholesale (strictly richer than this branch's prose), then re-added the two things it lacks: the Span/Paragraph/Strong wrapper rule with the <html>/<body> companion-class exception, and this PR's compound-sub-part bullet. - bestax-layout-scaffold/SKILL.md (x2) — pointed the style bullet at main's new mapping table instead of repeating the spacing/color examples it now covers, and kept this branch's wrapper + Th/Td specifics and the decorative-CSS budget. Same merge in the checklist item. - bestax-custom-component/SKILL.md — kept main's fuller no-inline-style checklist item plus this branch's "every reusable component gets the spine". No guidance dropped from either side; the decorative-CSS example is still 10 lines, within its stated budget. pnpm all green (20/20 tasks, 4069 tests).
# [2.0.0](https://github.com/allxsmith/bestax/compare/bestax-migrate@1.0.0...bestax-migrate@2.0.0) (2026-08-01) ### Bug Fixes * **bestax-migrate:** give the kitchen-sink e2e a per-process scratch dir ([2211ea5](2211ea5)) * **bestax-migrate:** reject pnpm's workspace alias form instead of unwrapping it ([de6a900](de6a900)) * **bestax-migrate:** require the pack script to exist, not just be named ([5315efe](5315efe)) * **bestax-migrate:** resolve bare workspace: and guard the catalog: protocol ([7fda9db](7fda9db)), closes [#417](#417) [#412](#412) * **bestax-migrate:** resolve workspace: specifiers before publishing ([782829a](782829a)), closes [bestax-migrate#test](https://github.com/bestax-migrate/issues/test) [#412](#412) * **bestax-migrate:** stop the pack hooks excusing a catalog: devDependency ([4127ead](4127ead)), closes [#412-shaped](#412) * **create-bestax:** concrete inline-style → helper-prop mapping for the never-inline rule ([#357](#357)) ([5f72a90](5f72a90)), closes [#350](#350) [#350](#350) * **docs:** stop cssnano stripping Font Awesome [@font-face](https://github.com/font-face), add [#3](#3) CSS framework blog post ([#401](#401)) ([5d114e1](5d114e1)), closes [#400](#400) ### chore * **deps:** consolidate the dependabot backlog, require Node 22 in both CLIs ([#447](#447)) ([e68148c](e68148c)), closes [#427](#427) [#428](#428) [#431](#431) [#432](#432) [#440](#440) [#393](#393) ### Features * **bestax-migrate:** require Node 22 and take chalk 6 ([#449](#449)) ([4c0e1e2](4c0e1e2)), closes [#447](#447) * **bulma-ui:** ship agent-discovery files in the npm tarball ([#345](#345)) ([4b58739](4b58739)), closes [#344](#344) [#344](#344) [#344](#344) * **create-bestax:** add controlled-Burger Navbar to the landing archetype ([#355](#355)) ([36d4d09](36d4d09)), closes [#348](#348) * **create-bestax:** agent-validated guidance for skills, scaffold CLAUDE.md, and catalog ([#365](#365)) ([6fd06ae](6fd06ae)), closes [#2](#2) * **create-bestax:** require Node 22 and take chalk 6 ([#448](#448)) ([90fced2](90fced2)), closes [#447](#447) * **create-bestax:** scaffold .claude/launch.json with the AI skills opt-in ([#343](#343)) ([189135a](189135a)) * **create-bestax:** set scaffolded index.html title to the project name ([#356](#356)) ([3bfbea3](3bfbea3)), closes [#349](#349) [#349](#349) ### BREAKING CHANGES * **bestax-migrate:** bestax-migrate now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. This applies to the runtime the codemod executes on, not to the app being migrated. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * **create-bestax:** create-bestax now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * **deps:** create-bestax now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * feat(bestax-migrate): require Node 22 and take chalk 6 chalk 6 drops support for Node below 22. The API surface this package uses is unchanged, so no calling code changes. The version guard in src/index.ts moves ahead of every import and no longer depends on anything: import declarations are hoisted and evaluated before any statement in the module, and chalk 6 itself requires Node >= 22, so a static import would fail to load on exactly the runtimes the guard exists to catch. ./cli.js is now imported dynamically for the same reason. @babel/parser deliberately stays on 7.x. Babel 8 removes the `deprecatedImportAssert` plugin with no replacement, and this package parses the legacy `import x from 'y' assert { type: 'json' }` form on purpose — a codemod that migrates older codebases must not crash on the syntax those codebases still contain. There is a regression test for it ("parses the legacy import-assert syntax"), which Babel 8 fails outright. jscodeshift 17 bundles its own Babel 7 regardless, so staying on 7 also keeps a single parser in the tree rather than two. * **deps:** bestax-migrate now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh
|
🎉 This PR is included in version 2.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [5.8.1](https://github.com/allxsmith/bestax/compare/@allxsmith/bestax-bulma@5.8.0...@allxsmith/bestax-bulma@5.8.1) (2026-08-07) ### Bug Fixes * **bestax-migrate:** give the kitchen-sink e2e a per-process scratch dir ([2211ea5](2211ea5)) * **bestax-migrate:** reject pnpm's workspace alias form instead of unwrapping it ([de6a900](de6a900)) * **bestax-migrate:** require the pack script to exist, not just be named ([5315efe](5315efe)) * **bestax-migrate:** resolve bare workspace: and guard the catalog: protocol ([7fda9db](7fda9db)), closes [#417](#417) [#412](#412) * **bestax-migrate:** resolve workspace: specifiers before publishing ([782829a](782829a)), closes [bestax-migrate#test](https://github.com/bestax-migrate/issues/test) [#412](#412) * **bestax-migrate:** stop the pack hooks excusing a catalog: devDependency ([4127ead](4127ead)), closes [#412-shaped](#412) * **bulma-ui:** deprecate CSS-less color values, warn in dev, fix has-text fall-through ([fb111eb](fb111eb)) * **bulma-ui:** fail closed on missing process and scope color guidance to real props ([117c0c0](117c0c0)) * **create-bestax:** concrete inline-style → helper-prop mapping for the never-inline rule ([#357](#357)) ([5f72a90](5f72a90)), closes [#350](#350) [#350](#350) * **create-bestax:** validate at submit in the bestax-form signup example ([0b9518f](0b9518f)) * **create-bestax:** wire labeled controls in the skill showcase story ([af49a16](af49a16)) * **docs:** announce the hero copy, and stop remounting the icons ([98e2cb0](98e2cb0)), closes [#434](#434) * **docs:** correct the frozen-install translation and reject leaked fences ([1883de3](1883de3)) * **docs:** drop dead nomodule ionicons fallback ([82be3e4](82be3e4)) * **docs:** harden PackageManagerTabs and document how to author it ([5b0d3e6](5b0d3e6)), closes [#434](#434) * **docs:** harden the hero copy button and share the tab storage key ([9e16cd7](9e16cd7)) * **docs:** make the hero package-manager switcher a real radiogroup ([aa14ff2](aa14ff2)), closes [#434](#434) * **docs:** stop cssnano stripping Font Awesome [@font-face](https://github.com/font-face), add [#3](#3) CSS framework blog post ([#401](#401)) ([5d114e1](5d114e1)), closes [#400](#400) ### chore * **deps:** consolidate the dependabot backlog, require Node 22 in both CLIs ([#447](#447)) ([e68148c](e68148c)), closes [#427](#427) [#428](#428) [#431](#431) [#432](#432) [#440](#440) [#393](#393) ### Features * **bestax-migrate:** require Node 22 and take chalk 6 ([#449](#449)) ([4c0e1e2](4c0e1e2)), closes [#447](#447) * **create-bestax:** add controlled-Burger Navbar to the landing archetype ([#355](#355)) ([36d4d09](36d4d09)), closes [#348](#348) * **create-bestax:** agent-validated guidance for skills, scaffold CLAUDE.md, and catalog ([#365](#365)) ([6fd06ae](6fd06ae)), closes [#2](#2) * **create-bestax:** require Node 22 and take chalk 6 ([#448](#448)) ([90fced2](90fced2)), closes [#447](#447) * **create-bestax:** set scaffolded index.html title to the project name ([#356](#356)) ([3bfbea3](3bfbea3)), closes [#349](#349) [#349](#349) * **docs:** add package-manager switches to the homepage hero ([374caf8](374caf8)) * **docs:** add PackageManagerTabs and register it globally ([23c9989](23c9989)) * **docs:** show all posts in the blog sidebar ([d29e9c6](d29e9c6)) ### Performance Improvements * **docs:** defer live previews until they scroll into view ([d6bf87b](d6bf87b)) * **docs:** share one parsed stylesheet set across every live preview ([feb993a](feb993a)) ### BREAKING CHANGES * **bestax-migrate:** bestax-migrate now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. This applies to the runtime the codemod executes on, not to the app being migrated. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * **create-bestax:** create-bestax now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * **deps:** create-bestax now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * feat(bestax-migrate): require Node 22 and take chalk 6 chalk 6 drops support for Node below 22. The API surface this package uses is unchanged, so no calling code changes. The version guard in src/index.ts moves ahead of every import and no longer depends on anything: import declarations are hoisted and evaluated before any statement in the module, and chalk 6 itself requires Node >= 22, so a static import would fail to load on exactly the runtimes the guard exists to catch. ./cli.js is now imported dynamically for the same reason. @babel/parser deliberately stays on 7.x. Babel 8 removes the `deprecatedImportAssert` plugin with no replacement, and this package parses the legacy `import x from 'y' assert { type: 'json' }` form on purpose — a codemod that migrates older codebases must not crash on the syntax those codebases still contain. There is a regression test for it ("parses the legacy import-assert syntax"), which Babel 8 fails outright. jscodeshift 17 bundles its own Babel 7 regardless, so staying on 7 also keeps a single parser in the tree rather than two. * **deps:** bestax-migrate now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh
|
🎉 This PR is included in version 5.8.1 🎉 The release is available on: Your semantic-release bot 📦🚀 |
# 1.0.0 (2026-08-12) * feat(bulma-ui)!: remove bestax-bulma-prefixed CSS variant ([94baa34](94baa34)) * feat(create-bestax)!: require Node.js 18+ and align with bestax-bulma v2 ([#118](#118)) ([b22f183](b22f183)) ### Bug Fixes * add comprehensive rules to prevent bulma-ui versioning on non-bulma-ui commits ([#122](#122)) ([525ccfa](525ccfa)), closes [#119](#119) * **bestax-mcp:** derive the near-miss guidance from the skill, and only when it helps ([1141cca](1141cca)) * **bestax-mcp:** do not split a helper-prop table cell on an escaped pipe ([bdac820](bdac820)) * **bestax-mcp:** lead get_helper_props with the inline-style prohibition ([ffc627a](ffc627a)) * **bestax-mcp:** make list_components point at the next step ([8ddb2fd](8ddb2fd)) * **bestax-mcp:** make tests and cached builds work from a clean checkout ([6e63820](6e63820)), closes [bestax-mcp#build](https://github.com/bestax-mcp/issues/build) * **bestax-mcp:** name list_components as the entry point, not search_bestax ([206380b](206380b)) * **bestax-mcp:** name the three near-miss components in the list_components footer ([1c7af67](1c7af67)) * **bestax-mcp:** route helper questions to the tool that answers them ([cd6ce12](cd6ce12)) * **bestax-mcp:** validate the one input that is not ours, and bound the rest ([3e1adc9](3e1adc9)) * **bestax-migrate:** give the kitchen-sink e2e a per-process scratch dir ([2211ea5](2211ea5)) * **bestax-migrate:** reject pnpm's workspace alias form instead of unwrapping it ([de6a900](de6a900)) * **bestax-migrate:** require the pack script to exist, not just be named ([5315efe](5315efe)) * **bestax-migrate:** resolve bare workspace: and guard the catalog: protocol ([7fda9db](7fda9db)), closes [#417](#417) [#412](#412) * **bestax-migrate:** resolve workspace: specifiers before publishing ([782829a](782829a)), closes [bestax-migrate#test](https://github.com/bestax-migrate/issues/test) [#412](#412) * **bestax-migrate:** stop the pack hooks excusing a catalog: devDependency ([4127ead](4127ead)), closes [#412-shaped](#412) * **bulma-ui:** a11y + case-insensitive Taginput matching from PR review ([d576829](d576829)) * **bulma-ui:** accept router props like `to` on Navbar.Item without casts ([#311](#311)) ([b78856b](b78856b)), closes [#306](#306) * **bulma-ui:** Add build step to publish in ci.yml ([e3707fc](e3707fc)) * **bulma-ui:** add fontawesome-free as explicit devDependency ([a4a5389](a4a5389)) * **bulma-ui:** add missing exports ([0d16633](0d16633)) * **bulma-ui:** Add Skeleton to exports ([e481599](e481599)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([cc3a3e2](cc3a3e2)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([314bc39](314bc39)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([c930693](c930693)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([7ae37d4](7ae37d4)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([384bd38](384bd38)) * **bulma-ui:** associate the form label prop with its control via a generated id ([e6686af](e6686af)) * **bulma-ui:** complete domain migration and fix semantic-release configuration ([#64](#64)) ([f4cd71d](f4cd71d)) * **bulma-ui:** correct blog post examples and add Modal compound components ([#81](#81)) ([559c2e3](559c2e3)) * **bulma-ui:** correct NPM_TOKEN env variable in ci.yml ([94b48b4](94b48b4)) * **bulma-ui:** cover horizontal-layout group label association ([ef3ca9f](ef3ca9f)) * **bulma-ui:** deprecate CSS-less color values, warn in dev, fix has-text fall-through ([fb111eb](fb111eb)) * **bulma-ui:** fail closed on missing process and scope color guidance to real props ([117c0c0](117c0c0)) * **bulma-ui:** Fix release.config.js to include package-lock.json ([390da59](390da59)) * **bulma-ui:** fix standalone Badge pointer-events, pulse halo, and falsy content ([#295](#295)) ([a9db031](a9db031)), closes [#264](#264) * **bulma-ui:** full classPrefix support across layout/grid + prefix utils ([4ce0b53](4ce0b53)) * **bulma-ui:** honor the htmlFor opt-out in the convenience hook and tighten the association docs ([92aa622](92aa622)) * **bulma-ui:** improve npm package discoverability with optimized keywords and badges ([#72](#72)) ([8c7a696](8c7a696)) * **bulma-ui:** Initial semantic release changes ([b78d785](b78d785)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([73cec33](73cec33)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([ca5996a](ca5996a)) * **bulma-ui:** migrate domain from bestax.cc to bestax.io ([#64](#64)) ([4870b1e](4870b1e)) * **bulma-ui:** migrate ionicons to v8 to unblock publish and Storybook ([927a55b](927a55b)), closes [#142](#142) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([dce0ee7](dce0ee7)) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([#497](#497)) ([5c4222e](5c4222e)) * **bulma-ui:** name the three near-miss components in AGENTS.md ([c63f491](c63f491)), closes [#344](#344) * **bulma-ui:** never let labelProps.htmlFor wire a group label to a control ([3b3aaaf](3b3aaaf)) * **bulma-ui:** publish rewritten README to npm ([9810081](9810081)) * **bulma-ui:** publish with npm provenance attestation ([172da62](172da62)), closes [#180](#180) * **bulma-ui:** reference llms docs from README and package.json ([#198](#198)) ([db8aab3](db8aab3)) * **bulma-ui:** reject predicate-blocked values during manual entry ([a8f6e28](a8f6e28)) * **bulma-ui:** resolve flex item properties and Card compound component issues ([#55](#55)) ([e774da3](e774da3)) * **bulma-ui:** resolve flex item properties and Card compound component issues ([#55](#55)) ([7641a53](7641a53)) * **bulma-ui:** resolve react-hooks v7 and [@eslint-react](https://github.com/eslint-react) findings ([14caaaf](14caaaf)) * **bulma-ui:** resolve security vulnerabilities and update dependencies ([#128](#128)) ([112f6e4](112f6e4)), closes [#127](#127) * **bulma-ui:** restrict semantic-release to bulma-ui scoped commits only ([2d67bf9](2d67bf9)), closes [#62](#62) * **bulma-ui:** retry failed Avatar src, flatten Fragment children in Avatars, RTL-safe overlap ([#297](#297)) ([c00b9db](c00b9db)) * **bulma-ui:** route every hardcoded class through the prefix helpers; add classPrefix sweep test ([#301](#301)) ([a50b134](a50b134)), closes [#286](#286) * **bulma-ui:** setup gpg signing with semantic-release ([3e24722](3e24722)) * **bulma-ui:** strip redundant library prefix from Icon name ([#242](#242)) ([dbe3622](dbe3622)), closes [#189](#189) * **bulma-ui:** trigger release to publish via OIDC trusted publishing ([e2d09c5](e2d09c5)) * **bulma-ui:** update bundle size claims to accurate 21KB gzipped ([#66](#66)) ([6e381bd](6e381bd)) * **bulma-ui:** update package-lock.json ([853d585](853d585)) * **bulma-ui:** update package.json for better seo, exports, types, engines, funding, etc ([98cbc56](98cbc56)) * **bulma-ui:** use createRequire for ESM compatibility in Storybook 10 ([#130](#130)) ([b27e60e](b27e60e)), closes [#129](#129) * **ci:** collect screenshots as artifacts and commit in single batch to avoid conflicts ([27b259d](27b259d)) * **ci:** ensure npm install uses fresh downloads with --prefer-online ([1f2e15d](1f2e15d)) * **ci:** properly extract base path for recursive file search ([e0330ff](e0330ff)) * **ci:** use find command instead of glob module in verified-commit action ([0e2d159](0e2d159)) * **ci:** use npm ci for scaffolded app dependencies ([35652c8](35652c8)) * **create-bestax:** concrete inline-style → helper-prop mapping for the never-inline rule ([#357](#357)) ([5f72a90](5f72a90)), closes [#350](#350) [#350](#350) * **create-bestax:** correct browser title to prioritize Bestax branding ([#106](#106)) ([23aa535](23aa535)), closes [#105](#105) * **create-bestax:** correct template path resolution from ../../ to ../ ([65b4493](65b4493)), closes [#78](#78) * **create-bestax:** dark-mode contrast rules in theming/layout skills and docs ([#303](#303)) ([490bf21](490bf21)), closes [#194](#194) [#195](#195) * **create-bestax:** exclude templates directory from linting and typecheck ([18fec0b](18fec0b)) * **create-bestax:** fail fast with guidance instead of hanging when stdin is not a TTY ([#293](#293)) ([46a172d](46a172d)), closes [#192](#192) * **create-bestax:** move templates into package directory and update docs ([195bf01](195bf01)), closes [#78](#78) * **create-bestax:** point scaffolded CLAUDE.md at llms docs; document skills ([#198](#198)) ([b2e0514](b2e0514)) * **create-bestax:** publish with npm provenance attestation ([21ffe8f](21ffe8f)), closes [#180](#180) * **create-bestax:** put the near-miss guidance where every session sees it ([6db49f3](6db49f3)) * **create-bestax:** read version from package.json instead of hardcoded value ([#109](#109)) ([8605699](8605699)) * **create-bestax:** refresh README and bump scaffolded bestax-bulma to ^5 ([4e19e86](4e19e86)) * **create-bestax:** reject dot-only project names, pin icon versions, bundle bestax-icons skill ([#310](#310)) ([ddff8e5](ddff8e5)) * **create-bestax:** scaffold @allxsmith/bestax-bulma ^4.0.0 ([1d3b802](1d3b802)) * **create-bestax:** scaffold bundled bestax CSS flavors, not stock Bulma ([43621dc](43621dc)) * **create-bestax:** ship improved bundled skills + component catalog ([#199](#199)) ([a1515c2](a1515c2)) * **create-bestax:** shrink the near-miss block and pin the copies together ([d582da5](d582da5)) * **create-bestax:** skills-sync conformance gate + theming skill reference backfill ([#326](#326)) ([9584133](9584133)), closes [#285](#285) * **create-bestax:** stop the skills teaching a Theme call that does not compile ([2935bb2](2935bb2)) * **create-bestax:** synchronize version with bestax-bulma to 2.4.0 ([623ee79](623ee79)), closes [#96](#96) * **create-bestax:** teach the skills the three components Bulma hides ([22dcff7](22dcff7)) * **create-bestax:** update template dependency to ^2.4.0 ([200971d](200971d)) * **create-bestax:** use scenario-specific screenshot directories to prevent overwrites ([#108](#108)) ([c675957](c675957)), closes [#107](#107) * **create-bestax:** validate at submit in the bestax-form signup example ([0b9518f](0b9518f)) * **create-bestax:** wire labeled controls in the skill showcase story ([af49a16](af49a16)) * **docs:** announce the hero copy, and stop remounting the icons ([98e2cb0](98e2cb0)), closes [#434](#434) * **docs:** correct Content Signals syntax in robots.txt ([#134](#134)) ([85dd9de](85dd9de)) * **docs:** correct the frozen-install translation and reject leaked fences ([1883de3](1883de3)) * **docs:** drop dead nomodule ionicons fallback ([82be3e4](82be3e4)) * **docs:** emit per-page markdown so llms.txt links resolve ([#200](#200)) ([7877083](7877083)) * **docs:** escape apostrophe in QuickStart notification text ([25d6d72](25d6d72)) * **docs:** generate llms.txt so the advertised homepage link resolves ([9fae464](9fae464)), closes [#177](#177) * **docs:** give every batch run its own port — slot reuse was corrupting runs ([6ef1755](6ef1755)) * **docs:** harden PackageManagerTabs and document how to author it ([5b0d3e6](5b0d3e6)), closes [#434](#434) * **docs:** harden the hero copy button and share the tab storage key ([9e16cd7](9e16cd7)) * **docs:** improve homepage hero layout and button spacing ([5f7a5a7](5f7a5a7)) * **docs:** make the eval batch resumable after a container restart ([d56229e](d56229e)) * **docs:** make the hero package-manager switcher a real radiogroup ([aa14ff2](aa14ff2)), closes [#434](#434) * **docs:** move robots.txt to correct deployment location ([#90](#90)) ([1e2aeee](1e2aeee)) * **docs:** rebrand and reorganize Storybook ([#83](#83)) ([dfb9937](dfb9937)) * **docs:** remove Google Analytics and add robots.txt ([94776f7](94776f7)) * **docs:** stop cssnano stripping Font Awesome [@font-face](https://github.com/font-face), add [#3](#3) CSS framework blog post ([#401](#401)) ([5d114e1](5d114e1)), closes [#400](#400) * **docs:** update Storybook logo path to /img/logo.svg for deployed site ([bf59758](bf59758)) * **e2e:** correct notification CSS selectors to use contains instead of ends-with ([182acc1](182acc1)) * implement independent package versioning strategy ([#111](#111)) ([7819c73](7819c73)), closes [#110](#110) * prevent bulma-ui from versioning on create-bestax commits ([#120](#120)) ([4dfaf9c](4dfaf9c)), closes [#119](#119) * resolve React Hooks violations and ESLint configuration issues ([32d2931](32d2931)) * upgrade Turbo, Storybook, and Docusaurus dependencies ([5b4ebdd](5b4ebdd)), closes [#98](#98) ### chore * **deps:** consolidate the dependabot backlog, require Node 22 in both CLIs ([#447](#447)) ([e68148c](e68148c)), closes [#427](#427) [#428](#428) [#431](#431) [#432](#432) [#440](#440) [#393](#393) ### Documentation * fix stale versioning and coverage docs; drop CLAUDE.md stale-docs flags ([71c4583](71c4583)) ### Features * add theme system and config provider with comprehensive test coverage ([f3ca7f0](f3ca7f0)) * **bestax-mcp:** serve component docs, props, examples and skills over MCP ([c2abcc4](c2abcc4)) * **bestax-migrate:** react-bulma-components → bestax-bulma codemod CLI, skill, and docs ([#333](#333)) ([e04a12b](e04a12b)), closes [#1e6b99](https://github.com/allxsmith/bestax/issues/1e6b99) * **bestax-migrate:** require Node 22 and take chalk 6 ([#449](#449)) ([4c0e1e2](4c0e1e2)), closes [#447](#447) * **bulma-ui:** add Avatar, Avatars, and Badge components ([#257](#257)) ([0817018](0817018)), closes [#256](#256) * **bulma-ui:** add colorMode dark-mode prop to Theme ([4acc41e](4acc41e)), closes [#174](#174) * **bulma-ui:** add consistent gap prop to Columns, aliasing gapSize ([#300](#300)) ([6c36455](6c36455)), closes [#282](#282) * **bulma-ui:** add cursor helper, closeDelay prop, and polish Tooltip stories ([37945b5](37945b5)) * **bulma-ui:** add extra components, form elements, and SCSS styles ([59daf28](59daf28)) * **bulma-ui:** add HTML element wrapper components ([#135](#135)) ([#136](#136)) ([20fb16d](20fb16d)) * **bulma-ui:** add manual-entry stories for format, bounds, and blocked-value variations ([e93d51c](e93d51c)) * **bulma-ui:** add Reveal component for scroll-triggered animations ([#255](#255)) ([a89c574](a89c574)) * **bulma-ui:** Add skeletons ([6c46e4b](6c46e4b)) * **bulma-ui:** add themed Checkbox/Radio, convenience Field components, and Autocomplete cleanup ([3c57a5a](3c57a5a)) * **bulma-ui:** add typing-first story variants for all picker property variations ([078433f](078433f)) * **bulma-ui:** associate Field's label with a composed base control ([219f631](219f631)) * **bulma-ui:** avatar/badge a11y batch — decorative alt, accessible names, live region, button type, surplus i18n, focus ring ([#298](#298)) ([508477f](508477f)), closes [#266](#266) [#266](#266) * **bulma-ui:** change the default primary color to [#1](#1 ([8872620](8872620)), closes [#1e6b99](https://github.com/allxsmith/bestax/issues/1e6b99) [#1e6b99](https://github.com/allxsmith/bestax/issues/1e6b99) * **bulma-ui:** compound (dot-notation) sub-components for all parent/child families via shared withSubComponents helper ([#331](#331)) ([07516c5](07516c5)) * **bulma-ui:** dim and blur the calendar behind the Datetimepicker time wheels ([3d90619](3d90619)) * **bulma-ui:** finalize the 3.0 component set ([87ccc0e](87ccc0e)) * **bulma-ui:** make Button and Link as prop polymorphic (React.ElementType) ([#238](#238)) ([ce90304](ce90304)), closes [#188](#188) * **bulma-ui:** require React 18 as the minimum supported version ([c7251b0](c7251b0)) * **bulma-ui:** ship agent-discovery files in the npm tarball ([#345](#345)) ([4b58739](4b58739)), closes [#344](#344) [#344](#344) [#344](#344) * **ci:** add verified-commit action for GPG-signed commits ([d078dfa](d078dfa)) * **create-bestax:** add bestax-optimize skill for shrinking built CSS ([#329](#329)) ([f597b9f](f597b9f)) * **create-bestax:** add CLI tool with Vite templates and automated publishing ([9748c3d](9748c3d)) * **create-bestax:** add controlled-Burger Navbar to the landing archetype ([#355](#355)) ([36d4d09](36d4d09)), closes [#348](#348) * **create-bestax:** add cross-platform emoji support with figures ([#103](#103)) ([15567d9](15567d9)) * **create-bestax:** add README with templates location note ([8ddc73d](8ddc73d)) * **create-bestax:** add visual regression testing and synchronized versioning ([17e1e22](17e1e22)), closes [#94](#94) * **create-bestax:** agent-validated guidance for skills, scaffold CLAUDE.md, and catalog ([#365](#365)) ([6fd06ae](6fd06ae)), closes [#2](#2) * **create-bestax:** bestax-icons skill — teach agents the icon system ([#302](#302)) ([61c8ef2](61c8ef2)), closes [#287](#287) * **create-bestax:** improve favicon visibility and add distinct branding ([621590d](621590d)), closes [#100](#100) * **create-bestax:** modernize templates (Vite 8, ESLint 10, TS 6) + add working lint config ([4537629](4537629)), closes [#167](#167) * **create-bestax:** offer to install the bestax AI skills when scaffolding ([625b7bf](625b7bf)), closes [#174](#174) * **create-bestax:** require Node 22 and take chalk 6 ([#448](#448)) ([90fced2](90fced2)), closes [#447](#447) * **create-bestax:** scaffold .claude/launch.json with the AI skills opt-in ([#343](#343)) ([189135a](189135a)) * **create-bestax:** scaffold-aware CLAUDE.md with setup facts and house style ([#271](#271)) ([c1681b0](c1681b0)) * **create-bestax:** set scaffolded index.html title to the project name ([#356](#356)) ([3bfbea3](3bfbea3)), closes [#349](#349) [#349](#349) * **docs:** add Google Analytics tracking for usage insights ([#68](#68)) ([90ab951](90ab951)) * **docs:** add package-manager switches to the homepage hero ([374caf8](374caf8)) * **docs:** add PackageManagerTabs and register it globally ([23c9989](23c9989)) * **docs:** add pronunciation guide and dark mode support ([#58](#58)) ([48a8916](48a8916)) * **docs:** aggregate-runs.mjs — distribution stats across a runs directory ([5de9c07](5de9c07)) * **docs:** batch runner for the eval harness, with the concurrency fixes it needed ([f8e268c](f8e268c)) * **docs:** migrate from GitHub Pages to Cloudflare Pages ([#132](#132)) ([2154672](2154672)), closes [#131](#131) * **docs:** rubric v2 and a brief that demands the components beyond Bulma ([e6047be](e6047be)) * **docs:** show all posts in the blog sidebar ([d29e9c6](d29e9c6)) * **form:** add Datepicker, Timepicker, and Datetimepicker components ([c6684e6](c6684e6)) ### Performance Improvements * **bestax-mcp:** stop get_helper_props costing half the session ([b865651](b865651)) * **docs:** defer live previews until they scroll into view ([d6bf87b](d6bf87b)) * **docs:** share one parsed stylesheet set across every live preview ([feb993a](feb993a)) ### BREAKING CHANGES * **bestax-migrate:** bestax-migrate now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. This applies to the runtime the codemod executes on, not to the app being migrated. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * **create-bestax:** create-bestax now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * **deps:** create-bestax now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * feat(bestax-migrate): require Node 22 and take chalk 6 chalk 6 drops support for Node below 22. The API surface this package uses is unchanged, so no calling code changes. The version guard in src/index.ts moves ahead of every import and no longer depends on anything: import declarations are hoisted and evaluated before any statement in the module, and chalk 6 itself requires Node >= 22, so a static import would fail to load on exactly the runtimes the guard exists to catch. ./cli.js is now imported dynamically for the same reason. @babel/parser deliberately stays on 7.x. Babel 8 removes the `deprecatedImportAssert` plugin with no replacement, and this package parses the legacy `import x from 'y' assert { type: 'json' }` form on purpose — a codemod that migrates older codebases must not crash on the syntax those codebases still contain. There is a regression test for it ("parses the legacy import-assert syntax"), which Babel 8 fails outright. jscodeshift 17 bundles its own Babel 7 regardless, so staying on 7 also keeps a single parser in the tree rather than two. * **deps:** bestax-migrate now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * footer requirement, and the commitlint scope rule - CONTRIBUTING.md: replace the type-less commit example with a commitlint-valid conventional format (verified against commitlint); correct all four coverage mentions to the real jest thresholds (bulma-ui 99%, create-bestax 95%/78% branches); fix the npm package name (@allxsmith/bestax-bulma, plus create-bestax) and link VERSIONING.md - CLAUDE.md: remove the stale-docs warning and asides now that the underlying docs are correct; point at VERSIONING.md again Closes #206. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0131uD6QKmAij7Byk3SByyLh * the @allxsmith/bestax-bulma/versions/bestax-bulma-prefixed.css export is removed. Use versions/bestax-prefixed.css with classPrefix="bestax-". * **bulma-ui:** React 16 and 17 are no longer supported; the minimum supported React version is now 18. * **bulma-ui:** Snackbar has been removed and merged into Toast; use Toast with its positioning and queue props instead. * **bulma-ui:** form controls now auto-wrap in Field/Control, and Checkbox and Radio ship new themed visuals. See the 2.x -> 3.x migration guide. * This version requires Node.js 18.0.0 or higher. The CLI now enforces this requirement and will exit with an error message if running on older Node.js versions. This aligns create-bestax with the bestax-bulma v2.x ecosystem. * fix(create-bestax): correct Prettier formatting in index.ts * None - all changes are additive and backward compatible
|
🎉 This PR is included in version 1.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
# 1.0.0 (2026-09-20) * feat(bulma-ui)!: remove bestax-bulma-prefixed CSS variant ([94baa34](https://github.com/allxsmith/bestax/commit/94baa3489ac54587e6026a8bece9f86816af9372)) * feat(create-bestax)!: require Node.js 18+ and align with bestax-bulma v2 ([#118](https://github.com/allxsmith/bestax/issues/118)) ([b22f183](https://github.com/allxsmith/bestax/commit/b22f183acfa2f0fa6e50b9cd399ca7cd9ac67f94)) ### Bug Fixes * add comprehensive rules to prevent bulma-ui versioning on non-bulma-ui commits ([#122](https://github.com/allxsmith/bestax/issues/122)) ([525ccfa](https://github.com/allxsmith/bestax/commit/525ccfa7beff0e46fdbc5c2e25603e562baabd67)), closes [#119](https://github.com/allxsmith/bestax/issues/119) * **bestax-mcp:** add the README badge block and regenerate the index ([58d4974](https://github.com/allxsmith/bestax/commit/58d4974c4f7949bc303afef27d678c6e54882a1a)) * **bestax-mcp:** carry each CSS variable's declaring scope in the index ([79a5b2c](https://github.com/allxsmith/bestax/commit/79a5b2c9e9eccfd34e54a6d53375972f4b15021c)) * **bestax-mcp:** declare @allxsmith/bestax-bulma as a dependency ([#649](https://github.com/allxsmith/bestax/issues/649)) ([04076c3](https://github.com/allxsmith/bestax/commit/04076c34596bb4285955b96e7ef2e06dcad3deb9)), closes [#537](https://github.com/allxsmith/bestax/issues/537) [#644](https://github.com/allxsmith/bestax/issues/644) * **bestax-mcp:** derive the near-miss guidance from the skill, and only when it helps ([1141cca](https://github.com/allxsmith/bestax/commit/1141ccad60459038485b13b4841fb125f904be6b)) * **bestax-mcp:** do not split a helper-prop table cell on an escaped pipe ([bdac820](https://github.com/allxsmith/bestax/commit/bdac8207db46f2402ad6b765500be8a3af066095)) * **bestax-mcp:** keep URL fragments when attributing docs links ([1ef43ce](https://github.com/allxsmith/bestax/commit/1ef43ce5c11e30eee4eb6e8dab65058baa4f8c59)) * **bestax-mcp:** lead get_helper_props with the inline-style prohibition ([ffc627a](https://github.com/allxsmith/bestax/commit/ffc627a9ddc3f32bc823bfbc875558d1e2e18291)) * **bestax-mcp:** make list_components point at the next step ([8ddb2fd](https://github.com/allxsmith/bestax/commit/8ddb2fdacd94e45c8e97adbbe7f5844bf98b4b46)) * **bestax-mcp:** make tests and cached builds work from a clean checkout ([6e63820](https://github.com/allxsmith/bestax/commit/6e6382007dadce9964c86ba8d29deedb11ae2777)), closes [bestax-mcp#build](https://github.com/bestax-mcp/issues/build) * **bestax-mcp:** name list_components as the entry point, not search_bestax ([206380b](https://github.com/allxsmith/bestax/commit/206380b209a0d5d89b25477ff2fab6806f55ac70)) * **bestax-mcp:** name the three near-miss components in the list_components footer ([1c7af67](https://github.com/allxsmith/bestax/commit/1c7af673cf9ba3cbd48fb6bd1cb979f80e940ba4)) * **bestax-mcp:** note source order beside matched-specificity advice ([e8d960f](https://github.com/allxsmith/bestax/commit/e8d960f5b151c6b94d3b9069126ef1665ee20f02)) * **bestax-mcp:** regenerate data index for Theme shadow vars change ([bc631b9](https://github.com/allxsmith/bestax/commit/bc631b904160fe017541247391291c6707b7b5fb)) * **bestax-mcp:** release the index carrying the background-click correction ([673adcd](https://github.com/allxsmith/bestax/commit/673adcd149b4dbf67b3b2ea32f2116dcc0899dcb)) * **bestax-mcp:** release the index carrying the corrected examples ([51a5828](https://github.com/allxsmith/bestax/commit/51a5828b285d3a9685a280b241338f503d553963)) * **bestax-mcp:** release the index carrying the corrected Modal guidance ([5c7eb18](https://github.com/allxsmith/bestax/commit/5c7eb188d6ab3377ff263428d97b8aa3e83a5e70)) * **bestax-mcp:** release the index carrying the corrected rbc Modal guidance ([6903aa3](https://github.com/allxsmith/bestax/commit/6903aa3ed92a75f515feea8ed48a80ef475c2e19)) * **bestax-mcp:** release the index carrying the corrected ref guidance ([6722933](https://github.com/allxsmith/bestax/commit/67229333e0e8b8793609e93b927aa7e7ff3245d4)) * **bestax-mcp:** release the index carrying the Modal.Container ref mapping ([6e0d3da](https://github.com/allxsmith/bestax/commit/6e0d3dac2e7f03b5454b4f30cad2b6cb5e11cec4)) * **bestax-mcp:** release the index carrying the ref docs and corrected guidance ([fcf0c95](https://github.com/allxsmith/bestax/commit/fcf0c95be0c31ce04fffc46e6e3d5b07cc9b7b00)) * **bestax-mcp:** release the regenerated index carrying the new ref definitions ([9845b53](https://github.com/allxsmith/bestax/commit/9845b53dbefba8eb65b193da9309cc79e1fc19be)) * **bestax-mcp:** restamp the index after the valid-values docs edit ([ff4512a](https://github.com/allxsmith/bestax/commit/ff4512a8d50cda3cab53d6b1877b5cf2eec472c1)), closes [#521](https://github.com/allxsmith/bestax/issues/521) * **bestax-mcp:** route helper questions to the tool that answers them ([cd6ce12](https://github.com/allxsmith/bestax/commit/cd6ce124a1ab856896579d9b00965cbe295523ed)) * **bestax-mcp:** validate the one input that is not ours, and bound the rest ([3e1adc9](https://github.com/allxsmith/bestax/commit/3e1adc9bb0c9d1064d66cf55e55dd75f90158c39)) * **bestax-migrate:** a spread hides the element, not the component ([7f88614](https://github.com/allxsmith/bestax/commit/7f88614df21ad40d0ec28a4458070e777f181051)) * **bestax-migrate:** add the OpenSSF Best Practices badge to the README ([0f35c2e](https://github.com/allxsmith/bestax/commit/0f35c2e6cece9b76a274023224b87fb2d903da0e)) * **bestax-migrate:** address the PR [#613](https://github.com/allxsmith/bestax/issues/613) review round ([7faf2d8](https://github.com/allxsmith/bestax/commit/7faf2d86ee564e92e17c1cacd51f685471e517f9)) * **bestax-migrate:** address the second review round on PR [#613](https://github.com/allxsmith/bestax/issues/613) ([df222c3](https://github.com/allxsmith/bestax/commit/df222c3ea924900842d209e8165c3071c2f8b110)) * **bestax-migrate:** address the third review round on PR [#613](https://github.com/allxsmith/bestax/issues/613) ([92fc2a0](https://github.com/allxsmith/bestax/commit/92fc2a04b55d6b2c1c2083b3cf951300c41bbfcb)) * **bestax-migrate:** align the modal docblock with the advisory it explains ([f9130fe](https://github.com/allxsmith/bestax/commit/f9130fe7eeda31b22d6464d11b481d1876204cdc)) * **bestax-migrate:** align the rbx fixture and e2e comments with the advisory ([1f71d4e](https://github.com/allxsmith/bestax/commit/1f71d4ee4f2c1317c65eb59935b0226e5800c0f4)) * **bestax-migrate:** an anchor cannot wrap an element whose parent is fixed ([1e2e78b](https://github.com/allxsmith/bestax/commit/1e2e78b0508ba9b825411b5a070a188aba74b4a6)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** an anchor may not wrap interactive content either ([5637976](https://github.com/allxsmith/bestax/commit/5637976a9f734f98e62ea45a7ea1089630eb92e8)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** announce the one removal that was still silent ([9f2e3ac](https://github.com/allxsmith/bestax/commit/9f2e3acd544b22e84faf89754be7e8822451cff1)) * **bestax-migrate:** apply the nested-anchor rule on the plain-markup path too ([ba27e3a](https://github.com/allxsmith/bestax/commit/ba27e3a9108fc673f147a37312e8a15d06a46449)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** bound the link attributes by the component too, not just the element ([ca54273](https://github.com/allxsmith/bestax/commit/ca54273b148ea763c7d0e7ba2cb184bd807f122f)) * **bestax-migrate:** close seven defects found reviewing the rbx source ([c2147d9](https://github.com/allxsmith/bestax/commit/c2147d9935e45c8a59344ed2a95fc390fa2e94f9)) * **bestax-migrate:** close two false-exemption paths in the publish classifier ([e76c592](https://github.com/allxsmith/bestax/commit/e76c592abc03587ead58f84c5954d23ea407581a)), closes [#412](https://github.com/allxsmith/bestax/issues/412) [#412](https://github.com/allxsmith/bestax/issues/412) * **bestax-migrate:** colocate the shell-quoting contract and narrow the exemption ([de4a299](https://github.com/allxsmith/bestax/commit/de4a299422ed281b924086e01613e46fb61c2e1d)), closes [#435](https://github.com/allxsmith/bestax/issues/435) * **bestax-migrate:** correct the forwardRefAs TODO's list of ref-forwarding components ([76d6d6a](https://github.com/allxsmith/bestax/commit/76d6d6ad967eb02528d4d077e869db2025ab4651)) * **bestax-migrate:** correct the Navbar dropdown target and doc drift ([dee9f08](https://github.com/allxsmith/bestax/commit/dee9f08640e34046446d5dd9157f10e96810ac70)) * **bestax-migrate:** correct the rbc domRef guidance for the newly forwarded refs ([f93c844](https://github.com/allxsmith/bestax/commit/f93c844da57b463f28f09f2bd75ea45dcf8d69e7)) * **bestax-migrate:** correct the rbc Modal guidance the compound form contradicts ([76e62d0](https://github.com/allxsmith/bestax/commit/76e62d02dd94c7f239a127bdf806c8847103b392)) * **bestax-migrate:** correct the rbx closeOnBlur claim about background clicks ([8ccae65](https://github.com/allxsmith/bestax/commit/8ccae65cdb44e3a9eb8cd964e4a569b83e249e65)) * **bestax-migrate:** correct the rbx Modal guidance that bulma-ui outgrew ([ae62415](https://github.com/allxsmith/bestax/commit/ae62415fe32a79c773b08c0f4293a81a60436726)), closes [#633](https://github.com/allxsmith/bestax/issues/633) * **bestax-migrate:** decide the href from the element, not the leftovers ([87ccb17](https://github.com/allxsmith/bestax/commit/87ccb17a2847e22e592840bb36b4e41552888a34)), closes [#662](https://github.com/allxsmith/bestax/issues/662) * **bestax-migrate:** declare @allxsmith/bestax-bulma as a dependency ([#650](https://github.com/allxsmith/bestax/issues/650)) ([2094d9b](https://github.com/allxsmith/bestax/commit/2094d9b55b1bf0253944b4da5fb107266f0b346c)), closes [#537](https://github.com/allxsmith/bestax/issues/537) [#644](https://github.com/allxsmith/bestax/issues/644) * **bestax-migrate:** disambiguate Navbar.Dropdown in the forwardRefAs advisory ([242e3d4](https://github.com/allxsmith/bestax/commit/242e3d4514cc1f049fee2d1032c00e2d5cb84716)) * **bestax-migrate:** do not advise nesting an <a> inside an element that holds none ([156c793](https://github.com/allxsmith/bestax/commit/156c7938f076ff9aa8fba49d3ebbaa76101b59ab)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** drain the Copilot backlog — 9 findings ([34b75ad](https://github.com/allxsmith/bestax/commit/34b75ade0f06ff90b13c48d8d9ab9a22964d8c49)) * **bestax-migrate:** drop an href on the targets that declare none ([478f7a4](https://github.com/allxsmith/bestax/commit/478f7a42d6413773f9dbe20b42b2b17b72016bed)), closes [#662](https://github.com/allxsmith/bestax/issues/662) * **bestax-migrate:** fix the alias collision in react-bulma-components too ([9d8219b](https://github.com/allxsmith/bestax/commit/9d8219bb906e86a12249d979dc9af9fe64124f7e)) * **bestax-migrate:** flag dropped RBC deep partials instead of losing their CSS ([7db47db](https://github.com/allxsmith/bestax/commit/7db47db794c6a8960718e0b12a163bd56d6cc8c2)) * **bestax-migrate:** flag labelled dividers, parse pre-1.0 ranges, match require.resolve ([794e0a7](https://github.com/allxsmith/bestax/commit/794e0a726731384fd6c4b2ce632b1bf46d558450)) * **bestax-migrate:** flag the Modal behaviours bestax does not implement ([5f37135](https://github.com/allxsmith/bestax/commit/5f371355aa50be600e9e66cd47fbecf1638cf886)) * **bestax-migrate:** four more findings that arrived mid-pass ([d637083](https://github.com/allxsmith/bestax/commit/d637083378c0ba7d7f0195ca0d9e681f6afdcf30)) * **bestax-migrate:** give the kitchen-sink e2e a per-process scratch dir ([2211ea5](https://github.com/allxsmith/bestax/commit/2211ea514475f6cc2de7c60c1433b1797cb02199)) * **bestax-migrate:** give the TODO the remedy that works on the target it names ([fccb4d9](https://github.com/allxsmith/bestax/commit/fccb4d959328db8cf7e662d9ff4457ac1f55dda6)) * **bestax-migrate:** guard prepack, which npm pack runs and prepublishOnly does not ([830c621](https://github.com/allxsmith/bestax/commit/830c621efa4f3df1b57de9fd55dec57b07a44546)), closes [#412](https://github.com/allxsmith/bestax/issues/412) [pre-#436](https://github.com/pre-/issues/436) * **bestax-migrate:** judge every link attribute against the element, not as a group ([1825b9e](https://github.com/allxsmith/bestax/commit/1825b9ef3e6f5bfcd77bb4cdc2450b2ab6b95400)), closes [#368](https://github.com/allxsmith/bestax/issues/368) * **bestax-migrate:** judge props against the component they will end up on ([f0241e4](https://github.com/allxsmith/bestax/commit/f0241e4d082e3a291038112fb757c7f244061948)) * **bestax-migrate:** keep a namespace import referenced as a value ([2feca47](https://github.com/allxsmith/bestax/commit/2feca47aff22b211f6c6d6b6d84844aa74b122c5)), closes [#4](https://github.com/allxsmith/bestax/issues/4) * **bestax-migrate:** keep a TODO on one line, and correct the link-attribute table ([581833e](https://github.com/allxsmith/bestax/commit/581833ee9433079873b211ab03f87f2dac0ad95d)) * **bestax-migrate:** keep an href the plain tag takes, and quieten the shadow TODO ([e78ced2](https://github.com/allxsmith/bestax/commit/e78ced2a22b36555581c67ab4b8e9da650742cd7)) * **bestax-migrate:** keep dynamic Heading props and never drop them in the collapse ([8a076c0](https://github.com/allxsmith/bestax/commit/8a076c04764741a11ce95e12aba0e53220e9caf1)) * **bestax-migrate:** keep href on the anchor, and as inside its union ([894a633](https://github.com/allxsmith/bestax/commit/894a6334f55c59b829427c8ce73f444e1eb55a51)), closes [#641](https://github.com/allxsmith/bestax/issues/641) [#662](https://github.com/allxsmith/bestax/issues/662) [#662](https://github.com/allxsmith/bestax/issues/662) * **bestax-migrate:** keep subtitle class when literal subtitle collapses with heading ([85c4e91](https://github.com/allxsmith/bestax/commit/85c4e91dccf2d1eb136d06543518e5a356981411)) * **bestax-migrate:** keep the domRef advice off the Delete that Button becomes ([617fbb6](https://github.com/allxsmith/bestax/commit/617fbb62636ff09db5484e52d4f31c67f297306e)) * **bestax-migrate:** keep the href `Dropdown.Item` now takes ([e261cdd](https://github.com/allxsmith/bestax/commit/e261cddc88566377bccccdbeb3d2a7466d919409)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** key aliases by scope and reserve retained partial roots ([402a950](https://github.com/allxsmith/bestax/commit/402a950e6a997bfcb2072e9ff759df358727b32e)) * **bestax-migrate:** key the publish guard on the packer, not on an inherited agent ([cf49058](https://github.com/allxsmith/bestax/commit/cf49058ccad10190c2b2bf6dac81ec8d3e07f326)), closes [#412](https://github.com/allxsmith/bestax/issues/412) * **bestax-migrate:** let a nearer binding win over a shadowed alias ([0c45ff3](https://github.com/allxsmith/bestax/commit/0c45ff3c8f8c71e5df57b6c9e6999bf506e7d111)) * **bestax-migrate:** map rbx innerRef to ref on Button/Dropdown/Modal/Navbar ([5207a79](https://github.com/allxsmith/bestax/commit/5207a791b3a157993b9758d77ab04d11e4a98e2a)) * **bestax-migrate:** migrate component references through a namespace import ([aaef103](https://github.com/allxsmith/bestax/commit/aaef10347f6c451870e7385d0085bb9eaa802f81)) * **bestax-migrate:** name the wire caps and pin them to the worker ([06b3653](https://github.com/allxsmith/bestax/commit/06b3653c5489e5f35bdc082c8dac476eef173de2)) * **bestax-migrate:** only convert Button remove to Delete on a true literal ([2ee5d0b](https://github.com/allxsmith/bestax/commit/2ee5d0bb78e6e31d6b6f1b24c814c4367d10bf5f)), closes [#553](https://github.com/allxsmith/bestax/issues/553) * **bestax-migrate:** only rbx's spread can carry an `as` ([84a6f85](https://github.com/allxsmith/bestax/commit/84a6f8510ec5e2f711864430870358b4433816a1)) * **bestax-migrate:** parenthesize comma-valued folded Sass variables ([5a7b052](https://github.com/allxsmith/bestax/commit/5a7b05284f3faa870c6305b0a02556e53851e93a)), closes [#554](https://github.com/allxsmith/bestax/issues/554) * **bestax-migrate:** pick Heading target by prop value, not presence ([81b6374](https://github.com/allxsmith/bestax/commit/81b6374bc3e73949247e4ce73ece0876d5c631a1)), closes [#552](https://github.com/allxsmith/bestax/issues/552) * **bestax-migrate:** pin both halves of the rbx ref pass-through ([1d87cc2](https://github.com/allxsmith/bestax/commit/1d87cc2872487dd01ec91af61d32620c99cb3e90)), closes [#622](https://github.com/allxsmith/bestax/issues/622) * **bestax-migrate:** plain markup keeps the href its own tag accepts ([8dc9b0c](https://github.com/allxsmith/bestax/commit/8dc9b0c3a9180d5c140cbb3e4f6e23b4a5e2af53)) * **bestax-migrate:** port four value-reference fixes to the RBC source ([bc0096a](https://github.com/allxsmith/bestax/commit/bc0096a6b4db73ed5b22a4a26a9aa07f04ab225a)) * **bestax-migrate:** port namespace-import retention to react-bulma-components ([1c35319](https://github.com/allxsmith/bestax/commit/1c35319b1f446f0afe93f1f7c7d4882bd1850b05)) * **bestax-migrate:** preserve shorthand object keys, and read deps signals on parse failure ([9dd22df](https://github.com/allxsmith/bestax/commit/9dd22df61e04f0d9662c8d1d09db81dd9e59ddcc)) * **bestax-migrate:** read iframe and label off their own content models ([6612821](https://github.com/allxsmith/bestax/commit/6612821a0e7d4d385a96bc19a251fe53f1d74f44)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** read spaced comparators and stop calling non-semver bulma "v1" ([ea287b6](https://github.com/allxsmith/bestax/commit/ea287b68936c53134e672c9037423bb3a17fe9f6)) * **bestax-migrate:** read the element a target renders, not the type it declares ([7296a50](https://github.com/allxsmith/bestax/commit/7296a504e277319bb12c08970a13bfb002191e57)) * **bestax-migrate:** read the element before advising an <a> inside it ([88a95a3](https://github.com/allxsmith/bestax/commit/88a95a3e2c0aab8aab661815596418cc8b911d66)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** recognise every plugin shape semantic-release accepts ([37ba3ea](https://github.com/allxsmith/bestax/commit/37ba3ea0e9a11944ccd119ed220785e49a6e1b57)), closes [#436](https://github.com/allxsmith/bestax/issues/436) * **bestax-migrate:** recognize Sass block comments only outside strings ([cdf4ad6](https://github.com/allxsmith/bestax/commit/cdf4ad69a017cadf6d9e7eca7936b6df1fe166bf)), closes [#554](https://github.com/allxsmith/bestax/issues/554) * **bestax-migrate:** refresh the MCP index after the reference edits ([443829f](https://github.com/allxsmith/bestax/commit/443829ff5ff5882cd1e0e16526050936eb0916e6)) * **bestax-migrate:** refuse a publish that is not pnpm's ([bf27cd4](https://github.com/allxsmith/bestax/commit/bf27cd4f22fb8a5c102c9770f44673c6c97fff86)) * **bestax-migrate:** refuse only packers we can name, not everything unfamiliar ([0b12a94](https://github.com/allxsmith/bestax/commit/0b12a94fe34b76f582485aee7299fb38671ca17f)) * **bestax-migrate:** regenerate MCP index for component-map ([ba745f2](https://github.com/allxsmith/bestax/commit/ba745f2cee8f36868f071a5addb25531864da62f)) * **bestax-migrate:** reject pnpm's workspace alias form instead of unwrapping it ([de6a900](https://github.com/allxsmith/bestax/commit/de6a90081c749ca8e3a761ce9cb9c1bee9e2386a)) * **bestax-migrate:** rename innerRef on rbx Navbar.Burger and Navbar.Link ([b935a16](https://github.com/allxsmith/bestax/commit/b935a166b496717a17a1a4fca63a9f40386efa30)) * **bestax-migrate:** rename rbx innerRef on Modal.Container, which becomes Modal ([90f9840](https://github.com/allxsmith/bestax/commit/90f9840af715a0112d6018c5035edc4c5b7b3d2d)) * **bestax-migrate:** rename rbx innerRef on the Navbar.Item that becomes a Dropdown ([16155fe](https://github.com/allxsmith/bestax/commit/16155fe9d21072d61a422fe9a86eb5c20e0b74ca)) * **bestax-migrate:** report what actually happened to bulma, not a fixed line ([a208436](https://github.com/allxsmith/bestax/commit/a20843691ccdfc66fe2ff8920f87144e6ddeedbc)) * **bestax-migrate:** require the pack script to exist, not just be named ([5315efe](https://github.com/allxsmith/bestax/commit/5315efe86c89205dc4ac97ec94f89b853832b696)) * **bestax-migrate:** resolve aliases by location, reserve value-retained roots, keep extension CSS ([1f02e12](https://github.com/allxsmith/bestax/commit/1f02e1284180f3a7eb526c35f998f3c57f481bf5)) * **bestax-migrate:** resolve bare workspace: and guard the catalog: protocol ([7fda9db](https://github.com/allxsmith/bestax/commit/7fda9dbd1537439edc9ec694a9a9d140c2bfc467)), closes [#417](https://github.com/allxsmith/bestax/issues/417) [#412](https://github.com/allxsmith/bestax/issues/412) * **bestax-migrate:** resolve component references by binding, not by name ([0722674](https://github.com/allxsmith/bestax/commit/072267461d8214c76bdf45a80e66ba000957b586)) * **bestax-migrate:** resolve destructured aliases and protect aliased imports ([58b14cf](https://github.com/allxsmith/bestax/commit/58b14cfcafaa74f495be6935c6aef9ac93a54865)) * **bestax-migrate:** resolve dotted targets for bare alias references ([3f53bea](https://github.com/allxsmith/bestax/commit/3f53beaf0ac1fe0d53bd62253c6b7b2877325f2e)) * **bestax-migrate:** resolve shorthand and destructured aliases correctly ([9c0dea8](https://github.com/allxsmith/bestax/commit/9c0dea832b21e63c09b423ae1f4f367f94035ebf)) * **bestax-migrate:** resolve static string/number Button remove by truthiness ([62084bf](https://github.com/allxsmith/bestax/commit/62084bfc4aa6ea71cf725d48ca39e930a97e3787)) * **bestax-migrate:** resolve static string/number Heading props by truthiness ([f063086](https://github.com/allxsmith/bestax/commit/f063086344b7fa3f7cc6c368a95669c6fc27a14b)), closes [#558](https://github.com/allxsmith/bestax/issues/558) * **bestax-migrate:** resolve workspace: specifiers before publishing ([782829a](https://github.com/allxsmith/bestax/commit/782829a7672e3a44827b53651b738ff37b3581b7)), closes [bestax-migrate#test](https://github.com/bestax-migrate/issues/test) [#412](https://github.com/allxsmith/bestax/issues/412) * **bestax-migrate:** restore the npm link in the release success comment ([64b7a8a](https://github.com/allxsmith/bestax/commit/64b7a8a650c10af70467fcc5effebb0cb41305f6)) * **bestax-migrate:** rewrite RBC stylesheet as a real Bulma root, folding vars ([036cf79](https://github.com/allxsmith/bestax/commit/036cf79130e1397df0e2e708d1d115bec217511c)) * **bestax-migrate:** run the link cleanup on react-bulma-components' plain rewrites too ([8ea05cb](https://github.com/allxsmith/bestax/commit/8ea05cba3e3ebe2bd6a51843415b91da98e913e7)) * **bestax-migrate:** say where the two link rules disagree, not that they agree ([8468858](https://github.com/allxsmith/bestax/commit/846885833c4f57ca4ccac3a9999d858472f461c3)), closes [#682](https://github.com/allxsmith/bestax/issues/682) * **bestax-migrate:** share the bulma range parser so RBC bumps comparator ranges too ([#629](https://github.com/allxsmith/bestax/issues/629)) ([491847c](https://github.com/allxsmith/bestax/commit/491847c2ab9f9a91f62241075f8942f240ad6b23)) * **bestax-migrate:** stop collapsing containers onto children they don't wrap ([e659ed8](https://github.com/allxsmith/bestax/commit/e659ed8e25481ae4e496c105d2f33385b7850e28)) * **bestax-migrate:** stop conflating the two directions an anchor can be invalid ([c7dac64](https://github.com/allxsmith/bestax/commit/c7dac646c8e8e6b035514621381d727a0f98f5a3)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** stop mislabeling RBC's own stylesheet as a third-party extension ([6a18553](https://github.com/allxsmith/bestax/commit/6a185530b04e49b79bad57caa320b4ff427b984b)), closes [#555](https://github.com/allxsmith/bestax/issues/555) * **bestax-migrate:** stop naming a close handler in the showClose TODO too ([ce5a337](https://github.com/allxsmith/bestax/commit/ce5a337e6dbb80a358e4d3d26c0691033e75be2c)) * **bestax-migrate:** stop naming a close handler the user may not have ([6cfb557](https://github.com/allxsmith/bestax/commit/6cfb5574289884db108e95c4ed50cb8fcd37df83)) * **bestax-migrate:** stop sending changedBucket, honor Ctrl-C at consent ([271ba4c](https://github.com/allxsmith/bestax/commit/271ba4c3f19ef2846cad80be696c8b3af1991030)) * **bestax-migrate:** stop the pack hooks excusing a catalog: devDependency ([4127ead](https://github.com/allxsmith/bestax/commit/4127ead622f052808ae17644f06af2b77ae89c56)), closes [#412-shaped](https://github.com/allxsmith/bestax/issues/412-shaped) * **bestax-migrate:** stop the release-info tail from being able to fail a release ([f9048cf](https://github.com/allxsmith/bestax/commit/f9048cf4ffc8761ff53b338d085068b4ab159b0c)) * **bestax-migrate:** strip `responsive` from plain elements, cover the shared RBC changes ([f12c3a3](https://github.com/allxsmith/bestax/commit/f12c3a3921905207fc79a80f77dc77309044661e)) * **bestax-migrate:** strip Sass block comments before scanning folded values ([c3fbd46](https://github.com/allxsmith/bestax/commit/c3fbd46b34e4ed0639747afdec18a46a40115c83)), closes [#554](https://github.com/allxsmith/bestax/issues/554) * **bestax-migrate:** take the anchor's other attributes with it, and stop guessing at a falsy href ([9382e4a](https://github.com/allxsmith/bestax/commit/9382e4ac73fe9963533bab19560cba7d61c57965)) * **bestax-migrate:** the component and the element must both allow the attribute ([c009e85](https://github.com/allxsmith/bestax/commit/c009e85c7d62853ed20b32801ecbeb91a35aa962)) * **bestax-migrate:** track backslash escapes when scanning folded Sass values ([eac92eb](https://github.com/allxsmith/bestax/commit/eac92ebeb2ff94d8771c8629d9edb78299a2071e)) * **bestax-migrate:** trust an `as` a spread cannot overwrite, and stop three messages lying ([19fdb09](https://github.com/allxsmith/bestax/commit/19fdb0969789ab76bb97979c7f0ecccc7f589a88)) * **bestax-migrate:** white-bis and white-ter are bestax colours now ([d951c2f](https://github.com/allxsmith/bestax/commit/d951c2fbeb8f549943b89a554e4b3599f6682049)) * **bestax-migrate:** widen the element universe until it disagreed, and fix the Delete hint ([4979d94](https://github.com/allxsmith/bestax/commit/4979d94dec8ed6281e81deb358466c52896f3678)) * **bulma-ui:** a compound matches one simple selector, not co-occurrence ([#703](https://github.com/allxsmith/bestax/issues/703)) ([ce20396](https://github.com/allxsmith/bestax/commit/ce2039691ec93fb3f4d708c881be85f061eaaa73)) * **bulma-ui:** a11y + case-insensitive Taginput matching from PR review ([d576829](https://github.com/allxsmith/bestax/commit/d57682926f510d029839e79d6ba05bd62cc20323)) * **bulma-ui:** accept no children on Avatar, rather than deriving them from `as` ([a8897d2](https://github.com/allxsmith/bestax/commit/a8897d29798fa4545e9c4c89c4280d53c328ab8d)), closes [#665](https://github.com/allxsmith/bestax/issues/665) * **bulma-ui:** accept router props like `to` on Navbar.Item without casts ([#311](https://github.com/allxsmith/bestax/issues/311)) ([b78856b](https://github.com/allxsmith/bestax/commit/b78856ba62986c693e13e545dd86746f206c3ab9)), closes [#306](https://github.com/allxsmith/bestax/issues/306) * **bulma-ui:** add --bulma-shadow to Theme's bulmaVars union ([753ad41](https://github.com/allxsmith/bestax/commit/753ad41bae0a090bfaf2053c4f4afa3760209cee)), closes [#499](https://github.com/allxsmith/bestax/issues/499) * **bulma-ui:** Add build step to publish in ci.yml ([e3707fc](https://github.com/allxsmith/bestax/commit/e3707fcdc0c4ba59dc1d68d81fdd9dc57d4436be)) * **bulma-ui:** add fontawesome-free as explicit devDependency ([a4a5389](https://github.com/allxsmith/bestax/commit/a4a53895f8797ca0889060403ae5d1e21cd09bec)) * **bulma-ui:** add keyboard and focus support to Dropdown and Navbar.Dropdown ([#628](https://github.com/allxsmith/bestax/issues/628)) ([381f22d](https://github.com/allxsmith/bestax/commit/381f22d6403b8a95d3e3ee6b4efabb495e1210aa)) * **bulma-ui:** add missing exports ([0d16633](https://github.com/allxsmith/bestax/commit/0d166338a8843df55af265d30a079858e0bf7da1)) * **bulma-ui:** Add Skeleton to exports ([e481599](https://github.com/allxsmith/bestax/commit/e481599047bd4f094f894569656c878faca3e1ea)) * **bulma-ui:** add the OpenSSF Best Practices badge to the README ([de746d4](https://github.com/allxsmith/bestax/commit/de746d43c0b99f70500745267648dcf1a5425fba)) * **bulma-ui:** admit material-symbols 0.46 in the peer range ([1d5c1d4](https://github.com/allxsmith/bestax/commit/1d5c1d4040bc7ff01fb826999f792638bfacd97f)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([cc3a3e2](https://github.com/allxsmith/bestax/commit/cc3a3e2416361d3da3288c97c894d700a4323a36)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([314bc39](https://github.com/allxsmith/bestax/commit/314bc394d57b4766d20590ae6fd59fe433443c8f)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([c930693](https://github.com/allxsmith/bestax/commit/c930693439e8a289f373c87a568b48fecabc53ae)) * **bulma-ui:** apply the custom-element and event guards consistently ([cc8818c](https://github.com/allxsmith/bestax/commit/cc8818c98881a73fdca0b238bcb16bcc06633f49)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([7ae37d4](https://github.com/allxsmith/bestax/commit/7ae37d48f7a5af85bf29d21c7517abbea7c9448b)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([384bd38](https://github.com/allxsmith/bestax/commit/384bd387639764fa346912cbe6df2d5b02cdaab6)) * **bulma-ui:** associate the form label prop with its control via a generated id ([e6686af](https://github.com/allxsmith/bestax/commit/e6686afa28d006120d5e0dd8181e61036d7fb075)) * **bulma-ui:** attribute shared picker-popover CSS variables to date/time pickers ([80f62ce](https://github.com/allxsmith/bestax/commit/80f62cedb67cde0a6844012be4171edc2df5950e)), closes [#543](https://github.com/allxsmith/bestax/issues/543) [#543](https://github.com/allxsmith/bestax/issues/543) * **bulma-ui:** carry the deprecated `icon` path through every consumer of IconProps ([b8eb722](https://github.com/allxsmith/bestax/commit/b8eb722492d61d471d9440b68668027e47aac5eb)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** catch the other shape a declaration specifier can take ([4f69e20](https://github.com/allxsmith/bestax/commit/4f69e20b698fabc14783a72d9c4c6d6673164eb5)) * **bulma-ui:** chunk the constants bundle as .cjs, and ask the path for the remedy ([83223f7](https://github.com/allxsmith/bestax/commit/83223f703a707dd1a1c6f77b57e042c1fb7fe32c)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** complete domain migration and fix semantic-release configuration ([#64](https://github.com/allxsmith/bestax/issues/64)) ([f4cd71d](https://github.com/allxsmith/bestax/commit/f4cd71d531b757465bf3227aeb5c4e98419cfb97)) * **bulma-ui:** correct blog post examples and add Modal compound components ([#81](https://github.com/allxsmith/bestax/issues/81)) ([559c2e3](https://github.com/allxsmith/bestax/commit/559c2e30fa15580c02f014754fa3846fdd5ed2f6)) * **bulma-ui:** correct NPM_TOKEN env variable in ci.yml ([94b48b4](https://github.com/allxsmith/bestax/commit/94b48b47aec94b83d25f94dade6af793fd7b1672)) * **bulma-ui:** correct the sibling claim, and make the strip set's type check it ([7ffa0e7](https://github.com/allxsmith/bestax/commit/7ffa0e75077d9826fe49dbe874e91a4743ed33c7)), closes [#682](https://github.com/allxsmith/bestax/issues/682) * **bulma-ui:** cover horizontal-layout group label association ([ef3ca9f](https://github.com/allxsmith/bestax/commit/ef3ca9f4b99a149b43f359cb8105255c9a3f2770)) * **bulma-ui:** declare backgroundColor unavailable, and check the whole class ([daf636a](https://github.com/allxsmith/bestax/commit/daf636a5e91d96d3920792651f118ad268ea18d1)) * **bulma-ui:** declare the deprecated `icon` path `Icon` still honours ([80124d1](https://github.com/allxsmith/bestax/commit/80124d12c6f27feb4828815c91d033dcb75853ba)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** define the kept props instead of assigning them ([b5722f2](https://github.com/allxsmith/bestax/commit/b5722f275e19a4cb17bdfb03a57ba0e00215cfb3)), closes [#682](https://github.com/allxsmith/bestax/issues/682) * **bulma-ui:** deprecate CSS-less color values, warn in dev, fix has-text fall-through ([fb111eb](https://github.com/allxsmith/bestax/commit/fb111eb9f08a412821efe07a77e2ba29ee9993b8)) * **bulma-ui:** emit the CommonJS bundle as .cjs, so require() can load it ([f64286c](https://github.com/allxsmith/bestax/commit/f64286ccfce8b173bcd8461911532355f921db73)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** enumerate string size literals so the docs extractor keeps concrete type values ([00bfff3](https://github.com/allxsmith/bestax/commit/00bfff32ed715f8c4e9b4858be8e1f3159b71e0f)) * **bulma-ui:** exclude disabled/hidden controls from Modal initial focus ([f4091f8](https://github.com/allxsmith/bestax/commit/f4091f8420a03261ce07c55c747cd0c4a3110f2a)) * **bulma-ui:** exclude undefined from Icon children and add node stories ([b607db1](https://github.com/allxsmith/bestax/commit/b607db1b5c4301ca17fa0351eaf7b5b7cd5032d7)) * **bulma-ui:** exempt everything module-sync serves, and pin the chunk guards ([c87f6a7](https://github.com/allxsmith/bestax/commit/c87f6a731e81f1e49ec55aae0ad7ebcadc7ad96c)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** fail closed on missing process and scope color guidance to real props ([117c0c0](https://github.com/allxsmith/bestax/commit/117c0c08b5f16ad36d7e402aa714f886a7a9ef3e)) * **bulma-ui:** Fix release.config.js to include package-lock.json ([390da59](https://github.com/allxsmith/bestax/commit/390da5938deeb9a790d063c79c2ca693f9b7d0b9)) * **bulma-ui:** fix standalone Badge pointer-events, pulse halo, and falsy content ([#295](https://github.com/allxsmith/bestax/issues/295)) ([a9db031](https://github.com/allxsmith/bestax/commit/a9db03189c087eb0a61f56357e179296bd4cebf9)), closes [#264](https://github.com/allxsmith/bestax/issues/264) * **bulma-ui:** full classPrefix support across layout/grid + prefix utils ([4ce0b53](https://github.com/allxsmith/bestax/commit/4ce0b53b337ff2ff961cc18a17790ee75d860dfa)) * **bulma-ui:** give the CommonJS chunks the extension too, and finish the target test ([bdcba5c](https://github.com/allxsmith/bestax/commit/bdcba5ca4546368dff3db957cc978753c729a972)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** give the constants subpath a CommonJS types target ([e97d609](https://github.com/allxsmith/bestax/commit/e97d6095860309c64f6882a04b8dc8666e843a5f)) * **bulma-ui:** give the emitted declarations extensions, so their specifiers resolve ([#702](https://github.com/allxsmith/bestax/issues/702)) ([2a4672f](https://github.com/allxsmith/bestax/commit/2a4672f94ebe774c3825e076455286f01bf2b8c4)) * **bulma-ui:** honor the htmlFor opt-out in the convenience hook and tighten the association docs ([92aa622](https://github.com/allxsmith/bestax/commit/92aa622c0ebd231b41562504da6d104128207000)) * **bulma-ui:** honour callback-ref cleanups on Dialog, Sidebar, Toast and Carousel ([dbbdc23](https://github.com/allxsmith/bestax/commit/dbbdc2393b1c5dc1af186fbcaeea2297d94cb7f1)) * **bulma-ui:** improve npm package discoverability with optimized keywords and badges ([#72](https://github.com/allxsmith/bestax/issues/72)) ([8c7a696](https://github.com/allxsmith/bestax/commit/8c7a69664fcc6409096cd72b9bb006ff8edf8ddc)) * **bulma-ui:** Initial semantic release changes ([b78d785](https://github.com/allxsmith/bestax/commit/b78d785e5d3e7aec5b49f178784aad3d97b5434c)) * **bulma-ui:** judge an mjs require target, and certify module-sync by loading ([ce984f5](https://github.com/allxsmith/bestax/commit/ce984f569189dbf8fc0027ed0a66103583881fe0)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** judge both runtimes, not the modern one with a fallback ([525ef79](https://github.com/allxsmith/bestax/commit/525ef79b961f6e6be67490596227a551e5ae2c32)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** judge only the branches a require() can enter ([10ffd2e](https://github.com/allxsmith/bestax/commit/10ffd2e5430c96f6ac0c14c0b9fa0a9041986b2a)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** judge what an older Node reaches behind module-sync ([5b4dd6d](https://github.com/allxsmith/bestax/commit/5b4dd6d2a164f032a7266004e3c73e8e9d6bae9d)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** keep DropdownItemProps accepting every tag it always accepted ([d621b88](https://github.com/allxsmith/bestax/commit/d621b88d86bd7f3bc053474d215726b03df35408)), closes [#667](https://github.com/allxsmith/bestax/issues/667) [#667](https://github.com/allxsmith/bestax/issues/667) [#667](https://github.com/allxsmith/bestax/issues/667) [#663](https://github.com/allxsmith/bestax/issues/663) [#667](https://github.com/allxsmith/bestax/issues/667) * **bulma-ui:** keep React's own node shapes out of the icon-props branch ([638e329](https://github.com/allxsmith/bestax/commit/638e329929beaa3f90709cffb7458adcc155c90c)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** keep stripping disabled where the element does not own it ([afd94a7](https://github.com/allxsmith/bestax/commit/afd94a72b739f22dffc0151de1cbe984acf1646b)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([73cec33](https://github.com/allxsmith/bestax/commit/73cec33709b72f968645a951cda0fa6a664847c5)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([ca5996a](https://github.com/allxsmith/bestax/commit/ca5996a73f5b0816ff82fa4984455bb82ef6060c)) * **bulma-ui:** keep the button default against a spread, and tag the deprecated props ([fcc148b](https://github.com/allxsmith/bestax/commit/fcc148b74655a42c99ddc595f38dc5dd11f82e95)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** keep the form attributes an `as="input"` owns ([3ae7bd8](https://github.com/allxsmith/bestax/commit/3ae7bd873f02a3471022537e1c5d35157d0409a6)) * **bulma-ui:** keep Toast's empty-container fallback, filter to real tab stops, re-key focus across the portal move ([511a7ae](https://github.com/allxsmith/bestax/commit/511a7ae4cd56bf0c63aab99b0440fb6b5c6b0d6a)) * **bulma-ui:** leave custom elements out of the built-in attribute backstops ([94f6f48](https://github.com/allxsmith/bestax/commit/94f6f48e9fa476fa5f9755bd139aeb742b30b344)) * **bulma-ui:** let Dropdown.Item's props follow its constrained `as` ([f9c998f](https://github.com/allxsmith/bestax/commit/f9c998f483997e99deaed4b2a45b176bc2e4743c)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** let Level.Item's anchor take the rest of an anchor's attributes ([#675](https://github.com/allxsmith/bestax/issues/675)) ([59e8e34](https://github.com/allxsmith/bestax/commit/59e8e348ec69ace8144d429f8345e85591d2a3f2)) * **bulma-ui:** make props and refs follow the polymorphic `as` ([7528d87](https://github.com/allxsmith/bestax/commit/7528d87d995bfcdf21e33b5e25da9a3e1c2a0b34)), closes [#188](https://github.com/allxsmith/bestax/issues/188) [#641](https://github.com/allxsmith/bestax/issues/641) * **bulma-ui:** match a spread's enumerability, and close the `type` gap ([84b5cd2](https://github.com/allxsmith/bestax/commit/84b5cd2aae9785b8393d697474c5f6d1905b9bda)), closes [#682](https://github.com/allxsmith/bestax/issues/682) * **bulma-ui:** match compound selectors in either class order ([1cb026e](https://github.com/allxsmith/bestax/commit/1cb026ea9915f0d276731dadb4ee04a998e3bcba)) * **bulma-ui:** memoize Toast's merged ref so the cleanup fires only on detach ([e4e6b04](https://github.com/allxsmith/bestax/commit/e4e6b04be2bf329c2cef0043cb9fe582c4d6bf02)) * **bulma-ui:** migrate domain from bestax.cc to bestax.io ([#64](https://github.com/allxsmith/bestax/issues/64)) ([4870b1e](https://github.com/allxsmith/bestax/commit/4870b1e7d9edd7295f907ae07df9fe00f1217f46)) * **bulma-ui:** migrate ionicons to v8 to unblock publish and Storybook ([927a55b](https://github.com/allxsmith/bestax/commit/927a55b024db8d2c9da7448a958d2a51daef3cca)), closes [#142](https://github.com/allxsmith/bestax/issues/142) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([dce0ee7](https://github.com/allxsmith/bestax/commit/dce0ee7e2b2d5c2678e5b996437ab713cc45365b)) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([#497](https://github.com/allxsmith/bestax/issues/497)) ([5c4222e](https://github.com/allxsmith/bestax/commit/5c4222e2eca35c151a2c355e329c6b5a47a8195f)) * **bulma-ui:** name the three near-miss components in AGENTS.md ([c63f491](https://github.com/allxsmith/bestax/commit/c63f491274ef3e5db173eb4ee5039c645df74bd1)), closes [#344](https://github.com/allxsmith/bestax/issues/344) * **bulma-ui:** never let labelProps.htmlFor wire a group label to a control ([3b3aaaf](https://github.com/allxsmith/bestax/commit/3b3aaafa6573bfc0c84930ee1517f402105fbc1d)) * **bulma-ui:** preserve Modal's forwarded callback-ref cleanup, restore its [@extra](https://github.com/extra)Prop ([cf9c70d](https://github.com/allxsmith/bestax/commit/cf9c70d3bd20ecdbda8f4639e45a8889e10280d5)) * **bulma-ui:** publish only the polymorphic types, and keep role="img" without an href ([b0c8dfe](https://github.com/allxsmith/bestax/commit/b0c8dfe11d5d44a044ff7de051224e5d3ecf3129)) * **bulma-ui:** publish rewritten README to npm ([9810081](https://github.com/allxsmith/bestax/commit/981008179d96b19f692ca73c17a02ae3f5fa6298)) * **bulma-ui:** publish with npm provenance attestation ([172da62](https://github.com/allxsmith/bestax/commit/172da62349b464d414da552058dfa4db238ab720)), closes [#180](https://github.com/allxsmith/bestax/issues/180) * **bulma-ui:** reference llms docs from README and package.json ([#198](https://github.com/allxsmith/bestax/issues/198)) ([db8aab3](https://github.com/allxsmith/bestax/commit/db8aab32c1c07d81071e7da0c74e811150289d40)) * **bulma-ui:** reject predicate-blocked values during manual entry ([a8f6e28](https://github.com/allxsmith/bestax/commit/a8f6e28b92b997f0cdbb25feed0e039ecc1503b5)) * **bulma-ui:** reject the LinkButton props Button eats, and split a conflated assertion ([b0c7a16](https://github.com/allxsmith/bestax/commit/b0c7a162f584a8ae442006f4815ffd7492175c8d)) * **bulma-ui:** resolve flex item properties and Card compound component issues ([#55](https://github.com/allxsmith/bestax/issues/55)) ([e774da3](https://github.com/allxsmith/bestax/commit/e774da3b7a8890b77d7d699c5b5d0d3a20920fed)) * **bulma-ui:** resolve flex item properties and Card compound component issues ([#55](https://github.com/allxsmith/bestax/issues/55)) ([7641a53](https://github.com/allxsmith/bestax/commit/7641a536db1c4a3928ccc7a15407b939fe205b06)) * **bulma-ui:** resolve react-hooks v7 and [@eslint-react](https://github.com/eslint-react) findings ([14caaaf](https://github.com/allxsmith/bestax/commit/14caaafa1db777ae5ce59c512ac253968df21fc3)) * **bulma-ui:** resolve security vulnerabilities and update dependencies ([#128](https://github.com/allxsmith/bestax/issues/128)) ([112f6e4](https://github.com/allxsmith/bestax/commit/112f6e4841fa9ea9c4ba49200984e413c1bc5f22)), closes [#127](https://github.com/allxsmith/bestax/issues/127) * **bulma-ui:** restore union `as`, and stop the props type collapsing to any ([dfec253](https://github.com/allxsmith/bestax/commit/dfec253473e743fdb562a7d4352f03bae0f081ee)), closes [#641](https://github.com/allxsmith/bestax/issues/641) * **bulma-ui:** restrict semantic-release to bulma-ui scoped commits only ([2d67bf9](https://github.com/allxsmith/bestax/commit/2d67bf9a0ed65d1258c664ca741a1b0966445b79)), closes [#62](https://github.com/allxsmith/bestax/issues/62) * **bulma-ui:** retry failed Avatar src, flatten Fragment children in Avatars, RTL-safe overlap ([#297](https://github.com/allxsmith/bestax/issues/297)) ([c00b9db](https://github.com/allxsmith/bestax/commit/c00b9db6aa21fab055302fd3320dccd4c0cbc824)) * **bulma-ui:** route every hardcoded class through the prefix helpers; add classPrefix sweep test ([#301](https://github.com/allxsmith/bestax/issues/301)) ([a50b134](https://github.com/allxsmith/bestax/commit/a50b134949e08c9c4a207dbd1890213cc3389cd5)), closes [#286](https://github.com/allxsmith/bestax/issues/286) * **bulma-ui:** run a forwarded callback ref's cleanup on Dropdown detach ([f36032c](https://github.com/allxsmith/bestax/commit/f36032c32b898c314b68bd6a4d665049e89118af)) * **bulma-ui:** scope Modal keyboard/focus handling to the topmost modal ([6d3096d](https://github.com/allxsmith/bestax/commit/6d3096d13b1cee29da9d3e4fc13275c4db1a6527)) * **bulma-ui:** scope the two attribute filters independently ([d132427](https://github.com/allxsmith/bestax/commit/d132427012be570331ce469e2b586fcb74f3cb20)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** set displayName on the newly forwarded-ref components ([603d745](https://github.com/allxsmith/bestax/commit/603d745914d36644630358062f702cf1650fa989)) * **bulma-ui:** setup gpg signing with semantic-release ([3e24722](https://github.com/allxsmith/bestax/commit/3e24722d05cd231638864eebb5ff768991633c42)) * **bulma-ui:** stop a Dropdown.Item button submitting the form it sits in ([a27f0d6](https://github.com/allxsmith/bestax/commit/a27f0d6702fe5afbf830bcb84a40cea2a1022195)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** stop Avatar widening to every element, and forward custom props ([74f452b](https://github.com/allxsmith/bestax/commit/74f452b30956f6a8efbad6ed91135b4a55124909)), closes [#661](https://github.com/allxsmith/bestax/issues/661) [#641](https://github.com/allxsmith/bestax/issues/641) * **bulma-ui:** stop emitting are-multiline from Tags, deprecate isMultiline ([#624](https://github.com/allxsmith/bestax/issues/624)) ([0f97eac](https://github.com/allxsmith/bestax/commit/0f97eac1123bf7be11756cfc222cd215ea2b6f68)) * **bulma-ui:** stop guessing which attributes a target element owns ([9baafe9](https://github.com/allxsmith/bestax/commit/9baafe9eca9832946fad96186d33214b2e93c0fa)), closes [#641](https://github.com/allxsmith/bestax/issues/641) * **bulma-ui:** stop predicting the symptom, and drop a claim about the corpus ([2af4883](https://github.com/allxsmith/bestax/commit/2af4883c29b7fe0884ef0ec6f0eb83c7f3181da2)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** stop stripping attributes the target element accepts ([65800e8](https://github.com/allxsmith/bestax/commit/65800e8e85087ea0c17f30149f68c6f0975a9d34)) * **bulma-ui:** stop the color exclusion reaching custom targets, and guard the disabled blocker ([3299b54](https://github.com/allxsmith/bestax/commit/3299b54088db6b25ec0cfbdc0ccb939c608faeec)), closes [#665](https://github.com/allxsmith/bestax/issues/665) * **bulma-ui:** stop the ref cells naming a type parameter no page declares ([5931850](https://github.com/allxsmith/bestax/commit/59318506589e18b7cfad4d3e6d953e514798e18f)) * **bulma-ui:** strip only the keys a caller named, and correct three claims ([7747335](https://github.com/allxsmith/bestax/commit/7747335acec4dcb27d253c7aeb9b4ae62bff14cb)), closes [#682](https://github.com/allxsmith/bestax/issues/682) [#682](https://github.com/allxsmith/bestax/issues/682) * **bulma-ui:** strip redundant library prefix from Icon name ([#242](https://github.com/allxsmith/bestax/issues/242)) ([dbe3622](https://github.com/allxsmith/bestax/commit/dbe36221af3db5be729dd65a3d528042986ee3ec)), closes [#189](https://github.com/allxsmith/bestax/issues/189) * **bulma-ui:** surface supply-chain posture in agent pointer files ([#519](https://github.com/allxsmith/bestax/issues/519)) ([51573e9](https://github.com/allxsmith/bestax/commit/51573e9b0d7655de2aaf49b1ac6c37234b1f07d3)), closes [#413](https://github.com/allxsmith/bestax/issues/413) * **bulma-ui:** test the icon-config shape, and keep one copy of the guard ([f8c9c5b](https://github.com/allxsmith/bestax/commit/f8c9c5b48e97297d5dab900ca2b78f15be59b54c)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** the eight smaller defects review found in [#661](https://github.com/allxsmith/bestax/issues/661) ([a6df70f](https://github.com/allxsmith/bestax/commit/a6df70f308afdd6ea4d7e3e628c5a8fb60fd4e83)) * **bulma-ui:** treat falsy icon nodes as absent in Control and IconText ([c36f5b2](https://github.com/allxsmith/bestax/commit/c36f5b2728c1759c7b8cfdf5a847bf6af5114c09)) * **bulma-ui:** treat optionality modifiers as unsupported, and correct two contracts ([9ca5de9](https://github.com/allxsmith/bestax/commit/9ca5de982a165c4924fbaa0e2747ed1228906d50)) * **bulma-ui:** trigger release to publish via OIDC trusted publishing ([e2d09c5](https://github.com/allxsmith/bestax/commit/e2d09c5e312df3788aa140f0e5e86370a545a989)) * **bulma-ui:** update bundle size claims to accurate 21KB gzipped ([#66](https://github.com/allxsmith/bestax/issues/66)) ([6e381bd](https://github.com/allxsmith/bestax/commit/6e381bdc16ad5572a40983ccc079e33c7882c0c6)) * **bulma-ui:** update package-lock.json ([853d585](https://github.com/allxsmith/bestax/commit/853d585ddfb0622c963b29b050c23f96923fad81)) * **bulma-ui:** update package.json for better seo, exports, types, engines, funding, etc ([98cbc56](https://github.com/allxsmith/bestax/commit/98cbc5637b81c6cba560953bf95eb4c6371b4392)) * **bulma-ui:** use createRequire for ESM compatibility in Storybook 10 ([#130](https://github.com/allxsmith/bestax/issues/130)) ([b27e60e](https://github.com/allxsmith/bestax/commit/b27e60e074dda007e76ad38d867573539b8bcb41)), closes [#129](https://github.com/allxsmith/bestax/issues/129) * **bulma-ui:** warn on the new white shades as component modifiers ([7c617a6](https://github.com/allxsmith/bestax/commit/7c617a6df9ff798d3d00b9d3864a69115195dfd7)) * **bulma-ui:** withhold an href from a Dropdown.Item that is not an anchor ([f597cf2](https://github.com/allxsmith/bestax/commit/f597cf2ae36ebca4c4b57a65ac69c3c259187153)), closes [#667](https://github.com/allxsmith/bestax/issues/667) [#667](https://github.com/allxsmith/bestax/issues/667) [#663](https://github.com/allxsmith/bestax/issues/663) * **ci:** collect screenshots as artifacts and commit in single batch to avoid conflicts ([27b259d](https://github.com/allxsmith/bestax/commit/27b259d774d4088fa371bb7ad2688cc97d4258ab)) * **ci:** ensure npm install uses fresh downloads with --prefer-online ([1f2e15d](https://github.com/allxsmith/bestax/commit/1f2e15ddf2c4b51094ed58d04b26decc317dfa2e)) * **ci:** properly extract base path for recursive file search ([e0330ff](https://github.com/allxsmith/bestax/commit/e0330ff9ca0efe12ad96603cfe134307f3a09b83)) * **ci:** use find command instead of glob module in verified-commit action ([0e2d159](https://github.com/allxsmith/bestax/commit/0e2d159177760c7285c4ddd5930f49e6ac7c5566)) * **ci:** use npm ci for scaffolded app dependencies ([35652c8](https://github.com/allxsmith/bestax/commit/35652c8d84ecd2e1b8f5c2d0bc7b2f573d1e9717)) * collapse the duplicated docs route segment so Grid and Columns URLs resolve ([#598](https://github.com/allxsmith/bestax/issues/598)) ([a11333b](https://github.com/allxsmith/bestax/commit/a11333b7bbc0b444dd45f6d3bb6f4335153d4e89)), closes [#597](https://github.com/allxsmith/bestax/issues/597) * **create-bestax:** add the OpenSSF Best Practices badge to the README ([baad987](https://github.com/allxsmith/bestax/commit/baad987d592cf91eceb5d59f1da302fca8049270)) * **create-bestax:** concrete inline-style → helper-prop mapping for the never-inline rule ([#357](https://github.com/allxsmith/bestax/issues/357)) ([5f72a90](https://github.com/allxsmith/bestax/commit/5f72a90eea06162f4fd5260587098df919ddc4fc)), closes [#350](https://github.com/allxsmith/bestax/issues/350) [#350](https://github.com/allxsmith/bestax/issues/350) * **create-bestax:** correct browser title to prioritize Bestax branding ([#106](https://github.com/allxsmith/bestax/issues/106)) ([23aa535](https://github.com/allxsmith/bestax/commit/23aa535a82639e2b5552294b03636894ed686a4d)), closes [#105](https://github.com/allxsmith/bestax/issues/105) * **create-bestax:** correct template path resolution from ../../ to ../ ([65b4493](https://github.com/allxsmith/bestax/commit/65b44931859e162c46bfc8cdd6e0849942778968)), closes [#78](https://github.com/allxsmith/bestax/issues/78) * **create-bestax:** dark-mode contrast rules in theming/layout skills and docs ([#303](https://github.com/allxsmith/bestax/issues/303)) ([490bf21](https://github.com/allxsmith/bestax/commit/490bf21ad9ee101e4f2630bf53f5b3e8ef22fc9e)), closes [#194](https://github.com/allxsmith/bestax/issues/194) [#195](https://github.com/allxsmith/bestax/issues/195) * **create-bestax:** declare @allxsmith/bestax-bulma as a dependency ([#645](https://github.com/allxsmith/bestax/issues/645)) ([5d785f9](https://github.com/allxsmith/bestax/commit/5d785f998847da69b51c15596747e5bbdec70b7f)), closes [#537](https://github.com/allxsmith/bestax/issues/537) [#644](https://github.com/allxsmith/bestax/issues/644) * **create-bestax:** document strictPort port-collision recovery in generated CLAUDE.md ([7ba0756](https://github.com/allxsmith/bestax/commit/7ba0756a59c654a1857012119352ab425d20c203)), closes [#371](https://github.com/allxsmith/bestax/issues/371) * **create-bestax:** exclude templates directory from linting and typecheck ([18fec0b](https://github.com/allxsmith/bestax/commit/18fec0b50fe71b2ba0bf41beb4bbb1e5bd399e22)) * **create-bestax:** fail closed on foreign consent records, gate ignored files ([81df919](https://github.com/allxsmith/bestax/commit/81df91954cd421c57df7df0495698178be083f5a)) * **create-bestax:** fail fast with guidance instead of hanging when stdin is not a TTY ([#293](https://github.com/allxsmith/bestax/issues/293)) ([46a172d](https://github.com/allxsmith/bestax/commit/46a172d503bb283a5fc168f397261f8afa558b19)), closes [#192](https://github.com/allxsmith/bestax/issues/192) * **create-bestax:** gate consent on both TTYs, honor DNT and Ctrl-C ([8def8da](https://github.com/allxsmith/bestax/commit/8def8da80ce70160d50efba1ae2869827c5814b3)) * **create-bestax:** move templates into package directory and update docs ([195bf01](https://github.com/allxsmith/bestax/commit/195bf01fae72ce268a75156140912e2bc40052c3)), closes [#78](https://github.com/allxsmith/bestax/issues/78) * **create-bestax:** name rbx in the scaffolded CLAUDE.md skill roster ([fcf11dc](https://github.com/allxsmith/bestax/commit/fcf11dc40502421a51904e1a90a09719f5f37647)) * **create-bestax:** never send telemetry from the e2e scaffold harness ([a6db102](https://github.com/allxsmith/bestax/commit/a6db10299c77368622988c1cfc1687b433f5d602)) * **create-bestax:** point scaffolded CLAUDE.md at llms docs; document skills ([#198](https://github.com/allxsmith/bestax/issues/198)) ([b2e0514](https://github.com/allxsmith/bestax/commit/b2e0514c0ed4a04192b56fda8e2fc23a67898f97)) * **create-bestax:** publish with npm provenance attestation ([21ffe8f](https://github.com/allxsmith/bestax/commit/21ffe8f753419eeded407b1fa8685bcbd473fbfe)), closes [#180](https://github.com/allxsmith/bestax/issues/180) * **create-bestax:** put the near-miss guidance where every session sees it ([6db49f3](https://github.com/allxsmith/bestax/commit/6db49f308b888f778f7454ffc934e4aa7d7b2b0d)) * **create-bestax:** read version from package.json instead of hardcoded value ([#109](https://github.com/allxsmith/bestax/issues/109)) ([8605699](https://github.com/allxsmith/bestax/commit/8605699141c90cfde95fba229f21e601e7723586)) * **create-bestax:** refresh README and bump scaffolded bestax-bulma to ^5 ([4e19e86](https://github.com/allxsmith/bestax/commit/4e19e8691781cc0dce9bf6b277a4d0e90a9ec693)) * **create-bestax:** reject dot-only project names, pin icon versions, bundle bestax-icons skill ([#310](https://github.com/allxsmith/bestax/issues/310)) ([ddff8e5](https://github.com/allxsmith/bestax/commit/ddff8e5c54b08f669aa0c34aa5a466050f8929e5)) * **create-bestax:** remove dead ionicons nomodule fallback from generated & shipped surfaces ([db3d588](https://github.com/allxsmith/bestax/commit/db3d5883ad6abf30567c8048cc8ff6c2b9131e07)), closes [#564](https://github.com/allxsmith/bestax/issues/564) * **create-bestax:** review-thread fixes across the telemetry surface ([750b53e](https://github.com/allxsmith/bestax/commit/750b53e052ccb1acf803e01c5ee7bdafbba21b1a)), closes [#550](https://github.com/allxsmith/bestax/issues/550) * **create-bestax:** scaffold @allxsmith/bestax-bulma ^4.0.0 ([1d3b802](https://github.com/allxsmith/bestax/commit/1d3b802eb7285ca05c64cfb0a44bdb96ddb2d82b)) * **create-bestax:** scaffold bundled bestax CSS flavors, not stock Bulma ([43621dc](https://github.com/allxsmith/bestax/commit/43621dc7cebef2dd51f017feccc91a2154e1f7a3)) * **create-bestax:** scope the strictPort recovery kill to the TCP listener ([5fe5397](https://github.com/allxsmith/bestax/commit/5fe5397cd665fd32d693c46f4e2204b076bf73a1)), closes [#371](https://github.com/allxsmith/bestax/issues/371) * **create-bestax:** ship improved bundled skills + component catalog ([#199](https://github.com/allxsmith/bestax/issues/199)) ([a1515c2](https://github.com/allxsmith/bestax/commit/a1515c2742fa1a2b82052045674c4f1b41d0c792)) * **create-bestax:** ship scaffold .gitignore via rename-on-copy and ignore *.tsbuildinfo ([2094086](https://github.com/allxsmith/bestax/commit/209408608e7a45d7346369e98ef106bacfc48cf8)), closes [#371](https://github.com/allxsmith/bestax/issues/371) * **create-bestax:** ship the corrected background-click guidance to scaffolded apps ([067eed8](https://github.com/allxsmith/bestax/commit/067eed818cebd9fd7bd0011718bada6d095c6807)) * **create-bestax:** ship the corrected rbc Modal guidance to scaffolded apps ([1374104](https://github.com/allxsmith/bestax/commit/1374104e0eeeb12db29846ed48ebc430da602e84)) * **create-bestax:** ship the corrected rbx Modal guidance to scaffolded apps ([b864e90](https://github.com/allxsmith/bestax/commit/b864e90c92bca15fe1a5401039047ab9e1ba3d4b)), closes [#633](https://github.com/allxsmith/bestax/issues/633) * **create-bestax:** ship the corrected ref guidance to scaffolded apps ([bd0cfd3](https://github.com/allxsmith/bestax/commit/bd0cfd3d6b99106dad7c66a5ab9d359e40eb1159)) * **create-bestax:** ship the custom-icon-node guidance to scaffolded apps ([e96b7b9](https://github.com/allxsmith/bestax/commit/e96b7b98acad80a77e9c6e316159e3032e2b0533)), closes [#597](https://github.com/allxsmith/bestax/issues/597) * **create-bestax:** ship the Modal.Container ref mapping to scaffolded apps ([06b470f](https://github.com/allxsmith/bestax/commit/06b470fb76bb8170410bf6c37f224bfbcf1022e7)) * **create-bestax:** ship the polymorphic `as` guidance to scaffolded apps ([4aa322c](https://github.com/allxsmith/bestax/commit/4aa322c752fd0e04c3548f44720a4ccf557ca8b5)), closes [#641](https://github.com/allxsmith/bestax/issues/641) * **create-bestax:** shrink the near-miss block and pin the copies together ([d582da5](https://github.com/allxsmith/bestax/commit/d582da567dc0ebc877300399ec221d83af2ec80a)) * **create-bestax:** skills-sync conformance gate + theming skill reference backfill ([#326](https://github.com/allxsmith/bestax/issues/326)) ([9584133](https://github.com/allxsmith/bestax/commit/95841337838139f2e32c482641d7d6c6305800fb)), closes [#285](https://github.com/allxsmith/bestax/issues/285) * **create-bestax:** stop claiming rbx puts innerRef on every component ([83f6f21](https://github.com/allxsmith/bestax/commit/83f6f21401c0eca92400838aef674cd159b47e5e)) * **create-bestax:** stop telling scaffolded apps a carried-over ref needs no work ([d1fe477](https://github.com/allxsmith/bestax/commit/d1fe477b7c7910a9863b3ae7415a6f91446d9642)), closes [#622](https://github.com/allxsmith/bestax/issues/622) * **create-bestax:** stop the skills teaching a Theme call that does not compile ([2935bb2](https://github.com/allxsmith/bestax/commit/2935bb273d0da959049194f1498229cbbb61cfd3)) * **create-bestax:** synchronize version with bestax-bulma to 2.4.0 ([623ee79](https://github.com/allxsmith/bestax/commit/623ee79a5510261c7603dcb867db9baf3d7e6586)), closes [#96](https://github.com/allxsmith/bestax/issues/96) * **create-bestax:** teach the skills the three components Bulma hides ([22dcff7](https://github.com/allxsmith/bestax/commit/22dcff753fd0cd84751a6ea9ecffc8f811483935)) * **create-bestax:** update template dependency to ^2.4.0 ([200971d](https://github.com/allxsmith/bestax/commit/200971d4500283a8be1d64c5bf3ca8396b76cdb1)) * **create-bestax:** use scenario-specific screenshot directories to prevent overwrites ([#108](https://github.com/allxsmith/bestax/issues/108)) ([c675957](https://github.com/allxsmith/bestax/commit/c675957d406d0c86907da06e6bdf7d71ec975b81)), closes [#107](https://github.com/allxsmith/bestax/issues/107) * **create-bestax:** validate at submit in the bestax-form signup example ([0b9518f](https://github.com/allxsmith/bestax/commit/0b9518f595932182cabce5160892730079aed51c)) * **create-bestax:** wire labeled controls in the skill showcase story ([af49a16](https://github.com/allxsmith/bestax/commit/af49a160961f09047fad1b152115ee5623d3a0ae)) * **docs:** announce the hero copy, and stop remounting the icons ([98e2cb0](https://github.com/allxsmith/bestax/commit/98e2cb0236b68d0af54db7e8429f309d3b4cb325)), closes [#434](https://github.com/allxsmith/bestax/issues/434) * **docs:** attribute four orphaned SCSS partials to the API pages that own them ([2f72490](https://github.com/allxsmith/bestax/commit/2f7249076574ff3840e57f79ed5dcf991b71b6b4)), closes [#543](https://github.com/allxsmith/bestax/issues/543) * **docs:** correct Content Signals syntax in robots.txt ([#134](https://github.com/allxsmith/bestax/issues/134)) ([85dd9de](https://github.com/allxsmith/bestax/commit/85dd9de7c147b06f43b9e6a51c6c304a9530b121)) * **docs:** correct the frozen-install translation and reject leaked fences ([1883de3](https://github.com/allxsmith/bestax/commit/1883de3ddea548e13e022a8f40787cf9624de243)) * **docs:** drop dead nomodule ionicons fallback ([82be3e4](https://github.com/allxsmith/bestax/commit/82be3e4a1cefb5c72c79d5a30a06d013bb18cdd1)) * **docs:** emit per-page markdown so llms.txt links resolve ([#200](https://github.com/allxsmith/bestax/issues/200)) ([7877083](https://github.com/allxsmith/bestax/commit/7877083da55d53bdc57811ddc14d5065fd0efdae)) * **docs:** escape apostrophe in QuickStart notification text ([25d6d72](https://github.com/allxsmith/bestax/commit/25d6d7229d691245c3e2ca8475caaac7e9369478)) * **docs:** fail the build on broken anchor links ([0d2f497](https://github.com/allxsmith/bestax/commit/0d2f497112cc459275e243309bd2ca51a9977ac8)), closes [#467](https://github.com/allxsmith/bestax/issues/467) * **docs:** generate llms.txt so the advertised homepage link resolves ([9fae464](https://github.com/allxsmith/bestax/commit/9fae464305595c284335eda65d721480d1accb25)), closes [#177](https://github.com/allxsmith/bestax/issues/177) * **docs:** give every batch run its own port — slot reuse was corrupting runs ([6ef1755](https://github.com/allxsmith/bestax/commit/6ef1755cde7d0ae3a943963ba10fc5c7a193d0fe)) * **docs:** harden PackageManagerTabs and document how to author it ([5b0d3e6](https://github.com/allxsmith/bestax/commit/5b0d3e68389998b35a436ab6e90cc46e68949a37)), closes [#434](https://github.com/allxsmith/bestax/issues/434) * **docs:** harden the hero copy button and share the tab storage key ([9e16cd7](https://github.com/allxsmith/bestax/commit/9e16cd7e9bdd97f7ac6707a74debe2fbc6295d4c)) * **docs:** improve homepage hero layout and button spacing ([5f7a5a7](https://github.com/allxsmith/bestax/commit/5f7a5a78faa3e51766d8f4449e93bc4d6519fde9)) * **docs:** make the eval batch resumable after a container restart ([d56229e](https://github.com/allxsmith/bestax/commit/d56229eb4ba2db2b5313b3051362fcae21df15d0)) * **docs:** make the hero package-manager switcher a real radiogroup ([aa14ff2](https://github.com/allxsmith/bestax/commit/aa14ff25efba2312776a430ee88b5e34ecaf52db)), closes [#434](https://github.com/allxsmith/bestax/issues/434) * **docs:** make the preview deploy include dotfiles, and validate offset dates ([6162fec](https://github.com/allxsmith/bestax/commit/6162fecf4863f04c82800e7d70eb42222ec92192)) * **docs:** move robots.txt to correct deployment location ([#90](https://github.com/allxsmith/bestax/issues/90)) ([1e2aeee](https://github.com/allxsmith/bestax/commit/1e2aeee38fa01097db832b9bc7c920114db194b0)) * **docs:** rebrand and reorganize Storybook ([#83](https://github.com/allxsmith/bestax/issues/83)) ([dfb9937](https://github.com/allxsmith/bestax/commit/dfb99379b65135bc448f6f5e267fe2f473e8e106)) * **docs:** remove dead ionicons nomodule fallback script ([c96cc29](https://github.com/allxsmith/bestax/commit/c96cc2930e827e9ea9dfcfe8782cc0e5464a821e)), closes [#445](https://github.com/allxsmith/bestax/issues/445) * **docs:** remove Google Analytics and add robots.txt ([94776f7](https://github.com/allxsmith/bestax/commit/94776f7a020af5411a8d679b794e09be2de7bf9e)) * **docs:** scope picker calendar/wheel vars to their constituent element ([888…
Pull Request
Description
The scaffolded CLAUDE.md's "never inline
style={{}}" House style rule stated the prohibition and named prop families, but gave no lookup path from "the inline value I'm about to write" to "the prop I should write instead" — and the A/B experiment in #350 showed it violated 47 times in a single run, even though the model used the helper props correctly elsewhere in the same files.This PR makes the rule followable:
create-bestax/src/constants.ts(CLAUDE_MDtemplate) — the House style block now carries a compact mapping table: common inline-style patterns on the left, the helper prop on the right — spacing (m*/p*with the 1–6 rem scale spelled out),textAlign,textColor/bgColorwith the Bulma palette,textSize/textWeight,textTransform,display/flex props,flexGrow="1"for the flex-child height case, and visibility/responsivedisplay*helpers.Explicit fallback order for values with no helper equivalent (
maxWidth, one-off gradients): a named class insrc/App.csspassed viaclassName— still never inlinestyle. (Deliberately stops short of--bulma-*token guidance, per the issue's scope note.)Mirrored the same table into the two skills that generate the most JSX —
bestax-layout-scaffold(new "Inline style → helper prop mapping" section, tightened Approach bullet and checklist) andbestax-custom-component(styling-ladder rung 1, with the no-equivalent case routed to rung 2; checklist updated) — so the mapping is in context exactly when pages are scaffolded.All prop names and valid values were checked against
bulma-ui/src/helpers/bulmaClassHelpers.ts(spacing/text-size scales, alignments, weights, transforms, displays, visibilities).bulma-ui (
@allxsmith/bestax-bulma)create-bestax (
create-bestax)docs (
@allxsmith/bestax-docs)Other (please specify):
skills/(bundled into create-bestax at build time)Related Issue(s)
Closes #350
Type of Change
Checklist
constants.test.tsasserts the mapping rows and the named-class fallback appear in the generated CLAUDE.md)gen:catalog:checkall green)CLAUDE.mdfiles are updated (no repo-level convention changed — the edited CLAUDE.md is the scaffolded template itself)Screenshots / Demos
The new House style block in a generated app's CLAUDE.md:
Additional Context
Skills changes were made at the repo root (
skills/) per the sync rules —sync-skills.mjsre-bundles them into create-bestax at build/prepack time. ESLint enforcement of thestyleprop (the issue's "alternatives" section) is intentionally left as a possible follow-up hardening step.🤖 Generated with Claude Code
https://claude.ai/code/session_01Q8Hayvdw6o35sYcxmh88ER
Generated by Claude Code
Summary by CodeRabbit