buildanything 2.0.0 → 2.1.1

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 (115) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +9 -1
  3. package/README.md +57 -61
  4. package/agents/a11y-architect.md +2 -0
  5. package/agents/briefing-officer.md +172 -0
  6. package/agents/business-model.md +14 -12
  7. package/agents/code-architect.md +6 -1
  8. package/agents/code-reviewer.md +3 -2
  9. package/agents/code-simplifier.md +12 -4
  10. package/agents/design-brand-guardian.md +19 -0
  11. package/agents/design-critic.md +16 -11
  12. package/agents/design-inclusive-visuals-specialist.md +2 -0
  13. package/agents/design-ui-designer.md +17 -0
  14. package/agents/design-ux-architect.md +15 -0
  15. package/agents/design-ux-researcher.md +102 -7
  16. package/agents/engineering-ai-engineer.md +2 -0
  17. package/agents/engineering-backend-architect.md +2 -0
  18. package/agents/engineering-data-engineer.md +2 -0
  19. package/agents/engineering-devops-automator.md +2 -0
  20. package/agents/engineering-frontend-developer.md +13 -0
  21. package/agents/engineering-mobile-app-builder.md +2 -0
  22. package/agents/engineering-rapid-prototyper.md +15 -2
  23. package/agents/engineering-security-engineer.md +2 -0
  24. package/agents/engineering-senior-developer.md +13 -0
  25. package/agents/engineering-sre.md +2 -0
  26. package/agents/engineering-technical-writer.md +2 -0
  27. package/agents/feature-intel.md +8 -7
  28. package/agents/ios-app-review-guardian.md +2 -0
  29. package/agents/ios-foundation-models-specialist.md +2 -0
  30. package/agents/ios-product-reality-auditor.md +292 -0
  31. package/agents/ios-storekit-specialist.md +2 -0
  32. package/agents/ios-swift-architect.md +1 -0
  33. package/agents/ios-swift-search.md +1 -0
  34. package/agents/ios-swift-ui-design.md +7 -4
  35. package/agents/marketing-app-store-optimizer.md +2 -0
  36. package/agents/planner.md +6 -1
  37. package/agents/pr-test-analyzer.md +3 -2
  38. package/agents/product-feedback-synthesizer.md +62 -0
  39. package/agents/product-owner.md +163 -0
  40. package/agents/product-reality-auditor.md +216 -0
  41. package/agents/product-spec-writer.md +176 -0
  42. package/agents/refactor-cleaner.md +9 -1
  43. package/agents/security-reviewer.md +2 -1
  44. package/agents/silent-failure-hunter.md +2 -1
  45. package/agents/swift-build-resolver.md +2 -0
  46. package/agents/swift-reviewer.md +2 -1
  47. package/agents/tech-feasibility.md +5 -3
  48. package/agents/testing-api-tester.md +2 -0
  49. package/agents/testing-evidence-collector.md +24 -0
  50. package/agents/testing-performance-benchmarker.md +2 -0
  51. package/agents/testing-reality-checker.md +2 -1
  52. package/agents/visual-research.md +7 -5
  53. package/bin/adapters/scribe-tool.ts +4 -2
  54. package/bin/adapters/write-lease-tool.ts +1 -1
  55. package/bin/buildanything-runtime.ts +20 -107
  56. package/bin/graph-index.js +24 -0
  57. package/bin/graph-index.ts +340 -0
  58. package/bin/mcp-servers/graph-mcp.js +26 -0
  59. package/bin/mcp-servers/graph-mcp.ts +481 -0
  60. package/bin/mcp-servers/orchestrator-mcp.js +26 -0
  61. package/bin/mcp-servers/orchestrator-mcp.ts +361 -0
  62. package/bin/setup.js +272 -111
  63. package/commands/build.md +371 -158
  64. package/commands/idea-sweep.md +2 -2
  65. package/commands/setup.md +15 -4
  66. package/commands/ux-review.md +3 -3
  67. package/commands/verify.md +3 -0
  68. package/docs/migration/phase-graph.yaml +573 -157
  69. package/hooks/design-md-lint +4 -0
  70. package/hooks/design-md-lint.ts +295 -0
  71. package/hooks/pre-tool-use.ts +37 -6
  72. package/hooks/record-mode-transitions.ts +63 -6
  73. package/hooks/subagent-start.ts +3 -2
  74. package/package.json +3 -1
  75. package/protocols/agent-prompt-authoring.md +165 -0
  76. package/protocols/architecture-schema.md +10 -3
  77. package/protocols/cleanup.md +4 -0
  78. package/protocols/decision-log.md +8 -4
  79. package/protocols/design-md-authoring.md +520 -0
  80. package/protocols/design-md-spec.md +362 -0
  81. package/protocols/fake-data-detector.md +1 -1
  82. package/protocols/ios-fake-data-detector.md +65 -0
  83. package/protocols/ios-phase-branches.md +112 -27
  84. package/protocols/launch-readiness.md +9 -5
  85. package/protocols/metric-loop.md +1 -1
  86. package/protocols/page-spec-schema.md +234 -0
  87. package/protocols/product-spec-schema.md +354 -0
  88. package/protocols/sprint-tasks-schema.md +53 -0
  89. package/protocols/state-schema.json +38 -3
  90. package/protocols/state-schema.md +32 -2
  91. package/protocols/verify.md +29 -1
  92. package/protocols/web-phase-branches.md +234 -64
  93. package/skills/ios/ios-bootstrap/SKILL.md +1 -1
  94. package/src/graph/ids.ts +86 -0
  95. package/src/graph/index.ts +32 -0
  96. package/src/graph/parser/architecture.ts +603 -0
  97. package/src/graph/parser/component-manifest.ts +268 -0
  98. package/src/graph/parser/decisions-jsonl.ts +407 -0
  99. package/src/graph/parser/design-md-pass2.ts +253 -0
  100. package/src/graph/parser/design-md.ts +477 -0
  101. package/src/graph/parser/page-spec.ts +496 -0
  102. package/src/graph/parser/product-spec.ts +930 -0
  103. package/src/graph/parser/screenshot.ts +342 -0
  104. package/src/graph/parser/sprint-tasks.ts +317 -0
  105. package/src/graph/storage/index.ts +1154 -0
  106. package/src/graph/types.ts +432 -0
  107. package/src/graph/util/dhash.ts +84 -0
  108. package/src/lrr/aggregator.ts +105 -10
  109. package/src/orchestrator/hooks/context-header.ts +34 -10
  110. package/src/orchestrator/hooks/token-accounting.ts +25 -14
  111. package/src/orchestrator/mcp/cycle-counter.ts +2 -1
  112. package/src/orchestrator/mcp/scribe.ts +27 -16
  113. package/src/orchestrator/mcp/write-lease.ts +30 -13
  114. package/src/orchestrator/phase4-shared-context.ts +20 -4
  115. package/protocols/visual-dna.md +0 -185
@@ -28,27 +28,126 @@ artifacts:
28
28
  - path: docs/plans/quality-targets.json
29
29
  writer: phase-2
30
30
  readers: [phase-4, phase-5, phase-6]
31
- - path: docs/plans/visual-design-spec.md
32
- platform: web
33
- writer: phase-3
34
- readers: [phase-4, phase-5, phase-6]
35
- - path: docs/plans/ios-design-board.md
36
- platform: ios
37
- writer: phase-3
38
- readers: [phase-4, phase-5, phase-6]
31
+ - path: docs/plans/phase-2-contracts/*.md
32
+ writer: phase-2
33
+ readers: [phase-2, phase-3]
34
+ notes: |
35
+ Per-architect post-debate contract files written by the 6 Phase-2.2b
36
+ teammates (backend, frontend, data, security, a11y, perf). Each file
37
+ captures the architect's initial decisions plus any peer-driven
38
+ revisions. Read by the Phase 2.3.1 Implementation Blueprint synthesizer.
39
+ - path: docs/plans/visual-dna-preview.md
40
+ writers: [phase-2, design-brand-guardian, ios-swift-ui-design]
41
+ readers: [phase-2, phase-3]
42
+ notes: |
43
+ Lightweight directional DNA preview surfaced at Gate 2. Web writer is
44
+ design-brand-guardian (protocols/web-phase-branches.md:33); iOS writer
45
+ is ios-swift-ui-design (protocols/ios-phase-branches.md:172). Agent-role
46
+ enforcement fires alongside the phase-2 phase-match so only the two
47
+ legitimate dispatching subagents can write this file. Discarded after
48
+ Gate 2 — Phase 3.0 re-invokes to produce the locked card.
49
+ - path: DESIGN.md
50
+ writers: [phase-3, design-brand-guardian, design-ui-designer, ios-swift-ui-design]
51
+ readers: [phase-3, phase-4, phase-5, phase-6]
52
+ notes: |
53
+ Single design-system artifact at repo root. Web + iOS. Replaces the
54
+ prior visual-dna.md + visual-design-spec.md pair (web) and
55
+ ios-design-board.md (iOS). Authored in two passes:
56
+ Step 3.0 (design-brand-guardian, both platforms) writes Pass 1 —
57
+ Overview, Brand DNA, Rationale, Locked At, References, Do's and Don'ts.
58
+ Pass 2 writer differs by platform: web uses design-ui-designer at
59
+ Step 3.4; iOS uses ios-swift-ui-design at Step 3.2-ios. Pass 2 fills
60
+ YAML tokens (colors, typography, rounded, spacing, components) plus
61
+ the prose for Colors, Typography, Layout, Elevation & Depth, Shapes,
62
+ Components. Format spec is vendored at protocols/design-md-spec.md
63
+ (Apache 2.0). Pipeline contract is in protocols/design-md-authoring.md
64
+ (§9 covers the iOS schema). Agent-role enforcement fires alongside
65
+ the phase-3 phase-match so only the three legitimate authoring
66
+ subagents can write this file.
39
67
  - path: docs/plans/component-manifest.md
40
68
  platform: web
41
69
  writer: phase-3
42
70
  readers: [phase-4]
43
71
  notes: HARD-GATE import source
44
- - path: docs/plans/visual-dna.md
72
+ - path: docs/plans/design-references.md
73
+ platform: web
74
+ writer: visual-research
75
+ readers: [phase-3, phase-4, phase-6-brand-guardian]
76
+ notes: |
77
+ Reference paths grouped by DNA axis. Written by the 2 parallel
78
+ visual-research subagents at Step 3.1 (competitive-audit + inspiration-
79
+ mining modes — both append).
80
+ - path: docs/plans/design-references/**
81
+ platform: web
82
+ writer: visual-research
83
+ readers: [phase-3, phase-4, phase-6-brand-guardian]
84
+ notes: |
85
+ Screenshots harvested by visual-research subagents — competitors/,
86
+ inspiration/, plus mode-keyed subdirs. Binary assets referenced from
87
+ design-references.md; gate must cover non-markdown file types.
88
+ - path: docs/plans/dna-persona-check.md
89
+ platform: web
90
+ writer: design-ux-researcher
91
+ readers: [phase-3, phase-3-brand-guardian]
92
+ notes: |
93
+ Step 3.2b persona/DNA cross-check. Mismatches may backward-edge to
94
+ Step 3.0 (DNA re-lock). Agent-role writer pinned to
95
+ design-ux-researcher per protocols/web-phase-branches.md.
96
+ - path: docs/plans/ux-architecture.md
45
97
  platform: web
46
98
  writer: phase-3
47
- readers: [phase-3, phase-4, phase-5, phase-6]
99
+ readers: [phase-3, phase-4, phase-5]
100
+ - path: docs/plans/ux-flow-validation.md
101
+ platform: web
102
+ writer: design-ux-researcher
103
+ readers: [phase-3, phase-4, phase-5]
104
+ notes: |
105
+ Step 3.3b persona-driven flow validation. Flags friction points
106
+ and unnecessary screens before the Visual Design Spec is built.
107
+ - path: docs/plans/inclusive-visuals-audit.md
108
+ platform: web
109
+ writer: phase-3
110
+ readers: [phase-3, phase-5, phase-6]
111
+ - path: docs/plans/a11y-design-review.md
112
+ platform: web
113
+ writers: [phase-3, a11y-architect]
114
+ readers: [phase-5, phase-6-a11y-chapter]
115
+ notes: |
116
+ Phase 3.7 WCAG 2.2 AA design-time review. Written by a11y-architect
117
+ acting as Phase 3 step owner (protocols/web-phase-branches.md:151);
118
+ agent-role enforcement fires alongside the phase-3 phase-match. LRR
119
+ A11y chapter reads this plus the Phase 5 runtime audit per
120
+ protocols/launch-readiness.md.
121
+ - path: docs/plans/page-specs/*.md
122
+ platform: web
123
+ writer: design-ux-architect
124
+ readers: [phase-4, phase-5, phase-6]
125
+ notes: |
126
+ Per-screen wireframes + layout specs written at Step 3.3 by
127
+ design-ux-architect. ASCII wireframes + content hierarchy + key copy
128
+ + responsive behavior + data loading strategy. One file per screen
129
+ from the product-spec Screen Inventory. Follows
130
+ protocols/page-spec-schema.md.
48
131
  - path: docs/plans/refs.json
49
- writer: phase-2
50
- extended_by: phase-3
132
+ writers: [phase-2, phase-3]
51
133
  readers: [phase-4-briefing-officer]
134
+ notes: |
135
+ Phase 2 Refs Indexer writes the initial anchor index after architecture.md
136
+ lands. Phase 3 extends it after DESIGN.md lands (see
137
+ commands/build.md:167). Both phases are legitimate writers.
138
+ - path: docs/plans/feature-delegation-plan.json
139
+ writer: product-owner
140
+ readers: [orchestrator, briefing-officer]
141
+ notes: |
142
+ Feature delegation plan written by the Product Owner at Step 4.1.
143
+ Contains wave assignments, feature priorities, and acceptance criteria.
144
+ - path: docs/plans/feature-briefs/*.md
145
+ writers: [briefing-officer]
146
+ readers: [orchestrator, phase-4-execution-agents]
147
+ notes: |
148
+ Per-feature briefs written by the Briefing Officer at Step 4.2
149
+ (one per feature per wave). Consumed by the orchestrator-driven
150
+ per-task pipeline during wave execution.
52
151
  - path: docs/plans/decisions.jsonl
53
152
  writer: orchestrator-scribe
54
153
  write_mode: append-only
@@ -57,21 +156,136 @@ artifacts:
57
156
  - path: docs/plans/learnings.jsonl
58
157
  writers: [phase-5, phase-7]
59
158
  readers: [phase-0-learnings-loader, phase-5-reality-sweep]
159
+ - path: docs/plans/evidence/product-reality/{feature_id}/results.json
160
+ platform: web
161
+ writer: product-reality-auditor
162
+ readers: [phase-5-feedback-synthesizer, phase-6-eng-quality]
163
+ notes: |
164
+ Per-feature pass/fail evidence from Track B audit. Schema in
165
+ agents/product-reality-auditor.md.
166
+ - path: docs/plans/evidence/product-reality/{feature_id}/findings.json
167
+ platform: web
168
+ writer: product-reality-auditor
169
+ readers: [phase-5-feedback-synthesizer]
170
+ notes: |
171
+ Per-feature failures with target_phase pre-set by auditor;
172
+ synthesizer validates and passes through.
173
+ - path: docs/plans/evidence/product-reality/{feature_id}/coverage.json
174
+ platform: web
175
+ writer: product-reality-auditor
176
+ readers: [phase-6-eng-quality]
177
+ notes: |
178
+ Per-feature {COVERED|PARTIAL|MISSING} verdict. LRR Eng-Quality
179
+ reads these (one per feature) instead of recomputing.
180
+ - path: docs/plans/evidence/product-reality/{feature_id}/tests-generated.md
181
+ platform: web
182
+ writer: product-reality-auditor
183
+ readers: [phase-5-feedback-synthesizer, phase-6-eng-quality]
184
+ notes: |
185
+ Synthesized agent-browser scripts (one block per check case).
186
+ Provides debug context when results.json shows FAIL.
187
+ - path: docs/plans/evidence/product-reality/{feature_id}/results.json
188
+ platform: ios
189
+ writer: ios-product-reality-auditor
190
+ readers: [phase-5-feedback-synthesizer, phase-6-eng-quality]
191
+ notes: |
192
+ iOS Track B per-feature pass/fail evidence. Same schema as web
193
+ product-reality-auditor but driven by XcodeBuildMCP + Maestro.
194
+ - path: docs/plans/evidence/product-reality/{feature_id}/findings.json
195
+ platform: ios
196
+ writer: ios-product-reality-auditor
197
+ readers: [phase-5-feedback-synthesizer]
198
+ - path: docs/plans/evidence/product-reality/{feature_id}/coverage.json
199
+ platform: ios
200
+ writer: ios-product-reality-auditor
201
+ readers: [phase-6-eng-quality]
202
+ - path: docs/plans/evidence/product-reality/{feature_id}/tests-generated.md
203
+ platform: ios
204
+ writer: ios-product-reality-auditor
205
+ readers: [phase-5-feedback-synthesizer, phase-6-eng-quality]
206
+ notes: |
207
+ Synthesized Maestro YAML flows (one block per check case).
208
+ - path: docs/plans/evidence/track-a/*.json
209
+ writers: [phase-5, testing-api-tester, testing-performance-benchmarker, a11y-architect, engineering-security-engineer]
210
+ readers: [phase-5-feedback-synthesizer, phase-6]
211
+ notes: |
212
+ Track A engineering audit evidence. Web and iOS both write here.
213
+ Per-auditor files: api-contract.json, performance.json,
214
+ accessibility.json, security.json.
60
215
  - path: docs/plans/evidence/*.json
61
216
  writer: phase-5
62
217
  contributors: [phase-4]
63
218
  readers: [phase-6, phase-7]
219
+ - path: docs/plans/evidence/*.md
220
+ writers: [phase-5, design-brand-guardian, silent-failure-hunter]
221
+ readers: [phase-5, phase-6, phase-7]
222
+ notes: |
223
+ Top-level evidence markdown (fake-data-audit.md, brand-drift findings
224
+ outside a nested dir, etc.). Matched explicitly because the **/*.md
225
+ glob requires an intermediate directory segment.
226
+ design-brand-guardian is named explicitly as the Phase 5.1 writer of
227
+ brand-drift.md (commands/build.md:806, protocols/web-phase-branches.md:251);
228
+ silent-failure-hunter writes fake-data-audit.md (commands/build.md:984);
229
+ agent-role enforcement fires alongside the phase-5 phase-match.
230
+ - path: docs/plans/evidence/**/*.json
231
+ writers: [phase-4, phase-5, phase-6, ios-product-reality-auditor]
232
+ readers: [phase-6, phase-7]
233
+ notes: |
234
+ Nested per-task / per-run evidence JSON (smoke-test HAR analysis,
235
+ e2e iter-3 results, dogfood classified findings, product-reality
236
+ per-feature results/findings/coverage, maestro run summaries).
237
+ eval-harness baseline/final files are no longer Phase 5 primary
238
+ outputs (Phase 5 restructured into Track A/B as of 2026-05-01) but
239
+ the eval-harness service is still callable ad-hoc from Step 5.5
240
+ fixes. Top-level evidence/*.json kept separate above for the
241
+ phase-5 writer narrowing.
242
+ - path: docs/plans/evidence/**/*.md
243
+ writers: [phase-4, phase-5, ios-product-reality-auditor]
244
+ readers: [phase-5, phase-6, phase-7]
245
+ notes: |
246
+ Nested per-task / per-run evidence markdown (brand-drift.md,
247
+ fake-data-audit.md, dogfood/findings.md, per-task smoke-test notes).
248
+ - path: docs/plans/evidence/**/*.png
249
+ writers: [phase-3, phase-4, phase-5, ios-product-reality-auditor]
250
+ readers: [phase-5, phase-6, phase-7]
251
+ notes: |
252
+ Playwright screenshots, SwiftUI Preview captures, Maestro run captures,
253
+ design-reference screenshots. Written across multiple phases.
254
+ - path: docs/plans/evidence/**/*.{txt,har}
255
+ writers: [phase-4, phase-5]
256
+ readers: [phase-5, phase-6]
257
+ notes: |
258
+ Smoke-test evidence per protocols/smoke-test.md (HAR captures,
259
+ DOM snapshots, uncaught-exception logs).
64
260
  - path: docs/plans/evidence/lrr/*.json
65
- writers: [code-reviewer, security-reviewer, engineering-sre, a11y-architect, design-brand-guardian]
261
+ writers: [code-reviewer, security-reviewer, engineering-sre, a11y-architect, design-brand-guardian, pr-test-analyzer]
66
262
  readers: [phase-6-aggregator, orchestrator]
67
263
  notes: |
68
- One file per LRR chapter. Writer set = the 5 chapter subagents (aka
69
- "chapter-judge" role per MIGRATION-PLAN-FINAL §Stage 5). Aggregator and
70
- orchestrator are READ-ONLY on chapter files. Enforced agent-role match
71
- in hooks/pre-tool-use.ts against subagent_type staged by subagent-start.
264
+ 5 chapter verdict files (one per chapter subagent, aka "chapter-judge"
265
+ role per MIGRATION-PLAN-FINAL §Stage 5) plus 1 sub-verdict file:
266
+ pr-test-analyzer writes eng-quality-coverage.json as a parallel
267
+ sub-dispatch from the Eng-Quality chapter (commands/build.md Step 6.1);
268
+ code-reviewer reads that file and folds its findings into eng-quality.json.
269
+ Aggregator and orchestrator are READ-ONLY on every file in this dir.
270
+ Enforced agent-role match in hooks/pre-tool-use.ts against subagent_type
271
+ staged by subagent-start.
72
272
  - path: docs/plans/evidence/lrr-aggregate.json
73
273
  writer: phase-6-aggregator
74
274
  readers: [phase-7]
275
+ - path: docs/plans/evidence/lrr-incomplete.json
276
+ writer: phase-6-aggregator
277
+ readers: [orchestrator, user]
278
+ notes: File-completeness checkpoint output per protocols/launch-readiness.md Step 1.
279
+ - path: docs/plans/evidence/lrr-routing.json
280
+ writer: phase-6-aggregator
281
+ readers: [orchestrator]
282
+ notes: BLOCK routing via decided_by per commands/build.md Phase 6.2 STEP 4.
283
+ - path: docs/plans/evidence/reality-check-manifest.json
284
+ writer: testing-reality-checker
285
+ readers: [phase-6-aggregator, phase-7]
286
+ notes: |
287
+ Evidence-sweep manifest per commands/build.md Phase 6.0. Reality
288
+ Checker no longer issues combined_verdict (moved to LRR Aggregator).
75
289
  - path: docs/plans/.build-state.json
76
290
  writer: orchestrator
77
291
  write_frequency: every-phase-boundary
@@ -87,6 +301,26 @@ artifacts:
87
301
  writer: every-phase
88
302
  write_mode: append-on-transition
89
303
  readers: [user, resume]
304
+ - path: docs/plans/.active-learnings.md
305
+ writer: phase-0
306
+ readers: [phase-4-implementer]
307
+ notes: |
308
+ Top-3 cross-run learnings filtered at Step 0.1d and injected into
309
+ Phase 4 implementer briefings per protocols/decision-log.md.
310
+ - path: docs/plans/ios-verify-report.md
311
+ platform: ios
312
+ writer: phase-5
313
+ readers: [phase-6]
314
+ notes: |
315
+ Written by the /buildanything:verify iOS twin (Phase 5 dispatch).
316
+ Required before Phase 6 on iOS per protocols/ios-phase-branches.md.
317
+ - path: docs/plans/ios-ux-review-report.md
318
+ platform: ios
319
+ writer: phase-5
320
+ readers: [phase-6]
321
+ notes: |
322
+ Written by the /buildanything:ux-review iOS twin (Phase 5 dispatch).
323
+ Required before Phase 6 on iOS per protocols/ios-phase-branches.md.
90
324
 
91
325
  phase_internal_scratch:
92
326
  path_glob: docs/plans/phase1-scratch/*.{md,json}
@@ -100,8 +334,10 @@ phase_internal_scratch:
100
334
  - suggested-questions.md
101
335
  - user-decisions.md
102
336
  - prereqs.json
103
- readers: [phase-1-only]
104
- notes: Never read by phase 3+.
337
+ readers: [phase-1-only, phase-1.6-product-spec]
338
+ notes: |
339
+ SPENT after Step 1.6 (Product Spec). The product spec is the last
340
+ consumer of raw research files. Never read by Phase 3+.
105
341
 
106
342
  # ---------------------------------------------------------------------------
107
343
  # 2. Classification matrix
@@ -397,11 +633,18 @@ phases:
397
633
  source: protocols/web-phase-branches.md
398
634
  steps:
399
635
  - id: "3.0"
400
- name: Visual DNA Selection
636
+ name: DESIGN.md Pass 1 — Brand DNA + Overview + Do's and Don'ts
401
637
  kind: dispatch-single
402
638
  subagent_type: design-brand-guardian
403
- produces: 6-axis DNA card (Scope, Density, Character, Material, Motion, Type)
404
- source: protocols/visual-dna.md
639
+ produces: |
640
+ DESIGN.md Pass 1 at repo root — Overview prose + ### Brand DNA
641
+ (7 axis values: Scope, Density, Character, Material, Motion, Type,
642
+ Copy) + Rationale + Locked At + References + Do's and Don'ts.
643
+ Pass 2 sections present as placeholder headings. YAML front
644
+ matter contains version + name only.
645
+ source: protocols/design-md-authoring.md
646
+ format_spec: protocols/design-md-spec.md
647
+ writes: [DESIGN.md]
405
648
  - id: "3.1"
406
649
  name: Visual Research (2 parallel, Playwright-driven)
407
650
  kind: dispatch-parallel
@@ -419,17 +662,39 @@ phases:
419
662
  subagent_type: design-ux-researcher
420
663
  may_route_to: "3.0"
421
664
  - id: "3.3"
422
- name: UX Architecture
665
+ name: UX Architecture + Page Layouts
423
666
  kind: dispatch-single
424
667
  subagent_type: design-ux-architect
425
- writes: [ux-architecture.md]
668
+ reads: [product-spec.md, DESIGN.md, component-manifest.md, architecture.md, design-references/]
669
+ writes: [ux-architecture.md, docs/plans/page-specs/*.md]
670
+ notes: |
671
+ Merged Step 3.3 + former Step 3.9 (Option C). Produces both
672
+ UX architecture (flows, navigation, IA) AND per-screen ASCII
673
+ wireframes + structured layout specs together. Flows and layouts
674
+ inform each other. Follows protocols/page-spec-schema.md.
675
+ One file per screen from product-spec Screen Inventory.
676
+ - id: "3.3b"
677
+ name: UX Flow Validation
678
+ kind: dispatch-single
679
+ dispatches: [design-ux-researcher]
680
+ reads: [docs/plans/ux-architecture.md, docs/plans/page-specs/, docs/plans/product-spec.md, docs/plans/design-doc.md, DESIGN.md]
681
+ writes: [docs/plans/ux-flow-validation.md]
682
+ backward_edges:
683
+ - from: critical-flow-issues
684
+ to: phase-3.step-3.3
426
685
  - id: "3.4"
427
- name: Visual Design Spec
686
+ name: DESIGN.md Pass 2 — Tokens + remaining prose
428
687
  kind: dispatch-single
429
688
  subagent_type: design-ui-designer
430
689
  role: writer
431
- writes: [visual-design-spec.md]
432
- contains: [tokens, material, motion, typography, state-matrix]
690
+ writes: [DESIGN.md]
691
+ contains: [yaml-tokens, colors, typography, layout, elevation, shapes, components, motion-as-h3, component-state-matrix-via-variants]
692
+ source: protocols/design-md-authoring.md
693
+ gate: |
694
+ DESIGN.md lint runs at Step 3.8. broken-refs == 0 is hard-fail.
695
+ Warnings (missing-primary, contrast-ratio WCAG AA, orphaned-tokens,
696
+ missing-typography, section-order) are logged to build-log.md but
697
+ do not block.
433
698
  - id: "3.5"
434
699
  name: Inclusive Visuals Check
435
700
  kind: dispatch-single
@@ -441,8 +706,9 @@ phases:
441
706
  service: metric-loop
442
707
  generator: engineering-frontend-developer
443
708
  critic: design-critic
444
- metric: 6-DNA-axes x 5-craft-dims = /220
445
- target: 180
709
+ metric: 7-DNA-axes (140) + 5-craft-dims (100) = /240
710
+ target: 195
711
+ approaching_threshold: 163
446
712
  max_iterations: 5
447
713
  - id: "3.7"
448
714
  name: A11y Design Review
@@ -458,12 +724,22 @@ phases:
458
724
  - UI/UX IS THE PRODUCT — do NOT skip this phase.
459
725
  - Compositional not reconstructive — every element with a library variant MUST be mapped to that variant in component-manifest.md.
460
726
  phase_4_entry_requirements:
461
- - visual-dna.md
462
- - visual-design-spec.md
727
+ - DESIGN.md (Pass 1 + Pass 2 complete; broken-refs lint == 0)
463
728
  - component-manifest.md
729
+ - page-specs/ (at least one file)
464
730
  ios_branch:
465
731
  source: protocols/ios-phase-branches.md
466
732
  steps:
733
+ - id: "3.0"
734
+ name: DESIGN.md Pass 1 — Brand DNA + Overview + Do's and Don'ts (shared with web)
735
+ kind: dispatch-single
736
+ subagent_type: design-brand-guardian
737
+ writes: [DESIGN.md]
738
+ notes: |
739
+ Same dispatch as web Step 3.0. Brand Guardian writes Pass 1
740
+ (Overview + 7-axis Brand DNA + Rationale + Locked At + References
741
+ + Do's and Don'ts). Pass 2 sections are placeholders. iOS-specific
742
+ Material gating (Liquid Glass requires iOS 26+ target) honored.
467
743
  - id: "3.1-ios"
468
744
  name: Visual research
469
745
  kind: dispatch-single
@@ -472,11 +748,35 @@ phases:
472
748
  sources: [screenlane.com, App Store web listings, Apple HIG pages, SF Symbols browser]
473
749
  constraints: [no paid sources]
474
750
  - id: "3.2-ios"
475
- name: iOS Design Board
751
+ name: DESIGN.md Pass 2 — iOS YAML tokens + remaining prose
476
752
  kind: dispatch-single
477
753
  subagent_type: ios-swift-ui-design
478
- writes: [ios-design-board.md]
479
- grounded_in: [HIG, Liquid Glass, SF Symbols]
754
+ role: writer
755
+ writes: [DESIGN.md]
756
+ contains: [yaml-tokens, colors-with-dark-pairs, typography-as-DynamicType-roles, rounded, spacing, components-iOS-vocabulary, motion-as-h3, component-state-matrix-via-variants]
757
+ source: protocols/design-md-authoring.md
758
+ grounded_in: [HIG, Liquid Glass (iOS 26+), SF Symbols, design-references.md]
759
+ - id: "3.3-ios"
760
+ name: UX Architecture + Page Layouts (iOS)
761
+ kind: dispatch-single
762
+ subagent_type: design-ux-architect
763
+ reads: [product-spec.md, DESIGN.md, architecture.md, design-references/]
764
+ writes: [ux-architecture.md, docs/plans/page-specs/*.md]
765
+ notes: |
766
+ iOS page-specs use single mobile-first ASCII wireframes (iPhone 16 Pro
767
+ 393x852), HIG navigation annotations, DESIGN.md component token refs,
768
+ Dynamic Type role declarations, and safe-area handling per screen.
769
+ Same agent as web Step 3.3 — design-ux-architect platform-gates via
770
+ skill bundle.
771
+ - id: "3.3b-ios"
772
+ name: UX Flow Validation (iOS)
773
+ kind: dispatch-single
774
+ dispatches: [design-ux-researcher]
775
+ reads: [docs/plans/ux-architecture.md, docs/plans/page-specs/, docs/plans/product-spec.md, docs/plans/design-doc.md, DESIGN.md]
776
+ writes: [docs/plans/ux-flow-validation.md]
777
+ backward_edges:
778
+ - from: critical-flow-issues
779
+ to: phase-3.step-3.3-ios
480
780
  - id: "3.4-ios"
481
781
  name: Visual QA loop
482
782
  kind: loop
@@ -485,8 +785,18 @@ phases:
485
785
  critic: design-critic
486
786
  tooling: XcodeBuildMCP SwiftUI Preview captures
487
787
  max_iterations: 3
788
+ - id: "3.8-ios"
789
+ name: DESIGN.md lint gate
790
+ kind: gate
791
+ tooling: hooks/design-md-lint
792
+ rules: |
793
+ broken-refs == 0 hard-fails back to Step 3.2-ios.
794
+ Warnings logged. Plus iOS-specific post-process checks
795
+ (dark-pair rule, Dynamic Type role check, iOS 26 gating)
796
+ per protocols/design-md-authoring.md §9.5.
488
797
  phase_4_entry_requirements:
489
- - ios-design-board.md
798
+ - DESIGN.md (Pass 1 + Pass 2 complete; broken-refs lint == 0)
799
+ - page-specs/ (at least one file from Step 3.3-ios)
490
800
 
491
801
  - id: "4"
492
802
  name: Build
@@ -502,8 +812,15 @@ phases:
502
812
  - id: "4.0.b"
503
813
  name: Design system setup
504
814
  kind: dispatch-single
505
- web: {subagent_type: engineering-frontend-developer, produces: CSS tokens from visual-design-spec}
506
- ios: {subagent_type: engineering-senior-developer, produces: SwiftUI Color/Font/ShapeStyle tokens from ios-design-board.md}
815
+ web: {subagent_type: engineering-frontend-developer, produces: CSS tokens from DESIGN.md (YAML front matter)}
816
+ ios:
817
+ subagent_type: engineering-senior-developer
818
+ produces: |
819
+ Sources/<target>/DesignTokens.swift per protocols/design-md-authoring.md §9.4
820
+ SwiftUI translator (Color extensions Asset Catalog–backed with -dark pairs,
821
+ Font extensions mapped to Font.TextStyle Dynamic Type roles, Spacing/Radius
822
+ enums as CGFloat constants). Also Resources/Assets.xcassets color sets per
823
+ colors: token with light + dark appearances.
507
824
  - id: "4.0.c"
508
825
  name: Acceptance test scaffolding
509
826
  kind: dispatch-single-internal
@@ -523,91 +840,135 @@ phases:
523
840
  kind: gate
524
841
  service: verify-protocol
525
842
  notes: 7 checks must PASS before Step 4.1
526
- per_task_flow:
527
- executes: every task in every dependency-ordered batch
528
- parallelism: Independent sibling tasks run in parallel (~30-50% wall-clock saving)
529
- sub_steps:
530
- - id: briefing
531
- kind: dispatch-single
532
- subagent_type: briefing-officer-internal
533
- reads: [refs.json, task-row]
534
- writes: ~40-line CONTEXT MAP
535
- - id: impl
536
- kind: dispatch-single
537
- dispatch_table:
538
- web:
539
- ui_SM: engineering-frontend-developer
540
- ui_L: engineering-senior-developer
541
- backend: engineering-backend-architect OR engineering-senior-developer
542
- ai_ml: engineering-ai-engineer
543
- ios:
544
- ui_planner: ios-swift-ui-design
545
- ui_impl: [engineering-senior-developer, engineering-mobile-app-builder]
546
- foundation_models: ios-foundation-models-specialist
547
- storekit: ios-storekit-specialist
548
- - id: impl.re-entry
549
- kind: dispatch-single
550
- trigger: LRR backward-routing
551
- inputs: [blocking_finding, prior_output, decision_row]
552
- constraint: revise ONLY what finding requires
553
- - id: sec-review
554
- kind: dispatch-single
555
- subagent_type: security-reviewer
556
- conditional_on: [auth, PII, Keychain, credential tasks]
557
- - id: swift-review
843
+ product_owner_planning:
844
+ steps:
845
+ - id: "4.1"
846
+ name: Product Owner planning
558
847
  kind: dispatch-single
559
- platform: ios
560
- subagent_type: swift-reviewer
561
- checklist: [Swift concurrency 6.2, SwiftUI, protocol DI, Foundation Models]
562
- - id: cleanup
563
- kind: dispatch-parallel
564
- parallel_count: 2
565
- dispatches:
566
- - code-simplifier
567
- - refactor-cleaner
568
- scope: changeset-only
569
- - id: review
570
- kind: dispatch-parallel
571
- parallel_count: 2
572
- dispatch_mode: single-message
573
- dispatches:
574
- - code-reviewer
575
- - silent-failure-hunter
576
- confidence_threshold: 80
577
- - id: metric-loop
578
- kind: loop
579
- service: metric-loop
580
- max_iterations: 5
581
- notes: THIS IS THE AUTHORITATIVE BEHAVIORAL VERIFICATION
582
- ui_tooling:
583
- web: agent-browser
584
- ios: SwiftUI Preview captures
585
- - id: smoke
848
+ subagent_type: product-owner
849
+ reads: [sprint-tasks.md, architecture.md, design-doc.md]
850
+ writes: [docs/plans/feature-delegation-plan.json]
851
+ writes_state: [feature_delegation_plan_path, current_wave]
852
+ notes: |
853
+ Product Owner decomposes sprint tasks into features, assigns
854
+ wave priorities, and defines acceptance criteria per feature.
855
+ Sets current_wave=1 in build state.
856
+ wave_execution:
857
+ id: "4.2"
858
+ name: Wave execution
859
+ kind: wave-loop
860
+ notes: |
861
+ For each wave in the feature delegation plan:
862
+ 1. Dispatch briefing-officer per feature in the wave (writes feature-briefs/{feature}.md)
863
+ 2. Orchestrator-driven per-task pipeline per feature (unchanged mechanics from prior per_task_flow)
864
+ briefing:
865
+ kind: dispatch-single
866
+ subagent_type: briefing-officer
867
+ reads: [refs.json, feature-delegation-plan.json, task-rows-for-feature]
868
+ writes: [docs/plans/feature-briefs/*.md]
869
+ per_task_flow:
870
+ executes: every task in every dependency-ordered batch within the feature
871
+ parallelism: Independent sibling tasks run in parallel (~30-50% wall-clock saving)
872
+ sub_steps:
873
+ - id: impl
874
+ kind: dispatch-single
875
+ dispatch_table:
876
+ web:
877
+ ui_SM: engineering-frontend-developer
878
+ ui_L: engineering-senior-developer
879
+ backend: engineering-backend-architect OR engineering-senior-developer
880
+ ai_ml: engineering-ai-engineer
881
+ ios:
882
+ ui_planner: ios-swift-ui-design
883
+ ui_impl: [engineering-senior-developer, engineering-mobile-app-builder]
884
+ foundation_models: ios-foundation-models-specialist
885
+ storekit: ios-storekit-specialist
886
+ - id: impl.re-entry
887
+ kind: dispatch-single
888
+ trigger: LRR backward-routing
889
+ inputs: [blocking_finding, prior_output, decision_row]
890
+ constraint: revise ONLY what finding requires
891
+ - id: sec-review
892
+ kind: dispatch-single
893
+ subagent_type: security-reviewer
894
+ conditional_on: [auth, PII, Keychain, credential tasks]
895
+ - id: swift-review
896
+ kind: dispatch-single
897
+ platform: ios
898
+ subagent_type: swift-reviewer
899
+ checklist: [Swift concurrency 6.2, SwiftUI, protocol DI, Foundation Models]
900
+ - id: cleanup
901
+ kind: dispatch-parallel
902
+ parallel_count: 2
903
+ dispatches:
904
+ - code-simplifier
905
+ - refactor-cleaner
906
+ scope: changeset-only
907
+ - id: review
908
+ kind: dispatch-parallel
909
+ parallel_count: 2
910
+ dispatch_mode: single-message
911
+ dispatches:
912
+ - code-reviewer
913
+ - silent-failure-hunter
914
+ confidence_threshold: 80
915
+ - id: metric-loop
916
+ kind: loop
917
+ service: metric-loop
918
+ max_iterations: 5
919
+ notes: THIS IS THE AUTHORITATIVE BEHAVIORAL VERIFICATION
920
+ ui_tooling:
921
+ web: agent-browser
922
+ ios: SwiftUI Preview captures
923
+ - id: smoke
924
+ kind: dispatch-single
925
+ platform: ios
926
+ tooling: Maestro flow against booted simulator
927
+ preconditions: [Maestro CLI installed, flow files exist, booted simulator available]
928
+ on_precondition_fail: BLOCKED
929
+ - id: verify
930
+ kind: gate
931
+ service: verify-protocol
932
+ scope: static-only
933
+ checks: [type-check, lint, build]
934
+ max_fix_attempts: 3
935
+ build_fix:
936
+ ios: swift-build-resolver
937
+ - id: scribe
938
+ kind: internal
939
+ role: orchestrator-scribe
940
+ action: |
941
+ Walks batch_results, collects non-null deviation_row objects, and
942
+ invokes the scribe_decision MCP tool once per row. The MCP is the
943
+ single writer for decisions.jsonl — it allocates D-{phase}-<seq>
944
+ IDs, stamps timestamp + status, validates against
945
+ decisions.schema.json, and atomically appends. The orchestrator
946
+ MUST NOT Write/Edit decisions.jsonl directly and MUST NOT
947
+ pre-compute IDs. .build-state.json.decisions_next_id is
948
+ deprecated under Stage 2 and removed at Stage 4 A7.
949
+ product_owner_acceptance:
950
+ steps:
951
+ - id: "4.3"
952
+ name: Product Owner acceptance
586
953
  kind: dispatch-single
587
- platform: ios
588
- tooling: Maestro flow against booted simulator
589
- preconditions: [Maestro CLI installed, flow files exist, booted simulator available]
590
- on_precondition_fail: BLOCKED
591
- - id: verify
592
- kind: gate
593
- service: verify-protocol
594
- scope: static-only
595
- checks: [type-check, lint, build]
596
- max_fix_attempts: 3
597
- build_fix:
598
- ios: swift-build-resolver
599
- - id: scribe
954
+ subagent_type: product-owner
955
+ reads: [feature-delegation-plan.json, task-outputs, evidence]
956
+ writes_state: [feature_acceptance, completed_features]
957
+ verdict: ACCEPTED | NEEDS_REVISION
958
+ notes: |
959
+ Product Owner reviews each feature in the completed wave.
960
+ ACCEPTED features are added to completed_features.
961
+ NEEDS_REVISION features are flagged for re-work in a subsequent wave.
962
+ wave_transition:
963
+ steps:
964
+ - id: "4.4"
965
+ name: Wave transition
600
966
  kind: internal
601
- role: orchestrator-scribe
602
- action: |
603
- Walks batch_results, collects non-null deviation_row objects, and
604
- invokes the scribe_decision MCP tool once per row. The MCP is the
605
- single writer for decisions.jsonl it allocates D-{phase}-<seq>
606
- IDs, stamps timestamp + status, validates against
607
- decisions.schema.json, and atomically appends. The orchestrator
608
- MUST NOT Write/Edit decisions.jsonl directly and MUST NOT
609
- pre-compute IDs. .build-state.json.decisions_next_id is
610
- deprecated under Stage 2 and removed at Stage 4 A7.
967
+ writes_state: [current_wave]
968
+ notes: |
969
+ Increments current_wave. If more waves remain in the feature
970
+ delegation plan, loops back to Step 4.2. If all waves complete
971
+ (all features ACCEPTED), Phase 4 ends.
611
972
  hard_gates:
612
973
  - decisions.jsonl is orchestrator-scribe ONLY. Subagents return deviation_row objects.
613
974
  - "Web compositional: component-manifest.md variants MUST be imported; writing from scratch triggers cleanup revert."
@@ -616,22 +977,25 @@ phases:
616
977
  - docs/plans/.task-outputs/[task-id].json
617
978
  backward_edges:
618
979
  - from: LRR-NEEDS_WORK-code-level
619
- to: phase-4.target-task
980
+ to: phase-4.target-feature
620
981
  - from: phase-5-dogfood-feedback-synthesizer
621
- to: phase-4.target-task
982
+ to: phase-4.target-feature
983
+ - from: phase-5-track-b-feedback-synthesizer
984
+ to: phase-1.6-product-spec-writer
985
+ condition: spec-gap finding (target_phase 1, target_task_or_step "1.6")
622
986
 
623
987
  - id: "5"
624
988
  name: Audit
625
- kind: team-then-eval-then-parallel-then-synth
989
+ kind: track-a-then-track-b-then-cross-cutting-then-synth
626
990
  skip_conditions: []
627
991
  precondition: verify-protocol passes
628
992
  web_branch:
629
993
  steps:
630
994
  - id: "5.1"
631
- name: TEAM of 6 parallel auditors
995
+ name: Track A Engineering Reality (5 parallel auditors)
632
996
  kind: dispatch-parallel
633
997
  dispatch_mode: single-message
634
- parallel_count: 6
998
+ parallel_count: 5
635
999
  dispatches:
636
1000
  - subagent_type: testing-api-tester
637
1001
  focus: API validation, edge cases, error responses, auth flows
@@ -648,53 +1012,104 @@ phases:
648
1012
  checks: [contrast, keyboard, focus, touch-targets>=44px, reduced-motion]
649
1013
  - subagent_type: engineering-security-engineer
650
1014
  focus: auth, input validation, data exposure, dependency vulns
651
- - subagent_type: design-ux-researcher
652
- focus: loading/error/empty states, mobile@375px, form validation, visual consistency vs style guide
653
1015
  - subagent_type: design-brand-guardian
654
1016
  focus: DNA drift check
655
1017
  notes: Phase 5 re-invite, does NOT issue verdict — feeds LRR Brand Guardian chapter
1018
+ notes: |
1019
+ design-ux-researcher (formerly item 5) was REMOVED — its work is
1020
+ subsumed by Track B per-feature audits at Step 5.2.
656
1021
  - id: "5.2"
657
- name: Eval Harness -> Metric Loop
658
- kind: loop
659
- service: metric-loop
660
- eval_case_count: 8-15
661
- max_iterations: 4
662
- fix_routing:
663
- security: security-reviewer
664
- a11y: engineering-frontend-developer
665
- perf: testing-performance-benchmarker
666
- post_loop: re-run-eval
1022
+ name: Track B Product Reality (parallel per-feature)
1023
+ kind: dispatch-parallel-per-feature
1024
+ dispatch_mode: single-message
1025
+ parallel_count: N (one per feature_id from graph_query_feature)
1026
+ subagent_type: product-reality-auditor
1027
+ feature_enumeration: graph-query-then-file-fallback
1028
+ zero_feature_gate: stop-and-route-to-1.6
1029
+ post_dispatch_verification:
1030
+ - presence-and-json-parseability-of-four-evidence-files
1031
+ - retry_once_with_graph_used_false
1032
+ - synthesize_finding_target_phase_1_step_1.6_on_second_failure
1033
+ writes_per_feature:
1034
+ - docs/plans/evidence/product-reality/{feature_id}/tests-generated.md
1035
+ - docs/plans/evidence/product-reality/{feature_id}/results.json
1036
+ - docs/plans/evidence/product-reality/{feature_id}/findings.json
1037
+ - docs/plans/evidence/product-reality/{feature_id}/coverage.json
1038
+ - docs/plans/evidence/product-reality/{feature_id}/screenshots/
1039
+ - id: "5.2.idx"
1040
+ name: Track B evidence graph index (best-effort)
1041
+ kind: graph-index
1042
+ best_effort: true
1043
+ rationale: hard-gated at Phase 6.0 by file presence + JSON parseability, not by graph index
1044
+ command: "node ${CLAUDE_PLUGIN_ROOT}/bin/graph-index.js docs/plans/evidence/product-reality/"
667
1045
  - id: "5.3"
668
- name: TEAM of 3 parallel
1046
+ name: Cross-cutting (3 parallel, ONE message)
669
1047
  kind: dispatch-parallel
670
1048
  dispatch_mode: single-message
671
1049
  parallel_count: 3
672
1050
  dispatches:
673
- - e2e-runner: Playwright, 3 iters mandatory
674
- - dogfood-runner: agent-browser
1051
+ - e2e-runner:
1052
+ tool: Playwright
1053
+ iterations: 3-mandatory
1054
+ scope: multi-feature User Journeys ONLY (single-feature happy paths covered by Track B at 5.2)
1055
+ - dogfood-runner:
1056
+ tool: agent-browser
1057
+ scope: emergent issues only (do not re-audit per-feature spec coverage)
675
1058
  - fake-data-detector
676
1059
  - id: "5.4"
677
1060
  name: Feedback Synthesizer
678
1061
  kind: dispatch-single
679
1062
  subagent_type: product-feedback-synthesizer
680
- classifies_to: [phase-4-code, phase-3-visual, phase-2-structural]
1063
+ inputs:
1064
+ - docs/plans/evidence/dogfood/findings.md
1065
+ - docs/plans/evidence/product-reality/*/findings.json
1066
+ output: docs/plans/evidence/dogfood/classified-findings.json
1067
+ output_per_finding_fields: [finding_id, source, severity, target_phase, target_task_or_step, description, evidence_ref, related_decision_id]
1068
+ output_footer_fields: [graph_used, re_routed_findings, source_counts]
1069
+ source_discriminator: "dogfood | product-reality"
1070
+ routing_arms: [phase-4-code, phase-3-visual, phase-2-structural, phase-1.6-spec-gap]
1071
+ track_b_handling: validate-pass-through (re-route only if graph rejects)
1072
+ - id: "5.5"
1073
+ name: Fix loop
1074
+ kind: loop
681
1075
  max_fix_cycles: 2
1076
+ spec_gap_routing: target_phase 1, target_task_or_step "1.6" -> product-spec-writer (re-triggers Track B for affected feature)
682
1077
  ios_branch:
683
1078
  replaces: web-6+3
684
- mode: three-slash-commands-in-sequence
685
- sequence:
686
- - /buildanything:verify
687
- - /buildanything:ux-review
688
- - /buildanything:fix
1079
+ mode: track-a-b-crosscutting
1080
+ protocol: protocols/ios-phase-branches.md §Phase 5
1081
+ track_a:
1082
+ - testing-api-tester (API contract via XcodeBuildMCP test runner)
1083
+ - testing-performance-benchmarker (app launch, memory, binary size, scroll jank)
1084
+ - a11y-architect (swift-accessibility skill, XcodeBuildMCP describe_ui)
1085
+ - engineering-security-engineer (swift-security-expert skill, Keychain/ATS/privacy)
1086
+ - design-brand-guardian (simulator screenshots vs DESIGN.md DNA)
1087
+ track_b:
1088
+ agent: ios-product-reality-auditor
1089
+ execution_surface: XcodeBuildMCP + Maestro
1090
+ check_classes: [screen_reachability, state_coverage, transition_firing, rule_enforcement, happy_path, persona_walkthrough, wiring_manifest]
1091
+ crosscutting:
1092
+ - Maestro E2E (3 iterations, multi-device)
1093
+ - iOS Dogfood (XcodeBuildMCP exploratory via ios-debugger-agent)
1094
+ - iOS Fake-Data Detector (protocols/ios-fake-data-detector.md)
1095
+ shared_steps: Steps 5.4-5.5 in commands/build.md (synthesizer + fix loop)
689
1096
  required_artifacts:
690
- - docs/plans/ios-verify-report.md
691
- - docs/plans/ios-ux-review-report.md
1097
+ - "docs/plans/evidence/track-a/*.json (5 files)"
1098
+ - docs/plans/evidence/brand-drift.md
1099
+ - "docs/plans/evidence/product-reality/*/results.json (one per feature)"
1100
+ - docs/plans/evidence/e2e/iter-3-results.json
1101
+ - docs/plans/evidence/dogfood/findings.md
1102
+ - docs/plans/evidence/fake-data-audit.md
692
1103
  - "maestro/*.yaml (>=1)"
693
1104
  - "docs/plans/evidence/maestro-runs/*.png (>=1)"
694
1105
  writes:
695
1106
  - docs/plans/evidence/*.json
696
1107
  - evidence/fake-data-audit.md
697
1108
  - evidence/dogfood/classified-findings.json
1109
+ - evidence/product-reality/*/tests-generated.md
1110
+ - evidence/product-reality/*/results.json
1111
+ - evidence/product-reality/*/findings.json
1112
+ - evidence/product-reality/*/coverage.json
698
1113
  - "learnings.jsonl (reality sweep PITFALL/PATTERN rows)"
699
1114
 
700
1115
  - id: "6"
@@ -706,12 +1121,12 @@ phases:
706
1121
  hard_gate_preconditions:
707
1122
  all_projects: [".build-state.json exists + has recent VERIFY:PASS"]
708
1123
  web:
709
- - eval-harness/baseline.json
710
- - eval-harness/final.json
711
1124
  - e2e/iter-3-results.json
712
1125
  - dogfood/findings.md
713
1126
  - dogfood/classified-findings.json
714
1127
  - fake-data-audit.md
1128
+ - "product-reality/*/coverage.json (one per feature in product-spec; missing = BLOCK)"
1129
+ - "product-reality/*/findings.json (one per feature)"
715
1130
  - manifest.json
716
1131
  ios:
717
1132
  - ios-verify-report.md
@@ -984,17 +1399,18 @@ callable_services:
984
1399
  cross_run_injection: phase-4 implementer reads .active-learnings.md (top-3 filtered at phase-0)
985
1400
 
986
1401
  briefing_officer:
987
- kind: INTERNAL
988
- callable_per: phase-4-task
1402
+ kind: dispatch-single
1403
+ subagent_type: briefing-officer
1404
+ callable_per: phase-4-feature
989
1405
  contract:
990
- reads: [refs.json, task-row]
991
- writes: CONTEXT MAP (~40 lines)
1406
+ reads: [refs.json, feature-delegation-plan.json, task-rows-for-feature]
1407
+ writes: [docs/plans/feature-briefs/*.md]
992
1408
  mode: refs-not-pastes
993
1409
  excluded: [CLAUDE.md (auto-loaded), phase1-scratch (SPENT)]
994
1410
  context_map_shape:
995
1411
  persona_jtbd: design-doc.md#persona
996
1412
  product_scope: design-doc.md#scope
997
- visual_tokens: visual-design-spec.md#tokens
1413
+ visual_tokens: DESIGN.md#tokens
998
1414
  component_variants: component-manifest.md#[category]
999
1415
  auth_model: architecture.md#auth
1000
1416
  data_schema: architecture.md#data-model
@@ -1016,7 +1432,7 @@ backward_routing:
1016
1432
  to: phase-3.step-3.0
1017
1433
  note: re-lock DNA
1018
1434
  - from: phase-5-audit-code-issue
1019
- to: phase-4.target-task
1435
+ to: phase-4.target-feature
1020
1436
  - from: phase-5-audit-design-issue
1021
1437
  to: phase-3.target-step
1022
1438
  - from: phase-5-audit-spec-issue
@@ -1028,7 +1444,7 @@ backward_routing:
1028
1444
  via: star-star-rule
1029
1445
  to: authoring-phase (per decisions.jsonl.decided_by)
1030
1446
  - from: phase-6-LRR-NEEDS_WORK-code
1031
- to: phase-4.target-task
1447
+ to: phase-4.target-feature
1032
1448
  via: related_decision_id
1033
1449
  - from: phase-6-LRR-NEEDS_WORK-structural
1034
1450
  to: phase-2-or-phase-3
@@ -1042,7 +1458,7 @@ re_entry_template: |
1042
1458
  re_entry_rules:
1043
1459
  phase-2: "Only the architect whose domain matches decision_row.author re-runs. Synthesizer re-runs once."
1044
1460
  phase-3: "Only the step named by decision_row.author re-runs (DNA lock, component manifest, or visual spec)."
1045
- phase-4: "Target task only. Reads prior_output + changed files. Revises ONLY what blocking_finding requires. Does NOT re-run acceptance tests that passed. Does NOT touch files outside finding blast radius."
1461
+ phase-4: "Target feature's Briefing Officer re-plans affected task(s). Orchestrator re-executes. Product-level issues route to Product Owner. Does NOT re-run unaffected tasks."
1046
1462
 
1047
1463
  needs_work_loop_cap:
1048
1464
  max_cycles: 2