@adia-ai/adia-ui-factory 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/.claude-plugin/plugin.json +12 -3
  2. package/CHANGELOG.md +8 -0
  3. package/README.md +24 -1
  4. package/bin/adia-scaffold +93 -13
  5. package/package.json +2 -2
  6. package/references/shell-embed.md +10 -0
  7. package/references/spa-architecture.md +7 -0
  8. package/skills/adia-ui-kit/CHANGELOG.md +41 -0
  9. package/skills/adia-ui-kit/SKILL.md +442 -0
  10. package/skills/adia-ui-kit/assets/figma-make/guidelines/Guidelines.md +87 -0
  11. package/skills/adia-ui-kit/assets/figma-make/guidelines/components.md +142 -0
  12. package/skills/adia-ui-kit/assets/figma-make/guidelines/styles.md +118 -0
  13. package/skills/adia-ui-kit/assets/figma-make/guidelines/tokens.md +120 -0
  14. package/skills/adia-ui-kit/assets/team-scaffold/archive-README.md +30 -0
  15. package/skills/adia-ui-kit/assets/team-scaffold/drafts-README.md +57 -0
  16. package/skills/adia-ui-kit/assets/team-scaffold/inbox-README.md +76 -0
  17. package/skills/adia-ui-kit/assets/team-scaffold/outbox-README.md +46 -0
  18. package/skills/adia-ui-kit/assets/team-scaffold/team-root.README.md +51 -0
  19. package/skills/adia-ui-kit/assets/team-scaffold/tickets-README.md +208 -0
  20. package/skills/adia-ui-kit/assets/team-scaffold/tickets-REGISTRY.md +81 -0
  21. package/skills/adia-ui-kit/assets/templates/AGENTS.template.md +128 -0
  22. package/skills/adia-ui-kit/assets/templates/CLAUDE.template.md +1 -0
  23. package/skills/adia-ui-kit/assets/templates/FEEDBACK-OMISSIONS-DEFENSE.template.md +150 -0
  24. package/skills/adia-ui-kit/assets/templates/FEEDBACK.template.md +213 -0
  25. package/skills/adia-ui-kit/assets/templates/RESPONSE.template.md +114 -0
  26. package/skills/adia-ui-kit/assets/templates/figma-make-guidelines.md +90 -0
  27. package/skills/adia-ui-kit/evals/adversarial-content-trust.json +83 -0
  28. package/skills/adia-ui-kit/evals/evals.json +55 -0
  29. package/skills/adia-ui-kit/evals/routing-corpus.json +121 -0
  30. package/skills/adia-ui-kit/evals/teach-routing-cases.json +92 -0
  31. package/skills/adia-ui-kit/references/capabilities.md +245 -0
  32. package/skills/adia-ui-kit/references/catalog-lookup.md +186 -0
  33. package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v1.md +8 -0
  34. package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v2.md +3585 -0
  35. package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v3.md +1899 -0
  36. package/skills/adia-ui-kit/references/common-gotchas-consumer.md +522 -0
  37. package/skills/adia-ui-kit/references/component-literacy.md +291 -0
  38. package/skills/adia-ui-kit/references/composition.md +245 -0
  39. package/skills/adia-ui-kit/references/correction-loop.md +462 -0
  40. package/skills/adia-ui-kit/references/css-policy.md +343 -0
  41. package/skills/adia-ui-kit/references/decision-model.md +158 -0
  42. package/skills/adia-ui-kit/references/diagnostic-output.md +57 -0
  43. package/skills/adia-ui-kit/references/docs-catalog.md +239 -0
  44. package/skills/adia-ui-kit/references/exclusions.md +225 -0
  45. package/skills/adia-ui-kit/references/feedback-authoring.md +466 -0
  46. package/skills/adia-ui-kit/references/figma-make.md +244 -0
  47. package/skills/adia-ui-kit/references/flows-auth.md +307 -0
  48. package/skills/adia-ui-kit/references/flows-content.md +206 -0
  49. package/skills/adia-ui-kit/references/flows-data.md +348 -0
  50. package/skills/adia-ui-kit/references/flows-interaction.md +181 -0
  51. package/skills/adia-ui-kit/references/flows-shells.md +336 -0
  52. package/skills/adia-ui-kit/references/gap-detection.md +266 -0
  53. package/skills/adia-ui-kit/references/harness.md +284 -0
  54. package/skills/adia-ui-kit/references/loading-protocol.md +406 -0
  55. package/skills/adia-ui-kit/references/local-link.md +198 -0
  56. package/skills/adia-ui-kit/references/mcp.md +401 -0
  57. package/skills/adia-ui-kit/references/migration.md +116 -0
  58. package/skills/adia-ui-kit/references/mission.md +194 -0
  59. package/skills/adia-ui-kit/references/mode-routing.md +298 -0
  60. package/skills/adia-ui-kit/references/patterns-agent.md +223 -0
  61. package/skills/adia-ui-kit/references/patterns-data.md +1066 -0
  62. package/skills/adia-ui-kit/references/patterns-forms.md +223 -0
  63. package/skills/adia-ui-kit/references/patterns-layout.md +326 -0
  64. package/skills/adia-ui-kit/references/patterns-recipes.md +1416 -0
  65. package/skills/adia-ui-kit/references/patterns-shells.md +1097 -0
  66. package/skills/adia-ui-kit/references/patterns-traits.md +259 -0
  67. package/skills/adia-ui-kit/references/patterns-wiring.md +339 -0
  68. package/skills/adia-ui-kit/references/pev-rationale.md +137 -0
  69. package/skills/adia-ui-kit/references/reasoning-gate.md +146 -0
  70. package/skills/adia-ui-kit/references/reasoning-methodologies.md +112 -0
  71. package/skills/adia-ui-kit/references/recon.md +192 -0
  72. package/skills/adia-ui-kit/references/rendering-model.md +431 -0
  73. package/skills/adia-ui-kit/references/response-authoring.md +398 -0
  74. package/skills/adia-ui-kit/references/session-log-schema.md +203 -0
  75. package/skills/adia-ui-kit/references/session-log-template.md +118 -0
  76. package/skills/adia-ui-kit/references/setup.md +652 -0
  77. package/skills/adia-ui-kit/references/skill-hygiene.md +135 -0
  78. package/skills/adia-ui-kit/references/spec-to-ui-reasoning.md +394 -0
  79. package/skills/adia-ui-kit/references/state.md +229 -0
  80. package/skills/adia-ui-kit/references/teach-protocol.md +421 -0
  81. package/skills/adia-ui-kit/references/theme.md +142 -0
  82. package/skills/adia-ui-kit/references/version-check.md +69 -0
  83. package/skills/adia-ui-kit/scripts/audit-decision-trace.mjs +198 -0
  84. package/skills/adia-ui-kit/scripts/audit-kit-roster.mjs +366 -0
  85. package/skills/adia-ui-kit/scripts/changelog-archive.mjs +126 -0
  86. package/skills/adia-ui-kit/scripts/check-adia-versions.py +404 -0
  87. package/skills/adia-ui-kit/scripts/run-skill-evals.mjs +358 -0
  88. package/skills/adia-ui-kit/scripts/validate-session-log.mjs +242 -0
  89. package/skills/adia-ui-kit/skill.json +102 -0
  90. package/skills/adia-ui-migration/CHANGELOG.md +47 -0
  91. package/skills/adia-ui-migration/SKILL.md +381 -0
  92. package/skills/adia-ui-migration/skill.json +29 -0
  93. package/skills/adia-ui-spa/SKILL.md +1 -1
  94. package/skills/adia-ui-verify/SKILL.md +2 -2
@@ -0,0 +1,142 @@
1
+ # AdiaUI — Components
2
+
3
+ Every primitive is `<name>-ui`. 122 primitives + 4 app shells are
4
+ registered by `everything.min.js`. Reach for a tag before hand-building.
5
+ Full per-component docs + live demos: https://ui-kit.exe.xyz/site/components/<name>
6
+
7
+ ## Picking a component
8
+
9
+ ```
10
+ What are you placing?
11
+ ├─ A whole app frame ........... a SHELL (admin / chat / editor / simple)
12
+ ├─ A box grouping content ...... <card-ui> (header / section / footer slots)
13
+ ├─ Horizontal/vertical layout .. <row-ui> / <col-ui> (gap="1".."6")
14
+ ├─ A labelled input ............ <field-ui label=""> wrapping the control
15
+ ├─ An action ................... <button-ui text="" variant="">
16
+ ├─ Tabular data ................ <table-ui> | a list ... <list-ui>
17
+ ├─ A metric/KPI ................ <stat-ui value="" label="">
18
+ ├─ Inline status ............... <badge-ui text=""> | <tag-ui> | <alert-ui>
19
+ ├─ Sidebar navigation .......... <nav-ui> + <nav-item-ui icon="" text="">
20
+ └─ Transient/overlay ........... <modal-ui> | <drawer-ui> | <toast-ui> | <tooltip-ui>
21
+ ```
22
+
23
+ ## Vocabulary by group
24
+
25
+ | Group | Tags |
26
+ |---|---|
27
+ | **Layout** | `row-ui` `col-ui` `grid-ui` `page-ui` `card-ui` `pane-ui` `block-ui` `divider-ui` `stack-ui` `section`(slot) |
28
+ | **Text** | `text-ui` `link-ui` `badge-ui` `tag-ui` `icon-ui` `code-ui` `kbd-ui` `mark-ui` `blockquote-ui` `relative-time-ui` `number-format-ui` |
29
+ | **Forms** | `input-ui` `textarea-ui` `select-ui` `combobox-ui` `check-ui` `radio-ui` `switch-ui` `slider-ui` `range-ui` `search-ui` `otp-input-ui` `tags-input-ui` `segmented-ui` `rating-ui` `color-input-ui` `field-ui` `fields-ui` `button-ui` |
30
+ | **Data** | `table-ui` `list-ui` `description-list-ui` `stat-ui` `chart-ui` `heatmap-ui` `timeline-ui` `feed-ui` `pagination-ui` `progress-ui` `progress-row-ui` `step-progress-ui` |
31
+ | **Feedback / overlay** | `alert-ui` `inline-message-ui` `toast-ui` `modal-ui` `drawer-ui` `tooltip-ui` `popover-ui` `empty-state-ui` `skeleton-ui` `spinner-ui` `loading-overlay-ui` |
32
+ | **Navigation** | `nav-ui` `nav-item-ui` `nav-group-ui` `menu-ui` `tabs-ui` `breadcrumb-ui` `command-ui` `context-menu-ui` `toolbar-ui` `segment-ui` `pagination-ui` `toc-ui` `skip-nav-ui` |
33
+ | **Media / misc** | `avatar-ui` `image-ui` `qr-code-ui` `swatch-ui` `swiper-ui` `accordion-ui` `stepper-ui` `tour-ui` `inline-edit-ui` `calendar-picker-ui` `date-range-picker-ui` `datetime-picker-ui` `time-picker-ui` |
34
+ | **Agent surfaces** | `agent-reasoning-ui` `agent-trace-ui` `agent-suggestions-ui` `agent-questions-ui` `agent-feedback-bar-ui` `agent-artifact-ui` `chat-thread-ui` |
35
+ | **Shells** | `admin-shell` `chat-shell` `editor-shell` `simple-shell` (+ their `admin-sidebar` / `admin-topbar` / `admin-page` / … children) |
36
+
37
+ ## Component rules + examples
38
+
39
+ ### `<button-ui>` — label via `text=`
40
+ Two independent attributes:
41
+ - **`variant`** (visual style): `solid` (default) · `outline` · `ghost`. `primary` is an alias of `solid`.
42
+ - **`color`** (semantic intent, composes with variant): `default` · `accent` · `info` · `success` · `warning` · `danger`.
43
+ - **`size`**: `xs` `sm` `md` `lg` `xl`.
44
+
45
+ ```html
46
+ <!-- CORRECT — variant + color compose; size is independent -->
47
+ <button-ui text="Save" variant="primary"></button-ui>
48
+ <button-ui text="Delete" variant="primary" color="danger"></button-ui> <!-- solid danger -->
49
+ <button-ui text="Cancel" variant="outline"></button-ui>
50
+ <!-- WRONG — label is ignored; renders an empty button -->
51
+ <button-ui variant="primary">Save</button-ui>
52
+ <!-- WRONG — danger is a COLOR, not a variant; this gets no danger styling -->
53
+ <button-ui text="Delete" variant="danger"></button-ui>
54
+ ```
55
+
56
+ ### `<card-ui>` — header / section / footer slots
57
+ Body content MUST be inside `<section>`, or it loses inset padding.
58
+
59
+ ```html
60
+ <!-- CORRECT -->
61
+ <card-ui>
62
+ <header><h3>Plan</h3></header>
63
+ <section><text-ui>Pro — $29/mo</text-ui></section>
64
+ <footer><button-ui text="Upgrade" variant="primary"></button-ui></footer>
65
+ </card-ui>
66
+ <!-- WRONG — body bleeds to the edges -->
67
+ <card-ui><text-ui>Pro — $29/mo</text-ui></card-ui>
68
+ ```
69
+
70
+ ### `<field-ui>` — label + control + validation row
71
+ Wrap a single control. For 2+ `<radio-ui>`/`<check-ui>`, wrap them in `<col-ui gap="1">` inside the field, or they overlap.
72
+
73
+ ```html
74
+ <field-ui label="Email"><input-ui type="email" required></input-ui></field-ui>
75
+ <field-ui label="Plan">
76
+ <col-ui gap="1">
77
+ <radio-ui name="plan" label="Free"></radio-ui>
78
+ <radio-ui name="plan" label="Pro"></radio-ui>
79
+ </col-ui>
80
+ </field-ui>
81
+ ```
82
+
83
+ ### `<nav-ui>` — sidebar navigation (NOT `<menu-ui>`)
84
+ ```html
85
+ <nav-ui>
86
+ <nav-item-ui icon="house" text="Home" selected></nav-item-ui>
87
+ <nav-item-ui icon="gear" text="Settings"></nav-item-ui>
88
+ </nav-ui>
89
+ ```
90
+ `<menu-ui>` is only for popover/dropdown action menus.
91
+
92
+ ### `<stat-ui>` — metric/KPI
93
+ ```html
94
+ <stat-ui value="$12.4k" label="Revenue" trend="up" change="+8%"></stat-ui>
95
+ ```
96
+
97
+ ### `<table-ui>` — never author `<tr>`/`<td>` by hand
98
+ The HTML parser strips table tags inside custom elements. Provide columns + data via attributes/JSON or `<col-def>`; don't write raw `<thead>/<tbody>/<tr>`.
99
+
100
+ ### `<modal-ui>` / `<drawer-ui>` — `[text]` + `slot="footer"`
101
+ `<modal-ui>` titles via a `[text]`/heading attr and footer via `slot="footer"` — it does NOT use card-ui's header/section/footer. Check the live demo before authoring.
102
+
103
+ ## App shell skeleton
104
+
105
+ ```html
106
+ <admin-shell mode="rounded borderless">
107
+ <admin-sidebar slot="leading" resizable collapsible>
108
+ <admin-topbar slot="header"><span slot="heading">My App</span></admin-topbar>
109
+ <section>
110
+ <nav-ui>
111
+ <nav-item-ui icon="house" text="Home" selected></nav-item-ui>
112
+ <nav-item-ui icon="chart-bar" text="Reports"></nav-item-ui>
113
+ </nav-ui>
114
+ </section>
115
+ </admin-sidebar>
116
+ <admin-content>
117
+ <admin-topbar><breadcrumb-ui><span>Dashboard</span></breadcrumb-ui></admin-topbar>
118
+ <admin-scroll>
119
+ <admin-page>
120
+ <admin-page-header>
121
+ <header>
122
+ <div>
123
+ <h1>Dashboard</h1>
124
+ <div data-actions><button-ui text="Share" variant="outline" size="sm"></button-ui></div>
125
+ </div>
126
+ <p>Welcome back.</p>
127
+ </header>
128
+ </admin-page-header>
129
+ <admin-page-body>
130
+ <row-ui gap="3">
131
+ <card-ui><section><stat-ui value="$12.4k" label="Revenue"></stat-ui></section></card-ui>
132
+ <card-ui><section><stat-ui value="1,204" label="Users"></stat-ui></section></card-ui>
133
+ </row-ui>
134
+ </admin-page-body>
135
+ </admin-page>
136
+ </admin-scroll>
137
+ </admin-content>
138
+ </admin-shell>
139
+ ```
140
+
141
+ Icon names (`icon="…"` / `<icon-ui name="…">`) are Phosphor names:
142
+ `house` `gear` `magnifying-glass` `plus` `trash` `chart-bar` `bell` `user`.
@@ -0,0 +1,118 @@
1
+ # AdiaUI — Styles
2
+
3
+ ## Load the rollup CSS (one file, not 119)
4
+
5
+ AdiaUI's CSS is a single pre-flattened rollup. Load it once — never
6
+ import individual component stylesheets in Figma Make.
7
+
8
+ ```html
9
+ <!-- CDN (simplest — recommended for Make) -->
10
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@adia-ai/web-components@0.7/dist/web-components.min.css">
11
+ ```
12
+
13
+ ```js
14
+ // OR, if the npm package is installed in the kit:
15
+ import '@adia-ai/web-components/css/bundled'; // the rollup — every primitive
16
+ ```
17
+
18
+ Add a shell's CSS only for the shell tier you render:
19
+
20
+ ```html
21
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@adia-ai/web-modules@0.7/dist/shell/admin-shell.min.css">
22
+ <!-- swap shell/admin-shell for chat/chat-shell · editor/editor-shell · simple/simple-shell -->
23
+ ```
24
+
25
+ **Do not** restyle AdiaUI internals with Tailwind or utility classes.
26
+ Components are styled with CSS `@scope` and design tokens; utility classes
27
+ on the host won't reach the internals and will fight the cascade. Change
28
+ appearance through **attributes** (`variant`, `size`, `gap`) and
29
+ **`--a-*` tokens** (see `tokens.md`).
30
+
31
+ ## Theming — two independent axes
32
+
33
+ Set both on a wrapper element (or `<html>`). They are separate attributes:
34
+
35
+ | Attribute | Controls | Values |
36
+ |---|---|---|
37
+ | `theme` | Named color palette | `default` `ocean` `forest` `sunset` `midnight` `lavender` `rose` `slate` |
38
+ | `data-scheme` | Light/dark mode | `light` `dark` `system` |
39
+
40
+ ```html
41
+ <!-- Ocean palette, follow the OS for light/dark -->
42
+ <html theme="ocean" data-scheme="system">
43
+ ```
44
+
45
+ ```
46
+ Choosing:
47
+ ├─ Want a brand color set? ........... theme="ocean" (or forest/sunset/…)
48
+ ├─ Want light or dark? ............... data-scheme="light" | "dark"
49
+ └─ Want to follow the user's OS? ..... data-scheme="system" (default behavior)
50
+ ```
51
+
52
+ Omitting `theme` uses `default`. Omitting `data-scheme` follows the
53
+ OS preference. Both cascade — set them once high in the tree.
54
+
55
+ ## Layout — use the layout primitives, not fl/grid utility CSS
56
+
57
+ | Need | Use | Notes |
58
+ |---|---|---|
59
+ | Row of items | `<row-ui gap="3">` | horizontal flex; `gap` = token step 1–6 |
60
+ | Column of items | `<col-ui gap="2">` | vertical flex |
61
+ | Grid | `<grid-ui>` | responsive grid |
62
+ | Page wrapper | `<page-ui>` | max-width + page inset |
63
+ | Overlapping layers | `<stack-ui>` | **z-axis** (badge over avatar) — NOT vertical |
64
+ | Spacer / divider | `<divider-ui>` | |
65
+
66
+ `gap` (and most spacing attrs) take a **token step 1–6**, not pixels —
67
+ they scale with density (see `tokens.md`). `gap="3"` ≈ 12px at default
68
+ density.
69
+
70
+ ```html
71
+ <!-- CORRECT — vertical stack of three cards -->
72
+ <col-ui gap="3">
73
+ <card-ui><section>…</section></card-ui>
74
+ <card-ui><section>…</section></card-ui>
75
+ </col-ui>
76
+ <!-- WRONG — stack-ui overlaps them in one cell -->
77
+ <stack-ui><card-ui>…</card-ui><card-ui>…</card-ui></stack-ui>
78
+ ```
79
+
80
+ ### Structural layout is the one inline-style exception
81
+
82
+ The "use attributes, not inline CSS" rule targets things a primitive or
83
+ attribute *already covers* — `gap`, spacing, alignment, sizing, color.
84
+ **Page-frame scaffolding has no primitive, so inline structural CSS is
85
+ fine there:** a full-height app frame, fixed-width sidebars, scroll
86
+ panes, and custom CSS grids.
87
+
88
+ ```html
89
+ <!-- OK — structural; no primitive expresses a full-height chat frame -->
90
+ <article style="display:flex; height:100vh;">
91
+ <aside style="width:240px; overflow:auto; border-right:1px solid var(--a-border-subtle);">…</aside>
92
+ <section style="flex:1; overflow:auto;">…use row-ui/col-ui/card-ui INSIDE…</section>
93
+ </article>
94
+ ```
95
+
96
+ The test: **does a primitive or attribute already do this?**
97
+ - Yes (`gap`, `size`, `variant`, `color`, row/col/grid/stack) → use it, never inline.
98
+ - No (`height:100vh`, `flex:1` scroll pane, `grid-template-columns:1fr auto 1fr`) → inline structural CSS is acceptable; still use tokens (`var(--a-*)`), not raw px/hex, and put the *content* inside primitives.
99
+
100
+ Keep structural inline CSS on the **frame** only — never reach for it to
101
+ restyle a component that has an attribute for the job.
102
+
103
+ ## Typography
104
+
105
+ Use the heading tags + `<text-ui>`; the rollup CSS styles them. Prose
106
+ scale tokens (`--a-display`, `--a-title`, `--a-body`, `--a-caption`)
107
+ back the sizes. Don't set raw `font-size` — use the semantic element
108
+ (`<h1>`–`<h6>`, `<text-ui>`) or the size token.
109
+
110
+ ```html
111
+ <header align="center" size="lg">
112
+ <col-ui>
113
+ <text-ui kicker>PRICING</text-ui>
114
+ <h1>Simple, transparent pricing</h1>
115
+ <text-ui deck>Pick a plan that scales with you.</text-ui>
116
+ </col-ui>
117
+ </header>
118
+ ```
@@ -0,0 +1,120 @@
1
+ # AdiaUI — Design Tokens
2
+
3
+ All design tokens are CSS custom properties prefixed **`--a-*`**, defined
4
+ in the rollup CSS. Restyle through these — never hard-coded colors,
5
+ pixels, or utility classes.
6
+
7
+ ## Philosophy
8
+
9
+ The system is **parametric**: a handful of root knobs drive entire scales
10
+ via `calc()`. Change a knob at a provider boundary (a wrapper element) and
11
+ every spacing/radius/color downstream re-derives. You rarely set a leaf
12
+ token — you set the knob.
13
+
14
+ ```
15
+ Want to change…
16
+ ├─ overall spacing tightness ... set --a-density (number; 1 = default)
17
+ ├─ corner roundness ............ set --a-radius-k (radius multiplier)
18
+ ├─ the brand palette ........... theme="ocean" (see styles.md)
19
+ ├─ light/dark .................. data-scheme="dark" (see styles.md)
20
+ └─ one component's color ....... override its --<component>-* token (below)
21
+ ```
22
+
23
+ ## Token families
24
+
25
+ | Family | Tokens (examples) | Purpose |
26
+ |---|---|---|
27
+ | **Spacing** | `--a-space-1` … `--a-space-12` (+ `-0-5`, `-1-5`) | Padding / margins; `--a-space-1` = 4px at density 1 |
28
+ | **Gap** | `--a-gap-1` … `--a-gap-6` | Flex/grid gaps (what `gap="n"` maps to) |
29
+ | **Radius** | `--a-radius-sm` `--a-radius-md` `--a-radius-lg` | Corner rounding |
30
+ | **Size** | `--a-size-*` | Control heights (button/input/etc.) |
31
+ | **Shadow** | `--a-shadow-sm` `--a-shadow-md` `--a-shadow-lg` | Elevation |
32
+ | **Inset** | `--a-inset-*` | Component interior padding |
33
+ | **Type scale** | `--a-display` `--a-title` `--a-section` `--a-body` `--a-caption` `--a-kicker` | Prose sizes |
34
+ | **Density knob** | `--a-density` | Multiplies ALL spatial dimensions |
35
+
36
+ ## Semantic color roles
37
+
38
+ Use **role** tokens, not raw colors. Roles resolve correctly under every
39
+ `theme` + `data-scheme` combination.
40
+
41
+ | Token | Use for |
42
+ |---|---|
43
+ | `--a-fg` | Default text/foreground |
44
+ | `--a-fg-strong` | High-emphasis text |
45
+ | `--a-fg-subtle` | Muted / secondary text |
46
+ | `--a-bg` | Default background |
47
+ | `--a-border` / `--a-border-subtle` | Borders / dividers |
48
+ | `--a-primary` | Primary-action fill (what `<button-ui variant="primary">` uses) |
49
+ | `--a-accent-bg` / `--a-accent-muted` / `--a-accent-strong` | Accent fills |
50
+ | `--a-success-* / --a-warning-* / --a-danger-* / --a-info-*` | Status colors |
51
+ | `--a-chrome-light` | Text/dots ON a filled primary/accent disc (NOT `--a-accent-fg`, which resolves near-black) |
52
+
53
+ **Never** use `--a-bg` as a foreground or `--a-fg` as a background. For a
54
+ primary fill use `--a-primary` with `--a-chrome-light` text, not raw hex.
55
+
56
+ ```css
57
+ /* CORRECT — semantic roles */
58
+ .note { color: var(--a-fg-subtle); background: var(--a-bg); border: 1px solid var(--a-border); }
59
+ /* WRONG — raw colors fight the theme + break dark mode */
60
+ .note { color: #6b7280; background: #ffffff; border: 1px solid #e5e7eb; }
61
+ ```
62
+
63
+ ## Restyle via attributes first
64
+
65
+ Most appearance changes have a first-class **attribute** — reach for it
66
+ before any token. Do not set component tokens inline with `style="…"`;
67
+ inline overrides bloat the markup and bypass the documented API.
68
+
69
+ ```html
70
+ <!-- CORRECT — the attribute API expresses intent -->
71
+ <button-ui text="Buy" variant="primary"></button-ui>
72
+ <button-ui text="Delete" variant="primary" color="danger"></button-ui>
73
+ <!-- WRONG — inline token override where an attribute exists -->
74
+ <button-ui text="Buy" style="--button-bg: var(--a-primary);"></button-ui>
75
+ ```
76
+
77
+ The common attributes: `variant` (visual style), `color` (semantic
78
+ intent), `size` (`xs`–`xl`), `gap` (`1`–`6`). See `components.md`.
79
+
80
+ ## Overriding a component (only when there's no attribute)
81
+
82
+ For a property with no attribute — e.g. tinting every card in one region —
83
+ override the component's named token in a **scoped CSS rule on an
84
+ ancestor**, never inline per-instance. The pattern is `--<component>-<prop>`:
85
+
86
+ ```css
87
+ /* Tint + round every card inside .promo — one rule, region-scoped */
88
+ .promo {
89
+ --card-bg: var(--a-accent-muted);
90
+ --card-radius: var(--a-radius-lg);
91
+ }
92
+ ```
93
+
94
+ ## Density (the highest-leverage knob)
95
+
96
+ `--a-density` scales every spacing/padding/gap token at once. Set it in a
97
+ scoped CSS rule on a region wrapper — a denser table area, a roomier
98
+ marketing section:
99
+
100
+ ```css
101
+ .dense-region { --a-density: 0.85; } /* 15% tighter everywhere inside */
102
+ ```
103
+
104
+ Default is `1`. Lower = tighter, higher = roomier. Because spacing is
105
+ parametric, this stays internally consistent — you don't restyle each
106
+ component.
107
+
108
+ ## Rules
109
+
110
+ 1. **Prefer attributes** (`variant` / `color` / `size` / `gap`) over token
111
+ overrides. Reach for a token only when no attribute covers the change.
112
+ 2. **Never set tokens inline with `style="…"`.** Token overrides go in a
113
+ scoped CSS rule on an ancestor, never per-instance inline.
114
+ 3. No raw hex/rgb colors — use semantic role tokens.
115
+ 4. No pixel spacing — use `--a-space-*` / `--a-gap-*` or the `gap="n"`
116
+ attribute (token step 1–6).
117
+ 5. Restyle a component via its `--<component>-*` token, not by targeting
118
+ its internal elements.
119
+ 6. Change scale globally via `--a-density` / `--a-radius-k`, not by
120
+ editing each token.
@@ -0,0 +1,30 @@
1
+ # `archive/` — Superseded registries, historical legacy docs
2
+
3
+ Immutable after write. Use this folder when:
4
+
5
+ - Migrating the ticket-system layout (e.g. moving from `docs/outbound/`
6
+ to `.agents/team/tickets/` — the historical registry is archived here,
7
+ not deleted).
8
+ - Pruning a stale arc of tickets that's been fully resolved and is no
9
+ longer relevant to active work.
10
+
11
+ ## What does NOT go here
12
+
13
+ - **Retracted tickets** — those go BACK to `../drafts/` with
14
+ `status: retracted`. Retraction is a status change, not archival.
15
+ - **Resolved tickets** — those stay in `../outbox/` with
16
+ `status: resolved`. Resolution is also a status change.
17
+ - **Working drafts** — stay in `../drafts/` until promoted or pruned.
18
+
19
+ ## Adding an archive entry
20
+
21
+ When archiving a registry or batch of tickets:
22
+
23
+ 1. Add a one-line note to `../REGISTRY.md` pointing at the new archived
24
+ location (with the date of the move).
25
+ 2. Move the file(s) into `archive/`.
26
+ 3. Do not edit archived files post-move. If a fact in an archived file
27
+ is wrong, draft a new ticket explaining the correction — don't
28
+ rewrite history.
29
+
30
+ Archived files are part of the audit trail forever.
@@ -0,0 +1,57 @@
1
+ # `drafts/` — Pre-publication rough drafts
2
+
3
+ Agent rough drafts and coordinator work-in-progress live here. Drafts
4
+ accumulate until a human (or human-driven agent) runs
5
+ `ticket-tool finalize <NN>`, which moves them to `../outbox/`.
6
+
7
+ ## Naming
8
+
9
+ `FEEDBACK-NN--<recipient>--YYYY-MM-DD.md` — same naming as the eventual
10
+ outbox file. The folder it sits in IS the state marker; no `.draft`
11
+ suffix is needed. Frontmatter `status: draft` reinforces.
12
+
13
+ For RESPONSE drafts (self-review or in-progress placeholders before
14
+ upstream sends the real RESPONSE): `RESPONSE-NN--<sender>--YYYY-MM-DD.md`.
15
+
16
+ ## Frontmatter contract
17
+
18
+ See `../README.md` §Draft Frontmatter Contract. In short:
19
+
20
+ ```yaml
21
+ ---
22
+ id: "NN" # from `ticket-tool next-id`
23
+ type: feedback
24
+ recipient: adia-ui
25
+ date: "YYYY-MM-DD"
26
+ author: "<agent> (<session-context>)"
27
+ project: "<consumer-project>"
28
+ status: draft
29
+ references: []
30
+ version: "@adia-ai/web-components@X.Y.Z"
31
+ priority: p0|p1|p2|p3
32
+ ---
33
+ ```
34
+
35
+ ## When agents draft here
36
+
37
+ The `adia-ui-kit` skill §AutoCapture rule binds the agent: whenever it
38
+ observes a bug / gap / friction / stale pattern in `@adia-ai/*` during
39
+ ANY session, draft a ticket here as a side-effect of the work that
40
+ surfaced it. Do not block; do not ask permission; do not wait. Surface
41
+ the draft in the session summary so the user knows it's pending review.
42
+
43
+ ## Retracted tickets
44
+
45
+ When a finalized FEEDBACK in `../outbox/` is dismissed correctly by an
46
+ upstream RESPONSE (or self-review reveals it was wrong), it moves BACK
47
+ here via `ticket-tool retract <NN>`. Status flips to `retracted` and a
48
+ `retracted-reason:` front-matter field is populated. The file stays in
49
+ the audit trail forever — drafts/ is its final resting place, but the
50
+ REGISTRY.md row stays with status `retracted`.
51
+
52
+ ## Pruning
53
+
54
+ Drafts that the human declines to ship (and aren't formal retractions)
55
+ can be deleted outright. If the discard is policy-relevant ("we decided
56
+ this is consumer-side, not framework"), capture the reason in
57
+ `../../notes/<date>-discard-<slug>.md` before deleting.
@@ -0,0 +1,76 @@
1
+ # `inbox/` — RESPONSE tickets received from upstream
2
+
3
+ When upstream maintainers reply to a FEEDBACK we filed, file their
4
+ response here. Each RESPONSE pairs 1:1 with a FEEDBACK in `../outbox/`
5
+ (or N:1 in the case of followups).
6
+
7
+ ## Naming
8
+
9
+ `RESPONSE-NN--<sender>--YYYY-MM-DD.md`, where `NN` matches the FEEDBACK
10
+ this responds to.
11
+
12
+ For multi-round responses: `RESPONSE-NN--<sender>--YYYY-MM-DD--followup.md`.
13
+
14
+ ## Frontmatter contract
15
+
16
+ ```yaml
17
+ ---
18
+ id: "NN"
19
+ type: response
20
+ recipient: <consumer-project> # us — who the response is to
21
+ date: "YYYY-MM-DD"
22
+ author: "<upstream-maintainer-name>"
23
+ project: "<upstream-project-name>"
24
+ references:
25
+ - "FEEDBACK-NN--<recipient>--YYYY-MM-DD"
26
+ version: "@adia-ai/web-components@X.Y.Z"
27
+ status: submitted | resolved
28
+ ---
29
+ ```
30
+
31
+ ## Body discipline — verdict per claim
32
+
33
+ `references/response-authoring.md` in the `adia-ui-kit` skill is the
34
+ canonical procedural detail. In short, each claim from the original
35
+ FEEDBACK gets exactly one verdict marker:
36
+
37
+ | Marker | Verdict |
38
+ | ------ | ----------------------------- |
39
+ | ✅ | Confirmed (shipped / accepting) |
40
+ | ⚠️ | Confirmed — partial |
41
+ | ⏳ | Deferred |
42
+ | ❌ | Dismissed (not-reproducible / by-design / incorrect-claim) |
43
+ | 🔍 | Needs clarification |
44
+ | 🔀 | Out of scope — redirected |
45
+
46
+ Verdicts MUST cite a runtime line (`components/<name>/<file>.js:LINE`)
47
+ to substantiate. Verdicts without anchors are opinion, not response.
48
+
49
+ ## Registering an incoming response
50
+
51
+ ```bash
52
+ python3 scripts/ticket-tool.py register-response <NN>
53
+ ```
54
+
55
+ That tool:
56
+
57
+ 1. Adds a row to the RESPONSE table in `../REGISTRY.md`.
58
+ 2. Flips the matching FEEDBACK row's status: `submitted` → `responded`.
59
+ 3. Reports any verdict-class observations (e.g. "1 dismissed → consider
60
+ retracting FEEDBACK-NN" or "2 partial → consider drafting a followup").
61
+
62
+ ## Triage after registering
63
+
64
+ Read the response end-to-end. If any verdicts are:
65
+
66
+ - **❌ Dismissed (incorrect-claim)** — consider retracting your FEEDBACK
67
+ via `ticket-tool retract <NN> --reason "<verdict citation>"`. The file
68
+ moves back to `drafts/` with `status: retracted`.
69
+ - **⚠️ Partial** or **🔍 Needs clarification** — draft a followup via
70
+ `ticket-tool new feedback <recipient> --followup-of <NN>`. Address
71
+ the partial / answer the clarification.
72
+ - **⏳ Deferred** — capture the cut horizon in your project notes; no
73
+ action required on the ticket itself.
74
+ - **✅ Confirmed** — once the fix actually ships in a release, update
75
+ the FEEDBACK status to `resolved` via `ticket-tool set-status <NN> resolved`
76
+ and cite the commit SHA + version in the `shipped:` front-matter field.
@@ -0,0 +1,46 @@
1
+ # `outbox/` — Polished FEEDBACK + REQUEST tickets
2
+
3
+ Submitted (or ready-to-submit) tickets live here. Promoted from
4
+ `../drafts/` via `ticket-tool finalize <NN>`. Once here, the body should
5
+ not be edited — corrections go in a sibling `--followup.md` file that
6
+ cross-references the original.
7
+
8
+ ## Naming
9
+
10
+ | Pattern | When used |
11
+ | -------------------------------------------------------- | --------- |
12
+ | `FEEDBACK-NN--<recipient>--YYYY-MM-DD.md` | Initial filing |
13
+ | `FEEDBACK-NN--<recipient>--YYYY-MM-DD--followup.md` | Addendum after a RESPONSE |
14
+ | `FEEDBACK-NN--OMISSIONS-DEFENSE.md` | Companion file when the exclusion list has 15+ items or 4+ rationale categories |
15
+
16
+ ## Frontmatter status progression
17
+
18
+ ```
19
+ status: draft ← in drafts/
20
+ status: submitted ← when ticket-tool finalize promoted it (in outbox/)
21
+ status: responded ← when ticket-tool register-response noted an inbox/ RESPONSE
22
+ status: resolved ← when the response triage closed the loop
23
+ status: retracted ← if the ticket was wrong; file moves back to drafts/
24
+ ```
25
+
26
+ Status edits to existing rows in `../REGISTRY.md` are corrections, not
27
+ rewrites. Use `ticket-tool set-status <NN> <status>` to keep the registry
28
+ in sync.
29
+
30
+ ## Submitting upstream
31
+
32
+ The tooling stops at "in `outbox/`, registered, committed." Opening the
33
+ GitHub issue / sending the email / posting to Slack is out of scope —
34
+ do that step manually using the polished file as the message body.
35
+
36
+ ## Once acted on by upstream
37
+
38
+ When upstream replies, file the response in `../inbox/RESPONSE-NN-…`
39
+ and run `ticket-tool register-response <NN>`. That tool:
40
+
41
+ 1. Adds a row to the RESPONSE table in `../REGISTRY.md`.
42
+ 2. Flips the FEEDBACK row's status from `submitted` → `responded`.
43
+ 3. Cross-links the two artifacts via the `references:` front-matter.
44
+
45
+ If the response triggers a followup, draft it with
46
+ `ticket-tool new feedback <recipient> --followup-of <NN>`.
@@ -0,0 +1,51 @@
1
+ # Team Workspace (`.agents/team/`)
2
+
3
+ **Shared team artifacts authored by AI agents across harnesses** —
4
+ companion to `.agents/skills/` (procedural knowledge), `.agents/prompts/`
5
+ (prompt templates), and `.agents/routines/` (scheduled remote-agent
6
+ prompts). Where those folders hold *how* agents work, this folder holds
7
+ *what* agents produce on behalf of the team.
8
+
9
+ ## Tree
10
+
11
+ ```
12
+ .agents/team/
13
+ └── tickets/
14
+ ├── REGISTRY.md — master append-only index of every FEEDBACK + RESPONSE
15
+ ├── README.md — ticket lifecycle specification (drafts ⇄ outbox ⇄ inbox)
16
+ ├── drafts/ — agent rough drafts, blocker notes; pre-publication
17
+ ├── outbox/ — polished FEEDBACK-NN tickets sent upstream
18
+ ├── inbox/ — RESPONSE-NN tickets received from upstream
19
+ └── archive/ — superseded registries, historical legacy docs
20
+ ```
21
+
22
+ ## Philosophy
23
+
24
+ - **Harness-agnostic** — Claude Code, Hermes, Cursor, Codex all write
25
+ here. No tool-specific subfolders.
26
+ - **Append-only registry** — `REGISTRY.md` is the audit trail. Edits
27
+ to existing rows are corrections, not rewrites.
28
+ - **Defensible by default** — every ticket follows the 4-block-per-finding
29
+ discipline (`What happened / Root cause / Reproduction / Request`)
30
+ with verified exclusions and cost estimates. The `adia-ui-kit` skill
31
+ §FeedbackDiscipline section defines the principles; `references/feedback-authoring.md`
32
+ in that skill is the full procedural detail (vendored from
33
+ `/Users/kimba/Projects/adia/color-app/.agents/team/skills/`, where
34
+ the discipline was forged through 60+ real tickets).
35
+ - **Four-stage pipeline** — drafts (work-in-progress) → outbox
36
+ (submitted) → inbox (response received) → archive (superseded only).
37
+ Retracted tickets move BACK to drafts/ with `status: retracted` —
38
+ they're not deleted, the registry row stays.
39
+
40
+ ## Ownership
41
+
42
+ - **Agents** — draft to `tickets/drafts/`, never write directly to
43
+ `outbox/` or `inbox/`.
44
+ - **Humans (or human-driven agents)** — finalize drafts to `outbox/`
45
+ via the gated promote tool. File RESPONSE-NN to `inbox/` when
46
+ upstream replies. Maintain `REGISTRY.md`.
47
+
48
+ See `tickets/README.md` (at the destination) or `../tickets-README.md`
49
+ (this asset's sibling) for the workflow + format specifications; see the
50
+ `adia-ui-kit` skill in `.agents/skills/` for the authoring discipline and
51
+ tooling.