Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
932b71d
feat: development environment
robsongajunior Jun 22, 2026
c217c3b
feat: azion deploy dev-webkit.azion.app
robsongajunior Jun 22, 2026
3549906
fix: order rules engine dev storybook
robsongajunior Jun 22, 2026
648b2d4
fix: repo cleanup, development base
robsongajunior Jun 23, 2026
425569b
fix: install updatinh the removed dependencies
robsongajunior Jun 23, 2026
a0963cc
chore: trigger
robsongajunior Jun 23, 2026
2cd5c88
fix: overline import path
robsongajunior Jun 23, 2026
d7a664b
refactor: remote data, template and layout exports prefix
robsongajunior Jun 24, 2026
5c894b5
fix: export content
robsongajunior Jun 24, 2026
1fcc89e
fix: equalizing the bucket prefix
robsongajunior Jun 24, 2026
69e5a0f
fix: run required check to dev opened pull requests
robsongajunior Jun 25, 2026
9ff5273
feat: add textarea and field-textarea (#657)
isaquebock Jun 25, 2026
2d84a7c
[ENG-46313] feat(webkit): add Skeleton loading placeholder (feedback)…
herbert-julio-azion Jun 25, 2026
55d9203
fix: storybook textarea group name
robsongajunior Jun 25, 2026
ee12ae8
fix: storybook textarea group name
robsongajunior Jun 25, 2026
745014d
feat(copy-button): Copy Button with Tooltip and icon transition fixes…
gabriel-lisboa-azion Jun 25, 2026
c246462
chore(commands): add /open-pr and /create-branch PR-workflow commands…
herbert-julio-azion Jun 25, 2026
6bf958b
[ENG-46314] feat(webkit): add Badge (content) (#663)
herbert-julio-azion Jun 25, 2026
9b65cd6
feat: add InputSelect composition (#647)
isaquebock Jun 25, 2026
90c0b77
[NO-ISSUE] chore(specs): default optional text props to empty string,…
herbert-julio-azion Jun 25, 2026
f227cf9
fix: removing GIT_PKG token from storybook action (#683)
robsongajunior Jun 26, 2026
6a58764
chore: update storybook README to trigger pipeline
robsongajunior Jun 26, 2026
e6cc6d8
docs(webkit): codify Show code pattern + flat-import rule (#665)
herbert-julio-azion Jun 26, 2026
618044f
[NO-ISSUE] docs: translate .claude/rules files to English (#673)
herbert-julio-azion Jun 26, 2026
45f7b12
[ENG-46310] feat(webkit): add Chip (inputs) (#664)
herbert-julio-azion Jun 26, 2026
ed990f4
docs(webkit): compound-api rule + TanStack table dependency exception…
herbert-julio-azion Jun 26, 2026
2235b4f
feat: add HelperText input primitive (#646)
isaquebock Jun 26, 2026
9ca8060
feat: InputText v2 + FieldText composition (#648)
isaquebock Jun 26, 2026
e5858cb
feat: InputPassword + FieldPassword composition (#649)
isaquebock Jun 26, 2026
33d6c5b
feat(webkit): sync Global Header structure and chrome with updated Fi…
gabriel-lisboa-azion Jun 26, 2026
15b8427
[NO-ISSUE] feat(webkit): add EmptyState component (#674)
herbert-julio-azion Jun 26, 2026
dc6f8fe
[NO-ISSUE] chore(webkit): drop per-component package.json + dev dts s…
robsongajunior Jun 26, 2026
3e14a5e
feat: refine input-switch and field-switch with documented stories (#…
isaquebock Jun 26, 2026
dc2c882
feat: add input-number component (#654)
isaquebock Jun 26, 2026
ddc8fe6
[ENG-46315] feat(webkit): add Toast (feedback) (#668)
herbert-julio-azion Jun 27, 2026
9d34406
[NO-ISSUE] chore: add audit-fix skill for pnpm audit remediation (#689)
robsongajunior Jun 28, 2026
2592a6f
[NO-ISSUE] chore: bump pnpm to 10.34.4 to clear high-severity audit a…
robsongajunior Jun 28, 2026
9e8f7d8
Fix/checkbox glitch (#669)
gabriel-lisboa-azion Jun 28, 2026
a835ceb
[ENG-46312] feat(webkit): add Divider (layout) (#678)
herbert-julio-azion Jun 28, 2026
ed384e5
[NO-ISSUE] docs: add standalone root export rule for composition comp…
robsongajunior Jun 28, 2026
97dd95b
[NO-ISSUE] feat(webkit): add tree-shakeable root and select sub-compo…
robsongajunior Jun 28, 2026
1ae86f3
feat: add indeterminate state to Checkbox and align with Figma (#675)
isaquebock Jun 29, 2026
abb7553
chore(storybook): enforce runnable "Show code" SFC via shared helper …
herbert-julio-azion Jun 29, 2026
7817a13
feat: add MultiSelect composition (#677)
isaquebock Jun 29, 2026
22163d2
[ENG-46087] feat(webkit): replace data-table with composable Table + …
herbert-julio-azion Jun 29, 2026
263157d
[ENG-46317] feat(webkit): add Calendar component (#672)
herbert-julio-azion Jun 29, 2026
b0b1133
feat: align radio layout and add unchecked hover state (#676)
isaquebock Jun 29, 2026
df6b5e1
[NO-ISSUE] feat: adding theme premium linear shimmer for Skeleton (#686)
gabriel-lisboa-azion Jun 29, 2026
3a867d1
[ENG-46485] feat(webkit): add ProgressBar (feedback) (#687)
gabriel-lisboa-azion Jun 29, 2026
a78f376
[NO-ISSUE] style(theme): alias typography tokens and set 6xl to 56px …
gabriel-lisboa-azion Jun 30, 2026
fc9acbb
[NO-ISSUE] feat!: replace input dropdown and overlay dropdown-menu wi…
isaquebock Jun 30, 2026
ade01c4
[ENG-46315] refactor(webkit): align Toast UI with Figma using design …
herbert-julio-azion Jun 30, 2026
fd5ef46
feat: log view component with spect updating with "code" category (#699)
robsongajunior Jun 30, 2026
361f296
[NO-ISSUE] style(webkit): reduce breadcrumb-item height and label siz…
gabriel-lisboa-azion Jun 30, 2026
8e0f2bd
[ENG-46316] feat(webkit): add PickList (data) (#680)
herbert-julio-azion Jun 30, 2026
a7f6ddb
[ENG-46312] style(webkit): align Divider label to Figma overline typo…
herbert-julio-azion Jun 30, 2026
4f33d0f
[ENG-46487] feat(webkit): add Flow (data) (#682)
herbert-julio-azion Jun 30, 2026
8b9bdda
[NO-ISSUE] feat(webkit): add CodeBlock component (#702)
gabriel-lisboa-azion Jun 30, 2026
d916ee9
feat: adding CopyButton component, storybook storie (#708)
robsongajunior Jul 1, 2026
a2ff20d
[NO-ISSUE] chore: add /include-icons command (#697)
gabriel-lisboa-azion Jul 1, 2026
f1442a1
[NO-ISSUE] refactor(webkit): use CopyButton in CodeBlock (#713)
gabriel-lisboa-azion Jul 1, 2026
c1bc62f
[NO-ISSUE] feat(webkit): add loading variant to LogView (#712)
gabriel-lisboa-azion Jul 1, 2026
3e24ae3
[NO-ISSUE] feat(webkit): add Popover (overlay) (#711)
gabriel-lisboa-azion Jul 1, 2026
f6e5268
[NO-ISSUE] refactor(webkit)!: remove empty-results-block in favor of …
herbert-julio-azion Jul 1, 2026
b8ee342
[NO-ISSUE] fix(webkit): apply loading as a disabled visual state with…
gabriel-lisboa-azion Jul 1, 2026
f4cddb3
[NO-ISSUE] feat(icons): add colored brand icons (ai-*-cor) via CSS cl…
gabriel-lisboa-azion Jul 2, 2026
f65f1a1
[ENG-46318] feat(webkit): add SplitButton (actions) (#681)
herbert-julio-azion Jul 2, 2026
41226fe
[ENG-46310] feat(webkit): add clickable prop and click event to Chip …
herbert-julio-azion Jul 2, 2026
c7ca8d8
[NO-ISSUE] refactor: replace Label Required tag with inline * (Requir…
isaquebock Jul 3, 2026
d005de3
refactor: rework textarea layout to inline-flex and refresh field-tex…
isaquebock Jul 3, 2026
2cc6802
[ENG-46087] feat(webkit): data table (toolbar, filters, animation) + …
herbert-julio-azion Jul 3, 2026
648a648
[ENG-46317] feat(webkit): evolve Calendar into a date-range picker (#…
herbert-julio-azion Jul 7, 2026
2c13512
[NO-ISSUE] fix: resolve all pnpm audit advisories and strengthen the …
robsongajunior Jul 7, 2026
f804741
fix: remove azion lib v3 from package.json (#725)
robsongajunior Jul 7, 2026
5a479d9
[NO-ISSUE] fix: resolve prettier format and vue-tsc type-check CI fai…
robsongajunior Jul 7, 2026
7819353
[ENG-46318] fix(webkit): disable SplitButton menu toggle while loadin…
herbert-julio-azion Jul 7, 2026
bbecf2a
[NO-ISSUE] feat: rework InputGroup to composition (PrimeVue-style) wi…
isaquebock Jul 7, 2026
10e3642
feat(webkit): add accordion component (#693)
robsongajunior Jul 7, 2026
bfbebd3
[NO-ISSUE] feat(webkit): add Item inline kind, Item.List, and CardBox…
gabriel-lisboa-azion Jul 7, 2026
c62b6c9
docs: DOC_LINTS — every lint in the stack, wrong ❌ vs. correct && cle…
robsongajunior Jul 8, 2026
b4c9550
chore(storybook): storybook docs standard tooling + event-payloads ru…
herbert-julio-azion Jul 9, 2026
f12bae1
refactor(webkit)!: inputs stories standardized + chip emits (event, l…
herbert-julio-azion Jul 9, 2026
1ca235b
[ENG-46633] refactor(webkit)!: data stories standardized + table/pick…
herbert-julio-azion Jul 9, 2026
4c0fb5a
[ENG-46634] refactor(webkit)!: navigation/overlay/actions stories sta…
herbert-julio-azion Jul 9, 2026
5165735
refactor(storybook): layout/code/foundations/utils stories standardiz…
herbert-julio-azion Jul 9, 2026
36f8653
refactor(storybook): content + feedback stories standardized (#738)
herbert-julio-azion Jul 9, 2026
f024dd8
[ENG-46636] refactor(webkit)!: templates stories standardized + deplo…
herbert-julio-azion Jul 9, 2026
b932277
fix: three-layer test architecture and the defects it surfaced (#728)
robsongajunior Jul 13, 2026
5e37f72
chore: delete .github/CODEOWNERS (#753)
robsongajunior Jul 14, 2026
3179c03
[NO-ISSUE] feat(webkit): add theme-switcher segmented control (#747)
gabriel-lisboa-azion Jul 14, 2026
4fc506e
chore(deps): bump dorny/paths-filter from 3.0.3 to 4.0.2 (#746)
dependabot[bot] Jul 16, 2026
1a52f4f
chore(deps): bump actions/cache from 4.3.0 to 6.1.0 (#745)
dependabot[bot] Jul 16, 2026
82c45b3
chore(deps): bump actions/setup-node from 4.4.0 to 6.4.0 (#744)
dependabot[bot] Jul 16, 2026
15d2fd6
chore(deps): bump pnpm/action-setup from 4.3.0 to 6.0.9 (#742)
dependabot[bot] Jul 16, 2026
32eab5f
chore(deps): bump actions/checkout from 4.3.1 to 7.0.0 (#743)
dependabot[bot] Jul 16, 2026
2a4084f
[NO-ISSUE] feat(webkit): adoption toolkit (in-package) + prop-vocabul…
herbert-julio-azion Jul 16, 2026
be75fde
[NO-ISSUE] ci(webkit): drop the diff-freshness condition from the tes…
herbert-julio-azion Jul 16, 2026
325d4c5
[NO-ISSUE] fix(webkit): use global white for button-highlight label t…
gabriel-lisboa-azion Jul 16, 2026
9374450
[NO-ISSUE] docs(storybook): document CardBox stories with regions + d…
gabriel-lisboa-azion Jul 16, 2026
ab1e7ae
fix: webkit change always run lint canarie (#755)
robsongajunior Jul 16, 2026
78cc23e
[NO-ISSUE] fix(webkit): add border to avatar initials variant (#750)
gabriel-lisboa-azion Jul 16, 2026
53e9d5e
feat(webkit): add CodeBlock border prop + show file type in Icons doc…
gabriel-lisboa-azion Jul 16, 2026
3c1fbc7
[NO-ISSUE] feat(webkit): add Brand component consolidating the Azion …
gabriel-lisboa-azion Jul 16, 2026
a46b921
[NO-ISSUE] test(storybook): cover light theme, tablet and mobile in t…
robsongajunior Jul 20, 2026
a8bf011
[NO-ISSUE] refactor: theme cleanup, removing tailwind v3, primeflex. …
gabriel-lisboa-azion Jul 21, 2026
1017952
chore(deps): bump trufflesecurity/trufflehog (#763)
dependabot[bot] Jul 21, 2026
5d01f3a
chore(deps): bump actions/setup-node from 4.4.0 to 7.0.0 (#764)
dependabot[bot] Jul 21, 2026
461bd71
chore(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1 (#765)
dependabot[bot] Jul 21, 2026
f124f99
chore(deps): bump pnpm/action-setup from 4.3.0 to 6.0.9 (#766)
dependabot[bot] Jul 21, 2026
e2f9b5c
chore(deps): bump actions/checkout from 4.3.1 to 7.0.1 (#767)
dependabot[bot] Jul 21, 2026
538e46f
[NO-ISSUE] feat(webkit): adoption skill bundle (13 skills) + init har…
herbert-julio-azion Jul 21, 2026
fad2c6f
fix: mcp hono server overwrite version (#770)
robsongajunior Jul 21, 2026
07cc52c
chore: theme/icons version sync (#769)
robsongajunior Jul 21, 2026
a3d56d3
[NO-ISSUE] ci: run governance once per commit (drop push trigger on d…
robsongajunior Jul 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
13 changes: 4 additions & 9 deletions .claude/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ pnpm storybook:dev
pnpm storybook:build
pnpm storybook:preview
pnpm icons:build
pnpm webkit:build:dts
```

## 4) Where to change what
Expand Down Expand Up @@ -96,10 +95,7 @@ Run the minimum relevant validations for the scope of your change.
- `pnpm webkit:lint`
- `pnpm webkit:type-check`
- `pnpm webkit:type-coverage`
- `pnpm webkit:build:dts`
- `pnpm storybook:build`
- Other webkit typings/API surface change:
- `pnpm webkit:build:dts`

If a full validation is too expensive, run targeted checks and document what was/was not validated.

Expand Down Expand Up @@ -153,7 +149,7 @@ The legacy monolithic skill `skills/component-create.md` has been **removed**. N
| Focused skills (one per phase) | [`.claude/skills/`](.claude/skills/) — `spec-create`, `spec-validate`, `figma-discover`, `token-map`, `reuse-audit`, `structure-decide`, `component-scaffold`, `storybook-write`, `code-connect-write`, `validate-component`, `echo-report` |
| Isolated sub-agent prompts | [`.claude/agents/`](.claude/agents/) — one per skill, no chat history, no cross-talk |
| Immutable rules (injected verbatim) | [`.claude/rules/`](.claude/rules/) — `no-invention`, `migration`, `dependencies` |
| Centralized design docs (sources of truth) | [`.claude/docs/`](.claude/docs/) — `DESIGN.md` (tokens + animations + forbidden list), `COMPONENT_REQUIREMENTS.md` (component pattern + Storybook discipline), `PRIMEVUE_ABSTRACTION.md` |
| Centralized design docs (sources of truth) | [`.claude/docs/`](.claude/docs/) — `DESIGN.md` (tokens + animations + forbidden list), `COMPONENT_REQUIREMENTS.md` (component pattern + Storybook discipline) |
| Run logs (audit trail) | [`.claude/logs/<run-id>.jsonl`](.claude/logs/) |

**How `/component-create` runs:**
Expand All @@ -166,7 +162,7 @@ The legacy monolithic skill `skills/component-create.md` has been **removed**. N
6. **storybook-writer** — minimal stories only (Default + per kind + per size + Disabled).
7. **code-connect-writer** — skips if `@figma/code-connect` missing.
8. **echo-reporter** (cross-check) — independent parser; disagreement with the hook marks the run degraded.
9. **validate-component** — `pnpm webkit:lint && type-check && type-coverage && build:dts && storybook:build`.
9. **validate-component** — `pnpm webkit:lint && type-check && type-coverage && storybook:build`.
10. **Finalize** — `status: approved → implemented`, refresh checksum, close log.

**Why this is mandatory:** the previous workflow gave a single 749-line skill creative latitude — it sometimes added props, variants, or imports the user did not request. The new pipeline removes that latitude structurally: sub-agents see only the spec + their narrow rules; two hooks (`enforce-spec-exists`, `validate-spec-compliance`) verify the `.vue` matches the spec 1-to-1.
Expand Down Expand Up @@ -195,7 +191,7 @@ The trigger logic now lives in the orchestrator command [`.claude/commands/compo
- New components use `<script setup lang="ts">` with `defineProps<...>()`, `defineEmits<...>()`, `defineSlots<...>()` and `defineModel<...>()` where applicable. JSDoc on every public prop. Zero `any`. Zero `// @ts-ignore`.
- Variants are always exposed as `kind`. Sizes as `size` (`'small' | 'medium' | 'large'`). Boolean state props have no `is`/`has` prefix.
- Typography is **always** applied via the generated class from DESIGN.md (`text-heading-md`, `text-body-sm`, etc.). Never `text-[length:var(--text-*)]`, `leading-*`, `tracking-*`, or `font-family` directly.
- Colors, spacing, max-width, and shape come from semantic `var(--*)` tokens. No hex, no Tailwind palette names (`bg-gray-*`), no PrimeVue color utilities (`text-color`, `surface-*`).
- Colors, spacing, max-width, and shape come from semantic `var(--*)` tokens. No hex, no Tailwind palette names (`bg-gray-*`), no external/legacy color utilities (`text-color`, `surface-*`).
- `defineOptions({ name, inheritAttrs: false })` + `useAttrs()` + `rootClasses` that merges `attrs.class`. Never declare `class` in `defineProps`.
- `data-testid` hierarchical, BEM-style: root with fallback `'<category>-<name>'`, children with `${testId}__<part>` (two underscores).
- Composition Pattern only when the consumer needs to swap the order or omit parts (Dialog, Card composto, Tabs, Accordion, DropdownMenu, Sheet/Drawer, Form). When in doubt, stay monolithic. When applying it, ship the complete shadcn-vue anatomy (e.g. Dialog = Root + Trigger + Portal + Overlay + Content + Title + Description + Close).
Expand All @@ -216,7 +212,6 @@ Uses Storybook features fully: `argTypes` (with `control`, `description`, `table
pnpm webkit:lint
pnpm webkit:type-check
pnpm webkit:type-coverage
pnpm webkit:build:dts
pnpm storybook:build
```

Expand All @@ -226,7 +221,7 @@ pnpm storybook:build
- Adding hex colors, raw typography classes, or Tailwind palette names "until the theme catches up". Register a theme gap with `TODO: tokenizar` instead.
- Applying Composition Pattern reflexively. Use the decision rule: "does the consumer need to swap order or omit parts?"
- Removing `focus-visible`, `aria-*`, `data-testid`, `disabled` HTML, or `<a>`/`<button>` polymorphism to simplify code.
- Editing `.claude/docs/DESIGN.md`, `COMPONENT_REQUIREMENTS.md`, or `PRIMEVUE_ABSTRACTION.md` without explicit human approval (these are sources of truth).
- Editing `.claude/docs/DESIGN.md` or `COMPONENT_REQUIREMENTS.md` without explicit human approval (these are sources of truth).

For deeper, package-specific instructions, agents should also read [`packages/webkit/AGENTS.md`](packages/webkit/AGENTS.md) when working inside `packages/webkit/`.

Expand Down
70 changes: 70 additions & 0 deletions .claude/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# `.claude/` — governance system: folder map & index

Everything that makes the design system's standards apply by construction and block off-
standard code. This is the entry-point map; each area links to its own index.

## Folder layout

```
.claude/
├── rules/ # the 23 construction standards (one .md each) — see rules/README.md
│ └── README.md # ↳ index (foundational/construction · general/webkit · enforcer)
├── hooks/ # write-time gates — exit 2 blocks (PreToolUse, except where noted)
│ ├── validate-authoring.mjs # blocks off-standard component authoring
│ ├── validate-spec-compliance.mjs # .vue must match its spec 1:1 (PostToolUse)
│ ├── validate-tokens.mjs # tokens only; no hex/palette/raw typography
│ ├── validate-references.mjs # no phantom imports / forbidden deps
│ ├── validate-story-source.mjs # runnable "Show code"
│ ├── enforce-spec-exists.mjs # no .vue without an approved spec
│ ├── enforce-component-create.mjs # authoring only via the pipeline
│ └── _lib/ # shared, single-source engines
│ ├── standards.mjs # the registry: rule ↔ enforcement + scope (general/webkit)
│ ├── authoring-checks.mjs # construction checks (one of FOUR shared engines: authoring, token, spec, story)
│ ├── prop-vocabulary.mjs # canonical prop dictionary
│ ├── spec.mjs # SFC/spec parsing
│ └── legacy-components.json # grandfather list
├── skills/ # executable playbooks (spec-create, component-scaffold, …)
├── agents/ # isolated sub-agents that run the skills — see agents/_README.md
├── commands/ # orchestrators (/component-create, /open-pr, …)
├── docs/ # internal sources of truth: DESIGN.md, COMPONENT_REQUIREMENTS.md
└── settings.json # hook registration + permissions

packages/webkit/ # the parts of the system that live in the package
├── scripts/check-authoring.mjs # CI ratchet — runs the four shared engines repo-wide
├── scripts/authoring-baseline.json # frozen debt; a new violation fails the PR
├── test/standards/invariant.test.mjs# the meta-check: rule ↔ enforcement can't drift
├── src/eslint-plugin/ # consumer lints (11 rules, all error)
├── src/mcp/ # MCP server (guides the AI to the right usage)
├── docs/GUIDELINES.md # consumer-facing styleguide (build & use)
└── catalog.json # generated manifest read by the lints + MCP
```

## Where each concern lives (index)

| Concern | Path |
|---|---|
| The standards (human) | [`rules/`](./rules/) → [`rules/README.md`](./rules/README.md) |
| Standard ↔ enforcement (machine) | [`hooks/_lib/standards.mjs`](./hooks/_lib/standards.mjs) |
| The check engine (hook + ratchet) | [`hooks/_lib/authoring-checks.mjs`](./hooks/_lib/authoring-checks.mjs) |
| Write-time gates | [`hooks/`](./hooks/) |
| CI ratchet + baseline | `packages/webkit/scripts/check-authoring.mjs` · `authoring-baseline.json` |
| The invariant (anti-drift) | `packages/webkit/test/standards/invariant.test.mjs` |
| Consumer lints | `packages/webkit/src/eslint-plugin/rules/*.js` |
| Creation pipeline | [`skills/`](./skills/) · [`agents/`](./agents/) · [`commands/`](./commands/) |
| Tokens (source of truth) | [`docs/DESIGN.md`](./docs/DESIGN.md) |
| Consumer styleguide | `packages/webkit/docs/GUIDELINES.md` |

## The standards flow (single source, no drift)

```
rules/<id>.md ──registered in──► hooks/_lib/standards.mjs ──scope: general|webkit
│ │
│ mechanizable check │ invariant test asserts the pairing
▼ ▼
hooks/_lib/authoring-checks.mjs ──used by──► validate-authoring.mjs (write-time)
└─used by──► scripts/check-authoring.mjs (CI ratchet)
```

One rule, one enforcement, two surfaces — the write-time hook and the CI ratchet run the
**same** engine, and `invariant.test.mjs` fails CI if a rule loses its gate (or vice-versa).
Nothing is advisory: every standard blocks the merge, automatically or by mandatory review.
57 changes: 35 additions & 22 deletions .claude/agents/_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,35 +29,48 @@ If anything is ambiguous, emit a `BLOCKED: <reason>` line and write no files.

## Catalog

| Sub-agent | Skill it executes | Reads (rules) | Writes |
|---|---|---|---|
| `spec-author.md` | `spec-create` | tokens, naming, dependencies, migration, storybook | `.specs/<name>.md` (draft) |
| `spec-validator.md` | `spec-validate` | tokens, naming | spec frontmatter only (status, checksum, last_updated) |
| `figma-extractor.md` | `figma-discover` | migration | stdout JSON only |
| `token-mapper.md` | `token-map` | tokens | stdout Markdown only |
| `reuse-auditor.md` | `reuse-audit` | dependencies | stdout JSON only |
| `structure-decider.md` | `structure-decide` | naming | stdout 2 lines only |
| `scaffolder.md` | `component-scaffold` | **no-invention, naming, bem-testid, tokens, accessibility, dependencies, migration** | `<name>.vue`, sub-components, `injection-key.ts`, local `package.json`, root `package.json#exports` |
| `storybook-writer.md` | `storybook-write` | naming, tokens, **storybook**, no-invention | `apps/storybook/src/stories/webkit/<category>/<Name>.stories.js` |
| `code-connect-writer.md` | `code-connect-write` | naming, migration | `<name>.figma.ts` |
| `echo-reporter.md` | `echo-report` | naming, tokens, storybook | stdout report only |
| Sub-agent | Skill it executes | Reads (rules) | Writes |
| ------------------------ | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| `spec-author.md` | `spec-create` | tokens, naming, dependencies, migration, storybook | `.specs/<name>.md` (draft) |
| `spec-validator.md` | `spec-validate` | tokens, naming | spec frontmatter only (status, checksum, last_updated) |
| `figma-extractor.md` | `figma-discover` | migration | stdout JSON only |
| `token-mapper.md` | `token-map` | tokens | stdout Markdown only |
| `reuse-auditor.md` | `reuse-audit` | dependencies | stdout JSON only |
| `structure-decider.md` | `structure-decide` | naming | stdout 2 lines only |
| `scaffolder.md` | `component-scaffold` | **no-invention, naming, component-structure, props, prop-vocabulary, v-model, emits, event-payloads, slots, composables, root-element, component-states, styling, tokens, accessibility, testid, dependencies, migration** | `<name>.vue`, sub-components, `injection-key.ts`, root `package.json#exports` |
| `storybook-writer.md` | `storybook-write` | naming, tokens, **storybook**, no-invention | `apps/storybook/src/stories/components/<category>/<PascalName>.stories.js` |
| `code-connect-writer.md` | `code-connect-write` | naming, migration | `<name>.figma.ts` |
| `echo-reporter.md` | `echo-report` | naming, tokens, storybook | stdout report only |

## Rules catalog ([.claude/rules/](../rules/))

| File | Purpose |
|---|---|
| `no-invention.md` | The hard prohibitions; the spec is the contract |
| `dependencies.md` | **No external positioning/animation libs.** CSS + Vue primitives only |
| `migration.md` | **Never inherit artifacts as-is.** Rewrite to our conventions |
| `styling.md` | **Classes inline on the root.** No JS class presets, no `<style>` block, variants via `data-*` |
| File | Purpose |
| ------------------------ | -------------------------------------------------------------------------------------------------- |
| `no-invention.md` | The hard prohibitions; the spec is the contract |
| `dependencies.md` | **No external positioning/animation libs.** CSS + Vue primitives only |
| `migration.md` | **Never inherit artifacts as-is.** Rewrite to our conventions |
| `styling.md` | **Classes inline on the root.** No JS class presets, no `<style>` block, variants via `data-*` |
| `component-structure.md` | Fixed folder layout + `<script setup>` section order |
| `props.md` | Typed `interface Props` + `withDefaults` + JSDoc; exported variant unions |
| `prop-vocabulary.md` | One canonical name/type/default per concept (`kind`, `size`, `disabled`…) |
| `v-model.md` | Two-way values via `defineModel` — controlled + uncontrolled, one macro |
| `emits.md` | Typed `defineEmits`, kebab names, model vs. activation |
| `event-payloads.md` | Activation events emit `(event, item)` — DOM event first |
| `slots.md` | Typed `defineSlots`, kebab names, fallback inside the slot |
| `composables.md` | `readonly` outward, `toValue` args, `onScopeDispose` cleanup; context composable |
| `root-element.md` | Own the root: polymorphism via `href`, `$attrs` forwarding, minimal `defineExpose` |
| `component-states.md` | Declared, rendered state surface (loading/empty/error via DS components) |
| `accessibility.md` | Role, keyboard, focus, `motion-reduce` — owned by the component |
| `testid.md` | `data-testid` derived `<category>-<name>` / `input-<name>`, overridable |
| `deprecation.md` | Mark `@deprecated` → one major → remove |
| `bundle-budget.md` | Per-entry budget recorded in `.size-limit.json`; automated CI gate pending — review holds the line |

## Source-of-truth docs ([.claude/docs/](../docs/))

| File | Purpose |
|---|---|
| `DESIGN.md` | Tokens (typography, spacing, container, shape, shadow, colors), animation catalog, forbidden list |
| File | Purpose |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `DESIGN.md` | Tokens (typography, spacing, container, shape, shadow, colors), animation catalog, forbidden list |
| `COMPONENT_REQUIREMENTS.md` | Component pattern: TypeScript, naming, slots, BEM data-testid, ARIA, Composition Pattern, Storybook discipline, Styling discipline |
| `PRIMEVUE_ABSTRACTION.md` | PrimeVue wrapping under `core/primevue/*` |

## Rules every agent file inherits

Expand Down
1 change: 1 addition & 0 deletions .claude/agents/code-connect-writer.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
name: code-connect-writer
description: Isolated sub-agent that writes the <name>.figma.ts Code Connect mapping next to the .vue. Skips itself when @figma/code-connect is not installed.
status: active
scope: webkit
---

# Agent: code-connect-writer
Expand Down
1 change: 1 addition & 0 deletions .claude/agents/echo-reporter.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
name: echo-reporter
description: Isolated sub-agent that re-reads every file written this run, parses props/events/slots/animations independently, and diffs against the spec. Cross-checks against validate-spec-compliance.mjs.
status: active
scope: webkit
---

# Agent: echo-reporter
Expand Down
Loading
Loading