@eltonssouza/development-utility-kit 1.0.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 (137) hide show
  1. package/.claude/agents/analyst.md +198 -0
  2. package/.claude/agents/backend-developer.md +126 -0
  3. package/.claude/agents/brain-keeper.md +229 -0
  4. package/.claude/agents/code-reviewer.md +181 -0
  5. package/.claude/agents/database-engineer.md +94 -0
  6. package/.claude/agents/devops-engineer.md +141 -0
  7. package/.claude/agents/frontend-developer.md +97 -0
  8. package/.claude/agents/gate-keeper.md +118 -0
  9. package/.claude/agents/migrator.md +291 -0
  10. package/.claude/agents/mobile-developer.md +80 -0
  11. package/.claude/agents/n8n-specialist.md +94 -0
  12. package/.claude/agents/product-owner.md +115 -0
  13. package/.claude/agents/qa-engineer.md +232 -0
  14. package/.claude/agents/release-engineer.md +204 -0
  15. package/.claude/agents/scaffold.md +87 -0
  16. package/.claude/agents/security-engineer.md +199 -0
  17. package/.claude/agents/sprint-runner.md +44 -0
  18. package/.claude/agents/stack-resolver.md +84 -0
  19. package/.claude/agents/tech-lead.md +182 -0
  20. package/.claude/agents/update-template.md +54 -0
  21. package/.claude/agents/ux-designer.md +118 -0
  22. package/.claude/settings.json +44 -0
  23. package/.claude/skills/README.md +332 -0
  24. package/.claude/skills/active-project/SKILL.md +129 -0
  25. package/.claude/skills/api-integration-test/SKILL.md +64 -0
  26. package/.claude/skills/auto-test-guard/SKILL.md +237 -0
  27. package/.claude/skills/auto-test-guard/resources/backend-tests.md +20 -0
  28. package/.claude/skills/auto-test-guard/resources/e2e-tests.md +24 -0
  29. package/.claude/skills/auto-test-guard/resources/execution-report.md +49 -0
  30. package/.claude/skills/auto-test-guard/resources/frontend-tests.md +18 -0
  31. package/.claude/skills/auto-test-guard/resources/initial-setup.md +108 -0
  32. package/.claude/skills/auto-test-guard/resources/run-suite.md +48 -0
  33. package/.claude/skills/auto-test-guard/resources/senior-gate.md +19 -0
  34. package/.claude/skills/brain-keeper/SKILL.md +60 -0
  35. package/.claude/skills/brain-keeper/obsidian/app.json +9 -0
  36. package/.claude/skills/brain-keeper/obsidian/appearance.json +4 -0
  37. package/.claude/skills/brain-keeper/obsidian/core-plugins.json +20 -0
  38. package/.claude/skills/brain-keeper/obsidian/daily-notes.json +5 -0
  39. package/.claude/skills/brain-keeper/obsidian/graph.json +32 -0
  40. package/.claude/skills/brain-keeper/obsidian/snippets/folder-colors.css +90 -0
  41. package/.claude/skills/brain-keeper/obsidian/templates.json +5 -0
  42. package/.claude/skills/brain-keeper/templates/README.md +51 -0
  43. package/.claude/skills/brain-keeper/templates/adr.md +40 -0
  44. package/.claude/skills/brain-keeper/templates/bug.md +35 -0
  45. package/.claude/skills/brain-keeper/templates/daily.md +38 -0
  46. package/.claude/skills/brain-keeper/templates/feature.md +62 -0
  47. package/.claude/skills/brain-keeper/templates/meeting.md +34 -0
  48. package/.claude/skills/brain-keeper/templates/tech-debt.md +21 -0
  49. package/.claude/skills/caveman/SKILL.md +187 -0
  50. package/.claude/skills/create-stack-pack/SKILL.md +281 -0
  51. package/.claude/skills/grill-me/SKILL.md +79 -0
  52. package/.claude/skills/honcho-memory/SKILL.md +207 -0
  53. package/.claude/skills/honcho-memory/docs/api-endpoints-verified.md +75 -0
  54. package/.claude/skills/honcho-memory/hooks/on-prompt-submit.js +221 -0
  55. package/.claude/skills/honcho-memory/hooks/on-stop.js +193 -0
  56. package/.claude/skills/honcho-memory/lib/honcho-client.js +363 -0
  57. package/.claude/skills/honcho-memory/lib/memory-injector.js +93 -0
  58. package/.claude/skills/honcho-memory/package.json +32 -0
  59. package/.claude/skills/honcho-memory/scripts/cli.js +370 -0
  60. package/.claude/skills/honcho-memory/scripts/setup.js +109 -0
  61. package/.claude/skills/honcho-memory/tests/t001-api-endpoints-verified.test.js +89 -0
  62. package/.claude/skills/honcho-memory/tests/t002-structure.test.js +97 -0
  63. package/.claude/skills/honcho-memory/tests/t003-honcho-client.test.js +162 -0
  64. package/.claude/skills/honcho-memory/tests/t004-soft-delete.test.js +259 -0
  65. package/.claude/skills/honcho-memory/tests/t005-memory-injector.test.js +175 -0
  66. package/.claude/skills/honcho-memory/tests/t006-on-prompt-submit.test.js +215 -0
  67. package/.claude/skills/honcho-memory/tests/t007-on-stop.test.js +165 -0
  68. package/.claude/skills/honcho-memory/tests/t008-cli.test.js +214 -0
  69. package/.claude/skills/honcho-memory/tests/t009-setup.test.js +232 -0
  70. package/.claude/skills/honcho-memory/tests/t010-skill-md.test.js +114 -0
  71. package/.claude/skills/honcho-memory/tests/t011-settings-hooks.test.js +105 -0
  72. package/.claude/skills/honcho-memory/tests/t012-docs-update.test.js +106 -0
  73. package/.claude/skills/honcho-memory/tests/t013-smoke-e2e.test.js +90 -0
  74. package/.claude/skills/pair-debug/SKILL.md +288 -0
  75. package/.claude/skills/prd-ready-check/SKILL.md +58 -0
  76. package/.claude/skills/project-manager/SKILL.md +167 -0
  77. package/.claude/skills/quality-standards/SKILL.md +201 -0
  78. package/.claude/skills/quick-feature/SKILL.md +264 -0
  79. package/.claude/skills/run-sprint/SKILL.md +342 -0
  80. package/.claude/skills/scaffold/SKILL.md +58 -0
  81. package/.claude/skills/stack-discovery/SKILL.md +159 -0
  82. package/.claude/skills/test-coverage-auditor/SKILL.md +59 -0
  83. package/.claude/skills/to-issues/SKILL.md +163 -0
  84. package/.claude/skills/to-prd/SKILL.md +130 -0
  85. package/.claude/skills/update-template/SKILL.md +254 -0
  86. package/.claude/stacks/CODEOWNERS +30 -0
  87. package/.claude/stacks/README.md +88 -0
  88. package/.claude/stacks/_template.md +116 -0
  89. package/.claude/stacks/java/spring-boot-3.md +376 -0
  90. package/.claude/stacks/java/spring-boot-4.md +438 -0
  91. package/.claude/stacks/typescript/angular-18.md +420 -0
  92. package/.claude/stacks/typescript/angular-19.md +397 -0
  93. package/.claude/stacks/typescript/angular-21.md +494 -0
  94. package/CLAUDE.md +453 -0
  95. package/README.md +391 -0
  96. package/bin/cli.js +773 -0
  97. package/bin/lib/backup.js +62 -0
  98. package/bin/lib/detect-stack.js +476 -0
  99. package/bin/lib/help.js +233 -0
  100. package/bin/lib/identity.js +108 -0
  101. package/bin/lib/local-dir.js +69 -0
  102. package/bin/lib/manifest.js +236 -0
  103. package/bin/lib/sync-all.js +394 -0
  104. package/bin/lib/version-check.js +398 -0
  105. package/dashboard/db.js +199 -0
  106. package/dashboard/package.json +22 -0
  107. package/dashboard/public/app.js +709 -0
  108. package/dashboard/public/content/docs/agents-reference.en.md +911 -0
  109. package/dashboard/public/content/docs/architecture-overview.en.md +260 -0
  110. package/dashboard/public/content/docs/autonomy-matrix.en.md +186 -0
  111. package/dashboard/public/content/docs/git-flow.en.md +525 -0
  112. package/dashboard/public/content/docs/honcho-memory.en.md +394 -0
  113. package/dashboard/public/content/docs/hooks-reference.en.md +420 -0
  114. package/dashboard/public/content/docs/pipeline.en.md +400 -0
  115. package/dashboard/public/content/docs/quality-gate.en.md +315 -0
  116. package/dashboard/public/content/docs/skills-reference.en.md +500 -0
  117. package/dashboard/public/content/docs/stack-rules.en.md +362 -0
  118. package/dashboard/public/content/docs/troubleshooting.en.md +637 -0
  119. package/dashboard/public/content/manifest.json +102 -0
  120. package/dashboard/public/content/manual/backend.en.md +1138 -0
  121. package/dashboard/public/content/manual/existing-project.en.md +831 -0
  122. package/dashboard/public/content/manual/frontend.en.md +1065 -0
  123. package/dashboard/public/content/manual/fullstack.en.md +1508 -0
  124. package/dashboard/public/content/manual/mobile.en.md +866 -0
  125. package/dashboard/public/index.html +108 -0
  126. package/dashboard/public/style.css +610 -0
  127. package/dashboard/public/vendor/marked.min.js +69 -0
  128. package/dashboard/rtk.js +143 -0
  129. package/dashboard/server-app.js +403 -0
  130. package/dashboard/server.js +104 -0
  131. package/dashboard/test/sprint1.test.js +406 -0
  132. package/dashboard/test/sprint2.test.js +571 -0
  133. package/dashboard/test/sprint3.test.js +560 -0
  134. package/package.json +33 -0
  135. package/scripts/hooks/subagent-telemetry.sh +14 -0
  136. package/scripts/hooks/telemetry-writer.js +250 -0
  137. package/scripts/latest-versions.json +56 -0
@@ -0,0 +1,1065 @@
1
+ # Frontend Manual — development-utility-kit
2
+
3
+ > Definitive manual for **Angular 21** frontend developers working with the `development-utility-kit` harness. Covers everything from `duk install` to your first merged PR, with exact prompts, step-by-step workflows, and non-negotiable rules.
4
+
5
+ ---
6
+
7
+ ## 1. Introduction
8
+
9
+ ### Who this manual is for
10
+
11
+ You are a frontend developer building screens with **Angular 21** (standalone, Signals, OnPush, lazy loading, Signal Forms) using the harness. It doesn't matter if you've never opened Cowork — this manual takes you from zero to first component in production.
12
+
13
+ ### What's covered
14
+
15
+ - 5-minute onboarding
16
+ - The **non-negotiable** 3-file rule (`.ts` / `.html` / `.scss`)
17
+ - Frontend-applicable harness skills
18
+ - External **Impeccable** skill (visual refinement)
19
+ - Complete workflows with real prompts (feature from scratch, visual polish, debugging, mobile)
20
+ - Intent-based trigger cheat sheet
21
+ - Antipatterns and troubleshooting
22
+
23
+ ### Prerequisites
24
+
25
+ - **Node.js 22+** (`node --version`)
26
+ - **npm 10+** (`npm --version`)
27
+ - **Angular CLI 21+** (`npx @angular/cli@latest version`)
28
+ - **Git** in PATH
29
+ - **Cowork** OR **Claude Code** installed and authenticated
30
+ - Editor with TypeScript support (VS Code recommended)
31
+
32
+ ### What's NOT here
33
+
34
+ - Spring Boot backend setup → see `[Backend](backend)`
35
+ - Fullstack monorepo → see `[Fullstack](fullstack)`
36
+ - React Native / Expo → see `[Mobile](mobile)`
37
+ - Legacy project adoption → see `[Existing Project](existing-project)`
38
+
39
+ ---
40
+
41
+ ## 2. 5-minute onboarding
42
+
43
+ ### Step 1 — Install the harness
44
+
45
+ ```bash
46
+ # Default path (Windows: C:\development\tools\development-utility-kit)
47
+ npx @eltonssouza/development-utility-kit install
48
+ ```
49
+
50
+ Idempotent: runs `git pull` if the repository already exists.
51
+
52
+ ### Step 2 — Create (or enter) the frontend project
53
+
54
+ ```bash
55
+ # Create from scratch
56
+ mkdir C:\development\source\projects\my-front
57
+ cd C:\development\source\projects\my-front
58
+ git init
59
+ ```
60
+
61
+ ### Step 3 — Install harness in the project
62
+
63
+ ```bash
64
+ duk install
65
+ ```
66
+
67
+ Creates `.claude/`, `CLAUDE.md`, `.cursorrules`, Git hooks, scripts. Idempotent.
68
+
69
+ ### Step 4 — Edit `CLAUDE.md` → Project Identity
70
+
71
+ Open `CLAUDE.md` and edit **ONLY** the `Project Identity` section:
72
+
73
+ ```markdown
74
+ ## Project Identity
75
+
76
+ - **Project name**: `my-front`
77
+ - **Project type**: `frontend`
78
+ - **Primary stack**: `Angular 21`
79
+ - **Frontend stack**: `angular`
80
+ - **Database**: `n/a`
81
+ - **Domain**: `e-commerce`
82
+ - **Team size**: `2 frontend`
83
+ - **Additional rules**:
84
+ ```
85
+
86
+ > **Attention**: The `Frontend stack` field is read by the `bootstrap-frontend` skill to choose between `angular` and `vite-vanilla`. Without it, the skill won't trigger.
87
+
88
+ ### Step 5 — Open Cowork or Claude Code
89
+
90
+ Open the Cowork terminal (or `claude` CLI) at the project root.
91
+
92
+ ### Step 6 — First conversation
93
+
94
+ Type in chat:
95
+
96
+ ```text
97
+ scaffold the frontend
98
+ ```
99
+
100
+ The `bootstrap-frontend` skill triggers, runs Angular CLI 21, configures standalone + OnPush + lazy loading + Jest + jest-axe + ng-bootstrap + Playwright. Expected output:
101
+
102
+ ```text
103
+ frontend/
104
+ ├── src/app/
105
+ │ ├── core/
106
+ │ ├── shared/
107
+ │ ├── features/
108
+ │ └── app.routes.ts
109
+ ├── angular.json
110
+ ├── package.json
111
+ ├── jest.config.js
112
+ ├── playwright.config.ts
113
+ └── tsconfig.json
114
+ ```
115
+
116
+ ### Step 7 — Launch dashboard (optional)
117
+
118
+ ```bash
119
+ duk dashboard
120
+ ```
121
+
122
+ Opens `http://localhost:4242` with manual, skills, agents, ADRs, hooks.
123
+
124
+ Done. You're on the harness. Next stop: the 3-file rule.
125
+
126
+ ---
127
+
128
+ ## 3. NON-NEGOTIABLE RULE — 3 separate files in every Angular component
129
+
130
+ > **HARD BLOCK.** `tech-lead` and `code-reviewer` refuse merge if you violate. **No exceptions. No size threshold. No "small component" carve-out.** This `CLAUDE.md` rule overrides the threshold-based policy of ADR-008.
131
+
132
+ ### The rule
133
+
134
+ Every component, directive, or pipe **with a template** uses exactly **three physical files**:
135
+
136
+ | File | Content |
137
+ |---|---|
138
+ | `<name>.ts` | Component logic. Decorator with `templateUrl` + `styleUrl` (or `styleUrls`). |
139
+ | `<name>.html` | Full HTML template. |
140
+ | `<name>.scss` | SCSS styles. |
141
+
142
+ **NEVER** use `template: \`...\`` or `styles: [\`...\`]` or `styleUrls: ['...inline...']` inside the `.ts`. No kidding.
143
+
144
+ ### CORRECT example
145
+
146
+ `product-list.component.ts`
147
+
148
+ ```typescript
149
+ import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
150
+ import { CommonModule } from '@angular/common';
151
+ import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';
152
+
153
+ @Component({
154
+ selector: 'app-product-list',
155
+ standalone: true,
156
+ imports: [CommonModule, NgbPaginationModule],
157
+ templateUrl: './product-list.component.html',
158
+ styleUrl: './product-list.component.scss',
159
+ changeDetection: ChangeDetectionStrategy.OnPush,
160
+ })
161
+ export class ProductListComponent {
162
+ readonly products = signal<readonly Product[]>([]);
163
+ readonly page = signal(1);
164
+ }
165
+ ```
166
+
167
+ `product-list.component.html`
168
+
169
+ ```html
170
+ <section class="product-list" data-testid="product-list">
171
+ <ul>
172
+ @for (product of products(); track product.id) {
173
+ <li>{{ product.name }}</li>
174
+ }
175
+ </ul>
176
+ <ngb-pagination [collectionSize]="total()" [(page)]="page" />
177
+ </section>
178
+ ```
179
+
180
+ `product-list.component.scss`
181
+
182
+ ```scss
183
+ .product-list {
184
+ display: grid;
185
+ gap: var(--spacing-md);
186
+ padding: var(--spacing-lg);
187
+ }
188
+ ```
189
+
190
+ ### FORBIDDEN example
191
+
192
+ ```typescript
193
+ // ❌ HARD BLOCK — code-reviewer / tech-lead refuse merge
194
+ @Component({
195
+ selector: 'app-product-list',
196
+ standalone: true,
197
+ template: `
198
+ <ul>
199
+ @for (p of products(); track p.id) { <li>{{ p.name }}</li> }
200
+ </ul>
201
+ `,
202
+ styles: [`.product-list { display: grid; }`],
203
+ })
204
+ export class ProductListComponent {}
205
+ ```
206
+
207
+ ### Why so strict?
208
+
209
+ - Readable PR diff (each layer isolated)
210
+ - HTML/SCSS linting and formatting work correctly
211
+ - `code-reviewer` audits HTML separately from TS
212
+ - Designers/UX can review HTML/SCSS without touching TS
213
+ - Enables Storybook extraction without refactoring
214
+
215
+ ---
216
+
217
+ ## 4. Frontend-applicable skills
218
+
219
+ The harness exposes skills that trigger by **keyword** in Claude Code/Cowork conversations. There is **NO** `duk bootstrap-frontend` or `duk grill-me` — you type in chat.
220
+
221
+ ### Master table
222
+
223
+ | Skill | When to use | Exact trigger |
224
+ |---|---|---|
225
+ | `bootstrap-frontend` | Initial project scaffold | `scaffold the frontend`, `create Angular frontend`, `build the front skeleton`, `set up Angular` |
226
+ | `grill-me` | Discovery (interview before PRD) | `grill me on <X>`, `interview me about <X>`, `stress-test the plan` |
227
+ | `to-prd` | Generate PRD from discovery | `generate PRD`, `create PRD` |
228
+ | `to-issues` | Break PRD into GitHub issues | `break into issues`, `generate issues` |
229
+ | `run-sprint` | Execute a PLAN sprint | `run sprint <N>`, `execute the sprint`, `let's code this sprint` |
230
+ | `auto-test-guard` | Generate tests + run senior+ gate | `run tests`, `generate tests`, `test everything`, `full suite` |
231
+ | `api-integration-test` | Smoke test front+back integration | `test integration`, `smoke test` |
232
+ | `pair-debug` | Hypothesis-driven debugging | `let's debug <X>`, `investigate this bug`, `find root cause` |
233
+ | `prd-ready-check` | GO/NO-GO for production | `is it production ready?`, `DoD` |
234
+ | `brain-keeper` | Record history in Obsidian | `record in brain`, `update brain` |
235
+ | `honcho-memory` | Cross-session memory | `remember that <X>`, `/honcho save`, `/honcho list` |
236
+ | `caveman` | Telegraphic mode (default ON) | `caveman lite/full/ultra`, `stop caveman` |
237
+ | `project-manager` | Catch-all (default) | Any prompt without a specific skill |
238
+
239
+ ### Detailed cards
240
+
241
+ #### `bootstrap-frontend`
242
+
243
+ - **When**: new project, `CLAUDE.md` configured with `Project type: frontend`.
244
+ - **Trigger**: `scaffold the frontend`
245
+ - **Prerequisite**: `Frontend stack: angular` (or `vite-vanilla`) field filled.
246
+ - **Output**: `frontend/` folder with Angular CLI 21, standalone, OnPush, lazy loading, Jest, jest-axe, Playwright, ng-bootstrap, ESLint, Prettier, design tokens in `src/styles/_tokens.scss`.
247
+ - **Next step**: `grill me on <first screen>`.
248
+
249
+ #### `grill-me` (opt-in)
250
+
251
+ - **When**: starting a new feature/screen. **Mandatory** before `to-prd` on the human path.
252
+ - **Trigger**: `grill me on <X>`
253
+ - **Output**: `docs/discovery/DISCOVERY_<feature>.md` with pains, personas, flows, constraints, technical decisions, risks. In some cases also produces `Proposed ADR` for tech choices.
254
+ - **Next step**: `generate PRD`.
255
+
256
+ #### `to-prd` (opt-in)
257
+
258
+ - **When**: after `grill-me`.
259
+ - **Trigger**: `generate PRD`
260
+ - **Output**: `docs/prd/PRD_<feature>.md` (Overview, Goals, User Stories, Functional Requirements, Non-functional, Out of scope).
261
+ - **Next step**: `analyst generates plan` → `PLAN_*.md`.
262
+
263
+ #### `run-sprint`
264
+
265
+ - **When**: PLAN approved.
266
+ - **Trigger**: `run sprint 1 of PLAN_<feature>.md`
267
+ - **Output**: sprint executed with `qa-engineer` (failing tests) → `frontend-developer` (3 green files) → `gate-keeper` (senior+ gate).
268
+ - **Next step**: `/impeccable polish` for visual refinement.
269
+
270
+ #### `auto-test-guard`
271
+
272
+ - **When**: end of any task; or explicitly when you want to run the suite.
273
+ - **Trigger**: `run tests`
274
+ - **Output**: full senior+ gate (coverage, mutation, jest-axe, Lighthouse, Playwright, pyramid ratio). Blocks if it fails.
275
+
276
+ #### `api-integration-test`
277
+
278
+ - **When**: after the sprint, before PRD-ready.
279
+ - **Trigger**: `test integration`
280
+ - **Output**: spins up backend + frontend, runs real `curl` on endpoints, opens Chrome MCP on critical flows, validates clean console.
281
+
282
+ #### `pair-debug`
283
+
284
+ - **When**: non-obvious bug (don't "run and see").
285
+ - **Trigger**: `let's debug <X>`
286
+ - **Flow**: hypothesis (with confidence %) → probe → confirm → fix → regression test.
287
+
288
+ #### `prd-ready-check`
289
+
290
+ - **When**: before calling a PR "ready for prod".
291
+ - **Trigger**: `is it production ready?`
292
+ - **Output**: GO / NO-GO with listed gaps.
293
+
294
+ #### `brain-keeper`
295
+
296
+ - **When**: at the end of each PLAN.
297
+ - **Trigger**: `record in brain`
298
+ - **Output**: `docs/brain/daily/<date>.md`, `docs/brain/features/<feature>.md`, ADRs, MOC updated.
299
+
300
+ #### `honcho-memory`
301
+
302
+ - **When**: you want Claude to remember something across sessions.
303
+ - **Trigger**: `remember that <preference>` or commands `/honcho save`, `/honcho list`, `/honcho forget`, `/honcho status`.
304
+ - **Output**: `[HONCHO MEMORY]` block injected into every future prompt.
305
+
306
+ #### `caveman`
307
+
308
+ - **When**: already ON by default. You only tune intensity.
309
+ - **Trigger**: `caveman lite/full/ultra` or `stop caveman`.
310
+ - **Effect**: responses ~65-75% shorter.
311
+
312
+ #### `project-manager` (catch-all)
313
+
314
+ - **When**: any prompt that doesn't match a specific skill.
315
+ - **Output**: routes to ONE specialist agent via Task tool (`frontend-developer`, `ux-designer`, `qa-engineer`, etc.).
316
+
317
+ ---
318
+
319
+ ## 5. External **Impeccable** skill — visual refinement
320
+
321
+ > Impeccable does not ship with `development-utility-kit`. It's an independent skill by Paul Bakaus. **For frontend it is highly recommended.**
322
+
323
+ ### Origin
324
+
325
+ - Author: Paul Bakaus
326
+ - Repo: `github.com/pbakaus/impeccable`
327
+
328
+ ### Installation
329
+
330
+ ```bash
331
+ npx skills add pbakaus/impeccable
332
+ ```
333
+
334
+ Installs as an additional Claude Code skill. The `/impeccable *` commands become available in chat.
335
+
336
+ ### Available commands
337
+
338
+ | Command | What it does |
339
+ |---|---|
340
+ | `/impeccable polish` | Refines fine details: spacing, alignment, visual hierarchy, microinteractions. |
341
+ | `/impeccable harden` | Hardens visual robustness against edge cases: overflow, long text, RTL, 200% zoom, dark mode. |
342
+ | `/impeccable audit` | Full scan: typography, color, layout, WCAG contrast, hierarchy. Produces report. |
343
+ | `/impeccable typeset` | Refines typography (scale, line-height, tracking, leading). |
344
+ | `/impeccable colorize` | Refines palette and ensures WCAG AA/AAA contrast. |
345
+ | `/impeccable layout` | Reviews hierarchy, spacing, density, grid alignment. |
346
+
347
+ ### When to use
348
+
349
+ - **After** `frontend-developer` implements a screen.
350
+ - **Before** `prd-ready-check`.
351
+ - In short cycle: `polish` → re-run `jest-axe` → `harden` → re-run Lighthouse → `audit`.
352
+
353
+ ### When **NOT** to use Impeccable
354
+
355
+ - Before the component is functional (markup needs to be stable).
356
+ - To decide the brand palette → that's `ux-designer` + `product-owner` (ADR-010).
357
+ - As a substitute for `jest-axe` or Lighthouse → complementary, not redundant.
358
+
359
+ ### Authority
360
+
361
+ `ux-designer` + `product-owner` decide visual identity. **Impeccable is a tool, not an authority.** ADR-010 makes it clear: refinement yes, design decision no.
362
+
363
+ ### Gate
364
+
365
+ `scripts/impeccable-gate.mjs` runs in **WARN-only** mode. Does not block merge (yet). Runs automatically in the pipeline to record visual drift.
366
+
367
+ ---
368
+
369
+ ## 6. Workflow 1 — Feature from scratch with exact prompts
370
+
371
+ > Real example: **product list with server-side pagination, full-text search, and full WCAG AA a11y**.
372
+
373
+ ### Turn 1 — Discovery
374
+
375
+ You:
376
+
377
+ ```text
378
+ grill me on building a product list screen with pagination and search
379
+ ```
380
+
381
+ Claude (`grill-me`):
382
+
383
+ ```text
384
+ > Let's understand. How many products expected in the database?
385
+ > I recommend server-side pagination via NgbPagination + Spring endpoint with
386
+ > Pageable. OK?
387
+ ```
388
+
389
+ ### Turn 2
390
+
391
+ You:
392
+
393
+ ```text
394
+ ok server-side, expect ~50k products
395
+ ```
396
+
397
+ Claude:
398
+
399
+ ```text
400
+ > Search: case-insensitive? Substring or prefix?
401
+ > I recommend PostgreSQL full-text with tsvector + GIN index. database-engineer
402
+ > will model later. OK with you?
403
+ ```
404
+
405
+ ### Turn 3
406
+
407
+ You:
408
+
409
+ ```text
410
+ yes, case-insensitive substring. Filter by category too.
411
+ ```
412
+
413
+ Claude:
414
+
415
+ ```text
416
+ > Category: single dropdown or multi-select? Hierarchical?
417
+ ```
418
+
419
+ ### Turn 4
420
+
421
+ You:
422
+
423
+ ```text
424
+ multi-select, flat (no hierarchy for now)
425
+ ```
426
+
427
+ Claude continues asking about: sorting, list density (table vs cards), mobile-first, empty state, error state, loading skeleton, filter persistence (URL? localStorage?).
428
+
429
+ ### Turn 10 — Discovery closes
430
+
431
+ Claude:
432
+
433
+ ```text
434
+ > Discovery complete. Persisted to docs/discovery/DISCOVERY_product-list.md.
435
+ > Next step: type "generate PRD" for Claude to turn into a formal PRD.
436
+ ```
437
+
438
+ ### Turn 11 — PRD
439
+
440
+ You:
441
+
442
+ ```text
443
+ generate PRD
444
+ ```
445
+
446
+ Claude (`to-prd`):
447
+
448
+ ```text
449
+ > Created docs/prd/PRD_product-list.md with:
450
+ > - Overview
451
+ > - Goals (3)
452
+ > - User Stories (5)
453
+ > - Functional Requirements (12)
454
+ > - Non-functional (a11y AA, LCP <2.5s, mobile-first)
455
+ > - Out of scope (CSV export, bulk actions)
456
+ > Next: "analyst generates plan".
457
+ ```
458
+
459
+ ### Turn 12 — Technical plan
460
+
461
+ You:
462
+
463
+ ```text
464
+ analyst generates technical plan from PRD_product-list.md
465
+ ```
466
+
467
+ Claude (`analyst`):
468
+
469
+ ```text
470
+ > Created docs/plans/PLAN_product-list.md:
471
+ > Sprint 1 (4 tasks):
472
+ > 1.1 Backend: GET /api/v1/products?page&size&q&category[]
473
+ > 1.2 DB: GIN index on tsvector + Flyway migration
474
+ > 1.3 Frontend: ProductListComponent (3 files, OnPush, Signal)
475
+ > 1.4 E2E: Playwright flow search + pagination + filter
476
+ > Goal-ready DoD with measurable criteria.
477
+ ```
478
+
479
+ ### Turn 13 — Execute sprint
480
+
481
+ You:
482
+
483
+ ```text
484
+ run sprint 1 of PLAN_product-list.md
485
+ ```
486
+
487
+ Claude (`run-sprint`):
488
+
489
+ ```text
490
+ > [Task 1.1] backend-developer implements ProductController...
491
+ > [Task 1.2] database-engineer creates V20260527__product_search_index.sql...
492
+ > [Task 1.3] qa-engineer writes product-list.component.spec.ts (red) ✓
493
+ > [Task 1.3] frontend-developer implements 3 files:
494
+ > - frontend/src/app/features/products/product-list.component.ts
495
+ > - frontend/src/app/features/products/product-list.component.html
496
+ > - frontend/src/app/features/products/product-list.component.scss
497
+ > [Task 1.3] gate-keeper runs senior+ gate:
498
+ > - Jest coverage: 87% statements / 81% branches ✓
499
+ > - Mutation score (domain): 73% ✓
500
+ > - jest-axe: 0 critical, 0 serious ✓
501
+ > - Playwright E2E: 4/4 green ✓
502
+ > - Lighthouse (median 3 runs): 0.84 ✓
503
+ > - LCP 2200ms ✓ | CLS 0.05 ✓ | TBT 220ms ✓
504
+ > - Pyramid: E2E 18% of total ✓
505
+ > - Initial bundle: 412KB gzip ✓
506
+ > - GREEN ✓
507
+ > [Task 1.4] E2E complete.
508
+ > Sprint 1 done.
509
+ ```
510
+
511
+ ### Turn 14 — Visual refinement
512
+
513
+ You:
514
+
515
+ ```text
516
+ /impeccable polish
517
+ ```
518
+
519
+ Claude (Impeccable):
520
+
521
+ ```text
522
+ > Polish analysis on ProductListComponent:
523
+ > 1. "Next page" button without legible aria-label ("›" as label)
524
+ > → added aria-label="Next page"
525
+ > 2. Inconsistent spacing between cards (16px and 20px mixed)
526
+ > → standardized to var(--spacing-md) (16px)
527
+ > 3. Focus ring missing on internal card links
528
+ > → outline: 2px solid var(--focus-ring); offset 2px
529
+ > 4. Loading skeleton without reduced animation for prefers-reduced-motion
530
+ > → media query added
531
+ > Diff applied to 4 files. Recommend re-running jest-axe and Lighthouse.
532
+ ```
533
+
534
+ ### Turn 15 — Re-validate
535
+
536
+ You:
537
+
538
+ ```text
539
+ run jest-axe and lighthouse
540
+ ```
541
+
542
+ Claude:
543
+
544
+ ```text
545
+ > jest-axe: 0 violations ✓
546
+ > Lighthouse: 0.88 (LCP 2100ms, CLS 0.04, TBT 210ms) ✓
547
+ ```
548
+
549
+ ### Turn 16 — Smoke test
550
+
551
+ You:
552
+
553
+ ```text
554
+ test integration
555
+ ```
556
+
557
+ Claude (`api-integration-test`):
558
+
559
+ ```text
560
+ > Spinning up backend (port 8080) + frontend (port 4200)...
561
+ > GET /api/v1/products?page=0&size=20 → 200 (147ms) ✓
562
+ > GET /api/v1/products?q=notebook → 200 (89ms) ✓
563
+ > Chrome MCP opens http://localhost:4200/products
564
+ > - Search "notebook" → 12 results ✓
565
+ > - Pagination page 2 → ✓
566
+ > - Filter category "electronics" → ✓
567
+ > - Console: 0 errors ✓
568
+ > Smoke GREEN.
569
+ ```
570
+
571
+ ### Turn 17 — Final gate
572
+
573
+ You:
574
+
575
+ ```text
576
+ is it production ready?
577
+ ```
578
+
579
+ Claude (`prd-ready-check`):
580
+
581
+ ```text
582
+ > PRD-ready checklist:
583
+ > ✓ Backend coverage 87% / branches 82%
584
+ > ✓ Frontend coverage 88% / branches 83%
585
+ > ✓ Mutation domain 73%
586
+ > ✓ A11y 0 critical/serious (component + E2E)
587
+ > ✓ Lighthouse 0.88 ≥ 0.80
588
+ > ✓ Pyramid E2E 18% ≤ 30%
589
+ > ✓ Initial bundle 412KB gzip
590
+ > ✓ Playwright E2E 4/4
591
+ > ✓ Clean console in smoke
592
+ > ✓ ProblemDetail (RFC 9457) on all errors
593
+ > ✓ No TODO, no any, no inline template/styles
594
+ > GO ✓
595
+ ```
596
+
597
+ ### Turn 18 — Record history
598
+
599
+ You:
600
+
601
+ ```text
602
+ record in brain
603
+ ```
604
+
605
+ Claude (`brain-keeper`):
606
+
607
+ ```text
608
+ > Updated:
609
+ > - docs/brain/daily/2026-05-27.md
610
+ > - docs/brain/features/product-list.md
611
+ > - docs/brain/MOC.md (link added)
612
+ > Next: commit + PR to develop.
613
+ ```
614
+
615
+ ### Turn 19 — Commit
616
+
617
+ You:
618
+
619
+ ```text
620
+ commit and open PR
621
+ ```
622
+
623
+ Claude:
624
+
625
+ ```text
626
+ > Commits created (Conventional Commits, NO AI references):
627
+ > feat(products): add product list with server-side pagination
628
+ > feat(products): add full-text search with tsvector
629
+ > test(products): add jest-axe and Playwright e2e coverage
630
+ > docs(products): record discovery, PRD and plan
631
+ > PR opened: feature/product-list → develop
632
+ ```
633
+
634
+ Done. Feature from scratch in ~19 conversational turns, without ever opening an IDE to write boilerplate.
635
+
636
+ ---
637
+
638
+ ## 7. Workflow 2 — Refine visuals with Impeccable
639
+
640
+ Scenario: component already functional, senior+ gate passed, but visuals need care before final PR.
641
+
642
+ ### Recommended cycle: `polish` → `harden` → `audit`
643
+
644
+ You:
645
+
646
+ ```text
647
+ /impeccable polish
648
+ ```
649
+
650
+ Claude:
651
+
652
+ ```text
653
+ > 7 fine adjustments applied:
654
+ > - Input spacing unified to var(--spacing-sm)
655
+ > - Header typography hierarchy (h1 → 1.875rem, h2 → 1.5rem)
656
+ > - :hover and :focus states with 150ms ease-out transition
657
+ > - Border-radius standardized to var(--radius-md) (6px)
658
+ > - Tokenized shadows (--shadow-sm, --shadow-md)
659
+ > - Icons with consistent height (1em)
660
+ > - Primary button with 12px 20px padding
661
+ ```
662
+
663
+ You:
664
+
665
+ ```text
666
+ /impeccable harden
667
+ ```
668
+
669
+ Claude:
670
+
671
+ ```text
672
+ > 5 robustness reinforcements:
673
+ > - Long text: text-overflow ellipsis + title on short columns
674
+ > - Horizontal overflow on tables: touch scroll + gradient shadow
675
+ > - RTL support: dir="auto" on text fields, icon mirroring
676
+ > - 200% zoom: layout intact, no cutoff
677
+ > - prefers-reduced-motion: animations respected
678
+ ```
679
+
680
+ You:
681
+
682
+ ```text
683
+ /impeccable audit
684
+ ```
685
+
686
+ Claude:
687
+
688
+ ```text
689
+ > Audit report:
690
+ > Typography: ✓ (1.250 scale, 1.5 line-height in body)
691
+ > Color: ✓ (15 tokens, no direct hex)
692
+ > Contrast: ✓ (minimum 4.7:1, AA guaranteed)
693
+ > Layout: ✓ (12-column grid, breakpoints sm/md/lg/xl)
694
+ > Hierarchy: ✓ (h1-h4, no h5/h6)
695
+ > Density: ✓ (compact in tables, comfortable in forms)
696
+ > Microinteractions: ✓ (consistent transitions)
697
+ > Impeccable score: 9.2/10
698
+ ```
699
+
700
+ ### When NOT to use Impeccable
701
+
702
+ - **Before** the component works: markup must be stable; refining code that will change = waste.
703
+ - **To decide brand palette**: `ux-designer` + `product-owner` decide that. Impeccable refines within already-established tokens.
704
+ - **Replacing jest-axe or Lighthouse**: Impeccable doesn't run screen reader or performance audit. They're complementary.
705
+
706
+ ---
707
+
708
+ ## 8. Workflow 3 — Angular debug with `pair-debug`
709
+
710
+ Scenario: `ProductListComponent` is `OnPush` and doesn't re-render after `search()` changes.
711
+
712
+ ### Turn 1
713
+
714
+ You:
715
+
716
+ ```text
717
+ let's debug — ProductListComponent doesn't update after search
718
+ ```
719
+
720
+ Claude (`pair-debug`):
721
+
722
+ ```text
723
+ > Symptom: list doesn't re-render despite signal visibly changing in debug.
724
+ > Hypothesis 1 (confidence 80%): you're mutating the array instead of creating
725
+ > a new one (this.resources().push() instead of this.resources.set([...])).
726
+ > Probe: grep ".push(" + ".pop(" + "splice(" + ".sort(" in product-list/.
727
+ > Confirm probe?
728
+ ```
729
+
730
+ ### Turn 2
731
+
732
+ You:
733
+
734
+ ```text
735
+ yes
736
+ ```
737
+
738
+ Claude:
739
+
740
+ ```text
741
+ > Found in product-list.service.ts:42:
742
+ > this.resources().push(item);
743
+ > Hypothesis 1 CONFIRMED.
744
+ > Fix: this.resources.update(arr => [...arr, item]);
745
+ > Dispatching frontend-developer to apply + qa-engineer for regression test.
746
+ ```
747
+
748
+ ### Turn 3
749
+
750
+ You:
751
+
752
+ ```text
753
+ go
754
+ ```
755
+
756
+ Claude:
757
+
758
+ ```text
759
+ > [frontend-developer] Fix applied to product-list.service.ts.
760
+ > [qa-engineer] Regression test add-product-updates-list.spec.ts:
761
+ > - Before: ❌ red (mutation doesn't trigger CD)
762
+ > - After: ✓ green (immutable update triggers CD)
763
+ > [gate-keeper] Full suite: GREEN ✓
764
+ ```
765
+
766
+ ### Other common hypotheses `pair-debug` raises
767
+
768
+ - Signal not being read in template (use `()` to call).
769
+ - `ChangeDetectorRef.markForCheck()` missed in external async callback.
770
+ - `trackBy` changing item identity between renders.
771
+ - Child component with non-signal input receiving signal without `.()`.
772
+
773
+ ---
774
+
775
+ ## 9. Workflow 4 — Angular → Mobile conversion
776
+
777
+ When you need to port an Angular screen to React Native, the `mobile-developer` agent covers it.
778
+
779
+ ```text
780
+ I want to convert ProductListComponent to mobile RN
781
+ ```
782
+
783
+ `project-manager` → `mobile-developer` dispatches conversion preserving domain logic.
784
+
785
+ Full details in `[Mobile](mobile)`.
786
+
787
+ ---
788
+
789
+ ## 10. Cheat sheet — Intent-based triggers (frontend)
790
+
791
+ | I want to... | Type |
792
+ |---|---|
793
+ | Start frontend project | `scaffold the frontend` |
794
+ | Feature discovery | `grill me on <X>` |
795
+ | Generate PRD | `generate PRD` |
796
+ | Break into GitHub issues | `break into issues` |
797
+ | Technical plan | `analyst generates technical plan` |
798
+ | Execute sprint | `run sprint <N>` |
799
+ | Run tests / gate | `run tests` |
800
+ | Polish visuals | `/impeccable polish` |
801
+ | Harden visual edge cases | `/impeccable harden` |
802
+ | Full visual audit | `/impeccable audit` |
803
+ | Refine typography | `/impeccable typeset` |
804
+ | Refine palette | `/impeccable colorize` |
805
+ | Review layout/grid | `/impeccable layout` |
806
+ | Smoke E2E backend+frontend | `test integration` |
807
+ | Final gate | `is it production ready?` |
808
+ | Obscure debug | `let's debug <X>` |
809
+ | Wireframe / screen flow | `wireframe for <screen>` |
810
+ | Refactor component | `refactor <ComponentName>` |
811
+ | Standalone a11y audit | `accessibility audit on <feature>` |
812
+ | Macro ADR (signal vs RxJS, etc.) | `architect proposes ADR for <decision>` |
813
+ | Remember preference | `remember that <X>` |
814
+ | List memories | `/honcho list` |
815
+ | Forget | `/honcho forget <id>` |
816
+ | Record history | `record in brain` |
817
+ | Stop caveman | `stop caveman` |
818
+ | Back to caveman | `caveman full` |
819
+
820
+ ---
821
+
822
+ ## 11. Decision tree — Which skill when?
823
+
824
+ ```text
825
+ New project, empty frontend → scaffold the frontend
826
+ New feature, scope still fuzzy → grill me on <X>
827
+ Discovery done, no docs yet → generate PRD
828
+ PRD done, no plan → analyst generates plan
829
+ Plan done, time to code → run sprint <N>
830
+ Component done, visuals raw → /impeccable polish
831
+ Visuals polished, robustness missing → /impeccable harden
832
+ Everything applied, want report → /impeccable audit
833
+ Obvious bug → frontend-developer (project-manager)
834
+ Obscure bug, no hypothesis → let's debug <X>
835
+ Poor performance → /impeccable audit + Lighthouse audit
836
+ Refactor legacy → refactor <X> (project-manager)
837
+ Mobile from Angular → I want to convert <X> to mobile
838
+ A11y before PR → accessibility audit
839
+ Before asking for merge → is it production ready?
840
+ Post-feature, before leaving → record in brain
841
+ ```
842
+
843
+ ---
844
+
845
+ ## 12. `CLAUDE.md` Project Identity configuration (frontend)
846
+
847
+ Edit **only** the `Project Identity` section in `CLAUDE.md`:
848
+
849
+ ```markdown
850
+ ## Project Identity
851
+
852
+ - **Project name**: `my-frontend`
853
+ - **Project type**: `frontend`
854
+ - **Primary stack**: `Angular 21`
855
+ - **Frontend stack**: `angular`
856
+ - **Database**: `n/a`
857
+ - **Domain**: `e-commerce`
858
+ - **Team size**: `2 frontend`
859
+ - **Additional rules**:
860
+ ```
861
+
862
+ Vite Vanilla alternative:
863
+
864
+ ```markdown
865
+ - **Frontend stack**: `vite-vanilla`
866
+ ```
867
+
868
+ > Without `Frontend stack`, the `bootstrap-frontend` skill aborts.
869
+
870
+ ---
871
+
872
+ ## 13. Antipatterns
873
+
874
+ | ❌ Anti | Why it hurts |
875
+ |---|---|
876
+ | Inline `template:` or `styles:` in `@Component` | Hard block. `code-reviewer` / `tech-lead` refuse merge. |
877
+ | Using `any` in TypeScript | Kills type safety. `tsconfig` strict + ESLint block it. |
878
+ | Mutating array inside signal (`signal().push(...)`) | OnPush doesn't detect. Use `update(arr => [...arr, item])`. |
879
+ | Forgetting `ChangeDetectionStrategy.OnPush` | Performance degrades exponentially in large trees. |
880
+ | HttpClient without typed error interceptor | Errors become `any`, ProblemDetail lost. |
881
+ | Component without `data-testid` on interactive elements | Playwright becomes fragile with CSS selectors. |
882
+ | Commit with `Co-Authored-By: Claude` | Hard block. NEVER mention AI/Claude/Anthropic in commits. |
883
+ | Trying `duk project-manager "X"` | Doesn't exist. Skills are keyword, not CLI. |
884
+ | Running `to-prd` without `grill-me` first | `analyst` refuses input without `DISCOVERY_*.md`. |
885
+ | Skipping `gate-keeper` "because in a hurry" | Gate is non-negotiable. |
886
+ | Mixing Reactive Forms and Signal Forms | Pick one model per feature; preference: Signal Forms. |
887
+ | `any` in HttpClient response | Use `HttpClient.get<Resource>(...)` always typed. |
888
+ | Giant "smart" components (>200 lines TS) | Split into sub-components or facade service. |
889
+ | Forgetting `@if` / `@for` (new template syntax) | Angular 21 uses new control flow; `*ngIf` is legacy. |
890
+ | Lazy loading only on root route | Lazy on features too — bundle splitting. |
891
+ | `console.log` left in code | ESLint blocks. Use injectable `LoggerService`. |
892
+
893
+ ---
894
+
895
+ ## 14. Frontend-specific troubleshooting
896
+
897
+ ### HMR not updating after edit
898
+
899
+ - Kill the server (`Ctrl+C`) and restart with `ng serve`.
900
+ - Verify you edited the correct `.ts`/`.html`/`.scss` file (no cache).
901
+ - Lower `--poll` if you're on WSL/mounted volume.
902
+
903
+ ### "Stale" signal in template
904
+
905
+ - Confirm you're calling `()`: `{{ products() }}` not `{{ products }}`.
906
+ - For external async callback (non-Angular), wrap in `NgZone.run()` or inject `ChangeDetectorRef`.
907
+
908
+ ### `ChangeDetectorRef.markForCheck()` needed?
909
+
910
+ - In 99% of Signal cases, **no**. Signals already notify.
911
+ - Only needed when the trigger comes from outside the zone (e.g., native WebSocket, `setTimeout` in external libs, SDK callback).
912
+
913
+ ### Initial bundle > 500KB
914
+
915
+ - Audit with `ng build --stats-json` + `webpack-bundle-analyzer`.
916
+ - Lazy loading on feature routes.
917
+ - Tree-shake imports (`import { x } from 'lib'` not `import 'lib'`).
918
+ - Move heavy libs (charts, editor) into lazy chunks.
919
+
920
+ ### Playwright E2E timeout
921
+
922
+ - Increase timeout only on flows with real external calls.
923
+ - Prefer `page.waitForLoadState('networkidle')` over `waitForTimeout`.
924
+ - Use `data-testid` instead of fragile CSS/XPath selectors.
925
+
926
+ ### `bootstrap-frontend` doesn't trigger
927
+
928
+ - `CLAUDE.md` without `Frontend stack`. Add `Frontend stack: angular`.
929
+ - Cowork/Claude Code must be at project root.
930
+ - Confirm `duk install` ran without error.
931
+
932
+ ### `jest-axe` fails on "color-contrast"
933
+
934
+ - You have direct hex in SCSS? Move to token.
935
+ - Check contrast on `var(--text-primary)` vs `var(--surface-base)`.
936
+ - Minimum AA = 4.5:1 (normal text), 3:1 (large text).
937
+
938
+ ### Lighthouse score < 0.80
939
+
940
+ - High LCP → preload critical, optimize hero image, server push.
941
+ - High CLS → reserve space (`aspect-ratio`, `width`/`height` on img).
942
+ - High TBT → split chunks, defer scripts, web worker for CPU.
943
+ - Heavy bundle → aggressive lazy loading.
944
+
945
+ ### Pyramid ratio E2E > 30%
946
+
947
+ - Testing business rules in E2E? Move to Jest unit.
948
+ - E2E should test **flow**, not **logic**.
949
+ - Mock API in Jest, leave E2E only for critical end-to-end flows.
950
+
951
+ ### `duk dashboard` doesn't open
952
+
953
+ - Port 4242 in use? `duk dashboard --port 5252`.
954
+ - Firewall blocking localhost? Allow Node.
955
+ - Logs in `~/.duk/dashboard.log`.
956
+
957
+ ### Skills don't trigger (general)
958
+
959
+ - Check Cowork/Claude Code has `.claude/skills/` loaded.
960
+ - Restart the session.
961
+ - Confirm exact keyword — `scaffold the front` ≠ `scaffold the frontend`.
962
+
963
+ ---
964
+
965
+ ## 15. Honcho memory in practice (frontend)
966
+
967
+ Honcho injects a `[HONCHO MEMORY]` block into every prompt. Useful frontend preferences to record:
968
+
969
+ ```text
970
+ remember that I always use 3 separate files in Angular components
971
+ ```
972
+
973
+ ```text
974
+ remember that I prefer Signal Forms over Reactive Forms
975
+ ```
976
+
977
+ ```text
978
+ remember that I never use any in TypeScript
979
+ ```
980
+
981
+ ```text
982
+ remember that every interactive element needs data-testid
983
+ ```
984
+
985
+ ```text
986
+ remember that I prefer OnPush + Signal in every new component
987
+ ```
988
+
989
+ ```text
990
+ remember that brand palette is #1a73e8 primary, #0f5fc7 hover, #e8f0fe surface
991
+ ```
992
+
993
+ ```text
994
+ remember mobile-first on all breakpoints
995
+ ```
996
+
997
+ Direct commands:
998
+
999
+ ```text
1000
+ /honcho save always commit with Conventional Commits
1001
+ /honcho list
1002
+ /honcho forget abc123
1003
+ /honcho status
1004
+ /honcho setup
1005
+ ```
1006
+
1007
+ Details: `[Honcho memory](../docs/honcho-memory)`.
1008
+
1009
+ ---
1010
+
1011
+ ## 16. Active hooks
1012
+
1013
+ The harness installs Git hooks that run automatically:
1014
+
1015
+ - `pre-commit`: lint, formatting, type check, jest-axe smoke
1016
+ - `commit-msg`: validates Conventional Commits + blocks AI/Claude mentions
1017
+ - `pre-push`: runs full unit suite
1018
+ - `post-merge`: suggests `duk install` if `.claude/` changed
1019
+
1020
+ Full reference: `[Hooks reference](../docs/hooks-reference)`.
1021
+
1022
+ ---
1023
+
1024
+ ## 17. Quick glossary
1025
+
1026
+ | Term | Definition |
1027
+ |---|---|
1028
+ | **Skill** | Harness entry layer. Triggers by keyword in chat. |
1029
+ | **Agent** | Specialist executor. Invoked by skill via Task tool. |
1030
+ | **Task tool** | Claude mechanism to invoke sub-agent in parallel/sequence. |
1031
+ | **PLAN** | `docs/plans/PLAN_*.md` — technical plan with sprints and DoD. |
1032
+ | **PRD** | `docs/prd/PRD_*.md` — Product Requirements Document. |
1033
+ | **DISCOVERY** | `docs/discovery/DISCOVERY_*.md` — `grill-me` output. |
1034
+ | **ADR** | Architecture Decision Record. Macro architectural decisions. |
1035
+ | **Goal-ready DoD** | Definition of Done with measurable criteria (not vague). |
1036
+ | **Senior+ gate** | Set of non-negotiable thresholds (coverage, mutation, a11y, Lighthouse, pyramid). |
1037
+ | **Signal** | Angular 21 reactive primitive (`signal()`, `computed()`, `effect()`). |
1038
+ | **OnPush** | Change detection strategy that only updates on input/signal change. |
1039
+ | **Standalone** | Component without NgModule. Default in Angular 21. |
1040
+ | **ng-bootstrap** | UI lib (modal, datepicker, pagination, etc.). Harness default. |
1041
+ | **Impeccable** | External visual refinement skill (Paul Bakaus). |
1042
+ | **jest-axe** | Jest plugin that runs axe-core for a11y in component tests. |
1043
+ | **Lighthouse** | Automated performance/a11y/best-practices/SEO audit. |
1044
+ | **Honcho** | Cross-session persistent memory system (v3 self-hosted). |
1045
+ | **Caveman** | Telegraphic response mode (default ON, ~65-75% fewer tokens). |
1046
+ | **Pyramid ratio** | % of E2E vs total tests. Limit: ≤30%, ideal ≤15%. |
1047
+
1048
+ ---
1049
+
1050
+ ## 18. Cross-references
1051
+
1052
+ - `[Architecture](../docs/architecture-overview)` — harness macro view
1053
+ - `[Agents reference](../docs/agents-reference)` — full agent list
1054
+ - `[Skills reference](../docs/skills-reference)` — full skill list
1055
+ - `[Pipeline](../docs/pipeline)` — PO → analyst → architect → run-sprint → gate-keeper flow
1056
+ - `[Quality gate](../docs/quality-gate)` — detailed senior+ thresholds
1057
+ - `[Stack rules](../docs/stack-rules)` — Angular/Spring/etc. conventions
1058
+ - `[Hooks reference](../docs/hooks-reference)` — active Git hooks
1059
+ - `[Honcho memory](../docs/honcho-memory)` — cross-session memory
1060
+ - `[Git Flow](../docs/git-flow)` — standard Git flow
1061
+ - `[Troubleshooting](../docs/troubleshooting)` — general common issues
1062
+ - `[Backend](backend)` — Spring Boot backend manual
1063
+ - `[Fullstack](fullstack)` — monorepo manual
1064
+ - `[Mobile](mobile)` — React Native manual
1065
+ - `[Existing project](existing-project)` — legacy adoption