Skip to content

docs: dual-audience custom-component skill, helper API pages, drift fixes - #268

Merged
allxsmith merged 5 commits into
mainfrom
feat/ai-enrichment-skills
Jul 11, 2026
Merged

allxsmith merged 5 commits into
mainfrom
feat/ai-enrichment-skills

Conversation

@allxsmith

@allxsmith allxsmith commented Jul 10, 2026 •

Copy link
Copy Markdown
Owner

Description

Part of the AI-enrichment plan (PR 2): fix guidance that was actively wrong for AI agents, and
make the custom-component skill work for its larger audience — app developers who got it from
npm create bestax and cannot follow monorepo instructions.

Affected package(s):

  • bulma-ui (@allxsmith/bestax-bulma) — skills content + CLAUDE.md pointer (no runtime code)
  • create-bestax (create-bestax) — picks the skill up automatically on its next build (sync-skills)
  • docs (@allxsmith/bestax-docs) — two new helper API pages, skill page intro

Related Issue(s)

Refs #263. Also fixes item 7 of #266 (the css-variables Theme-override claim).

Type of Change

  • Documentation
  • Bug fix (drift/incorrect guidance in shipped skill content)

What changed

bestax-custom-component is now dual-audience, app-context first

  • SKILL.md (389 → 159 lines) opens with a "Which context are you in?" fork: monorepo →
    references/library-contributor.md (new file, the old walkthrough moved verbatim);
    app → the new app path: public package imports, composition-first, and a styling ladder
    (helper props → plain CSS on --bulma-* vars with component-scoped custom props → optional
    npm i -D sass for the full register-vars pattern, which works in a Vite app because bulma
    is a runtime dep of the library). States plainly that scaffolded apps have no jest/storybook.
  • New examples/stat-card.tsx app-side worked example.

Drift fixes (wrong guidance costs agents review rounds)

Applied to the moved contributor walkthrough:

  • "Components use forwardRef" → use it when consumers need the DOM node; match folder
    siblings (reality: ~77 React.FC vs ~28 forwardRef files).
  • Story template now imports @storybook/react-vite (68/78 real stories; @storybook/react
    was drift) and carries description on every argType (enforced by the meta-test in ci: add conformance gates for house conventions (listings, docs sections, SCSS, stories, inline-style) #267).
  • Test template gains the required ConfigProvider classPrefix test (it was missing — a
    99%-coverage trap).
  • validSizes trap inlined as a comment on the size prop; SCSS section now says register
    all themable values (durations/offsets too), prefer Bulma tokens
    (cv.getVar('radius-rounded'), never 9999px), scheme-aware colors for dark mode.
  • Docs-page template upgraded to the avatar.md house structure (Accessibility + footer
    sections; frontmatter title: is load-bearing for gen:catalog).

Corrected a false claim in the theming skill

css-variables.md said the new avatar/badge vars could be overridden via a wrapping Theme's
bulmaVars — they can't (register-vars declares them on the component's own selector, which
beats inheritance). Now shows the working override paths. (#266 item 7)

Helpers are now discoverable

New API pages helpers/useprefixedclassnames.md (+ prefixedClassNames,
createPrefixedClassNames) and helpers/valid-values.md (all 18 valid* constants, the
(typeof validColors)[number] idiom, and the validSizes-vs-element-size trap). The generated
component catalog picks both up (85 → 87 entries), so agents consuming the catalog can now
find the exact primitives the skill tells them to import. Drive-by: fixed an unterminated
import quote in classnames.md.

Checklist

  • My code follows the project style guidelines
  • I have performed a self-review of my code
  • I have added/updated documentation as needed
  • All new and existing tests passed
  • The affected CLAUDE.md files are updated (bulma-ui walkthrough pointer)

Test plan

  • pnpm run gen:catalog:check (catalog regenerated, 87 components)
  • pnpm run format:check
  • All facts verified against source: public exports in bulma-ui/src/index.ts, helper
    signatures in src/helpers/classNames.ts, the 18 constants in bulmaClassHelpers.ts,
    register-vars selectors in _avatar.scss/_badge.scss, vite-ts template contents
  • Follow-up (deferred): refresh bulma-ui/src/skill-examples/ showcase with the StatCard
    example per skills/CLAUDE.md

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added new helper reference pages for usePrefixedClassNames and added documentation for valid-value constants (e.g., valid colors/sizes/viewports).
    • Corrected a TypeScript import snippet in the class name helper docs.
    • Expanded custom-component guidance for both app usage and monorepo contribution workflows, including updated library contributor instructions and refreshed component catalog references.
    • Clarified theme/CSS variable override precedence for component variables, including import guidance for CSS-variable usage.
  • Examples
    • Added a worked StatCard example demonstrating Bulma helper props and class prefix behavior.

allxsmith added 3 commits July 9, 2026 21:18
…app-context first

Moves the monorepo walkthrough to references/library-contributor.md and fixes template
drift: forwardRef guidance, @storybook/react-vite import, required ConfigProvider prefix
test, validSizes trap comment, SCSS register-everything rule, docs footer sections.
…-registered vars

A wrapping Theme's bulmaVars cannot override vars that register-vars declares on the
component's own selector; show the working override paths instead.
Makes the classname-prefix helpers and the 18 valid* arrays discoverable in the API docs
and the generated catalog (85 -> 87 entries). Also fixes an unterminated import quote in
classnames.md.
@coderabbitai

coderabbitai Bot commented Jul 10, 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: c419ab35-d303-43ba-9cdd-dc35386233c4

📥 Commits

Reviewing files that changed from the base of the PR and between 2ddb39b and d97de20.

📒 Files selected for processing (1)
  • skills/bestax-custom-component/examples/stat-card.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • skills/bestax-custom-component/examples/stat-card.tsx

Walkthrough

Updates custom-component guidance for app and monorepo workflows, adds a StatCard example and contributor reference, expands helper API documentation, and clarifies component-level theming variable overrides.

Changes

Custom component guidance

Layer / File(s) Summary
App-side custom component workflow
docs/docs/skills/custom-component.mdx, skills/README.md, skills/bestax-custom-component/*
Reframes the skill around app composition, Bulma helpers, prefixed classes, layered styling, testing, and the new StatCard example.
Monorepo contributor reference
bulma-ui/CLAUDE.md, skills/bestax-custom-component/references/library-contributor.md, skills/bestax-custom-component/references/patterns.md, skills/bestax-custom-component/references/api.md
Adds monorepo component, SCSS, Storybook, test, documentation, wiring, build, and visual verification guidance.
Helper API and catalog documentation
docs/docs/api/helpers/*, skills/bestax-custom-component/references/component-catalog.md
Documents prefixed class-name utilities and valid-value constants, fixes a classNames import example, and updates helper catalog entries.
Component variable override guidance
skills/bestax-theming/references/css-variables.md
Documents component-level CSS variable precedence and scoped override locations.

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

🚥 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 summarizes the main changes: dual-audience custom-component docs, new helper API pages, and drift fixes.
Description check ✅ Passed The description covers the required sections: summary, affected packages, related issues, change type, checklist, screenshots context, and test plan.
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 feat/ai-enrichment-skills

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.

skills/bestax-custom-component/examples/stat-card.tsx

Parsing error: "parserOptions.project" has been provided for @typescript-eslint/parser.
The file was not found in any of the provided project(s): skills/bestax-custom-component/examples/stat-card.tsx


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

@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://926f36f1.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: 6

🧹 Nitpick comments (1)
skills/bestax-custom-component/references/library-contributor.md (1)

34-36: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Import BulmaClassesProps as a type.

The template currently imports it in the value import list. Use an inline type specifier or a separate import type statement so copied examples remain compatible with strict TypeScript settings, matching stat-card.tsx.

🤖 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 `@skills/bestax-custom-component/references/library-contributor.md` around
lines 34 - 36, Import BulmaClassesProps as a type-only import in the component
template, using an inline type specifier or separate import type statement,
while keeping useBulmaClasses as a value import; match the pattern used in
stat-card.tsx.
🤖 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 `@docs/docs/api/helpers/useprefixedclassnames.md`:
- Around line 79-89: Add an explicit type-only React import for the HTML
attribute type used by the ChipProps interface, and update the interface to
reference that imported type while preserving the existing BulmaClassesProps
extension.
- Around line 56-69: Update the createPrefixedClassNames factory documentation
to declare a typed rest parameter using ClassValue[] instead of an untyped args
tuple. Correct the return descriptions so usePrefixedClassNames and
prefixedClassNames return a string, while createPrefixedClassNames returns a
classNames function.

In `@skills/bestax-custom-component/examples/stat-card.tsx`:
- Around line 83-99: The documented StatCard styling only applies accent
overrides for success and danger, despite StatCardProps.color supporting all
Bulma colors. Update the optional StatCard CSS selectors to map link, info, and
warning to their corresponding --bulma-* tokens alongside the existing variants,
or revise the StatCardProps.color contract to permit only the currently
supported colors.

In `@skills/bestax-custom-component/references/component-catalog.md`:
- Line 22: Update the introductory count in the component catalog to clarify
that 87 refers to all documented API entries, including 81 components and six
helper APIs; replace “87 documented components” with “87 documented API entries”
or explicitly state the breakdown.

In `@skills/bestax-custom-component/references/library-contributor.md`:
- Around line 280-283: Add sidebar_position to the MyComponent documentation
frontmatter template alongside title and sidebar_label, using the repository’s
expected positioning format.
- Line 13: Update the file-layout code fence in the library contributor
documentation to specify an explicit language, using ```text or ```plaintext
instead of an unlabeled fence.

---

Nitpick comments:
In `@skills/bestax-custom-component/references/library-contributor.md`:
- Around line 34-36: Import BulmaClassesProps as a type-only import in the
component template, using an inline type specifier or separate import type
statement, while keeping useBulmaClasses as a value import; match the pattern
used in stat-card.tsx.
🪄 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: ec01f336-4fbc-4399-a657-3a93a5104a9c

📥 Commits

Reviewing files that changed from the base of the PR and between 306e3cb and 2ddb39b.

📒 Files selected for processing (13)
  • bulma-ui/CLAUDE.md
  • docs/docs/api/helpers/classnames.md
  • docs/docs/api/helpers/useprefixedclassnames.md
  • docs/docs/api/helpers/valid-values.md
  • docs/docs/skills/custom-component.mdx
  • skills/README.md
  • skills/bestax-custom-component/SKILL.md
  • skills/bestax-custom-component/examples/stat-card.tsx
  • skills/bestax-custom-component/references/api.md
  • skills/bestax-custom-component/references/component-catalog.md
  • skills/bestax-custom-component/references/library-contributor.md
  • skills/bestax-custom-component/references/patterns.md
  • skills/bestax-theming/references/css-variables.md

Comment on lines +56 to +69
// Factory: returns a classNames function bound to a fixed prefix
function createPrefixedClassNames(classPrefix: string): (...args) => string; // args: same union as classNames
```

### Parameters

| Function | Parameter | Type | Description |
| -------------------------- | ------------- | --------------------- | -------------------------------------------------------------------------------------------------- |
| `usePrefixedClassNames` | `...args` | same as `classNames` | Class values to join. The `classPrefix` from `ConfigProvider` is applied to every resulting class. |
| `prefixedClassNames` | `prefix` | `string \| undefined` | Prefix to apply. When `undefined` (or empty), behaves exactly like `classNames`. |
| `prefixedClassNames` | `...args` | same as `classNames` | Class values to join. |
| `createPrefixedClassNames` | `classPrefix` | `string` | Prefix baked into the returned function. |

All three return a space-separated string of unique class names. With no `ConfigProvider` (or no `classPrefix` set), `usePrefixedClassNames` produces the same output as `classNames`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fix the factory signature and return description. createPrefixedClassNames should use a typed rest parameter (...args: ClassValue[]), and the summary should say the hook/plain function return a string while the factory returns a function.

🤖 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 `@docs/docs/api/helpers/useprefixedclassnames.md` around lines 56 - 69, Update
the createPrefixedClassNames factory documentation to declare a typed rest
parameter using ClassValue[] instead of an untyped args tuple. Correct the
return descriptions so usePrefixedClassNames and prefixedClassNames return a
string, while createPrefixedClassNames returns a classNames function.

Comment on lines +79 to +89
```tsx
import {
usePrefixedClassNames,
useBulmaClasses,
classNames,
type BulmaClassesProps,
} from '@allxsmith/bestax-bulma';

interface ChipProps
extends React.HTMLAttributes<HTMLSpanElement>, BulmaClassesProps {
color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger';

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

sed -n '1,180p' docs/docs/api/helpers/useprefixedclassnames.md

Repository: allxsmith/bestax

Length of output: 5897


Import the React HTML attribute type used by the example. React.HTMLAttributes needs an explicit type import here, otherwise the snippet isn’t self-contained in a standard TypeScript setup.

 import {
   usePrefixedClassNames,
   useBulmaClasses,
   classNames,
   type BulmaClassesProps,
 } from '`@allxsmith/bestax-bulma`';
+import type { HTMLAttributes } from 'react';

 interface ChipProps
-  extends React.HTMLAttributes<HTMLSpanElement>, BulmaClassesProps {
+  extends HTMLAttributes<HTMLSpanElement>, BulmaClassesProps {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```tsx
import {
usePrefixedClassNames,
useBulmaClasses,
classNames,
type BulmaClassesProps,
} from '@allxsmith/bestax-bulma';
interface ChipProps
extends React.HTMLAttributes<HTMLSpanElement>, BulmaClassesProps {
color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger';
import {
usePrefixedClassNames,
useBulmaClasses,
classNames,
type BulmaClassesProps,
} from '`@allxsmith/bestax-bulma`';
import type { HTMLAttributes } from 'react';
interface ChipProps
extends HTMLAttributes<HTMLSpanElement>, BulmaClassesProps {
color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger';
🤖 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 `@docs/docs/api/helpers/useprefixedclassnames.md` around lines 79 - 89, Add an
explicit type-only React import for the HTML attribute type used by the
ChipProps interface, and update the interface to reference that imported type
while preserving the existing BulmaClassesProps extension.

Source: Coding guidelines

Comment on lines +83 to +99
// Rung 2 (optional) — src/components/StatCard.css, imported from this file:
//
// .statcard {
// /* Component-scoped custom props initialized from Bulma tokens, so any
// ancestor (or <Theme>) can re-theme the card by overriding them. */
// --statcard-accent: var(--bulma-primary);
// --statcard-radius: var(--bulma-radius);
// border-left: 0.25rem solid var(--statcard-accent);
// border-radius: var(--statcard-radius);
// }
// .statcard.is-success { --statcard-accent: var(--bulma-success); }
// .statcard.is-danger { --statcard-accent: var(--bulma-danger); }
//
// Only --bulma-*-derived values — never literal colors — so dark mode and
// Theme overrides keep working. Caveat: if the app uses the prefixed CSS
// flavor / ConfigProvider classPrefix, usePrefixedClassNames renders
// `bestax-statcard`; adjust the selectors (or use plain classNames).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Apply the accent for every declared color.

StatCardProps.color promises a Bulma color for both the icon and accent, but the optional CSS only overrides success and danger; link, info, and warning keep the primary accent.

Add selectors for the remaining variants or narrow the documented 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 `@skills/bestax-custom-component/examples/stat-card.tsx` around lines 83 - 99,
The documented StatCard styling only applies accent overrides for success and
danger, despite StatCardProps.color supporting all Bulma colors. Update the
optional StatCard CSS selectors to map link, info, and warning to their
corresponding --bulma-* tokens alongside the existing variants, or revise the
StatCardProps.color contract to permit only the currently supported colors.

escape-hatch variants of the convenience wrappers above them; see the Form docs.

85 documented components. Generated from the API docs — every exported
87 documented components. Generated from the API docs — every exported

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clarify what the 87 count includes.

The catalog contains 81 component entries plus six helper API entries, so “87 documented components” is inaccurate. Change this to “87 documented API entries” or state the component/helper breakdown.

🤖 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 `@skills/bestax-custom-component/references/component-catalog.md` at line 22,
Update the introductory count in the component catalog to clarify that 87 refers
to all documented API entries, including 81 components and six helper APIs;
replace “87 documented components” with “87 documented API entries” or
explicitly state the breakdown.

Every custom component has five files. Mirror the existing names exactly (PascalCase TSX,
`_kebab.scss` partial):

```

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Specify the language for the file-layout code fence.

Use ```text (or ```plaintext) instead of an unlabeled fence to satisfy Markdown linting.

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 13-13: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 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 `@skills/bestax-custom-component/references/library-contributor.md` at line 13,
Update the file-layout code fence in the library contributor documentation to
specify an explicit language, using ```text or ```plaintext instead of an
unlabeled fence.

Source: Linters/SAST tools

Comment on lines +280 to +283
---
title: MyComponent
sidebar_label: MyComponent
---

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add sidebar_position to the documentation template.

Repository guidance requires doc pages to include expected frontmatter, especially title and sidebar_position; this template only demonstrates title and sidebar_label.

🤖 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 `@skills/bestax-custom-component/references/library-contributor.md` around
lines 280 - 283, Add sidebar_position to the MyComponent documentation
frontmatter template alongside title and sidebar_label, using the repository’s
expected positioning format.

Source: Coding guidelines

@allxsmith allxsmith added the deep-review label Jul 11, 2026 — with Claude
Comment on lines +72 to +77
<Title size="6" textColor="grey" mb="1">
{label}
</Title>
<Title size="3" mb="0">
{value}
</Title>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Worked example emits misused, out-of-order headings — 🟡 Minor · Accessibility

What: Title renders a real heading element h{size} whenever size is set (only as="p" opts out — see Title.tsx: Tag = element === 'p' ? 'p' : validSize ? \h${validSize}` : element). So this card produces

Active users
followed by

12,481

` — the metric label becomes a deeper heading than the value, and the numeric value is marked up as a section heading it isn't.

Why it matters: This is a shipped skill example that agents copy verbatim, and the skill leans hard on accessibility. A dashboard of these StatCards floods the accessibility tree / document outline with dozens of out-of-order h6→h3 headings (heading-level jumps flagged by axe/WCAG 1.3.1), and screen-reader users navigating by heading land on data values announced as headings. Title here is being used purely for typographic scale.

Fix: Render both as <p> with as="p" — the is-{size} styling class is still applied, so the visual result is identical without the heading semantics:

Suggested change
<Title size="6" textColor="grey" mb="1">
{label}
</Title>
<Title size="3" mb="0">
{value}
</Title>
<Title as="p" size="6" textColor="grey" mb="1">
{label}
</Title>
<Title as="p" size="3" mb="0">
{value}
</Title>
Why the styling is preserved

Title always adds is-${validSize} to the class list regardless of the tag, and only switches the rendered element to <p> when as="p". <Title as="p" size="3"> → <p class="title is-3">, so the size/weight styling is unchanged — only the semantics change from <h3> to <p>.

@claude claude 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.

Deep review — 1 finding

# Severity Area Finding Location
1 🟡 Minor Accessibility Worked example uses Title size=… for typographic scale, so the label/value render as out-of-order <h6>/<h3> headings; pass as="p" skills/bestax-custom-component/examples/stat-card.tsx:72-77

Overall: This is a docs/skills-only change with no runtime code, and it is in good shape. I verified the load-bearing factual claims against source: the usePrefixedClassNames / prefixedClassNames / createPrefixedClassNames signatures (helpers/classNames.ts), all 18 valid* constants and their values (bulmaClassHelpers.ts), that every one of those constants is publicly re-exported (useBulmaClasses.tsx), the Icon/Title/Box props used in stat-card.tsx, and the corrected CSS-variable inheritance claim in css-variables.md (register-vars does declare --bulma-avatar-size on .avatar, so an inherited Theme value loses — the new text is right, the old was wrong). The catalog delta (85→87, ordering) and the fixed import quote in classnames.md are consistent. The only real defect is the heading-semantics issue in the copy-pasteable StatCard example, which agents will propagate — worth fixing since the skill itself preaches accessibility.

🏄 Mellow, well-scoped cleanup swell, brah — the facts all hold water and the drift fixes are legit. Only ripple is that stat-card using headings as font-size dials; drop an as="p" on it and it is a clean ride to shore.

@allxsmith allxsmith added deep-review and removed deep-review labels Jul 11, 2026 — with Claude
Fixes the deep-review finding on #268: the copy-pasteable example used
bare <Title size> for visual scale, emitting h6/h3 headings that break
the document outline; as="p" keeps the scale without the semantics.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pohc8xLkdx4gwXkW3xd7up
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://5be34ab2.bestax.pages.dev

Copy link
Copy Markdown
Owner Author

@claude Full re-review of this PR at current head d97de20 (you have 60 turns, diff tools, and pnpm).

  1. git diff origin/main...HEAD and review adversarially for real defects — deep-review bar: factual accuracy of the skill/docs claims against the actual source (this PR is guidance consumed by AI agents, so wrong facts are the defect class that matters). Skip style nits.
  2. The deep review's stat-card heading finding was fixed in d97de20 — don't re-litigate.
  3. Per-item verdict (fixed / still valid / refutable) on the outstanding CodeRabbit threads: (a) createPrefixedClassNames factory signature/return descriptions (useprefixedclassnames.md:56-69); (b) type-only React import for ChipProps example (useprefixedclassnames.md:79-89); (c) stat-card CSS only themes success/danger while the color prop contract promises all Bulma colors (stat-card.tsx:83-99); (d) "87 documented components" vs 81 components + 6 helper APIs (component-catalog.md:22); (e) unlabeled code fence (library-contributor.md:13); (f) sidebar_position missing from the docs-page frontmatter template (library-contributor.md:280-283); (g) nit: BulmaClassesProps as type-only import (library-contributor.md:34-36).
  4. Verify the helper signatures/valid-value claims against bulma-ui/src/helpers/ where relevant.

Finish by updating your comment with a findings table and an overall ship/fix-first verdict.


Generated by Claude Code

@claude

claude Bot commented Jul 11, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 5m 6s —— View job


Re-review in progress

  • Gather context (gh pr diff 268 at head d97de20 — git diff origin/main...HEAD failed locally, shallow clone had no merge-base with origin/main)
  • Adversarial review for factual defects (skill/docs claims vs source)
  • Verdict on CodeRabbit thread (a) createPrefixedClassNames signature/return docs
  • Verdict on CodeRabbit thread (b) type-only React import for ChipProps
  • Verdict on CodeRabbit thread (c) stat-card CSS only themes success/danger
  • Verdict on CodeRabbit thread (d) "87 documented components" wording
  • Verdict on CodeRabbit thread (e) unlabeled code fence
  • Verdict on CodeRabbit thread (f) missing sidebar_position
  • Verdict on CodeRabbit thread (g) BulmaClassesProps type-only import nit
  • Verify helper signatures/valid-value claims against bulma-ui/src/helpers/
  • Post findings table + ship/fix-first verdict

Finalizing now.

@allxsmith allxsmith added deep-review and removed deep-review labels Jul 11, 2026 — with Claude
@allxsmith allxsmith added deep-review and removed deep-review labels Jul 11, 2026 — with Claude
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

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

@claude claude 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.

Deep review — 0 finding(s)

# Severity Area Finding Location
— — — No blocking defects found. —

Overall: This is a docs/skills-only change (no runtime code), and every load-bearing factual claim verifies against source. I checked the public exports the new templates import, all 18 valid* constant values, Title's as="p"+size behavior and Icon's prop surface, the @storybook/react-vite majority (71 vs 10 files), the ConfigProvider prefix test path/assertions, that bulma is a genuine runtime dependency (so the rung-3 in-app Sass claim holds), and that the css-variables.md correction is itself accurate — register-vars really does target .avatar/.badge's own selector, so a wrapping Theme's inherited value does lose to it. The catalog is at 87 with both new helper entries, and the new API pages are reachable via the autogenerated api sidebar. Riskiest surface is the gen:catalog:check gate — CI enforces it and the committed catalog already contains the two new entries, so it should be green. Nothing here needs a human to block on; the deferred skill-examples/ refresh is correctly called out as follow-up.

🏄 Total cruise, dude — this PR just reshapes the guidance and the docs, no gnarly runtime waves to wipe out on. Facts all line up clean against the source, so paddle it out to the human and let 'em squash-merge. Good to go.

@allxsmith
allxsmith merged commit fcfb04f into main Jul 11, 2026
20 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.2.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 5.4.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

@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

Copy link
Copy Markdown

🎉 This PR is included in version 1.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

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