@adia-ai/adia-ui-factory 0.2.2 → 0.2.4
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.
- package/.claude-plugin/plugin.json +12 -3
- package/.mcp.json +1 -1
- package/CHANGELOG.md +12 -0
- package/README.md +24 -1
- package/bin/adia-scaffold +93 -13
- package/package.json +1 -1
- package/references/shell-embed.md +10 -0
- package/references/spa-architecture.md +7 -0
- package/skills/adia-ui-kit/CHANGELOG.md +41 -0
- package/skills/adia-ui-kit/SKILL.md +442 -0
- package/skills/adia-ui-kit/assets/figma-make/guidelines/Guidelines.md +87 -0
- package/skills/adia-ui-kit/assets/figma-make/guidelines/components.md +142 -0
- package/skills/adia-ui-kit/assets/figma-make/guidelines/styles.md +118 -0
- package/skills/adia-ui-kit/assets/figma-make/guidelines/tokens.md +120 -0
- package/skills/adia-ui-kit/assets/team-scaffold/archive-README.md +30 -0
- package/skills/adia-ui-kit/assets/team-scaffold/drafts-README.md +57 -0
- package/skills/adia-ui-kit/assets/team-scaffold/inbox-README.md +76 -0
- package/skills/adia-ui-kit/assets/team-scaffold/outbox-README.md +46 -0
- package/skills/adia-ui-kit/assets/team-scaffold/team-root.README.md +51 -0
- package/skills/adia-ui-kit/assets/team-scaffold/tickets-README.md +208 -0
- package/skills/adia-ui-kit/assets/team-scaffold/tickets-REGISTRY.md +81 -0
- package/skills/adia-ui-kit/assets/templates/AGENTS.template.md +128 -0
- package/skills/adia-ui-kit/assets/templates/CLAUDE.template.md +1 -0
- package/skills/adia-ui-kit/assets/templates/FEEDBACK-OMISSIONS-DEFENSE.template.md +150 -0
- package/skills/adia-ui-kit/assets/templates/FEEDBACK.template.md +213 -0
- package/skills/adia-ui-kit/assets/templates/RESPONSE.template.md +114 -0
- package/skills/adia-ui-kit/assets/templates/figma-make-guidelines.md +90 -0
- package/skills/adia-ui-kit/evals/adversarial-content-trust.json +83 -0
- package/skills/adia-ui-kit/evals/evals.json +55 -0
- package/skills/adia-ui-kit/evals/routing-corpus.json +121 -0
- package/skills/adia-ui-kit/evals/teach-routing-cases.json +92 -0
- package/skills/adia-ui-kit/references/capabilities.md +245 -0
- package/skills/adia-ui-kit/references/catalog-lookup.md +186 -0
- package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v1.md +8 -0
- package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v2.md +3585 -0
- package/skills/adia-ui-kit/references/changelog-archive/CHANGELOG-v3.md +1899 -0
- package/skills/adia-ui-kit/references/common-gotchas-consumer.md +522 -0
- package/skills/adia-ui-kit/references/component-literacy.md +291 -0
- package/skills/adia-ui-kit/references/composition.md +245 -0
- package/skills/adia-ui-kit/references/correction-loop.md +462 -0
- package/skills/adia-ui-kit/references/css-policy.md +343 -0
- package/skills/adia-ui-kit/references/decision-model.md +158 -0
- package/skills/adia-ui-kit/references/diagnostic-output.md +57 -0
- package/skills/adia-ui-kit/references/docs-catalog.md +239 -0
- package/skills/adia-ui-kit/references/exclusions.md +225 -0
- package/skills/adia-ui-kit/references/feedback-authoring.md +466 -0
- package/skills/adia-ui-kit/references/figma-make.md +244 -0
- package/skills/adia-ui-kit/references/flows-auth.md +307 -0
- package/skills/adia-ui-kit/references/flows-content.md +206 -0
- package/skills/adia-ui-kit/references/flows-data.md +348 -0
- package/skills/adia-ui-kit/references/flows-interaction.md +181 -0
- package/skills/adia-ui-kit/references/flows-shells.md +336 -0
- package/skills/adia-ui-kit/references/gap-detection.md +266 -0
- package/skills/adia-ui-kit/references/harness.md +284 -0
- package/skills/adia-ui-kit/references/loading-protocol.md +406 -0
- package/skills/adia-ui-kit/references/local-link.md +198 -0
- package/skills/adia-ui-kit/references/mcp.md +401 -0
- package/skills/adia-ui-kit/references/migration.md +116 -0
- package/skills/adia-ui-kit/references/mission.md +194 -0
- package/skills/adia-ui-kit/references/mode-routing.md +298 -0
- package/skills/adia-ui-kit/references/patterns-agent.md +223 -0
- package/skills/adia-ui-kit/references/patterns-data.md +1065 -0
- package/skills/adia-ui-kit/references/patterns-forms.md +223 -0
- package/skills/adia-ui-kit/references/patterns-layout.md +326 -0
- package/skills/adia-ui-kit/references/patterns-recipes.md +1416 -0
- package/skills/adia-ui-kit/references/patterns-shells.md +1097 -0
- package/skills/adia-ui-kit/references/patterns-traits.md +259 -0
- package/skills/adia-ui-kit/references/patterns-wiring.md +339 -0
- package/skills/adia-ui-kit/references/pev-rationale.md +137 -0
- package/skills/adia-ui-kit/references/reasoning-gate.md +146 -0
- package/skills/adia-ui-kit/references/reasoning-methodologies.md +112 -0
- package/skills/adia-ui-kit/references/recon.md +192 -0
- package/skills/adia-ui-kit/references/rendering-model.md +431 -0
- package/skills/adia-ui-kit/references/response-authoring.md +398 -0
- package/skills/adia-ui-kit/references/session-log-schema.md +203 -0
- package/skills/adia-ui-kit/references/session-log-template.md +118 -0
- package/skills/adia-ui-kit/references/setup.md +652 -0
- package/skills/adia-ui-kit/references/skill-hygiene.md +135 -0
- package/skills/adia-ui-kit/references/spec-to-ui-reasoning.md +394 -0
- package/skills/adia-ui-kit/references/state.md +229 -0
- package/skills/adia-ui-kit/references/teach-protocol.md +421 -0
- package/skills/adia-ui-kit/references/theme.md +142 -0
- package/skills/adia-ui-kit/references/version-check.md +69 -0
- package/skills/adia-ui-kit/scripts/audit-decision-trace.mjs +198 -0
- package/skills/adia-ui-kit/scripts/audit-kit-roster.mjs +366 -0
- package/skills/adia-ui-kit/scripts/changelog-archive.mjs +126 -0
- package/skills/adia-ui-kit/scripts/check-adia-versions.py +404 -0
- package/skills/adia-ui-kit/scripts/run-skill-evals.mjs +358 -0
- package/skills/adia-ui-kit/scripts/validate-session-log.mjs +242 -0
- package/skills/adia-ui-kit/skill.json +102 -0
- package/skills/adia-ui-migration/CHANGELOG.md +47 -0
- package/skills/adia-ui-migration/SKILL.md +381 -0
- package/skills/adia-ui-migration/skill.json +29 -0
- package/skills/adia-ui-spa/SKILL.md +1 -1
- 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"></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" 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 `.claude/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 the parent `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 the parent `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
|
+
ticket-tool register-response <NN>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
That tool:
|
|
56
|
+
|
|
57
|
+
1. Adds a row to the RESPONSE table in the parent `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 the parent `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 the parent `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.
|