@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,466 @@
|
|
|
1
|
+
# Reference: Defensible Feedback Authoring (vendored from color-app `.agents/team/skills/`)
|
|
2
|
+
|
|
3
|
+
**Vendored:** 2026-05-20, from `/Users/kimba/Projects/adia/color-app/.agents/team/skills/feedback-authoring.md`.
|
|
4
|
+
**Original upstream:** `~/.pi/agent/memory/skills/write-defensible-feedback-ticket.md`.
|
|
5
|
+
**Why vendored:** This is the canonical discipline for upstream FEEDBACK tickets to
|
|
6
|
+
`@adia-ai/*` packages. It is the source of truth that the `adia-ui-kit` skill body
|
|
7
|
+
(§FeedbackDiscipline / §AutoCapture / §TicketTooling) routes to. Do not paraphrase
|
|
8
|
+
the body — read it. Updates should flow back upstream (color-app + the `~/.pi` skill
|
|
9
|
+
above), not be patched here in isolation.
|
|
10
|
+
|
|
11
|
+
**Used by:** `adia-ui-kit` skill, when drafting tickets to upstream maintainers of
|
|
12
|
+
`@adia-ai/*` packages. The skill body's §FeedbackDiscipline section names the
|
|
13
|
+
five core principles + four-bucket classification + sniff tests; this file is the
|
|
14
|
+
full procedural detail behind those names.
|
|
15
|
+
|
|
16
|
+
**Companion:** `response-authoring.md` (the reviewer half of the dyad).
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## When to Use
|
|
21
|
+
|
|
22
|
+
- Authoring outbound FEEDBACK to upstream (AdiaUI, partner teams)
|
|
23
|
+
- Writing bug reports, feature requests, or RFCs to projects you don't own
|
|
24
|
+
- Filing upstream tickets that must survive principal-engineer / leadership review
|
|
25
|
+
- **Trigger phrases:** "write feedback to X", "file an issue about Y", "send this upstream"
|
|
26
|
+
|
|
27
|
+
The goal is a ticket the author can defend **item-by-item** under hostile review. Both **inclusions** and **exclusions** must hold up under "why is this here?" / "why is this not here?" cross-examination.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Core Principles
|
|
32
|
+
|
|
33
|
+
1. **Every item is evidence-bound.** A claim without a file path, commit hash, version number, or stack trace is a guess.
|
|
34
|
+
2. **Exclusions are first-class.** What you chose NOT to file is as important as what you filed. Future agents reading the ticket will ask "why isn't X here?" — answer it pre-emptively.
|
|
35
|
+
3. **Distinguish four failure modes:** framework bug, framework gap, consumer dogfooding miss, third-party/scope-violation. Only the first two belong in a feedback ticket.
|
|
36
|
+
4. **Verify before claiming "already shipped."** If you exclude an item on those grounds, open the installed source and confirm. Cite the file path.
|
|
37
|
+
5. **Reproducibility is the threshold for P0/P1.** If the recipient can't reproduce the symptom from your description, you've filed an anecdote, not a bug.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Procedure
|
|
42
|
+
|
|
43
|
+
### 1. Inventory raw findings
|
|
44
|
+
|
|
45
|
+
Before writing the ticket, list every observation from the session:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Re-read the work that surfaced the feedback
|
|
49
|
+
git log --oneline -20
|
|
50
|
+
git diff HEAD~5..HEAD -- src/ .claude/docs/
|
|
51
|
+
cat CHANGELOG.md | sed -n '/^## \[Unreleased\]/,/^## \[/p'
|
|
52
|
+
cat .agents/team/comms/from-agent-*.md 2>/dev/null
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Capture EVERY rough edge — don't filter yet. A list of 15 items where half get rejected is healthier than a list of 6 where 3 are weak.
|
|
56
|
+
|
|
57
|
+
### 2. Classify each finding into one of four buckets
|
|
58
|
+
|
|
59
|
+
| Bucket | Examples | Action |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| **Framework bug** | Crash, type-vs-runtime drift, parser mis-classification | File as `P0` if reproducible, `P1` if subtle |
|
|
62
|
+
| **Framework gap** | Missing primitive, missing prop, missing event type | File as `P1`–`P3` based on workaround cost |
|
|
63
|
+
| **Consumer dogfooding miss** | "Primitive X already exists with the exact shape we need; we just didn't use it" | NOT feedback — capture in `.agents/team/comms/` for peer pickup |
|
|
64
|
+
| **Third-party / scope violation** | "Vite cache is stale" / "TypeScript doesn't infer this" | NOT feedback to the recipient — note in related-observations or external doc |
|
|
65
|
+
|
|
66
|
+
**The classification gate eliminates ~30% of raw findings.** Anything that doesn't survive the bucket-check shouldn't go in.
|
|
67
|
+
|
|
68
|
+
### 3. Verify "already-shipped" exclusions
|
|
69
|
+
|
|
70
|
+
For every item you intend to exclude on grounds of "already resolved", prove it by opening the installed source:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Example: claim "<select-ui> event types shipped"
|
|
74
|
+
cat node_modules/<package>/components/select/select.d.ts | grep -E "EventDetail|CustomEvent"
|
|
75
|
+
|
|
76
|
+
# Example: claim "barrel re-exports element.js helpers"
|
|
77
|
+
grep -n "export.*html\|export.*signal" node_modules/<package>/core/element.d.ts
|
|
78
|
+
|
|
79
|
+
# Example: claim "phantom event removed"
|
|
80
|
+
grep -n "ToastCloseEvent" node_modules/<package>/components/toast/toast.d.ts
|
|
81
|
+
# Empty output = confirmed removed
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Save the file path + line number — you'll cite them in the "Items deliberately NOT included" section.
|
|
85
|
+
|
|
86
|
+
If you can't verify in <2 minutes, **don't exclude on those grounds** — either include the item (filing a duplicate is cheap) or admit uncertainty in the doc.
|
|
87
|
+
|
|
88
|
+
### 4. For each surviving finding, produce the four-block structure
|
|
89
|
+
|
|
90
|
+
```markdown
|
|
91
|
+
## N. <Title> (P<x>)
|
|
92
|
+
|
|
93
|
+
**Component:** <component name>
|
|
94
|
+
**Versions affected:** <range, with current version explicit>
|
|
95
|
+
|
|
96
|
+
### What happened
|
|
97
|
+
|
|
98
|
+
<Concrete observed behavior. Stack trace if a crash. Screenshot path
|
|
99
|
+
if visual. Cite file:line for both consumer code AND framework code.>
|
|
100
|
+
|
|
101
|
+
### Root cause (verified end-to-end)
|
|
102
|
+
|
|
103
|
+
<Walk the recipient through HOW you established the cause. If you
|
|
104
|
+
ran a probe, include the probe. If you read framework source, cite
|
|
105
|
+
the function name + line number.>
|
|
106
|
+
|
|
107
|
+
### Reproduction
|
|
108
|
+
|
|
109
|
+
<Minimal repro. Code block that the recipient can paste into their
|
|
110
|
+
test harness and see the symptom. If a runtime crash, include the
|
|
111
|
+
exact error message.>
|
|
112
|
+
|
|
113
|
+
### Request
|
|
114
|
+
|
|
115
|
+
<Specific ask. Either a code patch sketch, or a concrete API shape
|
|
116
|
+
with props/events/types, or a doc paragraph that should exist.>
|
|
117
|
+
|
|
118
|
+
### Why this matters
|
|
119
|
+
|
|
120
|
+
<One paragraph. Who else hits this? What's the workaround cost?
|
|
121
|
+
What's the cost of NOT fixing it?>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Drop sections that don't apply (e.g. a doc ask doesn't need a stack trace), but **every P0 needs every block**.
|
|
125
|
+
|
|
126
|
+
### 5. Estimate cost honestly
|
|
127
|
+
|
|
128
|
+
For each ask, include a cost estimate:
|
|
129
|
+
|
|
130
|
+
```markdown
|
|
131
|
+
| Pri | Item | Estimated cost |
|
|
132
|
+
|---|---|---|
|
|
133
|
+
| **P0** | inTag() skips HTML comments | ~20 LOC + 1 test |
|
|
134
|
+
| P1 | <copy-button-ui> primitive | medium (new component + tests + a2ui example) |
|
|
135
|
+
| P3 | TESTING.md docs | small (docs only) |
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Honest cost estimates let the recipient triage. If you don't know, write "unknown — would defer to maintainer judgment" — don't guess.
|
|
139
|
+
|
|
140
|
+
### 6. Write the "Items deliberately NOT included" section
|
|
141
|
+
|
|
142
|
+
This is the **defense block**. Structure:
|
|
143
|
+
|
|
144
|
+
```markdown
|
|
145
|
+
## Items deliberately NOT included (defending the exclusions)
|
|
146
|
+
|
|
147
|
+
To avoid duplicate filings, the following were considered and
|
|
148
|
+
explicitly left out. Each was verified against the installed
|
|
149
|
+
<package>@<version> source where applicable.
|
|
150
|
+
|
|
151
|
+
- **<Item>** — <verdict>. <Verification anchor: file path + line
|
|
152
|
+
number, or release note reference, or RESPONSE-XX cross-ref>.
|
|
153
|
+
<If a different ask captures the spirit of this item, cite the
|
|
154
|
+
section number that does.>
|
|
155
|
+
|
|
156
|
+
- **<Item>** — already exists with the exact shape we need. NOT
|
|
157
|
+
feedback — this is a **consumer-side dogfooding miss** captured
|
|
158
|
+
separately in `.agents/team/comms/<dated-handoff>.md`.
|
|
159
|
+
|
|
160
|
+
- **<Item>** — third-party tool issue. Workaround is <X>. Listed
|
|
161
|
+
in related-observations for documentation benefit but not a code
|
|
162
|
+
ask on this recipient.
|
|
163
|
+
|
|
164
|
+
- **<Item>** — speculative; no concrete pain-point yet. Filing
|
|
165
|
+
without a use-case would be P3 noise.
|
|
166
|
+
|
|
167
|
+
If any of the above is wrong or stale relative to a newer release,
|
|
168
|
+
please flag in the response.
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Each exclusion must cite either:
|
|
172
|
+
- A specific file/line in the installed package that proves it's shipped, OR
|
|
173
|
+
- A RESPONSE-XX or CHANGELOG entry that resolved it, OR
|
|
174
|
+
- A `.agents/team/comms/` path where the issue is being tracked elsewhere, OR
|
|
175
|
+
- An explicit statement that it's out of scope and why
|
|
176
|
+
|
|
177
|
+
**"Already shipped — trust me"** is not acceptable. Cite or include.
|
|
178
|
+
|
|
179
|
+
### 6b. (Optional) Promote exclusions to a companion `--OMISSIONS-DEFENSE.md` file
|
|
180
|
+
|
|
181
|
+
When the exclusion list is **15+ items, spans 4+ distinct rationale categories, or the ticket will face hostile leadership review**, split the defense block out into a sibling file:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
.agents/team/tickets/outbox/
|
|
185
|
+
FEEDBACK-07--<recipient>--<date>.md # the asks
|
|
186
|
+
FEEDBACK-07--OMISSIONS-DEFENSE.md # the exclusions, expanded
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**When to split vs keep inline:**
|
|
190
|
+
|
|
191
|
+
| Inline (§6 block) | Companion file (§6b) |
|
|
192
|
+
|---|---|
|
|
193
|
+
| <10 exclusions | 15+ exclusions |
|
|
194
|
+
| 1–2 rationale categories | 4+ rationale categories |
|
|
195
|
+
| Routine review | Principal-engineer / leadership audit expected |
|
|
196
|
+
| One-shot ticket | Part of multi-round feedback series where omissions compound |
|
|
197
|
+
|
|
198
|
+
**Companion file structure** — group omissions by **rationale category**, not by priority. Categories observed to work well in practice:
|
|
199
|
+
|
|
200
|
+
```markdown
|
|
201
|
+
# FEEDBACK-NN Omissions Defense
|
|
202
|
+
|
|
203
|
+
**Date:** YYYY-MM-DD
|
|
204
|
+
**Author:** <role / session>
|
|
205
|
+
**Context:** Prepared for leadership + principal engineer review. Every
|
|
206
|
+
item below was considered for inclusion in `FEEDBACK-NN--<recipient>--<date>.md`
|
|
207
|
+
and deliberately excluded.
|
|
208
|
+
|
|
209
|
+
## Principle Applied
|
|
210
|
+
|
|
211
|
+
<2–4 sentences naming the scoping rule the ticket used, e.g.
|
|
212
|
+
"current-session, concrete, reproducible friction that blocked or
|
|
213
|
+
significantly slowed v3 UI delivery.">
|
|
214
|
+
|
|
215
|
+
Items were excluded if they were:
|
|
216
|
+
1. <Category 1, e.g. "Already filed by the peer agent in FEEDBACK-NN-1">
|
|
217
|
+
2. <Category 2, e.g. "Resolved in prior releases">
|
|
218
|
+
3. <Category 3, e.g. "Standard CSS customization, not framework defects">
|
|
219
|
+
4. <Category 4, e.g. "Speculative / not yet encountered in practice">
|
|
220
|
+
5. <Category 5, e.g. "Internal to our adapter architecture">
|
|
221
|
+
|
|
222
|
+
I will flag items where my confidence is low.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## <Category 1> — Correctly Omitted
|
|
227
|
+
|
|
228
|
+
### Omission 1: <one-line title> (P<x>)
|
|
229
|
+
**<EVIDENCE TAG>** (e.g. PEER FINDING / VERIFIED IN SOURCE / RESOLVED IN vX.Y)
|
|
230
|
+
<1–2 sentences citing the verification anchor.>
|
|
231
|
+
**Defense:** <Why this exclusion is correct.>
|
|
232
|
+
**Confidence:** High | Medium | Low.
|
|
233
|
+
|
|
234
|
+
### Omission 2: ...
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## <Category 2> — Correctly Omitted
|
|
239
|
+
...
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**Mandatory per-omission fields:**
|
|
243
|
+
- **Evidence tag** (uppercase, scannable: `PEER FINDING`, `VERIFIED IN SOURCE`, `RESOLVED IN v0.5.2`, `OUR INTERNAL API`, etc.)
|
|
244
|
+
- **Defense paragraph** (1–3 sentences — why the exclusion is the right call)
|
|
245
|
+
- **Confidence rating** (`High` / `Medium` / `Low`) — Low or Medium ratings are honesty, not weakness
|
|
246
|
+
|
|
247
|
+
**Cross-link the companion in the main ticket's front-matter:**
|
|
248
|
+
```yaml
|
|
249
|
+
references:
|
|
250
|
+
- "FEEDBACK-NN--OMISSIONS-DEFENSE"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
…and in §6 of the main ticket, replace the bullet list with a one-line pointer:
|
|
254
|
+
|
|
255
|
+
> Items considered and deliberately excluded are tracked in
|
|
256
|
+
> `FEEDBACK-NN--OMISSIONS-DEFENSE.md` — 15 omissions across 5 rationale
|
|
257
|
+
> categories, each with verification anchor and confidence rating.
|
|
258
|
+
|
|
259
|
+
**Why split:** large inline `§6` blocks get skimmed. A standalone file forces both author and reviewer to treat exclusions as first-class artifacts. Principal engineers reviewing the ticket will read the companion file before signing off, because it's labelled as the exclusion defense — they don't have to dig.
|
|
260
|
+
|
|
261
|
+
**Anti-pattern:** splitting when the count is small. <10 exclusions inline is more readable than two files. Don't manufacture a defense file for ceremony.
|
|
262
|
+
|
|
263
|
+
### 7. Cross-reference siblings and predecessors
|
|
264
|
+
|
|
265
|
+
Front-matter `references:` block must list every prior FEEDBACK / RESPONSE that touches the same components or themes. In the body, explicitly call out:
|
|
266
|
+
|
|
267
|
+
- **Sibling tickets in the same session** — "FEEDBACK-07 §2 is a related `core/template.js` bug" + cross-reference link.
|
|
268
|
+
- **Duplicates** — "Item §4 is the same ask as FEEDBACK-XX §N; recipient can collapse when triaging."
|
|
269
|
+
- **Supersession** — "This obsoletes FEEDBACK-YY §M after the RESPONSE-YY clarification."
|
|
270
|
+
|
|
271
|
+
A reader who lands on your ticket without context should be able to follow links to the full conversation.
|
|
272
|
+
|
|
273
|
+
### 8. Set status and front-matter correctly
|
|
274
|
+
|
|
275
|
+
```yaml
|
|
276
|
+
---
|
|
277
|
+
id: "06" # serial per recipient
|
|
278
|
+
type: feedback # feedback | bug | request | response
|
|
279
|
+
recipient: adia-ui
|
|
280
|
+
date: "2026-05-13"
|
|
281
|
+
author: "<role> (<session-context>)" # don't claim a human author
|
|
282
|
+
project: "<project that generated the feedback>"
|
|
283
|
+
status: draft # draft until submitted
|
|
284
|
+
references:
|
|
285
|
+
- "FEEDBACK-04--adia-ui--2026-05-13" # every prior touchpoint
|
|
286
|
+
version: "@adia-ai/web-components@0.7.13" # version verified against
|
|
287
|
+
priority: p0 # highest priority in the doc
|
|
288
|
+
---
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
`status: draft` is the right starting point. Only the human user (or the agent acting under explicit submit instruction) should bump it to `submitted`.
|
|
292
|
+
|
|
293
|
+
### 9. Update the registry
|
|
294
|
+
|
|
295
|
+
Add your new file at the bottom of `.agents/team/tickets/REGISTRY.md` with a one-line summary of every priority-tagged item:
|
|
296
|
+
|
|
297
|
+
```markdown
|
|
298
|
+
| `FEEDBACK-06--adia-ui--2026-05-13.md` | feedback | adia-ui | 2026-05-13 | draft | inTag HTML-comment parse bug (P0), drawer close-reason, sidebar responsive collapse, icon requiredIcons, phantom-event audit, ... |
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Don't truncate to a topic — list the actual items so future searches can find them.
|
|
302
|
+
|
|
303
|
+
If you wrote a §6b companion file, give it its own registry row:
|
|
304
|
+
|
|
305
|
+
```markdown
|
|
306
|
+
| `FEEDBACK-07--OMISSIONS-DEFENSE.md` | omissions-defense | adia-ui | 2026-05-13 | draft | Companion to FEEDBACK-07 — 15 omissions across 5 rationale categories with confidence ratings |
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### 10. Verify the ticket builds and ships
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# TS / build still passes
|
|
313
|
+
npx tsc --noEmit | grep -v '<peer-owned-paths>'
|
|
314
|
+
|
|
315
|
+
# Dev server still up
|
|
316
|
+
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:<port>/
|
|
317
|
+
|
|
318
|
+
# Working tree clean
|
|
319
|
+
git status --short
|
|
320
|
+
|
|
321
|
+
# Ticket actually parses as markdown (some renderers choke on edge cases)
|
|
322
|
+
markdownlint .agents/team/tickets/outbox/<file>.md 2>/dev/null || true
|
|
323
|
+
|
|
324
|
+
# Commit with explicit excluded list for peer-agent files
|
|
325
|
+
git commit -m "docs(tickets): FEEDBACK-XX to <recipient> — <topic>
|
|
326
|
+
|
|
327
|
+
<full narrative>
|
|
328
|
+
|
|
329
|
+
Excluded — peer-agent in-flight: <named files or 'none'>."
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Sniff tests before sending
|
|
335
|
+
|
|
336
|
+
Walk through each one before declaring the ticket ready:
|
|
337
|
+
|
|
338
|
+
1. **Reproduction test:** Can a stranger paste your repro code into a fresh project and see the symptom? If not, P0/P1 status is wrong.
|
|
339
|
+
2. **Exclusion test:** Pick one item from "Items deliberately NOT included." Can you defend it in 30 seconds with a file path?
|
|
340
|
+
3. **Cost test:** Can the recipient roughly estimate their effort from your cost block? "Medium — new component + tests + a2ui example" is good. "Some work" is not.
|
|
341
|
+
4. **Duplicate test:** Have you grepped the prior FEEDBACK / RESPONSE files for keywords that overlap with your asks? If you find matches, either cross-reference them or remove your duplicate.
|
|
342
|
+
5. **Scope test:** Is any item really a third-party-tool issue or a consumer-side miss? If yes, move it out of the feedback ticket.
|
|
343
|
+
6. **Pre-mortem test:** If leadership asks "why did you ship this and not item X?" — do you have an answer? If "I didn't think of X" is the honest answer, X probably belongs in the doc.
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Pitfalls Specific to Our Workflow
|
|
348
|
+
|
|
349
|
+
### AdiaUI binding contract — verify before filing as a framework bug
|
|
350
|
+
|
|
351
|
+
Reactive `*-ui` form controls and template re-renders share a single contract that surfaces as ~4 distinct symptoms; they are ONE root cause, not four:
|
|
352
|
+
|
|
353
|
+
1. `.value=${() => x.value}` (getter function) silently fails on `slider-ui` / `switch-ui`. The component reads `value` as a plain property at update time; a function reference is stored as-is and never invoked. **Use `.value=${x.value}` (direct expression).**
|
|
354
|
+
2. `style="background:${v}"` renders literal `style="background:{{p:0}}"` in the DOM (partial attribute interpolation is not supported). **Use `style="${precomputed}"` where the entire attribute is one placeholder, or `.style=${expr}` property binding.** v0.5.3+ console.warns.
|
|
355
|
+
3. Template doesn't re-render when an upstream signal changes, even though a nested callback dereferences it. Cause: the *template function itself* never read the signal — only a nested callback did. **Top of every template, read every signal whose change should trigger re-render: `const _doc = doc.value; void _doc`.**
|
|
356
|
+
4. `OKLCHColor.h = NaN` (chromaless source) → `oklchToSRGB().hex = "#NaNNaNNaN"` → `<input type="color">` console-flood: `value does not conform to #rrggbb`. **Sanitize at the conversion boundary, not the binding site.**
|
|
357
|
+
|
|
358
|
+
Before filing any of these as a framework bug, run the equivalent template through a Playwright probe and confirm the DOM. Symptoms 1–3 are documented in `USAGE.md` § property-binding-patterns; symptom 4 is a consumer bug.
|
|
359
|
+
|
|
360
|
+
### HTML-comment apostrophes/unmatched `<>` in `html\`\`` templates
|
|
361
|
+
|
|
362
|
+
Naive `inTag()` quote-tracker mis-classifies placeholders after the comment. Symptom: `Cannot read 'detail' of undefined` from connectedCallback. Fix: reword comments, use ' (U+2019). Fixed framework-side in v0.5.3 — file only if reproducible on current version.
|
|
363
|
+
|
|
364
|
+
### Phosphor icon name verification is non-optional
|
|
365
|
+
|
|
366
|
+
`<icon-ui name="X">` warns at runtime if `X` doesn't exist in `@phosphor-icons/core/assets/regular/`. Before using an icon, `ls node_modules/@phosphor-icons/core/assets/regular/ | grep <pattern>`. Common mistakes: `plus` (often wants `plus-circle`), `arrows-counter-clockwise` (use singular `arrow-counter-clockwise`). Don't file as feedback.
|
|
367
|
+
|
|
368
|
+
### Vite CSS cache is real and silent
|
|
369
|
+
|
|
370
|
+
When CSS changes don't reach the browser, the file on disk may differ from the served bundle. Symptom: rule exists in `src/style.css` but `curl http://localhost:5173/src/style.css` returns an older version. Fix: `rm -rf node_modules/.vite && pkill -f vite && npm run dev`. Not an AdiaUI bug.
|
|
371
|
+
|
|
372
|
+
### Don't conflate "didn't find it" with "doesn't exist"
|
|
373
|
+
|
|
374
|
+
Before claiming a feature is missing, grep the installed package source AND `components/*/USAGE.md` / `README.md` / `.a2ui.json` / `.yaml` sidecars (e.g. `tree-ui` keyboard nav, `slider-ui` decimal step).
|
|
375
|
+
|
|
376
|
+
### Don't file silent-failure complaints without a runtime symptom
|
|
377
|
+
|
|
378
|
+
When the template engine renders `{{p:0}}` literally, include the DOM dump as evidence — not "I expected X."
|
|
379
|
+
|
|
380
|
+
### Don't file workaround-as-bug if USAGE.md prescribes the workaround
|
|
381
|
+
|
|
382
|
+
`USAGE.md` § property-binding-patterns documents `.foo=${expr}` for property binding; `foo="${expr}"` failing isn't a bug.
|
|
383
|
+
|
|
384
|
+
### Don't file separate tickets for the same root cause
|
|
385
|
+
|
|
386
|
+
Slider getter-function, signal-binding stuckness, and partial-attr interpolation all stem from "template re-runs only on direct signal reads." File as ONE root-cause ticket with N symptoms.
|
|
387
|
+
|
|
388
|
+
### Don't drop omissions
|
|
389
|
+
|
|
390
|
+
For every issue encountered but NOT filed, write a one-line defense in `--OMISSIONS-DEFENSE.md`. Examples that DON'T merit a ticket: typos in your own code, missing imports, USAGE.md patterns you didn't read.
|
|
391
|
+
|
|
392
|
+
### Don't promise a CHANGELOG entry without verifying the recipient ships one
|
|
393
|
+
|
|
394
|
+
Track via `git log` on their main, not via CHANGELOG.
|
|
395
|
+
|
|
396
|
+
### Lockstep PATCH releases are common
|
|
397
|
+
|
|
398
|
+
AdiaUI sometimes ships PATCH bumps with no source change (e.g. v0.5.1, v0.5.4 ride-alongs). Before claiming a fix "should have shipped in vX," check `git log` between cuts. Don't file a regression for an issue resolved in the prior MINOR.
|
|
399
|
+
|
|
400
|
+
### Playwright tests for custom elements have unique gotchas
|
|
401
|
+
|
|
402
|
+
`<tree-item-ui>` click activation requires the row slot, not the element. `dts-right-panel` may resolve to 2 elements (wide-viewport sidebar + narrow-viewport drawer); use `.first()` or filter by `:visible`. Async-loading sub-components (e.g. `<code-ui>` in drawers): `waitFor({ state: 'attached' })` not `'visible'`.
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## Example skeleton
|
|
407
|
+
|
|
408
|
+
```yaml
|
|
409
|
+
---
|
|
410
|
+
id: "XX"
|
|
411
|
+
type: feedback
|
|
412
|
+
recipient: adia-ui
|
|
413
|
+
date: "2026-05-XX"
|
|
414
|
+
author: "<role> (<session>)"
|
|
415
|
+
project: "color-app"
|
|
416
|
+
references:
|
|
417
|
+
- "FEEDBACK-04--adia-ui--2026-05-13"
|
|
418
|
+
- "RESPONSE-04--chat-ui--2026-05-13"
|
|
419
|
+
- "FEEDBACK-07--OMISSIONS-DEFENSE"
|
|
420
|
+
version: "@adia-ai/web-components@0.7.13"
|
|
421
|
+
priority: p0
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
# FEEDBACK-XX — <Topic summary>
|
|
425
|
+
|
|
426
|
+
## <N>. <Title> (P<x>)
|
|
427
|
+
|
|
428
|
+
**Component:** <name>
|
|
429
|
+
**Versions affected:** <range>
|
|
430
|
+
|
|
431
|
+
### What happened
|
|
432
|
+
...
|
|
433
|
+
|
|
434
|
+
### Root cause (verified end-to-end)
|
|
435
|
+
...
|
|
436
|
+
|
|
437
|
+
### Reproduction
|
|
438
|
+
```ts
|
|
439
|
+
// Minimal repro
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### Request
|
|
443
|
+
...
|
|
444
|
+
|
|
445
|
+
### Why this matters
|
|
446
|
+
...
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
## <N+1>. ...
|
|
451
|
+
|
|
452
|
+
---
|
|
453
|
+
|
|
454
|
+
## Items deliberately NOT included (defending the exclusions)
|
|
455
|
+
|
|
456
|
+
To avoid duplicate filings ...
|
|
457
|
+
|
|
458
|
+
- **<Item>** — <verdict>. <Anchor>.
|
|
459
|
+
- **<Item>** — consumer dogfooding miss. Tracked in `.agents/team/comms/...`
|
|
460
|
+
- **<Item>** — third-party issue. Workaround is ...
|
|
461
|
+
- **<Item>** — speculative.
|
|
462
|
+
|
|
463
|
+
## Related observations (for documentation benefit only)
|
|
464
|
+
|
|
465
|
+
- ...
|
|
466
|
+
```
|