Skip to content

fix(create-bestax): reject dot-only project names, pin icon versions, bundle bestax-icons skill - #310

Merged
allxsmith merged 9 commits into
mainfrom
claude/bestax-security-review-4j1549
Jul 15, 2026
Merged

allxsmith merged 9 commits into
mainfrom
claude/bestax-security-review-4j1549

Conversation

@allxsmith

@allxsmith allxsmith commented Jul 14, 2026 •

Copy link
Copy Markdown
Owner

Pull Request

Description

Fixes from a full security review of the repo (scaffolder, workflows, composite actions, repo docs). The written deep-dive report is delivered separately (not committed — it discloses details best kept out of the public repo until this merges).

  • create-bestax (create-bestax)
  • Other (please specify): GitHub Actions workflows, .github/actions/verified-commit, CODEOWNERS, SECURITY.md

create-bestax (release-affecting — the squash commit title above cuts one patch release):

  • Destructive path bug (high severity): . and .. passed project-name validation, resolved to the current/parent directory, and --yes then emptied that directory — npm create bestax .. -- -y wiped the parent dir on an end-user machine. All leading-dot names are now rejected (slashes were already blocked). Trade-off: npm create bestax . (scaffold into the current dir) is now rejected too, with a message saying to pass a directory name.
  • Floating latest deps: generated apps pinned icon libraries to latest; they now get the caret ranges bulma-ui/docs are tested against (@fortawesome/fontawesome-free ^7.2.0, @mdi/font ^7.4.47, material-icons ^1.13.14, material-symbols ^0.45.2), with a drift-guard test. The pinned ionicons CDN tags now carry a comment documenting why SRI is deliberately omitted (the ESM loader dynamically imports per-icon chunks that can't carry integrity hashes).
  • Skill drift: the generated CLAUDE.md advertises bestax-icons, but sync-skills.mjs never bundled it (omission from feat(create-bestax): bestax-icons skill — teach agents the icon system #302). It now ships.

Workflow hardening (release-neutral ci:/chore:/docs: commits riding along):

  • test-deploy.yml: github.head_ref (attacker-chosen PR-branch text) was interpolated into the wrangler command; it's now sanitized to [A-Za-z0-9-] via a step output first.
  • verified-commit action: inputs were interpolated directly into the github-script body and an execSync(`find …`) string — a latent injection sink for any future caller. Inputs now arrive via env: and find runs through execFileSync with an argument array. Behavior unchanged for the current caller (visual-regression.yml).
  • claude.yml: added the same authoritative live collaborator role re-check its siblings use, plus persist-credentials: false. Behavior change: read-only COLLABORATOR/MEMBER accounts can no longer trigger @claude — intentional, matches bestaxbot-reply.yml/claude-implement.yml.
  • claude.yml, claude-implement.yml, claude-review.yml, ci.yml: moved to the repo's own permissions: {} + per-job pattern; CI's PR-path jobs drop the unused contents: write/pull-requests: write and add persist-credentials: false. The publish job is untouched.
  • New .github/CODEOWNERS (/.github/ @allxsmith) — inert until "Require review from Code Owners" is enabled in the main branch protection.

Related Issue(s)

Related to #302 (bestax-icons skill was added there but never bundled into create-bestax).

Type of Change

  • Bug fix
  • Other (please describe): security hardening of CI/workflows; SECURITY.md doc update

Checklist

  • My code follows the project style guidelines
  • I have performed a self-review of my code
  • I have added tests that prove my fix is effective or that my feature works
  • I have added/updated documentation as needed
  • I have updated Storybook stories as needed (bulma-ui) — n/a, no bulma-ui changes
  • My changes require a change to the documentation — n/a beyond SECURITY.md
  • All new and existing tests passed
  • Any relevant dependencies are updated
  • If this PR changes commands, conventions, or package structure, the affected CLAUDE.md files are updated — n/a, no command/convention changes

Screenshots / Demos

Live smoke test after the fix (scratchpad, built CLI):

$ node create-bestax/dist/index.js .. -y
✖ Project name cannot start with a dot (names like "." or ".." would scaffold outside a new directory) — pass a directory name
✖ Operation cancelled   (exit 1, parent directory untouched)

Generated package.json now contains "@mdi/font": "^7.4.47" (no latest), and .claude/skills/ includes bestax-icons.

Additional Context

Verified locally: create-bestax jest suite 191/191 passing with coverage 97.9% stmts / 87.9% branches (thresholds 95/78); lint, typecheck, format:check, gen:catalog:check, check:conformance all green; every edited workflow YAML parses. This PR touches .github/**, so the AI loop won't drive it — it needs a human review and squash-merge. The squash-commit title should stay fix(create-bestax): … so exactly one create-bestax patch releases.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Hk9z4hXDifYFQg9VLjxEo3


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Added the Bestax Icons skill to generated projects.
    • Added pinned versions for supported icon libraries in generated package.json files.
    • Added clearer guidance when project names begin with a dot.
  • Bug Fixes

    • Prevented scaffolding projects with dot-prefixed names.
    • Improved preview deployment branch-name handling.
    • Added permission checks before automated workflows run.
  • Security

    • Restricted workflow permissions to the jobs that require them.
    • Improved secure file discovery and disabled credential persistence during checkout.

@coderabbitai

coderabbitai Bot commented Jul 14, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5550844f-190e-4510-a145-129656c7054d

📥 Commits

Reviewing files that changed from the base of the PR and between 4b2b797 and 5c661d2.

📒 Files selected for processing (13)
  • .github/CODEOWNERS
  • .github/actions/verified-commit/action.yml
  • .github/workflows/claude-implement.yml
  • .github/workflows/claude-review.yml
  • .github/workflows/claude.yml
  • .github/workflows/test-deploy.yml
  • create-bestax/scripts/sync-skills.mjs
  • create-bestax/src/__tests__/constants.test.ts
  • create-bestax/src/__tests__/project-creator.test.ts
  • create-bestax/src/__tests__/validators.test.ts
  • create-bestax/src/constants.ts
  • create-bestax/src/project-creator.ts
  • create-bestax/src/validators.ts
🚧 Files skipped from review as they are similar to previous changes (12)
  • .github/CODEOWNERS
  • create-bestax/src/tests/constants.test.ts
  • .github/workflows/test-deploy.yml
  • create-bestax/src/tests/validators.test.ts
  • .github/workflows/claude.yml
  • .github/workflows/claude-implement.yml
  • .github/workflows/claude-review.yml
  • create-bestax/src/validators.ts
  • create-bestax/src/project-creator.ts
  • .github/actions/verified-commit/action.yml
  • create-bestax/src/tests/project-creator.test.ts
  • create-bestax/src/constants.ts

Walkthrough

Changes

GitHub workflow security

Layer / File(s) Summary
Verified commit input handling
.github/actions/verified-commit/action.yml
Action inputs are passed through environment variables, file discovery uses argument-safe execution, and commit creation reads the environment-sourced message.
Workflow permission scoping
.github/CODEOWNERS, .github/workflows/claude-implement.yml, .github/workflows/claude-review.yml, .github/workflows/claude.yml
Workflows use default-deny permissions with required scopes declared at job level, and .github/ ownership is documented.
Claude trigger authorization
.github/workflows/claude.yml
The workflow checks collaborator roles before checkout, setup, and Claude execution, while disabling persisted checkout credentials.
Preview branch sanitization
.github/workflows/test-deploy.yml
Preview branch names are normalized to allowed characters, limited to 63 characters, and passed to the Pages deployment command.

create-bestax scaffold consistency

Layer / File(s) Summary
Project and icon metadata contracts
create-bestax/src/constants.ts, create-bestax/src/validators.ts
Leading-dot project names are rejected, and icon libraries define explicit package version metadata.
Generated dependency and skill wiring
create-bestax/src/project-creator.ts, create-bestax/scripts/sync-skills.mjs
Generated dependencies use configured icon versions, ionicons behavior is documented, and bestax-icons is synchronized.
Scaffold behavior tests
create-bestax/src/__tests__/*
Tests cover leading-dot names and pinned icon dependency versions.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant GitHubActions
  participant GitHubAPI
  participant Repository
  participant Claude
  GitHubActions->>GitHubAPI: Check triggering collaborator role
  GitHubAPI-->>GitHubActions: Return role
  GitHubActions->>Repository: Checkout when role is allowed
  Repository->>Claude: Provide checked-out workspace
  Claude->>GitHubActions: Execute workflow actions
Loading

Possibly related PRs

Suggested labels: dependencies

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately captures the main create-bestax fixes and the bundled bestax-icons update.
Description check ✅ Passed The description follows the template well, covering summary, affected packages, issue, change type, checklist, demo, and context.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/bestax-security-review-4j1549

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed: private package registry requires authentication. Disable ESLint in CodeRabbit settings or use public packages.


Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://b4faaa82.bestax.pages.dev

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
create-bestax/src/project-creator.ts (1)

268-269: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Do not retain latest as a fallback for package-backed libraries.

library.packageVersion ?? 'latest' still permits an icon entry with packageName but missing version metadata to generate a floating dependency, bypassing the new contract in constants.ts. Require packageVersion whenever packageName is present, or fail fast before writing package.json; reserve missing versions for CDN/no-package entries. This follows the scaffold’s explicit non-floating dependency contract.

🤖 Prompt for 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.

In `@create-bestax/src/project-creator.ts` around lines 268 - 269, Update the
dependency generation logic around packageJson.dependencies so package-backed
libraries require a defined library.packageVersion and fail fast before writing
package.json when it is missing; only allow absent versions for CDN/no-package
entries, and remove the 'latest' fallback.
🤖 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 @.github/actions/verified-commit/action.yml:
- Around line 20-43: Update the file-discovery logic around the script’s pattern
and basePath handling to derive the filename glob passed to find from
process.env.FILE_PATTERN instead of hardcoding '*.png'. Preserve the existing
recursive base-directory behavior and pass the derived glob as find’s -name
argument so extensions supported by the documented file-pattern input are
discovered.

---

Nitpick comments:
In `@create-bestax/src/project-creator.ts`:
- Around line 268-269: Update the dependency generation logic around
packageJson.dependencies so package-backed libraries require a defined
library.packageVersion and fail fast before writing package.json when it is
missing; only allow absent versions for CDN/no-package entries, and remove the
'latest' fallback.
🪄 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: 31d91fd7-590d-4659-82fc-842f05cfc133

📥 Commits

Reviewing files that changed from the base of the PR and between 74e3d4e and 65eec75.

📒 Files selected for processing (15)
  • .github/CODEOWNERS
  • .github/actions/verified-commit/action.yml
  • .github/workflows/ci.yml
  • .github/workflows/claude-implement.yml
  • .github/workflows/claude-review.yml
  • .github/workflows/claude.yml
  • .github/workflows/test-deploy.yml
  • SECURITY.md
  • create-bestax/scripts/sync-skills.mjs
  • create-bestax/src/__tests__/constants.test.ts
  • create-bestax/src/__tests__/project-creator.test.ts
  • create-bestax/src/__tests__/validators.test.ts
  • create-bestax/src/constants.ts
  • create-bestax/src/project-creator.ts
  • create-bestax/src/validators.ts

Comment thread .github/actions/verified-commit/action.yml Outdated
allxsmith added a commit that referenced this pull request Jul 15, 2026
CodeRabbit finding on #310: the filename glob passed to find was
hardcoded to '*.png' while the file-pattern input is documented as
generic. Now derived from the pattern's final segment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://bc600975.bestax.pages.dev

@allxsmith allxsmith left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deep review — 1 finding + 1 merge blocker

# Severity Area Finding Location
1 🟡 Minor Security (defense-in-depth) find argv injection via a leading-dash basePath: a future caller passing file-pattern: "-delete" would make GNU find default the path to . and evaluate -delete as an expression — deleting the workspace. -name's argument is safe (it consumes the next argv slot), but the first positional arg isn't. Prefix it: execFileSync('find', ['./' + basePath.replace(/^\.\//, ''), ...]) or reject leading-dash patterns. Same "latent sink for any future caller" rationale this PR itself applies to the template-interpolation fix. .github/actions/verified-commit/action.yml
— 🔴 Blocker Merge state The branch is now CONFLICTING with main: #313 rewrote SECURITY.md (its latest-only policy + supply-chain section supersedes this PR's table fix — drop this PR's SECURITY.md hunk in the rebase) and #314 restructured ci.yml permissions (top-level contents: read vs this PR's permissions: {} + per-job — both are least-privilege; pick one style during the rebase). SECURITY.md, .github/workflows/ci.yml

Verified sound (the load-bearing claims):

  • Dot-name rejection (validators.ts): the check runs before the regex (so ../ gets the dot message, not the char message), catches ., .., .hidden; /, \, ~ were already excluded by the regex. Tests cover validateProjectName, isValidProjectName, and the getProjectName CLI path. The documented trade-off (rejecting npm create bestax .) is real but the right call given --yes emptied the target.
  • Icon-version pinning: caret ranges match what bulma-ui/docs test against; the drift-guard test (packageVersion must match ^\^\d+\.\d+\.\d+$, never latest) closes the regression door. Nit: library.packageVersion ?? 'latest' in project-creator.ts re-opens it at runtime for an entry the test somehow misses — consider throwing instead of falling back.
  • verified-commit env-var hardening: inputs now reach the script only via env:; execFileSync with an argument array kills the backtick/quote injection. Correct.
  • test-deploy sanitization: printf '%s' | tr -cs 'a-zA-Z0-9-' '-' | cut -c1-63 — no trailing-newline artifact, complement+squeeze collapses runs, output is safe to interpolate by construction. Correct.
  • claude.yml live role re-check: matches the sibling workflows' pattern; gh api … || echo none fails closed for non-collaborators (404 → none → skip); every subsequent step is gated on the output. The documented behavior change (read-only COLLABORATOR loses @claude) is intentional.
  • Per-job permissions: with top-level permissions: {}, every job in the touched workflows declares its own block, and ci.yml's publish job keeps its pre-existing write scopes — nothing silently lost.
  • bestax-icons in sync-skills: matches the skills the generated CLAUDE.md advertises.

Overall: the substantive security fixes are correct and well-tested; the destructive-path fix in particular is exactly right. Address the rebase (blocker), and optionally the two hardening nits, and this is ready.

claude and others added 9 commits July 14, 2026 21:51
…a dot

Names like "." and ".." passed PROJECT_NAME_REGEX and resolved to the
current or parent directory, which the --yes flag would then empty —
`npm create bestax .. -- -y` wiped the parent directory. Reject every
leading-dot name in validateProjectName (slashes were already blocked),
covering both the CLI-arg and interactive-prompt paths.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hk9z4hXDifYFQg9VLjxEo3
Generated apps declared icon dependencies as 'latest', making scaffolded
installs non-reproducible and exposed to whatever is newest on the
registry at install time. Pin each npm-installed icon library to the
caret range bulma-ui/docs are tested against, with a drift-guard test.
Also document why the pinned ionicons CDN tags deliberately omit SRI
(the ESM loader dynamically imports per-icon chunks that cannot carry
integrity hashes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hk9z4hXDifYFQg9VLjxEo3
…enerated CLAUDE.md

The CLAUDE.md written into scaffolded apps lists bestax-icons among the
installed skills, but sync-skills.mjs omitted it from the SKILLS array,
so it never shipped. Add it so the bundled skills match the generated
documentation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hk9z4hXDifYFQg9VLjxEo3
… and verified-commit

test-deploy interpolated github.head_ref (attacker-chosen PR branch
text) directly into the wrangler command; route it through a step that
reduces it to [A-Za-z0-9-] first. The verified-commit composite action
interpolated its inputs straight into the github-script body and an
execSync(find ...) shell string — a latent script-injection sink for
any future caller; inputs now arrive via env vars and find runs through
execFileSync with an argument array. Behavior is unchanged for the
current callers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hk9z4hXDifYFQg9VLjxEo3
…laude.yml

author_association can be COLLABORATOR with only read access, and
claude.yml was the one Claude workflow relying on it alone. Add the
same authoritative live role re-check its siblings use (write/triage+
required) and stop persisting the GITHUB_TOKEN into .git/config while
the agent runs project scripts. Read-only collaborators can no longer
trigger @claude — intentional, matching bestaxbot-reply and
claude-implement.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hk9z4hXDifYFQg9VLjxEo3
…CI PR path

Match the permissions: {} + per-job pattern the rest of the workflows
already use. CI's build/test and react-compat jobs ran PR code with
contents: write and pull-requests: write they never used — they are now
contents: read with persist-credentials: false; the publish job keeps
its existing scoped block.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hk9z4hXDifYFQg9VLjxEo3
The workflows and AI-loop guardrails under .github/ are the repo's
security boundary. Inert until 'Require review from Code Owners' is
enabled in the main branch protection.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hk9z4hXDifYFQg9VLjxEo3
CodeRabbit finding on #310: the filename glob passed to find was
hardcoded to '*.png' while the file-pattern input is documented as
generic. Now derived from the pattern's final segment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Deep-review finding on #310: a future caller passing file-pattern
"-delete" would make GNU find treat it as an expression (path
defaulting to '.') and delete workspace files. The base path is now
prefixed with './' when it starts with '-'.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@allxsmith
allxsmith force-pushed the claude/bestax-security-review-4j1549 branch from 4b2b797 to 5c661d2 Compare July 15, 2026 01:52

@allxsmith allxsmith left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both review items addressed: the branch is rebased onto current main (the SECURITY.md commit dropped — #313's merged rewrite supersedes it; ci.yml resolved to main's merged #314 treatment, keeping this PR's claude-implement/claude-review per-job permission moves), and the find leading-dash guard landed in 5c661d2. All commits signed.

@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://7e36206a.bestax.pages.dev

@allxsmith
allxsmith merged commit ddff8e5 into main Jul 15, 2026
30 checks passed
@allxsmith
allxsmith deleted the claude/bestax-security-review-4j1549 branch July 15, 2026 02:47
github-actions Bot pushed a commit that referenced this pull request Jul 15, 2026
## [3.3.2](https://github.com/allxsmith/bestax/compare/create-bestax@3.3.1...create-bestax@3.3.2) (2026-07-15)

### Bug Fixes

* **bulma-ui:** accept router props like `to` on Navbar.Item without casts ([#311](#311)) ([b78856b](b78856b)), closes [#306](#306)
* **create-bestax:** reject dot-only project names, pin icon versions, bundle bestax-icons skill ([#310](#310)) ([ddff8e5](ddff8e5))
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.3.2 🎉

The release is available on:

Your semantic-release bot 📦🚀

github-actions Bot pushed a commit that referenced this pull request Jul 20, 2026
# [5.7.0](https://github.com/allxsmith/bestax/compare/@allxsmith/bestax-bulma@5.6.2...@allxsmith/bestax-bulma@5.7.0) (2026-07-20)

### Bug Fixes

* **create-bestax:** reject dot-only project names, pin icon versions, bundle bestax-icons skill ([#310](#310)) ([ddff8e5](ddff8e5))
* **create-bestax:** skills-sync conformance gate + theming skill reference backfill ([#326](#326)) ([9584133](9584133)), closes [#285](#285)

### Features

* **bulma-ui:** compound (dot-notation) sub-components for all parent/child families via shared withSubComponents helper ([#331](#331)) ([07516c5](07516c5))
* **create-bestax:** add bestax-optimize skill for shrinking built CSS ([#329](#329)) ([f597b9f](f597b9f))
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 5.7.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

github-actions Bot pushed a commit that referenced this pull request Jul 20, 2026
# 1.0.0 (2026-07-20)

* 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)
* **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:** 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:** 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:** improve npm package discoverability with optimized keywords and badges ([#72](#72)) ([8c7a696](8c7a696))
* **bulma-ui:** Initial semantic release changes ([b78d785](b78d785))
* **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:** 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:** 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:** 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:** skills-sync conformance gate + theming skill reference backfill ([#326](#326)) ([9584133](9584133)), closes [#285](#285)
* **create-bestax:** synchronize version with bestax-bulma to 2.4.0 ([623ee79](623ee79)), closes [#96](#96)
* **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)
* **docs:** correct Content Signals syntax in robots.txt ([#134](#134)) ([85dd9de](85dd9de))
* **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:** improve homepage hero layout and button spacing ([5f7a5a7](5f7a5a7))
* **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:** 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)

### 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-migrate:** react-bulma-components → bestax-bulma codemod CLI, skill, and docs ([#333](#333)) ([e04a12b](e04a12b)), closes [#1e6b99](https://github.com/allxsmith/bestax/issues/1e6b99)
* **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:** 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))
* **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 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:** 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:** scaffold-aware CLAUDE.md with setup facts and house style ([#271](#271)) ([c1681b0](c1681b0))
* **docs:** add Google Analytics tracking for usage insights ([#68](#68)) ([90ab951](90ab951))
* **docs:** add pronunciation guide and dark mode support ([#58](#58)) ([48a8916](48a8916))
* **docs:** migrate from GitHub Pages to Cloudflare Pages ([#132](#132)) ([2154672](2154672)), closes [#131](#131)
* **form:** add Datepicker, Timepicker, and Datetimepicker components ([c6684e6](c6684e6))

### BREAKING CHANGES

* 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
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 1.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

bestax-release-bot Bot pushed a commit that referenced this pull request Aug 12, 2026
# 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
@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 1.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

bestax-release-bot Bot pushed a commit that referenced this pull request Sep 20, 2026
# 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…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants