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