@hegemonart/get-design-done 1.42.0 → 1.43.0

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 (425) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +1080 -1038
  4. package/README.md +157 -155
  5. package/SKILL.md +42 -42
  6. package/agents/README.md +53 -53
  7. package/agents/a11y-mapper.md +3 -3
  8. package/agents/component-benchmark-harvester.md +8 -8
  9. package/agents/component-benchmark-synthesizer.md +11 -11
  10. package/agents/component-taxonomy-mapper.md +5 -5
  11. package/agents/compose-executor.md +25 -25
  12. package/agents/conflict-resolver.md +8 -8
  13. package/agents/cost-forecaster.md +12 -12
  14. package/agents/decision-journal-exporter.md +5 -5
  15. package/agents/design-advisor.md +19 -19
  16. package/agents/design-assumptions-analyzer.md +16 -16
  17. package/agents/design-auditor.md +39 -39
  18. package/agents/design-authority-watcher.md +28 -28
  19. package/agents/design-component-generator.md +27 -27
  20. package/agents/design-context-builder.md +66 -66
  21. package/agents/design-context-checker-gate.md +5 -5
  22. package/agents/design-context-checker.md +20 -20
  23. package/agents/design-discussant.md +23 -23
  24. package/agents/design-doc-writer.md +12 -12
  25. package/agents/design-executor.md +38 -38
  26. package/agents/design-figma-writer.md +31 -31
  27. package/agents/design-fixer.md +27 -27
  28. package/agents/design-integration-checker-gate.md +5 -5
  29. package/agents/design-integration-checker.md +29 -29
  30. package/agents/design-paper-writer.md +14 -14
  31. package/agents/design-pattern-mapper.md +9 -9
  32. package/agents/design-pencil-writer.md +12 -12
  33. package/agents/design-phase-researcher.md +14 -14
  34. package/agents/design-plan-checker.md +13 -13
  35. package/agents/design-planner.md +24 -24
  36. package/agents/design-reflector.md +48 -48
  37. package/agents/design-research-synthesizer.md +21 -21
  38. package/agents/design-start-writer.md +7 -7
  39. package/agents/design-update-checker.md +8 -8
  40. package/agents/design-verifier-gate.md +5 -5
  41. package/agents/design-verifier.md +80 -80
  42. package/agents/ds-generator.md +14 -14
  43. package/agents/ds-migration-planner.md +12 -12
  44. package/agents/email-executor.md +26 -26
  45. package/agents/experiment-result-ingester.md +10 -10
  46. package/agents/flutter-executor.md +28 -28
  47. package/agents/gdd-graph-refresh.md +10 -10
  48. package/agents/gdd-intel-updater.md +11 -11
  49. package/agents/gdd-learnings-extractor.md +2 -2
  50. package/agents/motion-mapper.md +8 -8
  51. package/agents/motion-verifier.md +16 -16
  52. package/agents/pdf-executor.md +27 -27
  53. package/agents/perf-analyzer.md +20 -20
  54. package/agents/pr-commenter.md +24 -24
  55. package/agents/prototype-gate.md +29 -29
  56. package/agents/quality-gate-runner.md +21 -21
  57. package/agents/rollout-coordinator.md +8 -8
  58. package/agents/swift-executor.md +41 -41
  59. package/agents/ticket-sync-agent.md +19 -19
  60. package/agents/token-mapper.md +6 -6
  61. package/agents/user-research-synthesizer.md +13 -13
  62. package/agents/visual-hierarchy-mapper.md +2 -2
  63. package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +3 -3
  64. package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +10 -10
  65. package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +13 -13
  66. package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +20 -20
  67. package/dist/claude-code/.claude/skills/audit/SKILL.md +7 -7
  68. package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +7 -7
  69. package/dist/claude-code/.claude/skills/benchmark/SKILL.md +7 -7
  70. package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +10 -10
  71. package/dist/claude-code/.claude/skills/brief/SKILL.md +20 -20
  72. package/dist/claude-code/.claude/skills/budget/SKILL.md +4 -4
  73. package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +6 -6
  74. package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +5 -5
  75. package/dist/claude-code/.claude/skills/check-update/SKILL.md +5 -5
  76. package/dist/claude-code/.claude/skills/compare/SKILL.md +15 -15
  77. package/dist/claude-code/.claude/skills/compare/compare-rubric.md +17 -17
  78. package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +5 -5
  79. package/dist/claude-code/.claude/skills/connections/SKILL.md +11 -11
  80. package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +76 -76
  81. package/dist/claude-code/.claude/skills/continue/SKILL.md +2 -2
  82. package/dist/claude-code/.claude/skills/darkmode/SKILL.md +17 -17
  83. package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +7 -7
  84. package/dist/claude-code/.claude/skills/debug/SKILL.md +3 -3
  85. package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +12 -12
  86. package/dist/claude-code/.claude/skills/design/SKILL.md +12 -12
  87. package/dist/claude-code/.claude/skills/design/design-procedure.md +23 -23
  88. package/dist/claude-code/.claude/skills/discover/SKILL.md +7 -7
  89. package/dist/claude-code/.claude/skills/discover/discover-procedure.md +18 -18
  90. package/dist/claude-code/.claude/skills/discuss/SKILL.md +12 -12
  91. package/dist/claude-code/.claude/skills/do/SKILL.md +1 -1
  92. package/dist/claude-code/.claude/skills/explore/SKILL.md +21 -21
  93. package/dist/claude-code/.claude/skills/explore/explore-procedure.md +48 -48
  94. package/dist/claude-code/.claude/skills/export/SKILL.md +9 -9
  95. package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +5 -5
  96. package/dist/claude-code/.claude/skills/fast/SKILL.md +7 -7
  97. package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +11 -11
  98. package/dist/claude-code/.claude/skills/figma-write/SKILL.md +6 -6
  99. package/dist/claude-code/.claude/skills/graphify/SKILL.md +4 -4
  100. package/dist/claude-code/.claude/skills/health/SKILL.md +16 -16
  101. package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +3 -3
  102. package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +6 -6
  103. package/dist/claude-code/.claude/skills/help/SKILL.md +1 -1
  104. package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +4 -4
  105. package/dist/claude-code/.claude/skills/map/SKILL.md +12 -12
  106. package/dist/claude-code/.claude/skills/migrate/SKILL.md +5 -5
  107. package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +2 -2
  108. package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +16 -16
  109. package/dist/claude-code/.claude/skills/new-project/SKILL.md +1 -1
  110. package/dist/claude-code/.claude/skills/next/SKILL.md +5 -5
  111. package/dist/claude-code/.claude/skills/note/SKILL.md +1 -1
  112. package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +4 -4
  113. package/dist/claude-code/.claude/skills/optimize/SKILL.md +15 -15
  114. package/dist/claude-code/.claude/skills/pause/SKILL.md +5 -5
  115. package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +11 -11
  116. package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +39 -39
  117. package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +14 -14
  118. package/dist/claude-code/.claude/skills/peers/SKILL.md +4 -4
  119. package/dist/claude-code/.claude/skills/plan/SKILL.md +13 -13
  120. package/dist/claude-code/.claude/skills/plan/plan-procedure.md +24 -24
  121. package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +4 -4
  122. package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +2 -2
  123. package/dist/claude-code/.claude/skills/progress/SKILL.md +15 -15
  124. package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +22 -22
  125. package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +19 -19
  126. package/dist/claude-code/.claude/skills/quick/SKILL.md +5 -5
  127. package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +7 -7
  128. package/dist/claude-code/.claude/skills/reflect/SKILL.md +3 -3
  129. package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +11 -11
  130. package/dist/claude-code/.claude/skills/report-issue/SKILL.md +5 -5
  131. package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +27 -27
  132. package/dist/claude-code/.claude/skills/resume/SKILL.md +9 -9
  133. package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +3 -3
  134. package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +3 -3
  135. package/dist/claude-code/.claude/skills/roi/SKILL.md +5 -5
  136. package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +4 -4
  137. package/dist/claude-code/.claude/skills/router/SKILL.md +11 -11
  138. package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +6 -6
  139. package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +9 -9
  140. package/dist/claude-code/.claude/skills/router/router-rules.md +7 -7
  141. package/dist/claude-code/.claude/skills/scan/SKILL.md +16 -16
  142. package/dist/claude-code/.claude/skills/scan/scan-procedure.md +42 -42
  143. package/dist/claude-code/.claude/skills/settings/SKILL.md +2 -2
  144. package/dist/claude-code/.claude/skills/ship/SKILL.md +7 -7
  145. package/dist/claude-code/.claude/skills/sketch/SKILL.md +10 -10
  146. package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +12 -12
  147. package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +5 -5
  148. package/dist/claude-code/.claude/skills/spike/SKILL.md +7 -7
  149. package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +13 -13
  150. package/dist/claude-code/.claude/skills/start/SKILL.md +8 -8
  151. package/dist/claude-code/.claude/skills/start/start-procedure.md +9 -9
  152. package/dist/claude-code/.claude/skills/stats/SKILL.md +5 -5
  153. package/dist/claude-code/.claude/skills/style/SKILL.md +12 -12
  154. package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +12 -12
  155. package/dist/claude-code/.claude/skills/synthesize/SKILL.md +10 -10
  156. package/dist/claude-code/.claude/skills/timeline/SKILL.md +4 -4
  157. package/dist/claude-code/.claude/skills/todo/SKILL.md +3 -3
  158. package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +10 -10
  159. package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +3 -3
  160. package/dist/claude-code/.claude/skills/update/SKILL.md +9 -9
  161. package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +17 -17
  162. package/dist/claude-code/.claude/skills/verify/SKILL.md +13 -13
  163. package/dist/claude-code/.claude/skills/verify/verify-procedure.md +34 -34
  164. package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +8 -8
  165. package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +9 -9
  166. package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +4 -4
  167. package/package.json +5 -2
  168. package/reference/DEPRECATIONS.md +10 -10
  169. package/reference/STATE-TEMPLATE.md +26 -26
  170. package/reference/accessibility.md +13 -13
  171. package/reference/adr-format.md +13 -13
  172. package/reference/ai-native-tool-interface.md +5 -5
  173. package/reference/anti-patterns.md +9 -9
  174. package/reference/architecture-vocabulary.md +31 -31
  175. package/reference/audit-scoring.md +13 -13
  176. package/reference/authority-feeds.md +36 -36
  177. package/reference/bandit-integration.md +25 -25
  178. package/reference/brand-voice.md +36 -36
  179. package/reference/capability-gap-stage-gate.md +20 -20
  180. package/reference/checklists.md +26 -26
  181. package/reference/cli-localization.md +13 -13
  182. package/reference/codex-tools.md +2 -2
  183. package/reference/color-theory.md +28 -28
  184. package/reference/component-authoring.md +4 -4
  185. package/reference/components/README.md +13 -13
  186. package/reference/components/TEMPLATE.md +13 -13
  187. package/reference/components/accordion.md +15 -15
  188. package/reference/components/alert.md +25 -25
  189. package/reference/components/badge.md +18 -18
  190. package/reference/components/breadcrumbs.md +24 -24
  191. package/reference/components/button.md +21 -21
  192. package/reference/components/card.md +13 -13
  193. package/reference/components/checkbox.md +20 -20
  194. package/reference/components/chip.md +20 -20
  195. package/reference/components/command-palette.md +15 -15
  196. package/reference/components/date-picker.md +22 -22
  197. package/reference/components/drawer.md +13 -13
  198. package/reference/components/file-upload.md +22 -22
  199. package/reference/components/input.md +18 -18
  200. package/reference/components/label.md +25 -25
  201. package/reference/components/link.md +19 -19
  202. package/reference/components/list.md +17 -17
  203. package/reference/components/menu.md +19 -19
  204. package/reference/components/modal-dialog.md +16 -16
  205. package/reference/components/navbar.md +19 -19
  206. package/reference/components/pagination.md +18 -18
  207. package/reference/components/popover.md +12 -12
  208. package/reference/components/progress.md +18 -18
  209. package/reference/components/radio.md +17 -17
  210. package/reference/components/rich-text-editor.md +24 -24
  211. package/reference/components/select-combobox.md +16 -16
  212. package/reference/components/sidebar.md +15 -15
  213. package/reference/components/skeleton.md +20 -20
  214. package/reference/components/slider.md +20 -20
  215. package/reference/components/stepper.md +24 -24
  216. package/reference/components/switch.md +19 -19
  217. package/reference/components/table.md +21 -21
  218. package/reference/components/tabs.md +11 -11
  219. package/reference/components/toast.md +19 -19
  220. package/reference/components/tooltip.md +19 -19
  221. package/reference/components/tree.md +17 -17
  222. package/reference/composition.md +38 -38
  223. package/reference/config-schema.md +37 -37
  224. package/reference/context-md-format.md +9 -9
  225. package/reference/contrast-advanced.md +29 -29
  226. package/reference/conversational-ui.md +17 -17
  227. package/reference/cost-governance.md +14 -14
  228. package/reference/css-grid-layout.md +8 -8
  229. package/reference/cycle-handoff-preamble.md +3 -3
  230. package/reference/data-visualization.md +67 -67
  231. package/reference/debugger-philosophy.md +5 -5
  232. package/reference/design-system-guidance.md +21 -21
  233. package/reference/design-systems-catalog.md +20 -20
  234. package/reference/design-variants.md +11 -11
  235. package/reference/domains/civic-patterns.md +10 -10
  236. package/reference/domains/finance-patterns.md +9 -9
  237. package/reference/domains/gaming-patterns.md +9 -9
  238. package/reference/domains/healthcare-patterns.md +11 -11
  239. package/reference/ds-bootstrap-rubric.md +13 -13
  240. package/reference/email-design.md +22 -22
  241. package/reference/emotional-design.md +10 -10
  242. package/reference/error-recovery.md +11 -11
  243. package/reference/export-formats.md +7 -7
  244. package/reference/figma-sandbox.md +6 -6
  245. package/reference/first-principles.md +10 -10
  246. package/reference/form-patterns.md +26 -26
  247. package/reference/framer-motion-patterns.md +49 -49
  248. package/reference/gdd-runtime-audit.md +17 -17
  249. package/reference/gdd-threat-model.md +44 -44
  250. package/reference/gemini-tools.md +3 -3
  251. package/reference/gestalt.md +24 -24
  252. package/reference/heuristics.md +32 -32
  253. package/reference/i18n.md +44 -44
  254. package/reference/iconography.md +24 -24
  255. package/reference/image-optimization.md +14 -14
  256. package/reference/information-architecture.md +47 -47
  257. package/reference/intel-schema.md +1 -1
  258. package/reference/known-failure-modes.md +37 -37
  259. package/reference/meta-rules.md +5 -5
  260. package/reference/migrations/material-3-to-4.md +17 -17
  261. package/reference/migrations/mui-v6.md +16 -16
  262. package/reference/migrations/shadcn-v2.md +25 -25
  263. package/reference/migrations/tailwind-v4.md +21 -21
  264. package/reference/model-prices.md +3 -3
  265. package/reference/model-tiers.md +40 -40
  266. package/reference/motion-advanced.md +21 -21
  267. package/reference/motion-easings.md +29 -29
  268. package/reference/motion-interpolate.md +1 -1
  269. package/reference/motion-spring.md +13 -13
  270. package/reference/motion-transition-taxonomy.md +34 -34
  271. package/reference/motion.md +31 -31
  272. package/reference/multi-author-model.md +13 -13
  273. package/reference/native-platforms.md +28 -28
  274. package/reference/notification-routing.md +6 -6
  275. package/reference/onboarding-progressive-disclosure.md +32 -32
  276. package/reference/openrouter-tier-mapping.md +8 -8
  277. package/reference/palette-catalog.md +37 -37
  278. package/reference/parallelism-rules.md +20 -20
  279. package/reference/peer-cli-capabilities.md +14 -14
  280. package/reference/peer-protocols.md +21 -21
  281. package/reference/perf-budget.md +21 -21
  282. package/reference/performance.md +22 -22
  283. package/reference/platforms.md +51 -51
  284. package/reference/pr-review-integration.md +7 -7
  285. package/reference/prices/antigravity.md +3 -3
  286. package/reference/prices/augment.md +3 -3
  287. package/reference/prices/claude.md +2 -2
  288. package/reference/prices/cline.md +4 -4
  289. package/reference/prices/codebuddy.md +3 -3
  290. package/reference/prices/codex.md +2 -2
  291. package/reference/prices/copilot.md +3 -3
  292. package/reference/prices/cursor.md +3 -3
  293. package/reference/prices/gemini.md +2 -2
  294. package/reference/prices/kilo.md +3 -3
  295. package/reference/prices/opencode.md +4 -4
  296. package/reference/prices/qwen.md +2 -2
  297. package/reference/prices/trae.md +3 -3
  298. package/reference/prices/windsurf.md +3 -3
  299. package/reference/prices.openrouter.md +5 -5
  300. package/reference/print-design.md +36 -36
  301. package/reference/priority-matrix.md +2 -2
  302. package/reference/project-skills-guide.md +3 -3
  303. package/reference/proportion-systems.md +23 -23
  304. package/reference/pseudonymization-rules.md +30 -30
  305. package/reference/retrieval-contract.md +14 -14
  306. package/reference/review-format.md +7 -7
  307. package/reference/rollout-coordination.md +10 -10
  308. package/reference/rtl-cjk-cultural.md +39 -39
  309. package/reference/runtime-models.md +28 -28
  310. package/reference/shared-preamble.md +26 -26
  311. package/reference/skill-authoring-contract.md +16 -16
  312. package/reference/skill-placeholders.md +3 -3
  313. package/reference/start-interview.md +10 -10
  314. package/reference/style-vocabulary.md +25 -25
  315. package/reference/surfaces.md +4 -4
  316. package/reference/ticket-sync.md +9 -9
  317. package/reference/typography.md +64 -64
  318. package/reference/user-research.md +54 -54
  319. package/reference/variable-fonts-loading.md +15 -15
  320. package/reference/visual-hierarchy-layout.md +41 -41
  321. package/scripts/lib/manifest/prose-denylist.json +1 -1
  322. package/skills/add-backlog/SKILL.md +3 -3
  323. package/skills/analyze-dependencies/SKILL.md +10 -10
  324. package/skills/apply-reflections/SKILL.md +13 -13
  325. package/skills/apply-reflections/apply-reflections-procedure.md +20 -20
  326. package/skills/audit/SKILL.md +7 -7
  327. package/skills/bandit-status/SKILL.md +7 -7
  328. package/skills/benchmark/SKILL.md +7 -7
  329. package/skills/bootstrap-ds/SKILL.md +10 -10
  330. package/skills/brief/SKILL.md +20 -20
  331. package/skills/budget/SKILL.md +4 -4
  332. package/skills/cache-manager/SKILL.md +6 -6
  333. package/skills/cache-manager/cache-policy.md +5 -5
  334. package/skills/check-update/SKILL.md +5 -5
  335. package/skills/compare/SKILL.md +15 -15
  336. package/skills/compare/compare-rubric.md +17 -17
  337. package/skills/complete-cycle/SKILL.md +5 -5
  338. package/skills/connections/SKILL.md +11 -11
  339. package/skills/connections/connections-onboarding.md +76 -76
  340. package/skills/continue/SKILL.md +2 -2
  341. package/skills/darkmode/SKILL.md +17 -17
  342. package/skills/darkmode/darkmode-audit-procedure.md +7 -7
  343. package/skills/debug/SKILL.md +3 -3
  344. package/skills/debug/debug-feedback-loops.md +12 -12
  345. package/skills/design/SKILL.md +12 -12
  346. package/skills/design/design-procedure.md +23 -23
  347. package/skills/discover/SKILL.md +7 -7
  348. package/skills/discover/discover-procedure.md +18 -18
  349. package/skills/discuss/SKILL.md +12 -12
  350. package/skills/do/SKILL.md +1 -1
  351. package/skills/explore/SKILL.md +21 -21
  352. package/skills/explore/explore-procedure.md +48 -48
  353. package/skills/export/SKILL.md +9 -9
  354. package/skills/extract-learnings/SKILL.md +5 -5
  355. package/skills/fast/SKILL.md +7 -7
  356. package/skills/figma-extract/SKILL.md +11 -11
  357. package/skills/figma-write/SKILL.md +6 -6
  358. package/skills/graphify/SKILL.md +4 -4
  359. package/skills/health/SKILL.md +16 -16
  360. package/skills/health/health-mcp-detection.md +3 -3
  361. package/skills/health/health-skill-length-report.md +6 -6
  362. package/skills/help/SKILL.md +1 -1
  363. package/skills/list-assumptions/SKILL.md +4 -4
  364. package/skills/map/SKILL.md +12 -12
  365. package/skills/migrate/SKILL.md +5 -5
  366. package/skills/new-cycle/SKILL.md +2 -2
  367. package/skills/new-cycle/milestone-completeness-rubric.md +16 -16
  368. package/skills/new-project/SKILL.md +1 -1
  369. package/skills/next/SKILL.md +5 -5
  370. package/skills/note/SKILL.md +1 -1
  371. package/skills/openrouter-status/SKILL.md +4 -4
  372. package/skills/optimize/SKILL.md +15 -15
  373. package/skills/pause/SKILL.md +5 -5
  374. package/skills/peer-cli-add/SKILL.md +11 -11
  375. package/skills/peer-cli-add/peer-cli-protocol.md +39 -39
  376. package/skills/peer-cli-customize/SKILL.md +14 -14
  377. package/skills/peers/SKILL.md +4 -4
  378. package/skills/plan/SKILL.md +13 -13
  379. package/skills/plan/plan-procedure.md +24 -24
  380. package/skills/plant-seed/SKILL.md +4 -4
  381. package/skills/pr-branch/SKILL.md +2 -2
  382. package/skills/progress/SKILL.md +15 -15
  383. package/skills/quality-gate/SKILL.md +22 -22
  384. package/skills/quality-gate/threat-modeling.md +19 -19
  385. package/skills/quick/SKILL.md +5 -5
  386. package/skills/reapply-patches/SKILL.md +7 -7
  387. package/skills/reflect/SKILL.md +3 -3
  388. package/skills/reflect/procedures/capability-gap-scan.md +11 -11
  389. package/skills/report-issue/SKILL.md +5 -5
  390. package/skills/report-issue/report-issue-procedure.md +27 -27
  391. package/skills/resume/SKILL.md +9 -9
  392. package/skills/review-backlog/SKILL.md +3 -3
  393. package/skills/review-decisions/SKILL.md +3 -3
  394. package/skills/roi/SKILL.md +5 -5
  395. package/skills/rollout-status/SKILL.md +4 -4
  396. package/skills/router/SKILL.md +11 -11
  397. package/skills/router/capability-gap-emitter.md +6 -6
  398. package/skills/router/router-pick-emitter.md +9 -9
  399. package/skills/router/router-rules.md +7 -7
  400. package/skills/scan/SKILL.md +16 -16
  401. package/skills/scan/scan-procedure.md +42 -42
  402. package/skills/settings/SKILL.md +2 -2
  403. package/skills/ship/SKILL.md +7 -7
  404. package/skills/sketch/SKILL.md +10 -10
  405. package/skills/sketch-wrap-up/SKILL.md +12 -12
  406. package/skills/skill-manifest/SKILL.md +5 -5
  407. package/skills/spike/SKILL.md +7 -7
  408. package/skills/spike-wrap-up/SKILL.md +13 -13
  409. package/skills/start/SKILL.md +8 -8
  410. package/skills/start/start-procedure.md +9 -9
  411. package/skills/stats/SKILL.md +5 -5
  412. package/skills/style/SKILL.md +12 -12
  413. package/skills/style/style-doc-procedure.md +12 -12
  414. package/skills/synthesize/SKILL.md +10 -10
  415. package/skills/timeline/SKILL.md +4 -4
  416. package/skills/todo/SKILL.md +3 -3
  417. package/skills/turn-closeout/SKILL.md +10 -10
  418. package/skills/unlock-decision/SKILL.md +3 -3
  419. package/skills/update/SKILL.md +9 -9
  420. package/skills/using-gdd/SKILL.md +17 -17
  421. package/skills/verify/SKILL.md +13 -13
  422. package/skills/verify/verify-procedure.md +34 -34
  423. package/skills/warm-cache/SKILL.md +8 -8
  424. package/skills/watch-authorities/SKILL.md +9 -9
  425. package/skills/zoom-out/SKILL.md +4 -4
@@ -4,7 +4,7 @@ Use this during Discover (identifying real problems), Plan (determining what to
4
4
 
5
5
  ---
6
6
 
7
- ## Nielsen Norman Group 10 Usability Heuristics
7
+ ## Nielsen Norman Group - 10 Usability Heuristics
8
8
 
9
9
  The baseline evaluation framework. Score each 0–4 (0=violation, 4=excellent). Include in audit output.
10
10
 
@@ -56,7 +56,7 @@ Minimize the user's memory load by making objects, actions, and options visible.
56
56
  - **Fail cases**: Users must remember previous step's data, keyboard shortcuts only without visual hints
57
57
 
58
58
  ### H-07: Flexibility and Efficiency of Use
59
- Accelerators unseen by the novice user allow experts to speed up interaction.
59
+ Accelerators - unseen by the novice user - allow experts to speed up interaction.
60
60
  - Keyboard shortcuts for power users
61
61
  - Bulk actions for lists
62
62
  - Saved searches/filters
@@ -93,19 +93,19 @@ Even though it is better if the system can be used without documentation, it may
93
93
 
94
94
  Use during layout and visual hierarchy decisions.
95
95
 
96
- **Proximity** Elements close together are perceived as related. Use: group related controls (8–16px between group members, 32–64px between groups).
96
+ **Proximity** - Elements close together are perceived as related. Use: group related controls (8–16px between group members, 32–64px between groups).
97
97
 
98
- **Similarity** Elements looking alike are perceived as the same type. Use: consistent styling for all links, all CTAs, all destructive actions.
98
+ **Similarity** - Elements looking alike are perceived as the same type. Use: consistent styling for all links, all CTAs, all destructive actions.
99
99
 
100
- **Continuity** The eye follows lines and curves. Use: align elements to create reading flow (left-to-right, top-to-bottom).
100
+ **Continuity** - The eye follows lines and curves. Use: align elements to create reading flow (left-to-right, top-to-bottom).
101
101
 
102
- **Closure** The mind fills in incomplete shapes. Use: card borders can be implied by spacing and background difference alone.
102
+ **Closure** - The mind fills in incomplete shapes. Use: card borders can be implied by spacing and background difference alone.
103
103
 
104
- **Figure/Ground** Foreground vs background differentiation. Use: modals and overlays need clear depth separation (shadow, blur, dimming).
104
+ **Figure/Ground** - Foreground vs background differentiation. Use: modals and overlays need clear depth separation (shadow, blur, dimming).
105
105
 
106
- **Common Fate** Elements moving together are perceived as a group. Use: animation groups related elements together stagger within groups, not across.
106
+ **Common Fate** - Elements moving together are perceived as a group. Use: animation groups related elements together - stagger within groups, not across.
107
107
 
108
- **Prägnanz (Simplicity)** The mind perceives the simplest possible interpretation. Use: reduce visual complexity. If 2 elements can do the job of 5, use 2.
108
+ **Prägnanz (Simplicity)** - The mind perceives the simplest possible interpretation. Use: reduce visual complexity. If 2 elements can do the job of 5, use 2.
109
109
 
110
110
  ---
111
111
 
@@ -115,8 +115,8 @@ Use during layout and visual hierarchy decisions.
115
115
 
116
116
  Time to click = function of distance / target size. Implications:
117
117
  - Minimum touch target: **44×44pt** (iOS), **48×48dp** (Android). Never smaller.
118
- - Destructive actions (Delete, Cancel) must be **physically far** from primary actions OR significantly smaller not adjacent at the same size.
119
- - Screen edges and corners are fast (infinite size in that direction) use for primary navigation (iOS bottom bar, macOS menu bar).
118
+ - Destructive actions (Delete, Cancel) must be **physically far** from primary actions OR significantly smaller - not adjacent at the same size.
119
+ - Screen edges and corners are fast (infinite size in that direction) - use for primary navigation (iOS bottom bar, macOS menu bar).
120
120
  - Dense interfaces that require clicking small targets = high error rate + user frustration.
121
121
 
122
122
  ---
@@ -148,7 +148,7 @@ Working memory holds approximately **5–9 items**. Implications:
148
148
  Users remember the **first** and **last** items in a list best (primacy and recency). Implications:
149
149
  - Put most important actions first and last in navigation.
150
150
  - In long forms, critical fields go near the top or after a clear section break.
151
- - CTAs at the bottom of long pages work (recency) but add one above the fold too (primacy).
151
+ - CTAs at the bottom of long pages work (recency) - but add one above the fold too (primacy).
152
152
 
153
153
  ---
154
154
 
@@ -156,8 +156,8 @@ Users remember the **first** and **last** items in a list best (primacy and rece
156
156
 
157
157
  The item that **differs** from its group is most memorable. Implications:
158
158
  - One primary CTA per screen (contrast makes it memorable).
159
- - Don't use "primary" styling on 3 different buttons only one stands out.
160
- - Highlight key data points in tables (bold, color accent) but only the truly key ones.
159
+ - Don't use "primary" styling on 3 different buttons - only one stands out.
160
+ - Highlight key data points in tables (bold, color accent) - but only the truly key ones.
161
161
  - Overuse of emphasis = no emphasis. Use it for 1–2 items per view maximum.
162
162
 
163
163
  ---
@@ -183,10 +183,10 @@ People **remember incomplete tasks** better than completed ones. Implications:
183
183
 
184
184
  ## Peak-End Rule
185
185
 
186
- Users judge an experience primarily by how it felt at its most intense moment (the **peak**) and how it ended not by the average across the whole session. Implications:
186
+ Users judge an experience primarily by how it felt at its most intense moment (the **peak**) and how it ended - not by the average across the whole session. Implications:
187
187
  - Design a deliberate positive peak in every primary flow (e.g., a celebratory completion screen, an instant result, a delightful empty state).
188
188
  - The **end state** of a flow matters disproportionately: the last screen the user sees shapes their memory of the whole interaction.
189
- - Reduce negative peaks first (error states, loading hangs) they weigh heavier than neutral moments.
189
+ - Reduce negative peaks first (error states, loading hangs) - they weigh heavier than neutral moments.
190
190
  - A long frustrating form followed by a satisfying completion screen is remembered more positively than a mildly annoying end to an otherwise smooth flow.
191
191
 
192
192
  ---
@@ -195,7 +195,7 @@ Users judge an experience primarily by how it felt at its most intense moment (t
195
195
 
196
196
  Users feel the pain of loss approximately **twice as strongly** as the pleasure of an equivalent gain (Kahneman & Tversky). Implications:
197
197
  - Frame CTAs around what users keep/save, not what they gain: "Don't lose your progress" over "Save your work."
198
- - Subscription cancellation flows that show what the user will lose (features, data, streak) leverage loss aversion ethically to reduce churn but only if the stated losses are real.
198
+ - Subscription cancellation flows that show what the user will lose (features, data, streak) use loss aversion ethically to reduce churn - but only if the stated losses are real.
199
199
  - Free trial countdowns ("3 days left") trigger loss aversion more effectively than benefit reminders.
200
200
  - Destructive action confirmations should name what is lost: "Delete this project and all 47 files?" not just "Are you sure?"
201
201
 
@@ -212,7 +212,7 @@ Working memory is limited to approximately **7 ± 2 chunks** simultaneously (Mil
212
212
  | **Germane** | Load that builds understanding (learning, pattern recognition) | Preserve and support |
213
213
 
214
214
  Practical rules:
215
- - Every element of visual noise is extraneous load remove it.
215
+ - Every element of visual noise is extraneous load - remove it.
216
216
  - New UI patterns create extraneous load (Jakob's Law); use platform conventions.
217
217
  - Chunk complex tasks into steps of ≤3 decisions each.
218
218
  - Error messages that require decoding ("Error 422") create extraneous load; plain language removes it.
@@ -221,11 +221,11 @@ Practical rules:
221
221
 
222
222
  ## Aesthetic-Usability Effect
223
223
 
224
- Users perceive **aesthetically pleasing designs as more usable**, even when functionality is identical and this perception persists through initial usability problems. Implications:
224
+ Users perceive **aesthetically pleasing designs as more usable**, even when functionality is identical - and this perception persists through initial usability problems. Implications:
225
225
  - A polished visual appearance buys tolerance for minor UX rough edges in early releases.
226
226
  - This effect is strongest on first impression; it degrades over time as behavioral friction compounds.
227
227
  - The effect can mask genuine usability problems in user testing if participants rate overall satisfaction rather than task completion.
228
- - Do NOT use the aesthetic-usability effect as a reason to defer fixing usability problems it explains tolerance, not satisfaction.
228
+ - Do NOT use the aesthetic-usability effect as a reason to defer fixing usability problems - it explains tolerance, not satisfaction.
229
229
 
230
230
  ---
231
231
 
@@ -242,7 +242,7 @@ A system that responds within **400ms** keeps users in a state of flow. Response
242
242
 
243
243
  ## Flow (Csikszentmihalyi)
244
244
 
245
- Users enter a **flow state** when task difficulty matches their skill level exactly high enough to engage, low enough to feel achievable. Flow is characterized by complete absorption, loss of time awareness, and intrinsic motivation. Implications:
245
+ Users enter a **flow state** when task difficulty matches their skill level exactly - high enough to engage, low enough to feel achievable. Flow is characterized by complete absorption, loss of time awareness, and intrinsic motivation. Implications:
246
246
  - Progressive difficulty: onboarding tasks should be trivially easy; expert tasks should provide just enough challenge.
247
247
  - Interruptions break flow permanently for that session; avoid modal interruptions in high-focus workflows.
248
248
  - Clear goals + immediate feedback are the two design levers for inducing flow (H-01, H-05).
@@ -257,11 +257,11 @@ For each NNG heuristic (H-01 through H-10), rate 0–4:
257
257
 
258
258
  | Score | Meaning |
259
259
  |---|---|
260
- | 4 | Excellent actively exemplifies the heuristic |
261
- | 3 | Passes meets the heuristic requirement |
262
- | 2 | Minor violation notable issue but not blocking |
263
- | 1 | Major violation users will notice and be impacted |
264
- | 0 | Critical violation breaks the interface |
260
+ | 4 | Excellent - actively exemplifies the heuristic |
261
+ | 3 | Passes - meets the heuristic requirement |
262
+ | 2 | Minor violation - notable issue but not blocking |
263
+ | 1 | Major violation - users will notice and be impacted |
264
+ | 0 | Critical violation - breaks the interface |
265
265
 
266
266
  **Overall Heuristic Score** = (sum / 40) × 100
267
267
 
@@ -297,7 +297,7 @@ function dfs(node):
297
297
  **Bias notes:** the DFS visits each node at most once per traversal, so duplicate cycles
298
298
  across multiple entry points are deduped by the `visited` guard. The `path.index(node)`
299
299
  slice captures only the cycle suffix; nodes before the entry point are not part of the
300
- cycle. Pre-existing acyclic chains stay invisible only back-edges surface.
300
+ cycle. Pre-existing acyclic chains stay invisible - only back-edges surface.
301
301
 
302
302
  ---
303
303
 
@@ -321,7 +321,7 @@ minor bumps. They register via `OFF_CADENCE_VERSIONS.add('<version>')` in
321
321
  `tests/semver-compare.test.cjs`. The semver-compare test treats them as if they had a
322
322
  canonical predecessor (`v1.28.5` after `v1.28.0`, not `v1.28.4`).
323
323
 
324
- **Preview-suffix trap:** model IDs with `-preview` (`gpt-5-preview` vs `gpt-5`) drift today's
324
+ **Preview-suffix trap:** model IDs with `-preview` (`gpt-5-preview` vs `gpt-5`) drift - today's
325
325
  preview is tomorrow's GA. Tooling MUST store the parent name in `provider_model_id` and treat
326
326
  the suffix as decorative. See `./peer-cli-protocol.md` for the peer-CLI-side context.
327
327
 
@@ -333,22 +333,22 @@ Reference catalog for `skills/optimize/SKILL.md`. Four deterministic rules; rule
333
333
  analysis applied in order. Each rule inspects per-agent aggregates from
334
334
  `.design/agent-metrics.json` and emits zero or more rows to the recommendations table.
335
335
 
336
- **R1 Low cache hit rate.**
336
+ **R1 - Low cache hit rate.**
337
337
  - *Condition:* `total_spawns >= --min-spawns` AND `cache_hit_rate < 0.20`.
338
338
  - *Emit:* `"Consider batching tasks for agent {agent} — cache hit rate is {rate*100}%. Investigate cache-aligned ordering (see reference/shared-preamble.md) and whether input paths can be normalized."`
339
339
  - *Proposed action:* Batch similar tasks; confirm shared-preamble import ordering.
340
340
 
341
- **R2 Expensive and rarely lazy-skipped.**
341
+ **R2 - Expensive and rarely lazy-skipped.**
342
342
  - *Condition:* `total_cost_usd > 0.50` AND `lazy_skip_rate < 0.10`.
343
343
  - *Emit:* `"Agent {agent} is expensive (${cost}) and rarely skipped ({rate*100}% lazy-skip). Consider adding a lazy gate heuristic at agents/{agent}-gate.md (see plan 10.1-04 pattern)."`
344
344
  - *Proposed action:* Add lazy-gate agent.
345
345
 
346
- **R3 Tier override churn.**
346
+ **R3 - Tier override churn.**
347
347
  - *Condition:* Multiple telemetry rows show recorded `tier` differing from frontmatter `default-tier` (e.g., frontmatter `opus` but measured rows consistently `haiku` from budget.json override or soft-threshold downgrade).
348
348
  - *Emit:* `"Tier override churn detected for {agent}: frontmatter says {frontmatter-tier} but measured tier is {measured-tier} in {N} of last {M} rows. Consider updating frontmatter default-tier or removing the budget.json override."`
349
349
  - *Proposed action:* Update frontmatter default-tier OR prune budget.json `tier_overrides` entry.
350
350
 
351
- **R4 Typical duration drift.**
351
+ **R4 - Typical duration drift.**
352
352
  - *Condition:* Measured `typical_duration_seconds` (computed as avg wall-clock between paired spawn/complete rows; fall back to frontmatter when pairing unavailable) differs from frontmatter `typical-duration-seconds` by more than 50%.
353
353
  - *Emit:* `"Typical duration for {agent} has drifted: frontmatter {old}s vs measured {new}s ({delta_pct}% drift). Update frontmatter typical-duration-seconds: {new}."`
354
354
  - *Proposed action:* Edit `agents/{agent}.md` frontmatter.
package/reference/i18n.md CHANGED
@@ -7,15 +7,15 @@ tags: [i18n, intl, icu, unicode, rtl, multi-script, wcag-i18n]
7
7
  last_updated: 2026-05-18
8
8
  ---
9
9
 
10
- # i18n Internationalization Engineering Primitives
10
+ # i18n - Internationalization Engineering Primitives
11
11
 
12
- This file closes a gap: the existing references touch internationalization in fragments [rtl-cjk-cultural.md](./rtl-cjk-cultural.md) covers cultural context (greeting forms, color symbolism, CJK family-name order), [typography.md](./typography.md) covers font-family stacks, [accessibility.md](./accessibility.md) cites WCAG 3.1.1, [form-patterns.md](./form-patterns.md) cites locale-aware autofill but none stitch the engineering primitives together. This is the file an agent should consult any time it is writing code that will render a localized string, format a number or date, mirror a layout, truncate user text, or audit a UI for i18n readiness.
12
+ This file closes a gap: the existing references touch internationalization in fragments - [rtl-cjk-cultural.md](./rtl-cjk-cultural.md) covers cultural context (greeting forms, color symbolism, CJK family-name order), [typography.md](./typography.md) covers font-family stacks, [accessibility.md](./accessibility.md) cites WCAG 3.1.1, [form-patterns.md](./form-patterns.md) cites locale-aware autofill - but none stitch the engineering primitives together. This is the file an agent should consult any time it is writing code that will render a localized string, format a number or date, mirror a layout, truncate user text, or audit a UI for i18n readiness.
13
13
 
14
- The boundary is strict and additive. `rtl-cjk-cultural.md` owns the *cultural* layer what gestures and color associations mean in a region, when a name field should accept both family-name-first and given-name-first orders, why a thumbs-up icon is unsafe in parts of the Middle East. This file owns the *code* layer which CSS property to author, which `Intl.*` API to call, which Unicode normalization form to apply on input, which regex catches a hardcoded English string in a JSX file. Both files are needed; neither replaces the other.
14
+ The boundary is strict and additive. `rtl-cjk-cultural.md` owns the *cultural* layer - what gestures and color associations mean in a region, when a name field should accept both family-name-first and given-name-first orders, why a thumbs-up icon is unsafe in parts of the Middle East. This file owns the *code* layer - which CSS property to author, which `Intl.*` API to call, which Unicode normalization form to apply on input, which regex catches a hardcoded English string in a JSX file. Both files are needed; neither replaces the other.
15
15
 
16
16
  ## Text Expansion
17
17
 
18
- Localized strings expand or contract depending on the target language. A button label that fits in a 96px container in English will overflow at +30% in German, +40% in Russian, and clip cleanly in Japanese. Design must absorb this variation either by sizing containers for the worst-case expansion, by allowing wrapping, or by truncating with grapheme-aware logic. The factors below are conservative aggregates suitable for layout-budget planning and for the verifier overflow-simulation probe documented further down this file.
18
+ Localized strings expand or contract depending on the target language. A button label that fits in a 96px container in English will overflow at +30% in German, +40% in Russian, and clip cleanly in Japanese. Design must absorb this variation - either by sizing containers for the worst-case expansion, by allowing wrapping, or by truncating with grapheme-aware logic. The factors below are conservative aggregates suitable for layout-budget planning and for the verifier overflow-simulation probe documented further down this file.
19
19
 
20
20
  | Locale family | Expansion | Notes |
21
21
  | ------------------- | --------- | ------------------------------ |
@@ -31,7 +31,7 @@ These factors drive width constraints in component design and the verifier overf
31
31
 
32
32
  ## RTL Mirroring
33
33
 
34
- Right-to-left scripts Arabic, Hebrew, Persian, Urdu do not merely reverse text direction; they reverse the entire spatial logic of the interface. The reading eye enters from the right, "start" becomes the right edge, "end" becomes the left, and every directional affordance must be reconsidered. The engineering rule is to author all spatial CSS in *logical* properties so a single `dir="rtl"` flip on the document root produces a fully mirrored UI with zero per-element overrides.
34
+ Right-to-left scripts - Arabic, Hebrew, Persian, Urdu - do not merely reverse text direction; they reverse the entire spatial logic of the interface. The reading eye enters from the right, "start" becomes the right edge, "end" becomes the left, and every directional affordance must be reconsidered. The engineering rule is to author all spatial CSS in *logical* properties so a single `dir="rtl"` flip on the document root produces a fully mirrored UI with zero per-element overrides.
35
35
 
36
36
  ### CSS logical properties
37
37
 
@@ -69,7 +69,7 @@ A concrete card component authored entirely in logical props:
69
69
  }
70
70
  ```
71
71
 
72
- Under `dir="ltr"` the accent border lands on the left edge and the badge floats top-right. Under `dir="rtl"` the same CSS produces an accent border on the right edge and a badge that floats top-left no media query, no override, no separate stylesheet.
72
+ Under `dir="ltr"` the accent border lands on the left edge and the badge floats top-right. Under `dir="rtl"` the same CSS produces an accent border on the right edge and a badge that floats top-left - no media query, no override, no separate stylesheet.
73
73
 
74
74
  ### `dir="rtl"` cascade rules
75
75
 
@@ -89,7 +89,7 @@ Per-element `dir` is reserved for genuinely mixed-direction content (a username
89
89
 
90
90
  ### Directional-icon flip catalog
91
91
 
92
- Not every icon should mirror under RTL. The rule is intent: if the icon means "next in reading order" or "back in reading order", it mirrors; if it means "play this video" or "this is a brand mark" or "this is the digit four", it does not. The catalog below is the working contract apply `transform: scaleX(-1)` (via a `[dir="rtl"] .icon-directional { ... }` rule) for the flip-yes rows; leave the rest untouched.
92
+ Not every icon should mirror under RTL. The rule is intent: if the icon means "next in reading order" or "back in reading order", it mirrors; if it means "play this video" or "this is a brand mark" or "this is the digit four", it does not. The catalog below is the working contract - apply `transform: scaleX(-1)` (via a `[dir="rtl"] .icon-directional { ... }` rule) for the flip-yes rows; leave the rest untouched.
93
93
 
94
94
  | Icon | Flip in RTL? | Rationale |
95
95
  | ----------------------------- | ------------ | -------------------------------------------------- |
@@ -98,7 +98,7 @@ Not every icon should mirror under RTL. The rule is intent: if the icon means "n
98
98
  | Breadcrumb separator chevrons | yes | reading-order directional |
99
99
  | Progress-bar fill direction | yes | progression in reading order |
100
100
  | Send / reply arrow | yes | implies outbound direction in reading order |
101
- | Search (magnifier glass) | no | universal handle angle is convention not flow |
101
+ | Search (magnifier glass) | no | universal - handle angle is convention not flow |
102
102
  | Brand logos, wordmarks | no | brand asset is fixed |
103
103
  | Numerals (0–9) | no | digits render LTR even inside Arabic text |
104
104
  | Media controls play / pause | no | bound to a physical timeline, not reading order |
@@ -108,11 +108,11 @@ Not every icon should mirror under RTL. The rule is intent: if the icon means "n
108
108
 
109
109
  ### Bidi isolation
110
110
 
111
- When a string mixes scripts of different directions an Arabic UI showing an English username, a French sentence quoting a Hebrew title the Unicode Bidirectional Algorithm needs a hint to keep punctuation and adjacent content from leaking direction across the embed. Three tools handle this:
111
+ When a string mixes scripts of different directions - an Arabic UI showing an English username, a French sentence quoting a Hebrew title - the Unicode Bidirectional Algorithm needs a hint to keep punctuation and adjacent content from leaking direction across the embed. Three tools handle this:
112
112
 
113
- - `<bdi>` bidi isolate; wraps user-provided runs whose direction is unknown.
114
- - `dir="auto"` first-strong heuristic; useful on user-input fields whose locale is unknown until typed.
115
- - `unicode-bidi: isolate` CSS equivalent of `<bdi>`; isolates a span without a semantic element.
113
+ - `<bdi>` - bidi isolate; wraps user-provided runs whose direction is unknown.
114
+ - `dir="auto"` - first-strong heuristic; useful on user-input fields whose locale is unknown until typed.
115
+ - `unicode-bidi: isolate` - CSS equivalent of `<bdi>`; isolates a span without a semantic element.
116
116
 
117
117
  A mixed-direction example: a comment list rendering an Arabic sentence that quotes an English handle:
118
118
 
@@ -132,15 +132,15 @@ A mixed-direction example: a comment list rendering an Arabic sentence that quot
132
132
  </style>
133
133
  ```
134
134
 
135
- Without `<bdi>` the trailing `42` digit pair can adopt the surrounding RTL direction and render reversed a class of bug that is almost invisible in QA but jarring to native readers. Wrap any user-controlled identifier in `<bdi>` by default.
135
+ Without `<bdi>` the trailing `42` digit pair can adopt the surrounding RTL direction and render reversed - a class of bug that is almost invisible in QA but jarring to native readers. Wrap any user-controlled identifier in `<bdi>` by default.
136
136
 
137
137
  ## Locale Formatting
138
138
 
139
- Hand-rolled string concatenation for dates, numbers, lists, and plurals breaks at the locale boundary. The `Intl.*` family is the canonical replacement every modern engine ships it, every example below is one call away from being correct in 150+ locales. The rule is unambiguous: never build a localized string by interpolation; always pass through an `Intl.*` formatter parameterized on the user's BCP 47 locale tag.
139
+ Hand-rolled string concatenation for dates, numbers, lists, and plurals breaks at the locale boundary. The `Intl.*` family is the canonical replacement - every modern engine ships it, every example below is one call away from being correct in 150+ locales. The rule is unambiguous: never build a localized string by interpolation; always pass through an `Intl.*` formatter parameterized on the user's BCP 47 locale tag.
140
140
 
141
141
  ### Intl.DateTimeFormat
142
142
 
143
- `Intl.DateTimeFormat` replaces `Date.toLocaleString` patterns and hand-formatted `YYYY-MM-DD` templates. It composes a date and time according to locale conventions day/month ordering, separator characters, 12- vs 24-hour clocks, calendar systems, and time-zone naming.
143
+ `Intl.DateTimeFormat` replaces `Date.toLocaleString` patterns and hand-formatted `YYYY-MM-DD` templates. It composes a date and time according to locale conventions - day/month ordering, separator characters, 12- vs 24-hour clocks, calendar systems, and time-zone naming.
144
144
 
145
145
  ```js
146
146
  const event = new Date('2026-05-18T14:30:00Z');
@@ -188,7 +188,7 @@ new Intl.NumberFormat('ja-JP', { style: 'unit', unit: 'kilometer-per-hour' }).fo
188
188
 
189
189
  ### Intl.PluralRules
190
190
 
191
- Pluralization is not "1 vs many". Arabic has six categories (`zero`, `one`, `two`, `few`, `many`, `other`); Russian has four; Welsh has six. A ternary `count === 1 ? 'item' : 'items'` is wrong in nearly every non-English locale. `Intl.PluralRules` resolves the count to a category which is then looked up in a translation table usually via an ICU MessageFormat string (next section), but available standalone.
191
+ Pluralization is not "1 vs many". Arabic has six categories (`zero`, `one`, `two`, `few`, `many`, `other`); Russian has four; Welsh has six. A ternary `count === 1 ? 'item' : 'items'` is wrong in nearly every non-English locale. `Intl.PluralRules` resolves the count to a category which is then looked up in a translation table - usually via an ICU MessageFormat string (next section), but available standalone.
192
192
 
193
193
  ```js
194
194
  const ruPlural = new Intl.PluralRules('ru');
@@ -205,7 +205,7 @@ enPlural.select(2); // → "other"
205
205
 
206
206
  ### Intl.RelativeTimeFormat
207
207
 
208
- `"3 days ago"`, `"in 2 hours"`, `"yesterday"` relative-time phrases are wildly different across locales and tense systems. `Intl.RelativeTimeFormat` returns the locale-correct phrase given a number and a unit.
208
+ `"3 days ago"`, `"in 2 hours"`, `"yesterday"` - relative-time phrases are wildly different across locales and tense systems. `Intl.RelativeTimeFormat` returns the locale-correct phrase given a number and a unit.
209
209
 
210
210
  ```js
211
211
  const enRel = new Intl.RelativeTimeFormat('en', { numeric: 'auto' });
@@ -220,7 +220,7 @@ jaRel.format(-3, 'day'); // → "3 日前"
220
220
 
221
221
  ### Intl.ListFormat
222
222
 
223
- Joining a list of items into a sentence `"A, B, and C"` has locale-specific rules: serial comma usage, conjunction word, segment separator. `Intl.ListFormat` covers both conjunction (`and`) and disjunction (`or`) modes.
223
+ Joining a list of items into a sentence - `"A, B, and C"` - has locale-specific rules: serial comma usage, conjunction word, segment separator. `Intl.ListFormat` covers both conjunction (`and`) and disjunction (`or`) modes.
224
224
 
225
225
  ```js
226
226
  const tags = ['React', 'Vue', 'Svelte'];
@@ -235,7 +235,7 @@ new Intl.ListFormat('de', { style: 'long', type: 'conjunction' }).format(tags);
235
235
 
236
236
  ### Intl.Collator
237
237
 
238
- `Array.prototype.sort` on strings uses Unicode code-point order which produces wrong results outside ASCII (`'Ö'` sorts after `'Z'` instead of with `'O'` in Swedish; `'é'` sorts after `'z'` in French). `Intl.Collator` provides locale-aware sorting and is the only correct choice for any user-facing sorted list.
238
+ `Array.prototype.sort` on strings uses Unicode code-point order - which produces wrong results outside ASCII (`'Ö'` sorts after `'Z'` instead of with `'O'` in Swedish; `'é'` sorts after `'z'` in French). `Intl.Collator` provides locale-aware sorting and is the only correct choice for any user-facing sorted list.
239
239
 
240
240
  ```js
241
241
  const names = ['Zebra', 'Élan', 'Ödipus', 'Apple'];
@@ -254,7 +254,7 @@ names.slice().sort(deCollator.compare);
254
254
 
255
255
  ### Intl.Segmenter
256
256
 
257
- `Intl.Segmenter` produces grapheme-cluster, word, or sentence segments according to the Unicode segmentation algorithm. The grapheme-cluster mode is the *only* correct way to count or truncate user text. JavaScript `string.length` counts UTF-16 code units, not graphemes a family-style ZWJ sequence such as `U+1F468 U+200D U+1F469 U+200D U+1F467` (Man + ZWJ + Woman + ZWJ + Girl) reports as length 5 or 7 depending on the engine, and `string.slice(0, 10)` will split an emoji or combining character mid-sequence, producing a string that renders as a broken-glyph diamond.
257
+ `Intl.Segmenter` produces grapheme-cluster, word, or sentence segments according to the Unicode segmentation algorithm. The grapheme-cluster mode is the *only* correct way to count or truncate user text. JavaScript `string.length` counts UTF-16 code units, not graphemes - a family-style ZWJ sequence such as `U+1F468 U+200D U+1F469 U+200D U+1F467` (Man + ZWJ + Woman + ZWJ + Girl) reports as length 5 or 7 depending on the engine, and `string.slice(0, 10)` will split an emoji or combining character mid-sequence, producing a string that renders as a broken-glyph diamond.
258
258
 
259
259
  ```js
260
260
  // HARD RULE: never `string.slice(0, n)` for unknown text
@@ -275,7 +275,7 @@ truncateGraphemes('café 🇫🇷👨‍👩‍👧 résumé', 6); // → "café
275
275
 
276
276
  ## ICU MessageFormat
277
277
 
278
- ICU MessageFormat is the canonical input format for the dominant i18n library matrix `react-intl`, `formatjs`, `lingui`, `next-intl`, `i18next` all parse it natively. It is a small DSL with three constructs that matter `plural`, `select`, `selectordinal` each of which encodes a branch that string concatenation cannot.
278
+ ICU MessageFormat is the canonical input format for the dominant i18n library matrix - `react-intl`, `formatjs`, `lingui`, `next-intl`, `i18next` all parse it natively. It is a small DSL with three constructs that matter - `plural`, `select`, `selectordinal` - each of which encodes a branch that string concatenation cannot.
279
279
 
280
280
  ```txt
281
281
  {count, plural,
@@ -304,17 +304,17 @@ ICU MessageFormat is the canonical input format for the dominant i18n library ma
304
304
  }
305
305
  ```
306
306
 
307
- Why ICU beats string concatenation: pluralization rules vary by locale (Russian has four categories `one`, `few`, `many`, `other`; Welsh has six `zero`, `one`, `two`, `few`, `many`, `other`), gendered forms vary (Slavic and Semitic languages branch verb forms on subject gender), and ordinal suffixes differ (English `1st 2nd 3rd 4th`; many languages use a single suffix). Concatenation hardcodes English assumptions; ICU encodes the branch as data, and the runtime picks the correct branch per locale.
307
+ Why ICU beats string concatenation: pluralization rules vary by locale (Russian has four categories - `one`, `few`, `many`, `other`; Welsh has six - `zero`, `one`, `two`, `few`, `many`, `other`), gendered forms vary (Slavic and Semitic languages branch verb forms on subject gender), and ordinal suffixes differ (English `1st 2nd 3rd 4th`; many languages use a single suffix). Concatenation hardcodes English assumptions; ICU encodes the branch as data, and the runtime picks the correct branch per locale.
308
308
 
309
309
  The library bridge is direct: `react-intl` consumes ICU via `<FormattedMessage>` props, `formatjs` provides the underlying formatter, `lingui` ships its own ICU-compatible parser, `next-intl` accepts ICU strings as namespace values, and `i18next` supports ICU via the `i18next-icu` plugin. Pick the framework's idiom; the input syntax is the same.
310
310
 
311
311
  ## Unicode Hygiene
312
312
 
313
- Five rules below are non-negotiable for any code path that touches user text input, storage, comparison, display, or truncation. Skipping them produces bugs that surface in production months after the code ships, when a user with a non-ASCII name discovers their record cannot be found or their display name renders as boxes.
313
+ Five rules below are non-negotiable for any code path that touches user text - input, storage, comparison, display, or truncation. Skipping them produces bugs that surface in production months after the code ships, when a user with a non-ASCII name discovers their record cannot be found or their display name renders as boxes.
314
314
 
315
315
  ### NFC normalization on input
316
316
 
317
- The same visible character can be encoded as a single precomposed code point (`é` = `U+00E9`) or as a base character plus a combining mark (`e` + `U+0301`). Two strings that look identical may compare as not-equal, hash to different keys, and fail length comparisons. Normalize all input to NFC at the boundary the moment text enters the application, before storage, before comparison.
317
+ The same visible character can be encoded as a single precomposed code point (`é` = `U+00E9`) or as a base character plus a combining mark (`e` + `U+0301`). Two strings that look identical may compare as not-equal, hash to different keys, and fail length comparisons. Normalize all input to NFC at the boundary - the moment text enters the application, before storage, before comparison.
318
318
 
319
319
  ```js
320
320
  const a = 'é'; // U+00E9
@@ -334,7 +334,7 @@ Restating from §Intl.Segmenter as a hard rule: **never `string.slice(0, n)` for
334
334
 
335
335
  ### BCP 47 language tag structure
336
336
 
337
- Locale identifiers in code are BCP 47 tags. The structure is `language[-Script][-Region][-Variant]` with case rules: language lowercase, script title-case, region uppercase. `pt-BR` is correct; `pt_br`, `PT-br`, and `pt_BR` are all wrong and will produce silent failures in `Intl.*` (or worse, partial matches that miss region-specific formatting). Use hyphens, never underscores. Normalize on input via `new Intl.Locale(tag).toString()`.
337
+ Locale identifiers in code are BCP 47 tags. The structure is `language[-Script][-Region][-Variant]` with case rules: language lowercase, script title-case, region uppercase. `pt-BR` is correct; `pt_br`, `PT-br`, and `pt_BR` are all wrong and will produce silent failures in `Intl.*` (or worse, partial matches that miss region-specific formatting). Use hyphens, never highlights. Normalize on input via `new Intl.Locale(tag).toString()`.
338
338
 
339
339
  ```js
340
340
  new Intl.Locale('pt-br').toString(); // → "pt-BR" (canonicalized)
@@ -357,11 +357,11 @@ document.documentElement.dir = new Intl.Locale(userLocale).textInfo.direction;
357
357
 
358
358
  ### Browser-support drift
359
359
 
360
- `Intl.Segmenter` shipped late on Safari (March 2023, version 16.4). Projects targeting older Safari, embedded WebViews on older iOS, or pre-2023 Node versions need a polyfill `intl-segmenter-polyfill` or the underlying ICU library exposed via WebAssembly. Check current support at [caniuse.com/?search=Intl.Segmenter](https://caniuse.com/?search=Intl.Segmenter) before relying on grapheme-aware truncation in a hot path; for the rest of `Intl.*` the support has been universal since 2020.
360
+ `Intl.Segmenter` shipped late on Safari (March 2023, version 16.4). Projects targeting older Safari, embedded WebViews on older iOS, or pre-2023 Node versions need a polyfill - `intl-segmenter-polyfill` or the underlying ICU library exposed via WebAssembly. Check current support at [caniuse.com/?search=Intl.Segmenter](https://caniuse.com/?search=Intl.Segmenter) before relying on grapheme-aware truncation in a hot path; for the rest of `Intl.*` the support has been universal since 2020.
361
361
 
362
362
  ## Multi-Script Font Stacks
363
363
 
364
- A multi-script product (any product shipping outside a single Latin-script locale) cannot rely on one font family. Latin-only fonts are missing CJK ideographs, Arabic shapes, Devanagari conjuncts, and Cyrillic accents. The browser falls back to a system font when a glyph is missing, and the result is a visible style mismatch a paragraph that switches typeface mid-sentence. The fix is an explicit per-script fallback stack, chosen so each script has a high-quality font available before the system fallback fires.
364
+ A multi-script product (any product shipping outside a single Latin-script locale) cannot rely on one font family. Latin-only fonts are missing CJK ideographs, Arabic shapes, Devanagari conjuncts, and Cyrillic accents. The browser falls back to a system font when a glyph is missing, and the result is a visible style mismatch - a paragraph that switches typeface mid-sentence. The fix is an explicit per-script fallback stack, chosen so each script has a high-quality font available before the system fallback fires.
365
365
 
366
366
  ### CJK fallbacks
367
367
 
@@ -405,7 +405,7 @@ Devanagari (Hindi, Marathi, Sanskrit) requires conjunct shaping and proper combi
405
405
 
406
406
  ### `font-display: swap` and FOUC across scripts
407
407
 
408
- `font-display: swap` shows the fallback immediately and swaps to the web font once loaded the trade is a Flash of Unstyled Text (FOUT) instead of a Flash of Invisible Text (FOIT). Across scripts the FOUT problem is more severe: the system fallback for a CJK glyph may have radically different proportions from the loaded web font, so the swap moment causes a noticeable layout shift. Mitigations: preload the most-likely script subset for the user's locale, set `size-adjust` on the `@font-face` to match the fallback metrics, and accept FOIT (`font-display: block`) on the smallest critical-text subset where shift is unacceptable. See [variable-fonts-loading.md](./variable-fonts-loading.md) §font-display Values for the complete tradeoff.
408
+ `font-display: swap` shows the fallback immediately and swaps to the web font once loaded - the trade is a Flash of Unstyled Text (FOUT) instead of a Flash of Invisible Text (FOIT). Across scripts the FOUT problem is more severe: the system fallback for a CJK glyph may have radically different proportions from the loaded web font, so the swap moment causes a noticeable layout shift. Mitigations: preload the most-likely script subset for the user's locale, set `size-adjust` on the `@font-face` to match the fallback metrics, and accept FOIT (`font-display: block`) on the smallest critical-text subset where shift is unacceptable. See [variable-fonts-loading.md](./variable-fonts-loading.md) §font-display Values for the complete tradeoff.
409
409
 
410
410
  ### Subset strategy via `unicode-range`
411
411
 
@@ -431,13 +431,13 @@ Shipping the full Noto Sans CJK is a 5–15MB asset. Browsers will only fetch a
431
431
 
432
432
  ### Variable-font interaction
433
433
 
434
- For a single-script product, one variable font with `wght`, `ital`, and `opsz` axes is the byte-budget win one file, all weights, all styles. For a multi-script product the calculus reverses: shipping `script-count × axis-count` axes in a single variable file balloons the asset, and very few variable fonts cover CJK or Arabic at all (the glyph count multiplies the axis storage). For multi-script products, prefer multiple weighted-static fonts per script, each subset via `unicode-range`, over one mega-variable file. The full tradeoff is in [variable-fonts-loading.md](./variable-fonts-loading.md) §Variable Font Axes; this is the cross-link that downstream agents should follow when the project's `package.json` shows both CJK and Latin scripts in active use.
434
+ For a single-script product, one variable font with `wght`, `ital`, and `opsz` axes is the byte-budget win - one file, all weights, all styles. For a multi-script product the calculus reverses: shipping `script-count × axis-count` axes in a single variable file balloons the asset, and very few variable fonts cover CJK or Arabic at all (the glyph count multiplies the axis storage). For multi-script products, prefer multiple weighted-static fonts per script, each subset via `unicode-range`, over one mega-variable file. The full tradeoff is in [variable-fonts-loading.md](./variable-fonts-loading.md) §Variable Font Axes; this is the cross-link that downstream agents should follow when the project's `package.json` shows both CJK and Latin scripts in active use.
435
435
 
436
436
  ## WCAG i18n
437
437
 
438
438
  Two WCAG success criteria are the i18n contract a designer-engineer agent must enforce. Both are Level A (the lowest threshold) and both are commonly missed by codebases that otherwise pass contrast and target-size audits.
439
439
 
440
- ### 3.1.1 `lang` attribute on root
440
+ ### 3.1.1 - `lang` attribute on root
441
441
 
442
442
  Every page must declare its primary language on `<html>`. Screen readers select the correct phoneme inventory and prosody rules from this attribute; without it the reader falls back to its default voice (often US English), producing accented mispronunciation of every word.
443
443
 
@@ -449,9 +449,9 @@ Every page must declare its primary language on `<html>`. Screen readers select
449
449
  </html>
450
450
  ```
451
451
 
452
- ### 3.1.2 Language-of-parts
452
+ ### 3.1.2 - Language-of-parts
453
453
 
454
- When the page's primary language is set on `<html>` but a span of text is in a different language a French quote inside an English article, an Arabic title rendered inside an English page the foreign span needs its own `lang` attribute. The screen reader switches voice for that span and switches back at its close.
454
+ When the page's primary language is set on `<html>` but a span of text is in a different language - a French quote inside an English article, an Arabic title rendered inside an English page - the foreign span needs its own `lang` attribute. The screen reader switches voice for that span and switches back at its close.
455
455
 
456
456
  ```html
457
457
  <p>
@@ -461,15 +461,15 @@ When the page's primary language is set on `<html>` but a span of text is in a d
461
461
  </p>
462
462
  ```
463
463
 
464
- The auditor catches a missed 3.1.2 by scanning for untranslated quotes, proper nouns in a non-root script, and any code-switching pattern in body copy. Common failure: a marketing page in English embeds a customer-quote in Japanese with no `lang="ja"` wrapper, producing US-English phonemes applied to Japanese romaji an outcome unintelligible to a screen-reader user. The fix is one attribute per foreign span.
464
+ The auditor catches a missed 3.1.2 by scanning for untranslated quotes, proper nouns in a non-root script, and any code-switching pattern in body copy. Common failure: a marketing page in English embeds a customer-quote in Japanese with no `lang="ja"` wrapper, producing US-English phonemes applied to Japanese romaji - an outcome unintelligible to a screen-reader user. The fix is one attribute per foreign span.
465
465
 
466
466
  ## Verifier Integration Spec
467
467
 
468
- This section specifies two probes for [agents/design-verifier.md](../agents/design-verifier.md). 28-06 implements; this file owns the spec. Both probes attach to a new `### i18n probes` subsection at the end of Phase 1 Re-Audit + Category Scoring (after the existing `### Category Scores` subsection), and both classify findings under the orthogonal lens-tag `i18n_readiness` (per D-03 / D-07 no new pillar, no audit-format change).
468
+ This section specifies two probes for [agents/design-verifier.md](../agents/design-verifier.md). 28-06 implements; this file owns the spec. Both probes attach to a new `### i18n probes` subsection at the end of Phase 1 - Re-Audit + Category Scoring (after the existing `### Category Scores` subsection), and both classify findings under the orthogonal lens-tag `i18n_readiness` (per D-03 / D-07 - no new pillar, no audit-format change).
469
469
 
470
470
  ### Probe 1: Hardcoded-string scan
471
471
 
472
- The probe scans component source files for hardcoded user-facing strings that bypass the i18n framework. The regex catalog matches the four library patterns from D-10 these are the *expected* call shapes; anything that *resembles* a user-facing string but does *not* match one of these patterns is a candidate finding.
472
+ The probe scans component source files for hardcoded user-facing strings that bypass the i18n framework. The regex catalog matches the four library patterns from D-10 - these are the *expected* call shapes; anything that *resembles* a user-facing string but does *not* match one of these patterns is a candidate finding.
473
473
 
474
474
  ```txt
475
475
  react-intl: <FormattedMessage\s+id="[^"]+"
@@ -490,11 +490,11 @@ import\s+.*\s+from\s+['"][^'"]+['"] — import paths
490
490
 
491
491
  Finding classification: tagged `i18n_readiness`. Default severity `MINOR`; raised to `MAJOR` if the file count of unique violating files exceeds 10 (the codebase has a systemic problem, not a one-off oversight). Output line in the verifier report: `i18n_readiness: <N> hardcoded strings in <M> files — see ./i18n.md §ICU MessageFormat`.
492
492
 
493
- Reflector hook (D-10): the probe records false-positive count over the first N audit runs. If the false-positive rate exceeds the threshold defined in the Phase 11 self-improvement loop, the reflector proposes a tightened regex or an extended allow-list the same pattern Phase 11 uses for self-improvement of other heuristics.
493
+ Reflector hook (D-10): the probe records false-positive count over the first N audit runs. If the false-positive rate exceeds the threshold defined in the Phase 11 self-improvement loop, the reflector proposes a tightened regex or an extended allow-list - the same pattern Phase 11 uses for self-improvement of other heuristics.
494
494
 
495
495
  ### Probe 2: +40% Text-overflow simulation
496
496
 
497
- The probe simulates the worst-case row of the §Text Expansion table RU/FI/PL at +40% by inflating every text node in the rendered DOM and measuring whether containers overflow. The pseudo-code spec below is the integration contract; 28-06 may implement via either DOM measurement or Preview-MCP screenshot diff, whichever is available in the run context.
497
+ The probe simulates the worst-case row of the §Text Expansion table - RU/FI/PL at +40% - by inflating every text node in the rendered DOM and measuring whether containers overflow. The pseudo-code spec below is the integration contract; 28-06 may implement via either DOM measurement or Preview-MCP screenshot diff, whichever is available in the run context.
498
498
 
499
499
  ```txt
500
500
  FOR every text node T in rendered DOM:
@@ -512,7 +512,7 @@ Output line in the verifier report: `i18n_readiness: <N> components overflow at
512
512
 
513
513
  ## Explore Integration Spec
514
514
 
515
- This section specifies one probe for [skills/explore/SKILL.md](../skills/explore/SKILL.md). 28-06 implements; this file owns the spec. The probe attaches as a sub-step "**i18n readiness probe**" inside Step 2 Inventory scan (before the close of Step 2), and produces one informational line in the standard explore report.
515
+ This section specifies one probe for [skills/explore/SKILL.md](../skills/explore/SKILL.md). 28-06 implements; this file owns the spec. The probe attaches as a sub-step "**i18n readiness probe**" inside Step 2 - Inventory scan (before the close of Step 2), and produces one informational line in the standard explore report.
516
516
 
517
517
  ### Probe: i18n-readiness (3-state, informational)
518
518
 
@@ -541,14 +541,14 @@ Output line in explore report (single informational line, per D-04):
541
541
  Localization readiness: framework-managed | partial | none
542
542
  ```
543
543
 
544
- The probe is **informational only**. No gate, no blocking, no required-action explore's job is to describe the project's current state, not prescribe change. A consumer downstream (a planning agent, a roadmap reviewer, the user) can act on the signal if a gap is meaningful for the project, but the probe itself never forces a step. This matches the orthogonal-lens discipline of D-07 surface signal, do not bolt on a new pillar.
544
+ The probe is **informational only**. No gate, no blocking, no required-action - explore's job is to describe the project's current state, not prescribe change. A consumer downstream (a planning agent, a roadmap reviewer, the user) can act on the signal if a gap is meaningful for the project, but the probe itself never forces a step. This matches the orthogonal-lens discipline of D-07 - surface signal, do not bolt on a new pillar.
545
545
 
546
546
  ## Cross-References
547
547
 
548
- - [typography.md](./typography.md) §Variable Fonts variable-font axes the multi-script subset strategy interacts with.
549
- - [rtl-cjk-cultural.md](./rtl-cjk-cultural.md) cultural context (greeting forms, color symbolism, CJK family-name order); this file deepens the engineering side without overlap.
550
- - [accessibility.md](./accessibility.md) §WCAG 2.1 / 2.2 the §WCAG i18n section above is the language-specific cross-reference to the broader WCAG corpus.
551
- - [form-patterns.md](./form-patterns.md) locale-aware input formatting, `autocomplete` taxonomy, BCP 47 tag use in form locale negotiation.
552
- - [variable-fonts-loading.md](./variable-fonts-loading.md) multi-script subset strategy interaction; when shipping multiple weighted-static fonts beats one mega-variable font.
548
+ - [typography.md](./typography.md) §Variable Fonts - variable-font axes the multi-script subset strategy interacts with.
549
+ - [rtl-cjk-cultural.md](./rtl-cjk-cultural.md) - cultural context (greeting forms, color symbolism, CJK family-name order); this file deepens the engineering side without overlap.
550
+ - [accessibility.md](./accessibility.md) §WCAG 2.1 / 2.2 - the §WCAG i18n section above is the language-specific cross-reference to the broader WCAG corpus.
551
+ - [form-patterns.md](./form-patterns.md) - locale-aware input formatting, `autocomplete` taxonomy, BCP 47 tag use in form locale negotiation.
552
+ - [variable-fonts-loading.md](./variable-fonts-loading.md) - multi-script subset strategy interaction; when shipping multiple weighted-static fonts beats one mega-variable font.
553
553
 
554
554
  Reciprocal inbound cross-links into this file land in Phase 28-06 (additive-only, D-06).