@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,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:** `references/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/ 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
+ ```