@zigrivers/scaffold 3.28.0 → 3.30.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 (721) hide show
  1. package/README.md +5 -1
  2. package/content/guides/.gitkeep +0 -0
  3. package/content/guides/AUTHORING.md +143 -0
  4. package/content/guides/cli/index.html +1502 -0
  5. package/content/guides/cli/index.md +206 -0
  6. package/content/guides/concepts/index.html +1617 -0
  7. package/content/guides/concepts/index.md +347 -0
  8. package/content/guides/dashboard/index.html +1560 -0
  9. package/content/guides/dashboard/index.md +264 -0
  10. package/content/guides/index.html +1188 -0
  11. package/content/guides/install/.diagrams/diagram-0.svg +1 -0
  12. package/content/guides/install/.diagrams/manifest.json +3 -0
  13. package/content/guides/install/index.html +1300 -0
  14. package/content/guides/install/index.md +186 -0
  15. package/content/guides/knowledge/.diagrams/diagram-0.svg +1 -0
  16. package/content/guides/knowledge/.diagrams/manifest.json +3 -0
  17. package/content/guides/knowledge/index.html +1412 -0
  18. package/content/guides/knowledge/index.md +209 -0
  19. package/content/guides/knowledge-freshness/.diagrams/diagram-0.svg +1 -0
  20. package/content/guides/knowledge-freshness/.diagrams/manifest.json +3 -0
  21. package/content/guides/knowledge-freshness/index.html +2442 -0
  22. package/content/guides/knowledge-freshness/index.md +893 -0
  23. package/content/guides/mmr/.diagrams/diagram-0.svg +1 -0
  24. package/content/guides/mmr/.diagrams/manifest.json +3 -0
  25. package/content/guides/mmr/index.html +1746 -0
  26. package/content/guides/mmr/index.md +426 -0
  27. package/content/guides/multi-agent/.diagrams/diagram-0.svg +1 -0
  28. package/content/guides/multi-agent/.diagrams/manifest.json +3 -0
  29. package/content/guides/multi-agent/index.html +1362 -0
  30. package/content/guides/multi-agent/index.md +243 -0
  31. package/content/guides/observability/.diagrams/diagram-0.svg +1 -0
  32. package/content/guides/observability/.diagrams/diagram-1.svg +1 -0
  33. package/content/guides/observability/.diagrams/diagram-2.svg +1 -0
  34. package/content/guides/observability/.diagrams/diagram-3.svg +1 -0
  35. package/content/guides/observability/.diagrams/manifest.json +6 -0
  36. package/content/guides/observability/index.html +2904 -0
  37. package/content/guides/observability/index.md +1097 -0
  38. package/content/guides/pipeline/.diagrams/diagram-0.svg +1 -0
  39. package/content/guides/pipeline/.diagrams/diagram-1.svg +1 -0
  40. package/content/guides/pipeline/.diagrams/manifest.json +4 -0
  41. package/content/guides/pipeline/index.html +1632 -0
  42. package/content/guides/pipeline/index.md +387 -0
  43. package/content/guides/review-workflow/.diagrams/diagram-0.svg +1 -0
  44. package/content/guides/review-workflow/.diagrams/diagram-1.svg +1 -0
  45. package/content/guides/review-workflow/.diagrams/manifest.json +4 -0
  46. package/content/guides/review-workflow/index.html +1437 -0
  47. package/content/guides/review-workflow/index.md +248 -0
  48. package/content/knowledge/VERSION +1 -0
  49. package/content/knowledge/backend/backend-api-design.md +8 -0
  50. package/content/knowledge/backend/backend-architecture.md +8 -0
  51. package/content/knowledge/backend/backend-async-patterns.md +7 -0
  52. package/content/knowledge/backend/backend-auth-patterns.md +9 -0
  53. package/content/knowledge/backend/backend-conventions.md +6 -0
  54. package/content/knowledge/backend/backend-data-modeling.md +7 -0
  55. package/content/knowledge/backend/backend-deployment.md +8 -0
  56. package/content/knowledge/backend/backend-dev-environment.md +5 -0
  57. package/content/knowledge/backend/backend-fintech-broker-integration.md +6 -0
  58. package/content/knowledge/backend/backend-fintech-compliance.md +10 -2
  59. package/content/knowledge/backend/backend-fintech-data-modeling.md +6 -0
  60. package/content/knowledge/backend/backend-fintech-ledger.md +6 -0
  61. package/content/knowledge/backend/backend-fintech-observability.md +6 -0
  62. package/content/knowledge/backend/backend-fintech-order-lifecycle.md +6 -0
  63. package/content/knowledge/backend/backend-fintech-risk-management.md +6 -0
  64. package/content/knowledge/backend/backend-fintech-testing.md +6 -0
  65. package/content/knowledge/backend/backend-observability.md +7 -0
  66. package/content/knowledge/backend/backend-project-structure.md +6 -0
  67. package/content/knowledge/backend/backend-requirements.md +6 -0
  68. package/content/knowledge/backend/backend-security.md +7 -0
  69. package/content/knowledge/backend/backend-testing.md +7 -0
  70. package/content/knowledge/backend/backend-worker-patterns.md +6 -0
  71. package/content/knowledge/browser-extension/browser-extension-architecture.md +6 -0
  72. package/content/knowledge/browser-extension/browser-extension-content-scripts.md +6 -0
  73. package/content/knowledge/browser-extension/browser-extension-conventions.md +6 -0
  74. package/content/knowledge/browser-extension/browser-extension-cross-browser.md +6 -0
  75. package/content/knowledge/browser-extension/browser-extension-dev-environment.md +6 -0
  76. package/content/knowledge/browser-extension/browser-extension-manifest.md +6 -0
  77. package/content/knowledge/browser-extension/browser-extension-project-structure.md +6 -0
  78. package/content/knowledge/browser-extension/browser-extension-requirements.md +6 -0
  79. package/content/knowledge/browser-extension/browser-extension-security.md +7 -0
  80. package/content/knowledge/browser-extension/browser-extension-service-workers.md +6 -0
  81. package/content/knowledge/browser-extension/browser-extension-store-submission.md +6 -0
  82. package/content/knowledge/browser-extension/browser-extension-testing.md +6 -0
  83. package/content/knowledge/cli/cli-architecture.md +4 -0
  84. package/content/knowledge/cli/cli-conventions.md +4 -0
  85. package/content/knowledge/cli/cli-dev-environment.md +5 -0
  86. package/content/knowledge/cli/cli-distribution-patterns.md +5 -0
  87. package/content/knowledge/cli/cli-interactivity-patterns.md +4 -0
  88. package/content/knowledge/cli/cli-output-patterns.md +4 -0
  89. package/content/knowledge/cli/cli-project-structure.md +4 -0
  90. package/content/knowledge/cli/cli-requirements.md +4 -0
  91. package/content/knowledge/cli/cli-shell-integration.md +4 -0
  92. package/content/knowledge/cli/cli-testing.md +4 -0
  93. package/content/knowledge/core/adr-craft.md +8 -0
  94. package/content/knowledge/core/ai-memory-management.md +6 -0
  95. package/content/knowledge/core/api-design.md +6 -0
  96. package/content/knowledge/core/automated-review-tooling.md +8 -0
  97. package/content/knowledge/core/claude-md-patterns.md +8 -0
  98. package/content/knowledge/core/coding-conventions.md +8 -0
  99. package/content/knowledge/core/database-design.md +8 -0
  100. package/content/knowledge/core/design-system-tokens.md +8 -0
  101. package/content/knowledge/core/dev-environment.md +4 -0
  102. package/content/knowledge/core/domain-modeling.md +6 -0
  103. package/content/knowledge/core/eval-craft.md +6 -0
  104. package/content/knowledge/core/git-workflow-patterns.md +8 -0
  105. package/content/knowledge/core/multi-model-research-dispatch.md +6 -0
  106. package/content/knowledge/core/multi-model-review-dispatch.md +6 -0
  107. package/content/knowledge/core/multi-service-api-contracts.md +5 -0
  108. package/content/knowledge/core/multi-service-architecture.md +5 -0
  109. package/content/knowledge/core/multi-service-auth.md +6 -0
  110. package/content/knowledge/core/multi-service-data-ownership.md +8 -0
  111. package/content/knowledge/core/multi-service-observability.md +8 -0
  112. package/content/knowledge/core/multi-service-resilience.md +5 -0
  113. package/content/knowledge/core/multi-service-task-decomposition.md +8 -0
  114. package/content/knowledge/core/multi-service-testing.md +5 -0
  115. package/content/knowledge/core/operations-runbook.md +8 -0
  116. package/content/knowledge/core/project-structure-patterns.md +4 -0
  117. package/content/knowledge/core/review-step-template.md +4 -0
  118. package/content/knowledge/core/security-best-practices.md +6 -0
  119. package/content/knowledge/core/system-architecture.md +6 -0
  120. package/content/knowledge/core/task-decomposition.md +5 -0
  121. package/content/knowledge/core/task-tracking.md +8 -0
  122. package/content/knowledge/core/tech-stack-selection.md +8 -0
  123. package/content/knowledge/core/test-skeleton-generation.md +4 -0
  124. package/content/knowledge/core/testing-strategy.md +8 -0
  125. package/content/knowledge/core/user-stories.md +8 -0
  126. package/content/knowledge/core/user-story-innovation.md +4 -0
  127. package/content/knowledge/core/ux-specification.md +5 -0
  128. package/content/knowledge/data-pipeline/data-pipeline-architecture.md +5 -0
  129. package/content/knowledge/data-pipeline/data-pipeline-batch-patterns.md +4 -0
  130. package/content/knowledge/data-pipeline/data-pipeline-conventions.md +4 -0
  131. package/content/knowledge/data-pipeline/data-pipeline-dev-environment.md +4 -0
  132. package/content/knowledge/data-pipeline/data-pipeline-orchestration.md +4 -0
  133. package/content/knowledge/data-pipeline/data-pipeline-project-structure.md +4 -0
  134. package/content/knowledge/data-pipeline/data-pipeline-quality.md +4 -0
  135. package/content/knowledge/data-pipeline/data-pipeline-requirements.md +4 -0
  136. package/content/knowledge/data-pipeline/data-pipeline-schema-management.md +4 -0
  137. package/content/knowledge/data-pipeline/data-pipeline-security.md +4 -0
  138. package/content/knowledge/data-pipeline/data-pipeline-streaming-patterns.md +4 -0
  139. package/content/knowledge/data-pipeline/data-pipeline-testing.md +4 -0
  140. package/content/knowledge/data-science/data-science-architecture.md +5 -0
  141. package/content/knowledge/data-science/data-science-conventions.md +6 -0
  142. package/content/knowledge/data-science/data-science-data-versioning.md +6 -0
  143. package/content/knowledge/data-science/data-science-dev-environment.md +6 -0
  144. package/content/knowledge/data-science/data-science-experiment-tracking.md +8 -0
  145. package/content/knowledge/data-science/data-science-model-evaluation.md +5 -0
  146. package/content/knowledge/data-science/data-science-notebook-discipline.md +5 -0
  147. package/content/knowledge/data-science/data-science-observability.md +6 -0
  148. package/content/knowledge/data-science/data-science-project-structure.md +5 -0
  149. package/content/knowledge/data-science/data-science-reproducibility.md +8 -0
  150. package/content/knowledge/data-science/data-science-requirements.md +5 -0
  151. package/content/knowledge/data-science/data-science-security.md +8 -0
  152. package/content/knowledge/data-science/data-science-testing.md +5 -0
  153. package/content/knowledge/execution/enhancement-workflow.md +4 -0
  154. package/content/knowledge/execution/multi-agent-coordination.md +12 -1
  155. package/content/knowledge/execution/task-claiming-strategy.md +4 -0
  156. package/content/knowledge/execution/tdd-execution-loop.md +5 -0
  157. package/content/knowledge/execution/worktree-management.md +5 -0
  158. package/content/knowledge/finalization/apply-fixes-and-freeze.md +4 -0
  159. package/content/knowledge/finalization/developer-onboarding.md +4 -0
  160. package/content/knowledge/finalization/implementation-playbook.md +4 -0
  161. package/content/knowledge/game/game-accessibility.md +4 -0
  162. package/content/knowledge/game/game-ai-patterns.md +4 -0
  163. package/content/knowledge/game/game-asset-pipeline.md +4 -0
  164. package/content/knowledge/game/game-audio-design.md +4 -0
  165. package/content/knowledge/game/game-binary-vcs-strategy.md +5 -0
  166. package/content/knowledge/game/game-design-document.md +4 -0
  167. package/content/knowledge/game/game-domain-patterns.md +4 -0
  168. package/content/knowledge/game/game-economy-design.md +4 -0
  169. package/content/knowledge/game/game-engine-selection.md +4 -0
  170. package/content/knowledge/game/game-ideation.md +4 -0
  171. package/content/knowledge/game/game-input-systems.md +4 -0
  172. package/content/knowledge/game/game-level-content-design.md +4 -0
  173. package/content/knowledge/game/game-liveops-analytics.md +4 -0
  174. package/content/knowledge/game/game-localization.md +4 -0
  175. package/content/knowledge/game/game-milestone-definitions.md +4 -0
  176. package/content/knowledge/game/game-modding-ugc.md +4 -0
  177. package/content/knowledge/game/game-narrative-design.md +4 -0
  178. package/content/knowledge/game/game-networking.md +4 -0
  179. package/content/knowledge/game/game-performance-budgeting.md +4 -0
  180. package/content/knowledge/game/game-platform-certification.md +6 -0
  181. package/content/knowledge/game/game-project-structure.md +4 -0
  182. package/content/knowledge/game/game-save-systems.md +4 -0
  183. package/content/knowledge/game/game-testing-strategy.md +4 -0
  184. package/content/knowledge/game/game-ui-patterns.md +4 -0
  185. package/content/knowledge/game/game-vr-ar-design.md +6 -0
  186. package/content/knowledge/library/library-api-design.md +4 -0
  187. package/content/knowledge/library/library-architecture.md +4 -0
  188. package/content/knowledge/library/library-bundling.md +4 -0
  189. package/content/knowledge/library/library-conventions.md +5 -0
  190. package/content/knowledge/library/library-dev-environment.md +4 -0
  191. package/content/knowledge/library/library-documentation.md +4 -0
  192. package/content/knowledge/library/library-project-structure.md +4 -0
  193. package/content/knowledge/library/library-requirements.md +4 -0
  194. package/content/knowledge/library/library-security.md +4 -0
  195. package/content/knowledge/library/library-testing.md +4 -0
  196. package/content/knowledge/library/library-type-definitions.md +4 -0
  197. package/content/knowledge/library/library-versioning.md +5 -0
  198. package/content/knowledge/ml/ml-architecture.md +4 -0
  199. package/content/knowledge/ml/ml-conventions.md +4 -0
  200. package/content/knowledge/ml/ml-dev-environment.md +4 -0
  201. package/content/knowledge/ml/ml-experiment-tracking.md +6 -0
  202. package/content/knowledge/ml/ml-model-evaluation.md +4 -0
  203. package/content/knowledge/ml/ml-observability.md +5 -0
  204. package/content/knowledge/ml/ml-project-structure.md +4 -0
  205. package/content/knowledge/ml/ml-requirements.md +4 -0
  206. package/content/knowledge/ml/ml-security.md +5 -0
  207. package/content/knowledge/ml/ml-serving-patterns.md +4 -0
  208. package/content/knowledge/ml/ml-testing.md +4 -0
  209. package/content/knowledge/ml/ml-training-patterns.md +4 -0
  210. package/content/knowledge/mobile-app/mobile-app-architecture.md +6 -0
  211. package/content/knowledge/mobile-app/mobile-app-conventions.md +6 -0
  212. package/content/knowledge/mobile-app/mobile-app-deployment.md +6 -0
  213. package/content/knowledge/mobile-app/mobile-app-dev-environment.md +6 -0
  214. package/content/knowledge/mobile-app/mobile-app-distribution.md +6 -0
  215. package/content/knowledge/mobile-app/mobile-app-observability.md +7 -0
  216. package/content/knowledge/mobile-app/mobile-app-offline-patterns.md +7 -0
  217. package/content/knowledge/mobile-app/mobile-app-project-structure.md +6 -0
  218. package/content/knowledge/mobile-app/mobile-app-push-notifications.md +6 -0
  219. package/content/knowledge/mobile-app/mobile-app-requirements.md +7 -0
  220. package/content/knowledge/mobile-app/mobile-app-security.md +8 -0
  221. package/content/knowledge/mobile-app/mobile-app-testing.md +6 -0
  222. package/content/knowledge/product/gap-analysis.md +4 -0
  223. package/content/knowledge/product/ideation-craft.md +4 -0
  224. package/content/knowledge/product/prd-craft.md +4 -0
  225. package/content/knowledge/product/prd-innovation.md +4 -0
  226. package/content/knowledge/product/vision-craft.md +4 -0
  227. package/content/knowledge/product/vision-innovation.md +4 -0
  228. package/content/knowledge/research/research-architecture.md +4 -0
  229. package/content/knowledge/research/research-conventions.md +6 -0
  230. package/content/knowledge/research/research-dev-environment.md +6 -0
  231. package/content/knowledge/research/research-experiment-loop.md +4 -0
  232. package/content/knowledge/research/research-experiment-tracking.md +6 -0
  233. package/content/knowledge/research/research-ml-architecture-search.md +4 -0
  234. package/content/knowledge/research/research-ml-evaluation.md +4 -0
  235. package/content/knowledge/research/research-ml-experiment-tracking.md +6 -0
  236. package/content/knowledge/research/research-ml-training-patterns.md +4 -0
  237. package/content/knowledge/research/research-observability.md +5 -0
  238. package/content/knowledge/research/research-overfitting-prevention.md +5 -0
  239. package/content/knowledge/research/research-project-structure.md +5 -0
  240. package/content/knowledge/research/research-quant-backtesting.md +4 -0
  241. package/content/knowledge/research/research-quant-market-data.md +4 -0
  242. package/content/knowledge/research/research-quant-metrics.md +4 -0
  243. package/content/knowledge/research/research-quant-requirements.md +4 -0
  244. package/content/knowledge/research/research-quant-risk.md +4 -0
  245. package/content/knowledge/research/research-quant-strategy-patterns.md +4 -0
  246. package/content/knowledge/research/research-requirements.md +5 -0
  247. package/content/knowledge/research/research-security.md +5 -0
  248. package/content/knowledge/research/research-sim-compute-management.md +4 -0
  249. package/content/knowledge/research/research-sim-engine-patterns.md +4 -0
  250. package/content/knowledge/research/research-sim-parameter-spaces.md +4 -0
  251. package/content/knowledge/research/research-sim-validation.md +4 -0
  252. package/content/knowledge/research/research-testing.md +5 -0
  253. package/content/knowledge/review/review-adr.md +6 -0
  254. package/content/knowledge/review/review-api-design.md +6 -0
  255. package/content/knowledge/review/review-art-bible.md +4 -0
  256. package/content/knowledge/review/review-database-design.md +5 -0
  257. package/content/knowledge/review/review-domain-modeling.md +5 -0
  258. package/content/knowledge/review/review-game-design.md +4 -0
  259. package/content/knowledge/review/review-game-economy.md +4 -0
  260. package/content/knowledge/review/review-game-ui.md +5 -0
  261. package/content/knowledge/review/review-implementation-tasks.md +5 -0
  262. package/content/knowledge/review/review-methodology.md +4 -0
  263. package/content/knowledge/review/review-netcode.md +4 -0
  264. package/content/knowledge/review/review-operations.md +6 -0
  265. package/content/knowledge/review/review-platform-cert.md +4 -0
  266. package/content/knowledge/review/review-prd.md +4 -0
  267. package/content/knowledge/review/review-security.md +7 -0
  268. package/content/knowledge/review/review-system-architecture.md +6 -0
  269. package/content/knowledge/review/review-testing-strategy.md +6 -0
  270. package/content/knowledge/review/review-user-stories.md +5 -0
  271. package/content/knowledge/review/review-ux-specification.md +6 -0
  272. package/content/knowledge/review/review-vision.md +4 -0
  273. package/content/knowledge/tools/post-implementation-review-methodology.md +4 -0
  274. package/content/knowledge/tools/release-management.md +5 -0
  275. package/content/knowledge/tools/session-analysis.md +4 -0
  276. package/content/knowledge/tools/version-strategy.md +4 -0
  277. package/content/knowledge/validation/critical-path-analysis.md +4 -0
  278. package/content/knowledge/validation/cross-phase-consistency.md +4 -0
  279. package/content/knowledge/validation/decision-completeness.md +5 -0
  280. package/content/knowledge/validation/dependency-validation.md +4 -0
  281. package/content/knowledge/validation/implementability-review.md +4 -0
  282. package/content/knowledge/validation/scope-management.md +4 -0
  283. package/content/knowledge/validation/traceability.md +4 -0
  284. package/content/knowledge/web-app/web-app-api-patterns.md +6 -0
  285. package/content/knowledge/web-app/web-app-architecture.md +6 -0
  286. package/content/knowledge/web-app/web-app-auth-patterns.md +9 -0
  287. package/content/knowledge/web-app/web-app-conventions.md +5 -0
  288. package/content/knowledge/web-app/web-app-data-patterns.md +6 -0
  289. package/content/knowledge/web-app/web-app-deployment-workflow.md +6 -0
  290. package/content/knowledge/web-app/web-app-deployment.md +6 -0
  291. package/content/knowledge/web-app/web-app-design-system.md +6 -0
  292. package/content/knowledge/web-app/web-app-dev-environment.md +6 -0
  293. package/content/knowledge/web-app/web-app-observability.md +6 -0
  294. package/content/knowledge/web-app/web-app-project-structure.md +5 -0
  295. package/content/knowledge/web-app/web-app-rendering-strategies.md +6 -0
  296. package/content/knowledge/web-app/web-app-requirements.md +6 -0
  297. package/content/knowledge/web-app/web-app-security.md +8 -0
  298. package/content/knowledge/web-app/web-app-session-patterns.md +7 -0
  299. package/content/knowledge/web-app/web-app-testing.md +6 -0
  300. package/content/knowledge/web-app/web-app-ux-patterns.md +6 -0
  301. package/content/knowledge/web3/web3-access-control.md +8 -0
  302. package/content/knowledge/web3/web3-architecture.md +7 -0
  303. package/content/knowledge/web3/web3-audit-workflow.md +7 -0
  304. package/content/knowledge/web3/web3-common-vulnerabilities.md +8 -0
  305. package/content/knowledge/web3/web3-conventions.md +6 -0
  306. package/content/knowledge/web3/web3-deployment-and-verification.md +7 -0
  307. package/content/knowledge/web3/web3-dev-environment.md +6 -0
  308. package/content/knowledge/web3/web3-gas-optimization.md +7 -0
  309. package/content/knowledge/web3/web3-oracles-and-external-data.md +7 -0
  310. package/content/knowledge/web3/web3-project-structure.md +6 -0
  311. package/content/knowledge/web3/web3-requirements.md +6 -0
  312. package/content/knowledge/web3/web3-security.md +8 -0
  313. package/content/knowledge/web3/web3-testing.md +6 -0
  314. package/content/knowledge/web3/web3-upgradeability.md +7 -0
  315. package/content/tools/knowledge-audit-entry.md +79 -0
  316. package/content/tools/review-code.md +41 -14
  317. package/content/tools/review-pr.md +32 -14
  318. package/dist/cli/commands/dashboard.d.ts +1 -1
  319. package/dist/cli/commands/dashboard.d.ts.map +1 -1
  320. package/dist/cli/commands/dashboard.js +10 -10
  321. package/dist/cli/commands/dashboard.js.map +1 -1
  322. package/dist/cli/commands/dashboard.test.js +1 -1
  323. package/dist/cli/commands/dashboard.test.js.map +1 -1
  324. package/dist/cli/commands/guides.d.ts +24 -0
  325. package/dist/cli/commands/guides.d.ts.map +1 -0
  326. package/dist/cli/commands/guides.js +103 -0
  327. package/dist/cli/commands/guides.js.map +1 -0
  328. package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.d.ts +9 -0
  329. package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.d.ts.map +1 -0
  330. package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.js +112 -0
  331. package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.js.map +1 -0
  332. package/dist/cli/commands/knowledge-freshness-audit-apply.d.ts +8 -0
  333. package/dist/cli/commands/knowledge-freshness-audit-apply.d.ts.map +1 -0
  334. package/dist/cli/commands/knowledge-freshness-audit-apply.js +96 -0
  335. package/dist/cli/commands/knowledge-freshness-audit-apply.js.map +1 -0
  336. package/dist/cli/commands/knowledge-freshness-audit-prefilter.d.ts +7 -0
  337. package/dist/cli/commands/knowledge-freshness-audit-prefilter.d.ts.map +1 -0
  338. package/dist/cli/commands/knowledge-freshness-audit-prefilter.js +42 -0
  339. package/dist/cli/commands/knowledge-freshness-audit-prefilter.js.map +1 -0
  340. package/dist/cli/commands/knowledge-freshness-audit-run-entry.d.ts +9 -0
  341. package/dist/cli/commands/knowledge-freshness-audit-run-entry.d.ts.map +1 -0
  342. package/dist/cli/commands/knowledge-freshness-audit-run-entry.js +63 -0
  343. package/dist/cli/commands/knowledge-freshness-audit-run-entry.js.map +1 -0
  344. package/dist/cli/commands/knowledge-freshness-bump-version.d.ts +8 -0
  345. package/dist/cli/commands/knowledge-freshness-bump-version.d.ts.map +1 -0
  346. package/dist/cli/commands/knowledge-freshness-bump-version.js +34 -0
  347. package/dist/cli/commands/knowledge-freshness-bump-version.js.map +1 -0
  348. package/dist/cli/commands/knowledge-freshness-deep-guidance-check.d.ts +7 -0
  349. package/dist/cli/commands/knowledge-freshness-deep-guidance-check.d.ts.map +1 -0
  350. package/dist/cli/commands/knowledge-freshness-deep-guidance-check.js +51 -0
  351. package/dist/cli/commands/knowledge-freshness-deep-guidance-check.js.map +1 -0
  352. package/dist/cli/commands/knowledge-freshness-link-check.d.ts +7 -0
  353. package/dist/cli/commands/knowledge-freshness-link-check.d.ts.map +1 -0
  354. package/dist/cli/commands/knowledge-freshness-link-check.js +57 -0
  355. package/dist/cli/commands/knowledge-freshness-link-check.js.map +1 -0
  356. package/dist/cli/commands/knowledge-freshness-lint-unsourced.d.ts +8 -0
  357. package/dist/cli/commands/knowledge-freshness-lint-unsourced.d.ts.map +1 -0
  358. package/dist/cli/commands/knowledge-freshness-lint-unsourced.js +58 -0
  359. package/dist/cli/commands/knowledge-freshness-lint-unsourced.js.map +1 -0
  360. package/dist/cli/commands/knowledge-freshness.d.ts +4 -0
  361. package/dist/cli/commands/knowledge-freshness.d.ts.map +1 -0
  362. package/dist/cli/commands/knowledge-freshness.js +25 -0
  363. package/dist/cli/commands/knowledge-freshness.js.map +1 -0
  364. package/dist/cli/commands/observe.d.ts +4 -0
  365. package/dist/cli/commands/observe.d.ts.map +1 -1
  366. package/dist/cli/commands/observe.js +13 -0
  367. package/dist/cli/commands/observe.js.map +1 -1
  368. package/dist/cli/commands/observe.test.js +46 -0
  369. package/dist/cli/commands/observe.test.js.map +1 -1
  370. package/dist/cli/commands/validate-knowledge.d.ts +4 -0
  371. package/dist/cli/commands/validate-knowledge.d.ts.map +1 -0
  372. package/dist/cli/commands/validate-knowledge.js +32 -0
  373. package/dist/cli/commands/validate-knowledge.js.map +1 -0
  374. package/dist/cli/index.d.ts.map +1 -1
  375. package/dist/cli/index.js +6 -0
  376. package/dist/cli/index.js.map +1 -1
  377. package/dist/core/adapters/claude-code.d.ts.map +1 -1
  378. package/dist/core/adapters/claude-code.js +6 -3
  379. package/dist/core/adapters/claude-code.js.map +1 -1
  380. package/dist/core/adapters/claude-code.test.js +45 -1
  381. package/dist/core/adapters/claude-code.test.js.map +1 -1
  382. package/dist/core/assembly/engine.d.ts.map +1 -1
  383. package/dist/core/assembly/engine.js +7 -3
  384. package/dist/core/assembly/engine.js.map +1 -1
  385. package/dist/core/assembly/engine.test.js +45 -1
  386. package/dist/core/assembly/engine.test.js.map +1 -1
  387. package/dist/core/assembly/gap-signal-tail.d.ts +18 -0
  388. package/dist/core/assembly/gap-signal-tail.d.ts.map +1 -0
  389. package/dist/core/assembly/gap-signal-tail.js +43 -0
  390. package/dist/core/assembly/gap-signal-tail.js.map +1 -0
  391. package/dist/core/assembly/gap-signal-tail.test.d.ts +2 -0
  392. package/dist/core/assembly/gap-signal-tail.test.d.ts.map +1 -0
  393. package/dist/core/assembly/gap-signal-tail.test.js +49 -0
  394. package/dist/core/assembly/gap-signal-tail.test.js.map +1 -0
  395. package/dist/core/assembly/knowledge-loader.d.ts +11 -0
  396. package/dist/core/assembly/knowledge-loader.d.ts.map +1 -1
  397. package/dist/core/assembly/knowledge-loader.js +54 -1
  398. package/dist/core/assembly/knowledge-loader.js.map +1 -1
  399. package/dist/core/assembly/knowledge-loader.test.js +73 -0
  400. package/dist/core/assembly/knowledge-loader.test.js.map +1 -1
  401. package/dist/guides/build.d.ts +12 -0
  402. package/dist/guides/build.d.ts.map +1 -0
  403. package/dist/guides/build.js +55 -0
  404. package/dist/guides/build.js.map +1 -0
  405. package/dist/guides/build.test.d.ts +2 -0
  406. package/dist/guides/build.test.d.ts.map +1 -0
  407. package/dist/guides/build.test.js +82 -0
  408. package/dist/guides/build.test.js.map +1 -0
  409. package/dist/guides/chrome.d.ts +24 -0
  410. package/dist/guides/chrome.d.ts.map +1 -0
  411. package/dist/guides/chrome.js +118 -0
  412. package/dist/guides/chrome.js.map +1 -0
  413. package/dist/guides/cli-guides.test.d.ts +2 -0
  414. package/dist/guides/cli-guides.test.d.ts.map +1 -0
  415. package/dist/guides/cli-guides.test.js +41 -0
  416. package/dist/guides/cli-guides.test.js.map +1 -0
  417. package/dist/guides/dashboard-theme.css +1073 -0
  418. package/dist/guides/directives-callout.test.d.ts +2 -0
  419. package/dist/guides/directives-callout.test.d.ts.map +1 -0
  420. package/dist/guides/directives-callout.test.js +22 -0
  421. package/dist/guides/directives-callout.test.js.map +1 -0
  422. package/dist/guides/directives-chart.test.d.ts +2 -0
  423. package/dist/guides/directives-chart.test.d.ts.map +1 -0
  424. package/dist/guides/directives-chart.test.js +25 -0
  425. package/dist/guides/directives-chart.test.js.map +1 -0
  426. package/dist/guides/directives-cite.test.d.ts +2 -0
  427. package/dist/guides/directives-cite.test.d.ts.map +1 -0
  428. package/dist/guides/directives-cite.test.js +26 -0
  429. package/dist/guides/directives-cite.test.js.map +1 -0
  430. package/dist/guides/directives-filter-table.test.d.ts +2 -0
  431. package/dist/guides/directives-filter-table.test.d.ts.map +1 -0
  432. package/dist/guides/directives-filter-table.test.js +22 -0
  433. package/dist/guides/directives-filter-table.test.js.map +1 -0
  434. package/dist/guides/directives-sev.test.d.ts +2 -0
  435. package/dist/guides/directives-sev.test.d.ts.map +1 -0
  436. package/dist/guides/directives-sev.test.js +15 -0
  437. package/dist/guides/directives-sev.test.js.map +1 -0
  438. package/dist/guides/directives-tabs.test.d.ts +2 -0
  439. package/dist/guides/directives-tabs.test.d.ts.map +1 -0
  440. package/dist/guides/directives-tabs.test.js +52 -0
  441. package/dist/guides/directives-tabs.test.js.map +1 -0
  442. package/dist/guides/directives.d.ts +8 -0
  443. package/dist/guides/directives.d.ts.map +1 -0
  444. package/dist/guides/directives.js +182 -0
  445. package/dist/guides/directives.js.map +1 -0
  446. package/dist/guides/fs-guides.test.d.ts +2 -0
  447. package/dist/guides/fs-guides.test.d.ts.map +1 -0
  448. package/dist/guides/fs-guides.test.js +14 -0
  449. package/dist/guides/fs-guides.test.js.map +1 -0
  450. package/dist/guides/index-page.d.ts +3 -0
  451. package/dist/guides/index-page.d.ts.map +1 -0
  452. package/dist/guides/index-page.js +14 -0
  453. package/dist/guides/index-page.js.map +1 -0
  454. package/dist/guides/links.d.ts +14 -0
  455. package/dist/guides/links.d.ts.map +1 -0
  456. package/dist/guides/links.js +56 -0
  457. package/dist/guides/links.js.map +1 -0
  458. package/dist/guides/links.test.d.ts +2 -0
  459. package/dist/guides/links.test.d.ts.map +1 -0
  460. package/dist/guides/links.test.js +72 -0
  461. package/dist/guides/links.test.js.map +1 -0
  462. package/dist/guides/lint.d.ts +6 -0
  463. package/dist/guides/lint.d.ts.map +1 -0
  464. package/dist/guides/lint.js +27 -0
  465. package/dist/guides/lint.js.map +1 -0
  466. package/dist/guides/lint.test.d.ts +2 -0
  467. package/dist/guides/lint.test.d.ts.map +1 -0
  468. package/dist/guides/lint.test.js +24 -0
  469. package/dist/guides/lint.test.js.map +1 -0
  470. package/dist/guides/loader.d.ts +4 -0
  471. package/dist/guides/loader.d.ts.map +1 -0
  472. package/dist/guides/loader.js +63 -0
  473. package/dist/guides/loader.js.map +1 -0
  474. package/dist/guides/loader.test.d.ts +2 -0
  475. package/dist/guides/loader.test.d.ts.map +1 -0
  476. package/dist/guides/loader.test.js +85 -0
  477. package/dist/guides/loader.test.js.map +1 -0
  478. package/dist/guides/mermaid-sanitize.test.d.ts +2 -0
  479. package/dist/guides/mermaid-sanitize.test.d.ts.map +1 -0
  480. package/dist/guides/mermaid-sanitize.test.js +57 -0
  481. package/dist/guides/mermaid-sanitize.test.js.map +1 -0
  482. package/dist/guides/mermaid.d.ts +18 -0
  483. package/dist/guides/mermaid.d.ts.map +1 -0
  484. package/dist/guides/mermaid.js +137 -0
  485. package/dist/guides/mermaid.js.map +1 -0
  486. package/dist/guides/mermaid.test.d.ts +2 -0
  487. package/dist/guides/mermaid.test.d.ts.map +1 -0
  488. package/dist/guides/mermaid.test.js +105 -0
  489. package/dist/guides/mermaid.test.js.map +1 -0
  490. package/dist/guides/render.d.ts +13 -0
  491. package/dist/guides/render.d.ts.map +1 -0
  492. package/dist/guides/render.js +58 -0
  493. package/dist/guides/render.js.map +1 -0
  494. package/dist/guides/render.test.d.ts +2 -0
  495. package/dist/guides/render.test.d.ts.map +1 -0
  496. package/dist/guides/render.test.js +46 -0
  497. package/dist/guides/render.test.js.map +1 -0
  498. package/dist/guides/sanitize.d.ts +3 -0
  499. package/dist/guides/sanitize.d.ts.map +1 -0
  500. package/dist/guides/sanitize.js +77 -0
  501. package/dist/guides/sanitize.js.map +1 -0
  502. package/dist/guides/sanitize.test.d.ts +2 -0
  503. package/dist/guides/sanitize.test.d.ts.map +1 -0
  504. package/dist/guides/sanitize.test.js +45 -0
  505. package/dist/guides/sanitize.test.js.map +1 -0
  506. package/dist/guides/template.d.ts +11 -0
  507. package/dist/guides/template.d.ts.map +1 -0
  508. package/dist/guides/template.js +38 -0
  509. package/dist/guides/template.js.map +1 -0
  510. package/dist/guides/template.test.d.ts +2 -0
  511. package/dist/guides/template.test.d.ts.map +1 -0
  512. package/dist/guides/template.test.js +41 -0
  513. package/dist/guides/template.test.js.map +1 -0
  514. package/dist/guides/types.d.ts +20 -0
  515. package/dist/guides/types.d.ts.map +1 -0
  516. package/dist/guides/types.js +2 -0
  517. package/dist/guides/types.js.map +1 -0
  518. package/dist/knowledge-freshness/audit-apply-pr.d.ts +64 -0
  519. package/dist/knowledge-freshness/audit-apply-pr.d.ts.map +1 -0
  520. package/dist/knowledge-freshness/audit-apply-pr.js +309 -0
  521. package/dist/knowledge-freshness/audit-apply-pr.js.map +1 -0
  522. package/dist/knowledge-freshness/audit-apply-pr.test.d.ts +2 -0
  523. package/dist/knowledge-freshness/audit-apply-pr.test.d.ts.map +1 -0
  524. package/dist/knowledge-freshness/audit-apply-pr.test.js +211 -0
  525. package/dist/knowledge-freshness/audit-apply-pr.test.js.map +1 -0
  526. package/dist/knowledge-freshness/audit-apply.d.ts +16 -0
  527. package/dist/knowledge-freshness/audit-apply.d.ts.map +1 -0
  528. package/dist/knowledge-freshness/audit-apply.js +193 -0
  529. package/dist/knowledge-freshness/audit-apply.js.map +1 -0
  530. package/dist/knowledge-freshness/audit-apply.test.d.ts +2 -0
  531. package/dist/knowledge-freshness/audit-apply.test.d.ts.map +1 -0
  532. package/dist/knowledge-freshness/audit-apply.test.js +482 -0
  533. package/dist/knowledge-freshness/audit-apply.test.js.map +1 -0
  534. package/dist/knowledge-freshness/audit-prefilter.d.ts +12 -0
  535. package/dist/knowledge-freshness/audit-prefilter.d.ts.map +1 -0
  536. package/dist/knowledge-freshness/audit-prefilter.js +74 -0
  537. package/dist/knowledge-freshness/audit-prefilter.js.map +1 -0
  538. package/dist/knowledge-freshness/audit-prefilter.test.d.ts +2 -0
  539. package/dist/knowledge-freshness/audit-prefilter.test.d.ts.map +1 -0
  540. package/dist/knowledge-freshness/audit-prefilter.test.js +78 -0
  541. package/dist/knowledge-freshness/audit-prefilter.test.js.map +1 -0
  542. package/dist/knowledge-freshness/audit-runner.d.ts +135 -0
  543. package/dist/knowledge-freshness/audit-runner.d.ts.map +1 -0
  544. package/dist/knowledge-freshness/audit-runner.js +168 -0
  545. package/dist/knowledge-freshness/audit-runner.js.map +1 -0
  546. package/dist/knowledge-freshness/audit-runner.test.d.ts +2 -0
  547. package/dist/knowledge-freshness/audit-runner.test.d.ts.map +1 -0
  548. package/dist/knowledge-freshness/audit-runner.test.js +130 -0
  549. package/dist/knowledge-freshness/audit-runner.test.js.map +1 -0
  550. package/dist/knowledge-freshness/bump-version.d.ts +24 -0
  551. package/dist/knowledge-freshness/bump-version.d.ts.map +1 -0
  552. package/dist/knowledge-freshness/bump-version.js +69 -0
  553. package/dist/knowledge-freshness/bump-version.js.map +1 -0
  554. package/dist/knowledge-freshness/bump-version.test.d.ts +2 -0
  555. package/dist/knowledge-freshness/bump-version.test.d.ts.map +1 -0
  556. package/dist/knowledge-freshness/bump-version.test.js +82 -0
  557. package/dist/knowledge-freshness/bump-version.test.js.map +1 -0
  558. package/dist/knowledge-freshness/gates/anti-over-rewrite.d.ts +86 -0
  559. package/dist/knowledge-freshness/gates/anti-over-rewrite.d.ts.map +1 -0
  560. package/dist/knowledge-freshness/gates/anti-over-rewrite.js +210 -0
  561. package/dist/knowledge-freshness/gates/anti-over-rewrite.js.map +1 -0
  562. package/dist/knowledge-freshness/gates/anti-over-rewrite.test.d.ts +2 -0
  563. package/dist/knowledge-freshness/gates/anti-over-rewrite.test.d.ts.map +1 -0
  564. package/dist/knowledge-freshness/gates/anti-over-rewrite.test.js +115 -0
  565. package/dist/knowledge-freshness/gates/anti-over-rewrite.test.js.map +1 -0
  566. package/dist/knowledge-freshness/gates/changed-files.d.ts +53 -0
  567. package/dist/knowledge-freshness/gates/changed-files.d.ts.map +1 -0
  568. package/dist/knowledge-freshness/gates/changed-files.js +128 -0
  569. package/dist/knowledge-freshness/gates/changed-files.js.map +1 -0
  570. package/dist/knowledge-freshness/gates/deep-guidance-check.d.ts +23 -0
  571. package/dist/knowledge-freshness/gates/deep-guidance-check.d.ts.map +1 -0
  572. package/dist/knowledge-freshness/gates/deep-guidance-check.js +27 -0
  573. package/dist/knowledge-freshness/gates/deep-guidance-check.js.map +1 -0
  574. package/dist/knowledge-freshness/gates/deep-guidance-check.test.d.ts +2 -0
  575. package/dist/knowledge-freshness/gates/deep-guidance-check.test.d.ts.map +1 -0
  576. package/dist/knowledge-freshness/gates/deep-guidance-check.test.js +23 -0
  577. package/dist/knowledge-freshness/gates/deep-guidance-check.test.js.map +1 -0
  578. package/dist/knowledge-freshness/gates/link-check.d.ts +55 -0
  579. package/dist/knowledge-freshness/gates/link-check.d.ts.map +1 -0
  580. package/dist/knowledge-freshness/gates/link-check.js +161 -0
  581. package/dist/knowledge-freshness/gates/link-check.js.map +1 -0
  582. package/dist/knowledge-freshness/gates/link-check.test.d.ts +2 -0
  583. package/dist/knowledge-freshness/gates/link-check.test.d.ts.map +1 -0
  584. package/dist/knowledge-freshness/gates/link-check.test.js +76 -0
  585. package/dist/knowledge-freshness/gates/link-check.test.js.map +1 -0
  586. package/dist/knowledge-freshness/gates/lint-unsourced.d.ts +40 -0
  587. package/dist/knowledge-freshness/gates/lint-unsourced.d.ts.map +1 -0
  588. package/dist/knowledge-freshness/gates/lint-unsourced.js +143 -0
  589. package/dist/knowledge-freshness/gates/lint-unsourced.js.map +1 -0
  590. package/dist/knowledge-freshness/gates/lint-unsourced.test.d.ts +2 -0
  591. package/dist/knowledge-freshness/gates/lint-unsourced.test.d.ts.map +1 -0
  592. package/dist/knowledge-freshness/gates/lint-unsourced.test.js +68 -0
  593. package/dist/knowledge-freshness/gates/lint-unsourced.test.js.map +1 -0
  594. package/dist/knowledge-freshness/gates/parse-entry.d.ts +25 -0
  595. package/dist/knowledge-freshness/gates/parse-entry.d.ts.map +1 -0
  596. package/dist/knowledge-freshness/gates/parse-entry.js +41 -0
  597. package/dist/knowledge-freshness/gates/parse-entry.js.map +1 -0
  598. package/dist/knowledge-freshness/gates/parse-entry.test.d.ts +2 -0
  599. package/dist/knowledge-freshness/gates/parse-entry.test.d.ts.map +1 -0
  600. package/dist/knowledge-freshness/gates/parse-entry.test.js +34 -0
  601. package/dist/knowledge-freshness/gates/parse-entry.test.js.map +1 -0
  602. package/dist/knowledge-freshness/providers/anthropic.d.ts +33 -0
  603. package/dist/knowledge-freshness/providers/anthropic.d.ts.map +1 -0
  604. package/dist/knowledge-freshness/providers/anthropic.js +36 -0
  605. package/dist/knowledge-freshness/providers/anthropic.js.map +1 -0
  606. package/dist/knowledge-freshness/providers/anthropic.test.d.ts +2 -0
  607. package/dist/knowledge-freshness/providers/anthropic.test.d.ts.map +1 -0
  608. package/dist/knowledge-freshness/providers/anthropic.test.js +32 -0
  609. package/dist/knowledge-freshness/providers/anthropic.test.js.map +1 -0
  610. package/dist/knowledge-freshness/providers/deepseek.d.ts +33 -0
  611. package/dist/knowledge-freshness/providers/deepseek.d.ts.map +1 -0
  612. package/dist/knowledge-freshness/providers/deepseek.js +157 -0
  613. package/dist/knowledge-freshness/providers/deepseek.js.map +1 -0
  614. package/dist/knowledge-freshness/providers/deepseek.test.d.ts +2 -0
  615. package/dist/knowledge-freshness/providers/deepseek.test.d.ts.map +1 -0
  616. package/dist/knowledge-freshness/providers/deepseek.test.js +142 -0
  617. package/dist/knowledge-freshness/providers/deepseek.test.js.map +1 -0
  618. package/dist/knowledge-freshness/providers/index.d.ts +41 -0
  619. package/dist/knowledge-freshness/providers/index.d.ts.map +1 -0
  620. package/dist/knowledge-freshness/providers/index.js +108 -0
  621. package/dist/knowledge-freshness/providers/index.js.map +1 -0
  622. package/dist/knowledge-freshness/providers/index.test.d.ts +2 -0
  623. package/dist/knowledge-freshness/providers/index.test.d.ts.map +1 -0
  624. package/dist/knowledge-freshness/providers/index.test.js +97 -0
  625. package/dist/knowledge-freshness/providers/index.test.js.map +1 -0
  626. package/dist/knowledge-freshness/source-hash.d.ts +39 -0
  627. package/dist/knowledge-freshness/source-hash.d.ts.map +1 -0
  628. package/dist/knowledge-freshness/source-hash.js +180 -0
  629. package/dist/knowledge-freshness/source-hash.js.map +1 -0
  630. package/dist/knowledge-freshness/source-hash.test.d.ts +2 -0
  631. package/dist/knowledge-freshness/source-hash.test.d.ts.map +1 -0
  632. package/dist/knowledge-freshness/source-hash.test.js +63 -0
  633. package/dist/knowledge-freshness/source-hash.test.js.map +1 -0
  634. package/dist/knowledge-freshness/source-url-validator.d.ts +57 -0
  635. package/dist/knowledge-freshness/source-url-validator.d.ts.map +1 -0
  636. package/dist/knowledge-freshness/source-url-validator.js +304 -0
  637. package/dist/knowledge-freshness/source-url-validator.js.map +1 -0
  638. package/dist/knowledge-freshness/source-url-validator.test.d.ts +2 -0
  639. package/dist/knowledge-freshness/source-url-validator.test.d.ts.map +1 -0
  640. package/dist/knowledge-freshness/source-url-validator.test.js +167 -0
  641. package/dist/knowledge-freshness/source-url-validator.test.js.map +1 -0
  642. package/dist/observability/checks/lens-i-knowledge-gaps.d.ts +3 -0
  643. package/dist/observability/checks/lens-i-knowledge-gaps.d.ts.map +1 -0
  644. package/dist/observability/checks/lens-i-knowledge-gaps.js +165 -0
  645. package/dist/observability/checks/lens-i-knowledge-gaps.js.map +1 -0
  646. package/dist/observability/checks/lens-i-knowledge-gaps.test.d.ts +2 -0
  647. package/dist/observability/checks/lens-i-knowledge-gaps.test.d.ts.map +1 -0
  648. package/dist/observability/checks/lens-i-knowledge-gaps.test.js +421 -0
  649. package/dist/observability/checks/lens-i-knowledge-gaps.test.js.map +1 -0
  650. package/dist/observability/checks/lens-i-lessons-scanner.d.ts +16 -0
  651. package/dist/observability/checks/lens-i-lessons-scanner.d.ts.map +1 -0
  652. package/dist/observability/checks/lens-i-lessons-scanner.js +106 -0
  653. package/dist/observability/checks/lens-i-lessons-scanner.js.map +1 -0
  654. package/dist/observability/checks/lens-i-lessons-scanner.test.d.ts +2 -0
  655. package/dist/observability/checks/lens-i-lessons-scanner.test.d.ts.map +1 -0
  656. package/dist/observability/checks/lens-i-lessons-scanner.test.js +174 -0
  657. package/dist/observability/checks/lens-i-lessons-scanner.test.js.map +1 -0
  658. package/dist/observability/engine/api.d.ts +4 -0
  659. package/dist/observability/engine/api.d.ts.map +1 -1
  660. package/dist/observability/engine/api.js +17 -1
  661. package/dist/observability/engine/api.js.map +1 -1
  662. package/dist/observability/engine/checks/observability-config.d.ts +4 -0
  663. package/dist/observability/engine/checks/observability-config.d.ts.map +1 -1
  664. package/dist/observability/engine/checks/observability-config.js +1 -0
  665. package/dist/observability/engine/checks/observability-config.js.map +1 -1
  666. package/dist/observability/engine/checks/registry.d.ts.map +1 -1
  667. package/dist/observability/engine/checks/registry.js +7 -0
  668. package/dist/observability/engine/checks/registry.js.map +1 -1
  669. package/dist/observability/engine/checks/registry.test.js +3 -2
  670. package/dist/observability/engine/checks/registry.test.js.map +1 -1
  671. package/dist/observability/engine/checks/runner.d.ts +30 -0
  672. package/dist/observability/engine/checks/runner.d.ts.map +1 -1
  673. package/dist/observability/engine/checks/runner.js +8 -1
  674. package/dist/observability/engine/checks/runner.js.map +1 -1
  675. package/dist/observability/engine/checks/runner.test.js +74 -0
  676. package/dist/observability/engine/checks/runner.test.js.map +1 -1
  677. package/dist/observability/engine/event-schemas.d.ts.map +1 -1
  678. package/dist/observability/engine/event-schemas.js +41 -3
  679. package/dist/observability/engine/event-schemas.js.map +1 -1
  680. package/dist/observability/engine/event-schemas.test.js +105 -0
  681. package/dist/observability/engine/event-schemas.test.js.map +1 -1
  682. package/dist/observability/engine/fix-flow.d.ts +7 -0
  683. package/dist/observability/engine/fix-flow.d.ts.map +1 -1
  684. package/dist/observability/engine/fix-flow.js +5 -3
  685. package/dist/observability/engine/fix-flow.js.map +1 -1
  686. package/dist/observability/engine/knowledge-root-integration.test.d.ts +2 -0
  687. package/dist/observability/engine/knowledge-root-integration.test.d.ts.map +1 -0
  688. package/dist/observability/engine/knowledge-root-integration.test.js +103 -0
  689. package/dist/observability/engine/knowledge-root-integration.test.js.map +1 -0
  690. package/dist/observability/engine/types.d.ts +20 -1
  691. package/dist/observability/engine/types.d.ts.map +1 -1
  692. package/dist/observability/engine/types.test.js +1 -1
  693. package/dist/observability/engine/types.test.js.map +1 -1
  694. package/dist/observability/knowledge-index.d.ts +145 -0
  695. package/dist/observability/knowledge-index.d.ts.map +1 -0
  696. package/dist/observability/knowledge-index.js +353 -0
  697. package/dist/observability/knowledge-index.js.map +1 -0
  698. package/dist/observability/knowledge-index.test.d.ts +2 -0
  699. package/dist/observability/knowledge-index.test.d.ts.map +1 -0
  700. package/dist/observability/knowledge-index.test.js +364 -0
  701. package/dist/observability/knowledge-index.test.js.map +1 -0
  702. package/dist/observability/renderers/markdown.d.ts.map +1 -1
  703. package/dist/observability/renderers/markdown.js +14 -0
  704. package/dist/observability/renderers/markdown.js.map +1 -1
  705. package/dist/observability/renderers/markdown.test.js +30 -0
  706. package/dist/observability/renderers/markdown.test.js.map +1 -1
  707. package/dist/types/assembly.d.ts +10 -0
  708. package/dist/types/assembly.d.ts.map +1 -1
  709. package/dist/utils/fs.d.ts +6 -0
  710. package/dist/utils/fs.d.ts.map +1 -1
  711. package/dist/utils/fs.js +13 -0
  712. package/dist/utils/fs.js.map +1 -1
  713. package/dist/validation/knowledge-frontmatter-validator.d.ts +15 -0
  714. package/dist/validation/knowledge-frontmatter-validator.d.ts.map +1 -0
  715. package/dist/validation/knowledge-frontmatter-validator.js +131 -0
  716. package/dist/validation/knowledge-frontmatter-validator.js.map +1 -0
  717. package/dist/validation/knowledge-frontmatter-validator.test.d.ts +2 -0
  718. package/dist/validation/knowledge-frontmatter-validator.test.d.ts.map +1 -0
  719. package/dist/validation/knowledge-frontmatter-validator.test.js +66 -0
  720. package/dist/validation/knowledge-frontmatter-validator.test.js.map +1 -0
  721. package/package.json +13 -4
@@ -0,0 +1,1632 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-chrome-version="1">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>The Scaffold Pipeline</title>
7
+ <!-- scaffold:chrome v1 -->
8
+ <style>/* Scaffold Dashboard Theme
9
+ * All CSS for the generated pipeline dashboard.
10
+ * Embedded into HTML by scripts/generate-dashboard.sh.
11
+ * Design system reference: docs/design-system.md
12
+ *
13
+ * Aesthetic: "Precision Industrial" — Swiss-typographic control room.
14
+ * Deep navy dark mode with indigo accents, clean cool-white light mode.
15
+ */
16
+
17
+ /* ─── Design Tokens (Light Mode) ──────────────── */
18
+ :root {
19
+ /* Surface */
20
+ --bg: #f5f6fa;
21
+ --bg-card: #ffffff;
22
+ --bg-hover: #eef0f6;
23
+ --bg-inset: #e8eaf2;
24
+
25
+ /* Text */
26
+ --text: #1a1d2e;
27
+ --text-muted: #6b7294;
28
+ --text-faint: #9ba1c0;
29
+
30
+ /* Borders & Structure */
31
+ --border: #dde0ed;
32
+ --border-light: #eceef5;
33
+ --radius: 10px;
34
+ --radius-sm: 6px;
35
+
36
+ /* Accent */
37
+ --accent: #4f46e5;
38
+ --accent-hover: #4338ca;
39
+ --accent-glow: rgba(79, 70, 229, 0.10);
40
+
41
+ /* Semantic: Status */
42
+ --green: #059669;
43
+ --green-bg: #ecfdf5;
44
+ --green-border: #a7f3d0;
45
+ --blue: #2563eb;
46
+ --blue-bg: #eff6ff;
47
+ --blue-border: #bfdbfe;
48
+ --yellow: #d97706;
49
+ --yellow-bg: #fffbeb;
50
+ --yellow-border:#fde68a;
51
+ --gray: #9ca3af;
52
+ --gray-bg: #f3f4f6;
53
+ --gray-border: #e5e7eb;
54
+
55
+ /* Semantic: Next Banner */
56
+ --next-bg: #eef2ff;
57
+ --next-border: #4f46e5;
58
+ --next-glow: rgba(79, 70, 229, 0.06);
59
+
60
+ /* Semantic: Progress */
61
+ --progress-bg: #e5e7eb;
62
+ --progress-h: 10px;
63
+
64
+ /* Depth */
65
+ --shadow-sm: 0 1px 2px rgba(30, 34, 60, 0.04);
66
+ --shadow: 0 1px 3px rgba(30, 34, 60, 0.07), 0 1px 2px rgba(30, 34, 60, 0.04);
67
+ --shadow-md: 0 4px 12px rgba(30, 34, 60, 0.08), 0 1px 3px rgba(30, 34, 60, 0.05);
68
+ --shadow-lg: 0 8px 24px rgba(30, 34, 60, 0.10), 0 2px 6px rgba(30, 34, 60, 0.04);
69
+
70
+ /* Spacing scale (4px base) */
71
+ --sp-1: 4px;
72
+ --sp-2: 8px;
73
+ --sp-3: 12px;
74
+ --sp-4: 16px;
75
+ --sp-5: 20px;
76
+ --sp-6: 24px;
77
+ --sp-8: 32px;
78
+ --sp-10: 40px;
79
+
80
+ /* Typography */
81
+ --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
82
+ --font-mono: "SF Mono", "Cascadia Code", "Fira Code", "JetBrains Mono", Menlo, Consolas, monospace;
83
+ --text-xs: 0.75rem;
84
+ --text-sm: 0.8125rem;
85
+ --text-base: 0.9375rem;
86
+ --text-lg: 1.125rem;
87
+ --text-xl: 1.375rem;
88
+ --text-2xl: 1.75rem;
89
+ --lh-tight: 1.25;
90
+ --lh-normal: 1.5;
91
+ --lh-relaxed: 1.625;
92
+ --ls-tight: -0.01em;
93
+ --ls-wide: 0.025em;
94
+ --fw-normal: 400;
95
+ --fw-medium: 500;
96
+ --fw-semi: 600;
97
+ --fw-bold: 700;
98
+
99
+ /* Layout */
100
+ --max-w: 960px;
101
+ --page-pad: 24px;
102
+ }
103
+
104
+ /* ─── Design Tokens (Dark Mode) ───────────────── */
105
+ [data-theme="dark"] {
106
+ /* Surface */
107
+ --bg: #0f1117;
108
+ --bg-card: #1a1d2e;
109
+ --bg-hover: #252940;
110
+ --bg-inset: #141724;
111
+
112
+ /* Text */
113
+ --text: #e2e5f0;
114
+ --text-muted: #7c82a8;
115
+ --text-faint: #555c80;
116
+
117
+ /* Borders & Structure */
118
+ --border: #2a2f45;
119
+ --border-light: #21253a;
120
+
121
+ /* Accent */
122
+ --accent: #818cf8;
123
+ --accent-hover: #a5b4fc;
124
+ --accent-glow: rgba(129, 140, 248, 0.12);
125
+
126
+ /* Semantic: Status */
127
+ --green: #34d399;
128
+ --green-bg: rgba(6, 78, 59, 0.25);
129
+ --green-border: rgba(52, 211, 153, 0.25);
130
+ --blue: #60a5fa;
131
+ --blue-bg: rgba(30, 58, 95, 0.30);
132
+ --blue-border: rgba(96, 165, 250, 0.25);
133
+ --yellow: #fbbf24;
134
+ --yellow-bg: rgba(120, 53, 15, 0.25);
135
+ --yellow-border:rgba(251, 191, 36, 0.20);
136
+ --gray: #6b7294;
137
+ --gray-bg: #252940;
138
+ --gray-border: #363c58;
139
+
140
+ /* Semantic: Next Banner */
141
+ --next-bg: rgba(30, 27, 75, 0.50);
142
+ --next-border: #818cf8;
143
+ --next-glow: rgba(129, 140, 248, 0.08);
144
+
145
+ /* Semantic: Progress */
146
+ --progress-bg: #1f2337;
147
+
148
+ /* Depth */
149
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.20);
150
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.30), 0 1px 2px rgba(0, 0, 0, 0.15);
151
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.35), 0 1px 3px rgba(0, 0, 0, 0.20);
152
+ --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.40), 0 2px 6px rgba(0, 0, 0, 0.20);
153
+ }
154
+
155
+ /* ─── Theme Toggle ───────────────────────────── */
156
+ .theme-toggle {
157
+ background: var(--bg-inset);
158
+ border: 1px solid var(--border);
159
+ border-radius: var(--radius-sm);
160
+ padding: var(--sp-1) var(--sp-2);
161
+ cursor: pointer;
162
+ font-size: var(--text-base);
163
+ line-height: 1;
164
+ color: var(--text-muted);
165
+ transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
166
+ display: flex;
167
+ align-items: center;
168
+ margin-left: auto;
169
+ }
170
+
171
+ .theme-toggle:hover {
172
+ border-color: var(--accent);
173
+ color: var(--accent);
174
+ background: var(--accent-glow);
175
+ }
176
+
177
+ /* ─── Base ────────────────────────────────────── */
178
+ *, *::before, *::after {
179
+ margin: 0;
180
+ padding: 0;
181
+ box-sizing: border-box;
182
+ }
183
+
184
+ body {
185
+ font-family: var(--font-sans);
186
+ font-size: var(--text-base);
187
+ line-height: var(--lh-normal);
188
+ color: var(--text);
189
+ background: var(--bg);
190
+ -webkit-font-smoothing: antialiased;
191
+ -moz-osx-font-smoothing: grayscale;
192
+ }
193
+
194
+ /* ─── Layout ──────────────────────────────────── */
195
+ .wrap {
196
+ max-width: var(--max-w);
197
+ margin: 0 auto;
198
+ padding: var(--sp-8) var(--page-pad);
199
+ }
200
+
201
+ /* ─── Header ──────────────────────────────────── */
202
+ .header {
203
+ display: flex;
204
+ align-items: baseline;
205
+ gap: var(--sp-3);
206
+ margin-bottom: var(--sp-2);
207
+ flex-wrap: wrap;
208
+ }
209
+
210
+ h1 {
211
+ font-size: var(--text-2xl);
212
+ font-weight: var(--fw-bold);
213
+ letter-spacing: var(--ls-tight);
214
+ line-height: var(--lh-tight);
215
+ }
216
+
217
+ h2 {
218
+ font-size: var(--text-lg);
219
+ font-weight: var(--fw-semi);
220
+ letter-spacing: var(--ls-tight);
221
+ line-height: var(--lh-tight);
222
+ margin-bottom: var(--sp-3);
223
+ }
224
+
225
+ .header-meta {
226
+ font-size: var(--text-xs);
227
+ color: var(--text-faint);
228
+ margin-bottom: var(--sp-6);
229
+ letter-spacing: var(--ls-wide);
230
+ text-transform: uppercase;
231
+ }
232
+
233
+ /* ─── Badge ───────────────────────────────────── */
234
+ .badge {
235
+ display: inline-block;
236
+ padding: 2px var(--sp-2);
237
+ border-radius: 99px;
238
+ font-size: var(--text-xs);
239
+ font-weight: var(--fw-semi);
240
+ letter-spacing: var(--ls-wide);
241
+ background: var(--accent);
242
+ color: #fff;
243
+ text-transform: uppercase;
244
+ }
245
+
246
+ .badge-optional {
247
+ background: var(--yellow-bg);
248
+ color: var(--yellow);
249
+ border: 1px solid var(--yellow-border);
250
+ }
251
+
252
+ /* ─── Progress Bar ────────────────────────────── */
253
+ .progress-bar {
254
+ width: 100%;
255
+ height: var(--progress-h);
256
+ background: var(--progress-bg);
257
+ border-radius: 99px;
258
+ overflow: hidden;
259
+ margin-bottom: var(--sp-6);
260
+ display: flex;
261
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.06);
262
+ }
263
+
264
+ .progress-bar .seg-done {
265
+ background: linear-gradient(135deg, var(--green), #10b981);
266
+ box-shadow: 0 0 8px rgba(5, 150, 105, 0.3);
267
+ }
268
+
269
+ .progress-bar .seg-likely {
270
+ background: linear-gradient(135deg, var(--blue), #3b82f6);
271
+ box-shadow: 0 0 8px rgba(37, 99, 235, 0.25);
272
+ }
273
+
274
+ .progress-bar .seg-skip {
275
+ background: var(--gray);
276
+ opacity: 0.7;
277
+ }
278
+
279
+ /* ─── Summary Cards ───────────────────────────── */
280
+ .cards {
281
+ display: grid;
282
+ grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
283
+ gap: var(--sp-3);
284
+ margin-bottom: var(--sp-6);
285
+ }
286
+
287
+ .card {
288
+ background: var(--bg-card);
289
+ border: 1px solid var(--border);
290
+ border-radius: var(--radius);
291
+ padding: var(--sp-4) var(--sp-5);
292
+ box-shadow: var(--shadow);
293
+ transition: box-shadow 0.15s ease, transform 0.15s ease;
294
+ }
295
+
296
+ .card:hover {
297
+ box-shadow: var(--shadow-md);
298
+ transform: translateY(-1px);
299
+ }
300
+
301
+ .card-num {
302
+ font-size: var(--text-2xl);
303
+ font-weight: var(--fw-bold);
304
+ font-family: var(--font-mono);
305
+ letter-spacing: var(--ls-tight);
306
+ line-height: 1;
307
+ }
308
+
309
+ .card-lbl {
310
+ font-size: var(--text-xs);
311
+ color: var(--text-muted);
312
+ margin-top: var(--sp-1);
313
+ letter-spacing: var(--ls-wide);
314
+ text-transform: uppercase;
315
+ font-weight: var(--fw-medium);
316
+ }
317
+
318
+ /* ─── What's Next Banner ──────────────────────── */
319
+ .next-banner {
320
+ background: var(--next-bg);
321
+ border: 1px solid var(--next-border);
322
+ border-left: 4px solid var(--next-border);
323
+ border-radius: var(--radius);
324
+ padding: var(--sp-5) var(--sp-6);
325
+ margin-bottom: var(--sp-6);
326
+ box-shadow: 0 0 0 1px var(--next-glow), var(--shadow);
327
+ position: relative;
328
+ overflow: hidden;
329
+ }
330
+
331
+ .next-banner::before {
332
+ content: "";
333
+ position: absolute;
334
+ top: 0;
335
+ left: 0;
336
+ width: 4px;
337
+ height: 100%;
338
+ background: var(--next-border);
339
+ animation: pulse-border 2.5s ease-in-out infinite;
340
+ }
341
+
342
+ @keyframes pulse-border {
343
+ 0%, 100% { opacity: 1; }
344
+ 50% { opacity: 0.5; }
345
+ }
346
+
347
+ .next-banner h2 {
348
+ color: var(--accent);
349
+ margin-bottom: var(--sp-1);
350
+ font-size: var(--text-base);
351
+ font-weight: var(--fw-semi);
352
+ letter-spacing: var(--ls-wide);
353
+ text-transform: uppercase;
354
+ }
355
+
356
+ .next-banner p {
357
+ color: var(--text);
358
+ font-size: var(--text-base);
359
+ }
360
+
361
+ .next-cmd {
362
+ font-family: var(--font-mono);
363
+ background: var(--bg-card);
364
+ padding: var(--sp-1) var(--sp-3);
365
+ border-radius: var(--radius-sm);
366
+ font-size: var(--text-sm);
367
+ display: inline-flex;
368
+ align-items: center;
369
+ gap: var(--sp-2);
370
+ margin-top: var(--sp-3);
371
+ border: 1px solid var(--border);
372
+ }
373
+
374
+ /* ─── Phase Headers (Collapsible) ─────────────── */
375
+ .phase {
376
+ margin-bottom: var(--sp-6);
377
+ }
378
+
379
+ .phase-hdr {
380
+ display: flex;
381
+ align-items: center;
382
+ gap: var(--sp-2);
383
+ cursor: pointer;
384
+ padding: var(--sp-2) 0;
385
+ user-select: none;
386
+ border-bottom: 2px solid var(--border);
387
+ margin-bottom: var(--sp-3);
388
+ transition: border-color 0.15s ease;
389
+ }
390
+
391
+ .phase-hdr:hover {
392
+ border-bottom-color: var(--accent);
393
+ }
394
+
395
+ .phase-hdr:hover h2 {
396
+ color: var(--accent);
397
+ }
398
+
399
+ .phase-hdr h2 {
400
+ transition: color 0.15s ease;
401
+ }
402
+
403
+ .phase-hdr .arr {
404
+ transition: transform 0.2s ease;
405
+ font-size: var(--text-xs);
406
+ color: var(--text-muted);
407
+ }
408
+
409
+ .phase-hdr.closed .arr {
410
+ transform: rotate(-90deg);
411
+ }
412
+
413
+ .phase-cnt {
414
+ font-size: var(--text-xs);
415
+ font-family: var(--font-mono);
416
+ color: var(--text-faint);
417
+ margin-left: auto;
418
+ letter-spacing: var(--ls-wide);
419
+ }
420
+
421
+ /* ─── Prompt List ─────────────────────────────── */
422
+ .plist {
423
+ display: flex;
424
+ flex-direction: column;
425
+ gap: var(--sp-2);
426
+ }
427
+
428
+ /* ─── Prompt Cards ────────────────────────────── */
429
+ .pcard {
430
+ background: var(--bg-card);
431
+ border: 1px solid var(--border);
432
+ border-radius: var(--radius);
433
+ padding: var(--sp-3) var(--sp-4);
434
+ box-shadow: var(--shadow-sm);
435
+ display: grid;
436
+ grid-template-columns: auto 1fr auto;
437
+ gap: var(--sp-2) var(--sp-3);
438
+ align-items: start;
439
+ transition: box-shadow 0.15s ease, transform 0.15s ease, border-color 0.15s ease;
440
+ }
441
+
442
+ .pcard:hover {
443
+ box-shadow: var(--shadow);
444
+ transform: translateY(-1px);
445
+ border-color: var(--accent-glow);
446
+ }
447
+
448
+ /* ─── Status Badges ──────────────────────────── */
449
+ .status-badge {
450
+ display: inline-flex;
451
+ align-items: center;
452
+ gap: var(--sp-1);
453
+ font-size: var(--text-xs);
454
+ font-weight: var(--fw-medium);
455
+ padding: 2px var(--sp-2);
456
+ border-radius: 99px;
457
+ white-space: nowrap;
458
+ flex-shrink: 0;
459
+ letter-spacing: var(--ls-wide);
460
+ line-height: var(--lh-tight);
461
+ }
462
+
463
+ .st-completed {
464
+ background: var(--green-bg);
465
+ color: var(--green);
466
+ border: 1px solid var(--green-border);
467
+ }
468
+
469
+ .st-likely-completed {
470
+ background: var(--blue-bg);
471
+ color: var(--blue);
472
+ border: 1px solid var(--blue-border);
473
+ }
474
+
475
+ .st-skipped {
476
+ background: var(--gray-bg);
477
+ color: var(--gray);
478
+ border: 1px solid var(--gray-border);
479
+ }
480
+
481
+ .st-pending {
482
+ background: var(--bg-inset);
483
+ color: var(--text-faint);
484
+ border: 1px solid var(--border);
485
+ }
486
+
487
+ /* ─── Status Legend ──────────────────────────── */
488
+ .status-legend {
489
+ display: flex;
490
+ flex-wrap: wrap;
491
+ gap: var(--sp-2);
492
+ margin-bottom: var(--sp-4);
493
+ padding: var(--sp-2) 0;
494
+ }
495
+
496
+ .status-legend .status-badge {
497
+ cursor: default;
498
+ }
499
+
500
+ /* ─── Prompt Card Inner ───────────────────────── */
501
+ .pinfo {
502
+ min-width: 0;
503
+ }
504
+
505
+ .pname {
506
+ font-weight: var(--fw-semi);
507
+ font-size: var(--text-base);
508
+ }
509
+
510
+ .pstep {
511
+ font-size: var(--text-xs);
512
+ font-family: var(--font-mono);
513
+ color: var(--text-faint);
514
+ letter-spacing: var(--ls-wide);
515
+ }
516
+
517
+ .pdesc {
518
+ font-size: var(--text-sm);
519
+ color: var(--text-muted);
520
+ margin-top: 2px;
521
+ line-height: var(--lh-relaxed);
522
+ }
523
+
524
+ .pdesc-long {
525
+ font-size: var(--text-xs);
526
+ color: var(--text-faint);
527
+ margin-top: 2px;
528
+ }
529
+
530
+ .pdeps {
531
+ font-size: var(--text-xs);
532
+ color: var(--yellow);
533
+ margin-top: var(--sp-1);
534
+ font-weight: var(--fw-medium);
535
+ }
536
+
537
+ /* ─── Copy Command Button ─────────────────────── */
538
+ .pcmd {
539
+ font-family: var(--font-mono);
540
+ font-size: var(--text-xs);
541
+ background: var(--bg-inset);
542
+ padding: 3px var(--sp-2);
543
+ border-radius: var(--radius-sm);
544
+ cursor: pointer;
545
+ border: 1px solid var(--border);
546
+ white-space: nowrap;
547
+ align-self: center;
548
+ color: var(--text-muted);
549
+ transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
550
+ letter-spacing: var(--ls-wide);
551
+ }
552
+
553
+ .pcmd:hover {
554
+ border-color: var(--accent);
555
+ color: var(--accent);
556
+ background: var(--accent-glow);
557
+ }
558
+
559
+ .pcmd.copied {
560
+ border-color: var(--green);
561
+ color: var(--green);
562
+ background: var(--green-bg);
563
+ }
564
+
565
+ /* ─── Prompt Modal ────────────────────────────── */
566
+ .modal-overlay {
567
+ position: fixed;
568
+ inset: 0;
569
+ background: rgba(0, 0, 0, 0.6);
570
+ display: flex;
571
+ align-items: center;
572
+ justify-content: center;
573
+ z-index: 1000;
574
+ padding: var(--sp-4);
575
+ }
576
+
577
+ .modal {
578
+ background: var(--bg-card);
579
+ border: 1px solid var(--border);
580
+ border-radius: var(--radius);
581
+ box-shadow: var(--shadow-lg);
582
+ max-width: 720px;
583
+ width: 100%;
584
+ max-height: 85vh;
585
+ display: flex;
586
+ flex-direction: column;
587
+ }
588
+
589
+ .modal-header {
590
+ display: flex;
591
+ align-items: center;
592
+ gap: var(--sp-3);
593
+ padding: var(--sp-4) var(--sp-5);
594
+ border-bottom: 1px solid var(--border);
595
+ flex-shrink: 0;
596
+ }
597
+
598
+ .modal-header h3 {
599
+ font-size: var(--text-lg);
600
+ font-weight: var(--fw-semi);
601
+ flex: 1;
602
+ min-width: 0;
603
+ }
604
+
605
+ .modal-close {
606
+ background: var(--bg-inset);
607
+ border: 1px solid var(--border);
608
+ border-radius: var(--radius-sm);
609
+ padding: var(--sp-1) var(--sp-2);
610
+ cursor: pointer;
611
+ font-size: var(--text-base);
612
+ color: var(--text-muted);
613
+ line-height: 1;
614
+ transition: border-color 0.15s ease, color 0.15s ease;
615
+ }
616
+
617
+ .modal-close:hover {
618
+ border-color: var(--accent);
619
+ color: var(--accent);
620
+ }
621
+
622
+ .modal-body {
623
+ padding: var(--sp-5);
624
+ overflow-y: auto;
625
+ flex: 1;
626
+ }
627
+
628
+ .modal-body pre {
629
+ font-family: var(--font-mono);
630
+ font-size: var(--text-sm);
631
+ line-height: var(--lh-relaxed);
632
+ white-space: pre-wrap;
633
+ word-break: break-word;
634
+ color: var(--text);
635
+ }
636
+
637
+ .modal-body pre .md-heading {
638
+ font-weight: var(--fw-bold);
639
+ color: var(--accent);
640
+ }
641
+
642
+ .modal-body pre .md-code {
643
+ background: var(--bg-inset);
644
+ padding: 1px 4px;
645
+ border-radius: 3px;
646
+ font-size: var(--text-xs);
647
+ }
648
+
649
+ .modal-footer {
650
+ display: flex;
651
+ gap: var(--sp-2);
652
+ padding: var(--sp-3) var(--sp-5);
653
+ border-top: 1px solid var(--border);
654
+ flex-shrink: 0;
655
+ }
656
+
657
+ .modal-copy-btn {
658
+ background: var(--accent);
659
+ color: #fff;
660
+ border: none;
661
+ border-radius: var(--radius-sm);
662
+ padding: var(--sp-2) var(--sp-4);
663
+ font-size: var(--text-sm);
664
+ font-weight: var(--fw-medium);
665
+ cursor: pointer;
666
+ transition: background 0.15s ease;
667
+ }
668
+
669
+ .modal-copy-btn:hover {
670
+ background: var(--accent-hover);
671
+ }
672
+
673
+ .modal-copy-btn.copied {
674
+ background: var(--green);
675
+ }
676
+
677
+ /* ─── Beads Task Section ─────────────────────── */
678
+ .beads-section {
679
+ margin-top: var(--sp-8);
680
+ margin-bottom: var(--sp-6);
681
+ }
682
+
683
+ .beads-filters {
684
+ display: flex;
685
+ gap: var(--sp-2);
686
+ margin-bottom: var(--sp-3);
687
+ }
688
+
689
+ .beads-filter {
690
+ background: var(--bg-inset);
691
+ border: 1px solid var(--border);
692
+ border-radius: 99px;
693
+ padding: var(--sp-1) var(--sp-3);
694
+ font-size: var(--text-xs);
695
+ font-weight: var(--fw-medium);
696
+ color: var(--text-muted);
697
+ cursor: pointer;
698
+ transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
699
+ letter-spacing: var(--ls-wide);
700
+ }
701
+
702
+ .beads-filter:hover {
703
+ border-color: var(--accent);
704
+ color: var(--accent);
705
+ }
706
+
707
+ .beads-filter.active {
708
+ background: var(--accent);
709
+ color: #fff;
710
+ border-color: var(--accent);
711
+ }
712
+
713
+ /* ─── Beads Status Badges ────────────────────── */
714
+ .st-bead-open {
715
+ background: var(--accent-glow);
716
+ color: var(--accent);
717
+ border: 1px solid var(--accent);
718
+ }
719
+
720
+ .st-bead-progress {
721
+ background: var(--blue-bg);
722
+ color: var(--blue);
723
+ border: 1px solid var(--blue-border);
724
+ }
725
+
726
+ .st-bead-blocked {
727
+ background: var(--yellow-bg);
728
+ color: var(--yellow);
729
+ border: 1px solid var(--yellow-border);
730
+ }
731
+
732
+ .st-bead-deferred {
733
+ background: var(--gray-bg);
734
+ color: var(--gray);
735
+ border: 1px solid var(--gray-border);
736
+ }
737
+
738
+ .st-bead-closed {
739
+ background: var(--green-bg);
740
+ color: var(--green);
741
+ border: 1px solid var(--green-border);
742
+ }
743
+
744
+ /* ─── Beads Filter Separator ─────────────────── */
745
+ .beads-filter-sep {
746
+ width: 1px;
747
+ background: var(--border);
748
+ align-self: stretch;
749
+ margin: 0 var(--sp-1);
750
+ }
751
+
752
+ /* ─── Beads Priority Filter ──────────────────── */
753
+ .beads-prio-filter {
754
+ background: var(--bg-inset);
755
+ border: 1px solid var(--border);
756
+ border-radius: 99px;
757
+ padding: var(--sp-1) var(--sp-3);
758
+ font-size: var(--text-xs);
759
+ font-weight: var(--fw-medium);
760
+ color: var(--text-muted);
761
+ cursor: pointer;
762
+ transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
763
+ letter-spacing: var(--ls-wide);
764
+ }
765
+
766
+ .beads-prio-filter:hover {
767
+ border-color: var(--accent);
768
+ color: var(--accent);
769
+ }
770
+
771
+ .beads-prio-filter.active {
772
+ background: var(--accent);
773
+ color: #fff;
774
+ border-color: var(--accent);
775
+ }
776
+
777
+ /* ─── Beads Task Detail Modal ────────────────── */
778
+ .bead-meta-grid {
779
+ display: grid;
780
+ grid-template-columns: 1fr 1fr;
781
+ gap: var(--sp-3);
782
+ padding: var(--sp-4) 0;
783
+ border-bottom: 1px solid var(--border-light);
784
+ }
785
+
786
+ .bead-meta-item {
787
+ display: flex;
788
+ flex-direction: column;
789
+ gap: 2px;
790
+ }
791
+
792
+ .bead-meta-label {
793
+ font-size: var(--text-xs);
794
+ color: var(--text-faint);
795
+ text-transform: uppercase;
796
+ letter-spacing: var(--ls-wide);
797
+ font-weight: var(--fw-medium);
798
+ }
799
+
800
+ .bead-meta-value {
801
+ font-size: var(--text-sm);
802
+ font-weight: var(--fw-medium);
803
+ color: var(--text);
804
+ }
805
+
806
+ .bead-description {
807
+ padding: var(--sp-4) 0;
808
+ border-bottom: 1px solid var(--border-light);
809
+ white-space: pre-wrap;
810
+ font-size: var(--text-sm);
811
+ line-height: var(--lh-relaxed);
812
+ color: var(--text-muted);
813
+ }
814
+
815
+ .bead-deps {
816
+ padding: var(--sp-4) 0;
817
+ border-bottom: 1px solid var(--border-light);
818
+ }
819
+
820
+ .bead-dep-group {
821
+ display: flex;
822
+ flex-wrap: wrap;
823
+ align-items: center;
824
+ gap: var(--sp-2);
825
+ margin-bottom: var(--sp-2);
826
+ }
827
+
828
+ .bead-dep-group:last-child {
829
+ margin-bottom: 0;
830
+ }
831
+
832
+ .bead-dep-label {
833
+ font-size: var(--text-xs);
834
+ color: var(--text-faint);
835
+ text-transform: uppercase;
836
+ letter-spacing: var(--ls-wide);
837
+ font-weight: var(--fw-medium);
838
+ min-width: 80px;
839
+ }
840
+
841
+ .bead-dep-link {
842
+ display: inline-block;
843
+ font-family: var(--font-mono);
844
+ font-size: var(--text-xs);
845
+ padding: 2px var(--sp-2);
846
+ border-radius: 99px;
847
+ background: var(--accent-glow);
848
+ color: var(--accent);
849
+ border: 1px solid var(--accent);
850
+ cursor: pointer;
851
+ transition: background 0.15s ease, color 0.15s ease;
852
+ text-decoration: none;
853
+ }
854
+
855
+ .bead-dep-link:hover {
856
+ background: var(--accent);
857
+ color: #fff;
858
+ }
859
+
860
+ .bead-timestamps {
861
+ display: flex;
862
+ flex-wrap: wrap;
863
+ gap: var(--sp-4);
864
+ padding: var(--sp-4) 0;
865
+ }
866
+
867
+ .bead-ts-item {
868
+ display: flex;
869
+ flex-direction: column;
870
+ gap: 2px;
871
+ }
872
+
873
+ .bead-ts-label {
874
+ font-size: var(--text-xs);
875
+ color: var(--text-faint);
876
+ text-transform: uppercase;
877
+ letter-spacing: var(--ls-wide);
878
+ font-weight: var(--fw-medium);
879
+ }
880
+
881
+ .bead-ts-value {
882
+ font-size: var(--text-sm);
883
+ color: var(--text-muted);
884
+ }
885
+
886
+ .bead-ts-value[title] {
887
+ border-bottom: 1px dotted var(--text-faint);
888
+ cursor: help;
889
+ }
890
+
891
+ /* ─── Standalone Commands Section ─────────────── */
892
+ .ongoing {
893
+ margin-top: var(--sp-10);
894
+ }
895
+
896
+ .ongoing h2 {
897
+ letter-spacing: var(--ls-wide);
898
+ text-transform: uppercase;
899
+ font-size: var(--text-sm);
900
+ color: var(--text-muted);
901
+ margin-bottom: var(--sp-4);
902
+ border-bottom: 2px solid var(--border);
903
+ padding-bottom: var(--sp-2);
904
+ }
905
+
906
+ /* ─── Footer ──────────────────────────────────── */
907
+ .footer {
908
+ text-align: center;
909
+ font-size: var(--text-xs);
910
+ color: var(--text-faint);
911
+ margin-top: var(--sp-10);
912
+ padding-top: var(--sp-4);
913
+ border-top: 1px solid var(--border-light);
914
+ letter-spacing: var(--ls-wide);
915
+ }
916
+
917
+ /* ─── Utilities ───────────────────────────────── */
918
+ .hidden {
919
+ display: none;
920
+ }
921
+
922
+ /* Build-observability severity + verdict tokens (Plan 4) */
923
+ :root {
924
+ --sev-p0: #dc2626; /* red 600 */
925
+ --sev-p1: #ea580c; /* orange 600 */
926
+ --sev-p2: #ca8a04; /* yellow 600 */
927
+ --sev-p3: #2563eb; /* blue 600 */
928
+ --sev-pass: #16a34a; /* green 600 */
929
+ }
930
+ [data-theme="dark"] {
931
+ --sev-p0: #f87171;
932
+ --sev-p1: #fb923c;
933
+ --sev-p2: #facc15;
934
+ --sev-p3: #60a5fa;
935
+ --sev-pass: #4ade80;
936
+ }
937
+
938
+ /* Build-observability panel layout */
939
+ .panel {
940
+ background: var(--bg-card);
941
+ border: 1px solid var(--border);
942
+ border-radius: var(--radius);
943
+ padding: var(--sp-4) var(--sp-6);
944
+ margin-bottom: var(--sp-6);
945
+ }
946
+ .panel > header {
947
+ display: flex;
948
+ align-items: center;
949
+ gap: var(--sp-3);
950
+ margin-bottom: var(--sp-4);
951
+ flex-wrap: wrap;
952
+ }
953
+ .panel > header h2 {
954
+ margin: 0;
955
+ font-size: var(--text-base);
956
+ font-weight: var(--fw-semi);
957
+ }
958
+ .panel .meta {
959
+ color: var(--text-muted);
960
+ font-size: var(--text-sm);
961
+ }
962
+ .grid { display: grid; gap: var(--sp-4); }
963
+ .grid-2 { grid-template-columns: repeat(2, 1fr); }
964
+ @media (max-width: 640px) { .grid-2 { grid-template-columns: 1fr; } }
965
+
966
+ /* Finding filters */
967
+ .finding-filters {
968
+ display: flex;
969
+ gap: var(--sp-2);
970
+ flex-wrap: wrap;
971
+ margin-bottom: var(--sp-4);
972
+ }
973
+ .finding-filters button {
974
+ padding: var(--sp-1) var(--sp-3);
975
+ border: 1px solid var(--border);
976
+ border-radius: var(--radius-sm);
977
+ background: var(--bg-inset);
978
+ color: var(--text);
979
+ font-size: var(--text-sm);
980
+ cursor: pointer;
981
+ }
982
+ .finding-filters button:hover,
983
+ .finding-filters button.active {
984
+ background: var(--accent);
985
+ border-color: var(--accent);
986
+ color: #fff;
987
+ }
988
+
989
+ /* Findings list */
990
+ .findings {
991
+ list-style: none;
992
+ padding: 0;
993
+ margin: 0;
994
+ display: flex;
995
+ flex-direction: column;
996
+ gap: var(--sp-3);
997
+ }
998
+ .finding {
999
+ background: var(--bg-inset);
1000
+ border: 1px solid var(--border-light);
1001
+ border-radius: var(--radius-sm);
1002
+ padding: var(--sp-3) var(--sp-4);
1003
+ }
1004
+ .finding header {
1005
+ display: flex;
1006
+ align-items: center;
1007
+ gap: var(--sp-2);
1008
+ flex-wrap: wrap;
1009
+ margin-bottom: var(--sp-2);
1010
+ }
1011
+ .finding-id {
1012
+ font-family: var(--font-mono, monospace);
1013
+ font-size: var(--text-xs);
1014
+ color: var(--text-muted);
1015
+ background: var(--bg-card);
1016
+ border: 1px solid var(--border);
1017
+ border-radius: 4px;
1018
+ padding: 1px var(--sp-1);
1019
+ }
1020
+ .finding .lens {
1021
+ font-size: var(--text-xs);
1022
+ color: var(--text-muted);
1023
+ }
1024
+ .finding .title {
1025
+ font-size: var(--text-sm);
1026
+ font-weight: var(--fw-semi);
1027
+ flex: 1;
1028
+ }
1029
+ .finding p { margin: 0; font-size: var(--text-sm); color: var(--text-muted); }
1030
+ .empty { color: var(--text-muted); font-size: var(--text-sm); text-align: center; padding: var(--sp-4); }
1031
+
1032
+ /* ── Mermaid diagrams ─────────────────────────────────────────────────────────
1033
+ The build renders mermaid to inline SVG via mmdc, then sanitizeSvg() +
1034
+ rehype-sanitize strip the SVG's own <script>, <foreignObject>, AND <style>
1035
+ for security. Stripping <style> means the diagram arrives unstyled (nodes
1036
+ default to a black fill). These theme-token rules restyle the SVG so nodes,
1037
+ edges, arrowheads, and labels render correctly — and follow light/dark mode.
1038
+ Authors must render with htmlLabels:false (the generator forces this) so node
1039
+ labels are native <text>/<tspan> rather than stripped <foreignObject> HTML. */
1040
+ figure.mermaid { margin: var(--sp-5) 0; text-align: center; }
1041
+ figure.mermaid svg { max-width: 100%; height: auto; }
1042
+ /* Node shapes */
1043
+ figure.mermaid svg .node rect,
1044
+ figure.mermaid svg .node circle,
1045
+ figure.mermaid svg .node ellipse,
1046
+ figure.mermaid svg .node polygon,
1047
+ figure.mermaid svg .node path {
1048
+ fill: var(--bg-inset);
1049
+ stroke: var(--border);
1050
+ stroke-width: 1px;
1051
+ }
1052
+ /* Background helper rects mermaid emits behind labels */
1053
+ figure.mermaid svg .node .label-container { fill: var(--bg-inset); stroke: var(--border); }
1054
+ figure.mermaid svg rect.background { fill: none; stroke: none; }
1055
+ /* Labels (rendered as <text>/<tspan> when htmlLabels:false) */
1056
+ figure.mermaid svg .nodeLabel,
1057
+ figure.mermaid svg .node text,
1058
+ figure.mermaid svg text.nodeLabel,
1059
+ figure.mermaid svg .label text,
1060
+ figure.mermaid svg span.nodeLabel {
1061
+ fill: var(--text);
1062
+ color: var(--text);
1063
+ font-family: var(--font-sans);
1064
+ }
1065
+ /* Edges: thin strokes, not filled blobs */
1066
+ figure.mermaid svg .edgePath path,
1067
+ figure.mermaid svg path.flowchart-link,
1068
+ figure.mermaid svg .flowchart-link {
1069
+ fill: none;
1070
+ stroke: var(--text-faint);
1071
+ stroke-width: 1.5px;
1072
+ }
1073
+ /* Arrowheads */
1074
+ figure.mermaid svg marker path,
1075
+ figure.mermaid svg .marker {
1076
+ fill: var(--text-faint);
1077
+ stroke: var(--text-faint);
1078
+ }
1079
+ figure.mermaid svg .edgeLabel,
1080
+ figure.mermaid svg .edgeLabel text { fill: var(--text-muted); color: var(--text-muted); }
1081
+ </style>
1082
+ <script>(function(){try{var t=localStorage.getItem('guide-theme');if(!t&&window.matchMedia&&matchMedia('(prefers-color-scheme: dark)').matches)t='dark';if(t)document.documentElement.setAttribute('data-theme',t);}catch(e){}})();</script>
1083
+ </head>
1084
+ <body>
1085
+ <header class="topbar">
1086
+ <button data-action="nav" class="nav-toggle" aria-label="Toggle navigation">☰</button>
1087
+ <h1>The Scaffold Pipeline</h1>
1088
+ <button data-action="theme" class="theme-toggle" aria-label="Toggle theme">◐</button>
1089
+ </header>
1090
+ <div class="layout">
1091
+ <aside class="rail"><nav class="toc" aria-label="Table of contents"><ul><li class="toc-2"><a href="#the-mental-model">The mental model</a></li><li class="toc-2"><a href="#the-16-phases-at-a-glance">The 16 phases at a glance</a></li><li class="toc-2"><a href="#methodology-depth">Methodology &amp; depth</a></li><li class="toc-3"><a href="#depth-15">Depth (1–5)</a></li><li class="toc-3"><a href="#the-three-presets">The three presets</a></li><li class="toc-2"><a href="#project-type-playbooks">Project-type playbooks</a></li><li class="toc-2"><a href="#navigating-the-pipeline">Navigating the pipeline</a></li><li class="toc-2"><a href="#why-a-step-is-blocked">Why a step is blocked</a></li><li class="toc-3"><a href="#conditional-if-needed-steps">Conditional (&quot;if-needed&quot;) steps</a></li><li class="toc-3"><a href="#a-representative-dependency-slice">A representative dependency slice</a></li><li class="toc-2"><a href="#create-vs-update-mode">CREATE vs UPDATE mode</a></li><li class="toc-2"><a href="#phase-boundary-audits">Phase-boundary audits</a></li><li class="toc-2"><a href="#where-it-all-lives">Where it all lives</a></li></ul></nav></aside>
1092
+ <main class="content"><h2 id="the-mental-model">The mental model</h2>
1093
+ <p>Scaffold is a <strong>prompt pipeline</strong>: a curated, ordered sequence of structured
1094
+ meta-prompts that turn an idea into a fully-specified, build-ready project. Each
1095
+ meta-prompt is a markdown file under <code>content/pipeline/</code>; the CLI assembles one
1096
+ into a full prompt at runtime (injecting upstream artifacts, knowledge entries,
1097
+ and depth instructions) and hands it to Claude Code or another AI tool.</p>
1098
+ <p>The pipeline divides cleanly into two regimes:</p>
1099
+ <ul>
1100
+ <li><strong>Planning (phases 0–14)</strong> — <em>stateful</em>, <em>sequential</em> steps. Each produces a
1101
+ durable artifact (a vision doc, a PRD, a tech-stack doc, an implementation
1102
+ plan…). The CLI tracks completion in <code>.scaffold/state.json</code>, enforces
1103
+ dependencies, and detects when you re-run a step (UPDATE mode). You run each
1104
+ step roughly once, in dependency order, working <em>toward</em> a frozen spec.</li>
1105
+ <li><strong>Build (phase 15)</strong> — <em>stateless</em>, <em>on-demand</em> steps. These are the execution
1106
+ loops (single-agent, multi-agent), the resume commands, quick-task, and
1107
+ new-enhancement. They carry no completion state and can be run repeatedly
1108
+ (<code>stateless: true</code> in frontmatter — <span class="fp" data-path="src/types/frontmatter.ts:126">src/types/frontmatter.ts:126</span>). You
1109
+ run these <em>over and over</em> while actually writing code.</li>
1110
+ </ul>
1111
+ <p>The 16 phases are the single source of truth in code: the <code>PHASES</code> constant
1112
+ (<span class="fp" data-path="src/types/frontmatter.ts:6">src/types/frontmatter.ts:6</span>) defines every slug, number, and display
1113
+ name. Everything in this guide is anchored to it.</p>
1114
+ <div class="callout callout-note"><p><strong>89 meta-prompts, not 89 steps you run.</strong> The pipeline directory holds 89 files
1115
+ across 16 phase directories, but most projects run only a fraction. Game,
1116
+ multi-service, and platform-specific steps are disabled unless an overlay turns
1117
+ them on, and many steps are conditional (see <a href="#methodology--depth">Methodology &#x26; depth</a>).</p></div>
1118
+ <h2 id="the-16-phases-at-a-glance">The 16 phases at a glance</h2>
1119
+ <p>Phase numbers and display names below are quoted verbatim from the <code>PHASES</code>
1120
+ constant (<span class="fp" data-path="src/types/frontmatter.ts:6">src/types/frontmatter.ts:6</span>). Phases 0–14 are planning; phase 15
1121
+ is the stateless build phase.</p>
1122
+ <div class="filter-table"><input type="text" class="filter-input" placeholder="Filter…" aria-label="Filter table rows" disabled>
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+
1132
+
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+
1224
+
1225
+
1226
+
1227
+
1228
+
1229
+ <table><thead><tr><th>#</th><th>slug</th><th>name</th><th>what it produces</th></tr></thead><tbody><tr><td>0</td><td><code>vision</code></td><td>Product Vision</td><td>A strategic vision document — who it's for, what's different, what success looks like</td></tr><tr><td>1</td><td><code>pre</code></td><td>Product Definition</td><td>The PRD, then user stories with testable acceptance criteria</td></tr><tr><td>2</td><td><code>foundation</code></td><td>Project Foundation</td><td>Tech-stack decisions, coding standards (+ linter configs), TDD strategy, project structure</td></tr><tr><td>3</td><td><code>environment</code></td><td>Development Environment</td><td>One-command dev env, design system (web), git workflow + CI, optional PR review, AI memory</td></tr><tr><td>4</td><td><code>integration</code></td><td>Testing Integration</td><td>E2E setup — Playwright (web) or Maestro (mobile); auto-skips for backend-only</td></tr><tr><td>5</td><td><code>modeling</code></td><td>Domain Modeling</td><td>Core entities, relationships, invariants, domain events — a shared vocabulary</td></tr><tr><td>6</td><td><code>decisions</code></td><td>Architecture Decisions</td><td>An ADR per significant technology/design decision, with alternatives + rationale</td></tr><tr><td>7</td><td><code>architecture</code></td><td>System Architecture</td><td>The system blueprint — components, data flow, where code lives, extension points</td></tr><tr><td>8</td><td><code>specification</code></td><td>Specifications</td><td>Per-layer interface specs — DB schema, API contracts, UX spec (each conditional)</td></tr><tr><td>9</td><td><code>quality</code></td><td>Quality Gates</td><td>Testing review, test skeletons, evals, operations/deploy plan, security review</td></tr><tr><td>10</td><td><code>parity</code></td><td>Platform Parity</td><td>Cross-platform gap audit (multi-platform only; auto-skips otherwise)</td></tr><tr><td>11</td><td><code>consolidation</code></td><td>Consolidation</td><td>CLAUDE.md optimization + workflow-doc consistency audit</td></tr><tr><td>12</td><td><code>planning</code></td><td>Planning</td><td>The implementation plan — stories decomposed into small, dependency-ordered tasks</td></tr><tr><td>13</td><td><code>validation</code></td><td>Validation</td><td>Seven cross-cutting pre-implementation audits (scope, cycles, traceability, …)</td></tr><tr><td>14</td><td><code>finalization</code></td><td>Finalization</td><td>Apply validation fixes, freeze docs, onboarding guide, implementation playbook</td></tr><tr><td>15</td><td><code>build</code></td><td>Build</td><td>Stateless execution loops — single/multi-agent, resume, quick-task, new-enhancement</td></tr></tbody></table></div>
1230
+ <p>Each step's <code>order</code> is phase-aligned: phase N occupies the N00–N99 band
1231
+ (<code>tech-stack</code> is <code>220</code>, <code>coding-standards</code> is <code>230</code>, <code>single-agent-start</code> is
1232
+ <code>1510</code>). The order field is the primary tiebreaker in the topological sort, so
1233
+ within a phase steps run in <code>order</code> sequence.</p>
1234
+ <figure class="mermaid"><svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 3938.14px; background-color: transparent;" viewBox="0 0 3938.140625 100.19999694824219" role="graphics-document document">#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#666;stroke:#666;}#my-svg .marker.cross{stroke:#666;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#000000;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#000000;color:#000000;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#eee;stroke:#999;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#666;stroke-width:1px;}#my-svg .flowchart-link{stroke:#666;fill:none;}#my-svg .edgeLabel{background-color:white;text-align:center;}#my-svg .edgeLabel p{background-color:white;}#my-svg .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#my-svg .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#my-svg .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:white;text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:white;padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#999;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node path{stroke:url(#my-svg-gradient);stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#my-svg [data-look="neo"].node circle{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}<g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></polygon></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></circle></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></circle></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"></path></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"></path></marker><g class="root"><g class="clusters"></g><g class="edgePaths"><path d="M132.688,50.1L136.854,50.1C141.021,50.1,149.354,50.1,157.021,50.1C164.688,50.1,171.688,50.1,175.188,50.1L178.688,50.1" id="my-svg-L_P0_P1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M336.172,50.1L340.339,50.1C344.505,50.1,352.839,50.1,360.505,50.1C368.172,50.1,375.172,50.1,378.672,50.1L382.172,50.1" id="my-svg-L_P1_P2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M641.344,50.1L645.51,50.1C649.677,50.1,658.01,50.1,665.677,50.1C673.344,50.1,680.344,50.1,683.844,50.1L687.344,50.1" id="my-svg-L_P2_P3_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M865.766,50.1L869.932,50.1C874.099,50.1,882.432,50.1,890.099,50.1C897.766,50.1,904.766,50.1,908.266,50.1L911.766,50.1" id="my-svg-L_P3_P4_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M1098.266,50.1L1102.432,50.1C1106.599,50.1,1114.932,50.1,1122.599,50.1C1130.266,50.1,1137.266,50.1,1140.766,50.1L1144.266,50.1" id="my-svg-L_P4_P5_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M1297.75,50.1L1301.917,50.1C1306.083,50.1,1314.417,50.1,1322.083,50.1C1329.75,50.1,1336.75,50.1,1340.25,50.1L1343.75,50.1" id="my-svg-L_P5_P6_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M1496.641,50.1L1500.807,50.1C1504.974,50.1,1513.307,50.1,1520.974,50.1C1528.641,50.1,1535.641,50.1,1539.141,50.1L1542.641,50.1" id="my-svg-L_P6_P7_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M1719.438,50.1L1723.604,50.1C1727.771,50.1,1736.104,50.1,1743.771,50.1C1751.438,50.1,1758.438,50.1,1761.938,50.1L1765.438,50.1" id="my-svg-L_P7_P8_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M2018.641,50.1L2022.807,50.1C2026.974,50.1,2035.307,50.1,2042.974,50.1C2050.641,50.1,2057.641,50.1,2061.141,50.1L2064.641,50.1" id="my-svg-L_P8_P9_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M2202.141,50.1L2206.307,50.1C2210.474,50.1,2218.807,50.1,2226.474,50.1C2234.141,50.1,2241.141,50.1,2244.641,50.1L2248.141,50.1" id="my-svg-L_P9_P10_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M2483.438,50.1L2487.604,50.1C2491.771,50.1,2500.104,50.1,2507.771,50.1C2515.438,50.1,2522.438,50.1,2525.938,50.1L2529.438,50.1" id="my-svg-L_P10_P11_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M2720.891,50.1L2725.057,50.1C2729.224,50.1,2737.557,50.1,2745.224,50.1C2752.891,50.1,2759.891,50.1,2763.391,50.1L2766.891,50.1" id="my-svg-L_P11_P12_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M2981.484,50.1L2985.651,50.1C2989.818,50.1,2998.151,50.1,3005.818,50.1C3013.484,50.1,3020.484,50.1,3023.984,50.1L3027.484,50.1" id="my-svg-L_P12_P13_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M3194.875,50.1L3199.042,50.1C3203.208,50.1,3211.542,50.1,3219.208,50.1C3226.875,50.1,3233.875,50.1,3237.375,50.1L3240.875,50.1" id="my-svg-L_P13_P14_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M3418.328,50.1L3429.715,50.1C3441.102,50.1,3463.875,50.1,3485.982,50.1C3508.089,50.1,3529.529,50.1,3540.249,50.1L3550.969,50.1" id="my-svg-L_P14_P15_0" class="edge-thickness-thick edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M3719.781,36.654L3723.948,35.974C3728.115,35.294,3736.448,33.935,3744.781,33.255C3753.115,32.575,3761.448,32.575,3765.615,32.575L3769.781,32.575" id="my-svg-P15-cyclic-special-1" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";"></path><path d="M3769.881,32.575L3783.224,32.575C3796.566,32.575,3823.251,32.575,3849.936,35.494C3876.621,38.413,3903.306,44.251,3916.648,47.17L3929.991,50.089" id="my-svg-P15-cyclic-special-mid" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";"></path><path d="M3929.991,50.111L3916.648,53.03C3903.306,55.949,3876.621,61.787,3849.928,64.706C3823.234,67.625,3796.533,67.625,3779.007,67.625C3761.481,67.625,3753.131,67.625,3745.448,67.052C3737.764,66.48,3730.746,65.335,3727.238,64.763L3723.729,64.19" id="my-svg-P15-cyclic-special-2" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel" transform="translate(3486.6484375, 50.099998474121094)"><g class="label" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-43.3203125" y="-1" width="86.640625" height="23"></rect><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"><tspan class="text-inner-tspan">frozen</tspan><tspan class="text-inner-tspan"> spec</tspan></tspan></text></g></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel" transform="translate(3849.93593750149, 32.574998473748565)"><g class="label" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-55.0546875" y="-1" width="110.109375" height="23"></rect><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"><tspan class="text-inner-tspan">run</tspan><tspan class="text-inner-tspan"> repeatedly</tspan></tspan></text></g></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-P0-0" transform="translate(70.34375, 50.099998474121094)"><rect class="basic label-container" style="" x="-62.34375" y="-24.5" width="124.6875" height="49"></rect><g class="label" style="" transform="translate(0, -9.5)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">0</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> vision</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P1-1" transform="translate(259.4296875, 50.099998474121094)"><rect class="basic label-container" style="" x="-76.7421875" y="-33.29999923706055" width="153.484375" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">1</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> pre</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">PRD</tspan><tspan class="text-inner-tspan"> +</tspan><tspan class="text-inner-tspan"> stories</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P2-3" transform="translate(513.7578125, 50.099998474121094)"><rect class="basic label-container" style="" x="-127.5859375" y="-42.099998474121094" width="255.171875" height="84.19999694824219"></rect><g class="label" style="" transform="translate(0, -27.099998474121094)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">2</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> foundation</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">tech-stack,</tspan><tspan class="text-inner-tspan"> standards,</tspan><tspan class="text-inner-tspan"> tdd,</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em"><tspan class="text-inner-tspan">structure</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P3-5" transform="translate(778.5546875, 50.099998474121094)"><rect class="basic label-container" style="" x="-87.2109375" y="-24.5" width="174.421875" height="49"></rect><g class="label" style="" transform="translate(0, -9.5)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">3</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> environment</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P4-7" transform="translate(1007.015625, 50.099998474121094)"><rect class="basic label-container" style="" x="-91.25" y="-33.29999923706055" width="182.5" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">4</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> integration</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">e2e</tspan><tspan class="text-inner-tspan"> (conditional)</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P5-9" transform="translate(1223.0078125, 50.099998474121094)"><rect class="basic label-container" style="" x="-74.7421875" y="-24.5" width="149.484375" height="49"></rect><g class="label" style="" transform="translate(0, -9.5)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">5</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> modeling</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P6-11" transform="translate(1422.1953125, 50.099998474121094)"><rect class="basic label-container" style="" x="-74.4453125" y="-33.29999923706055" width="148.890625" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">6</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> decisions</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">ADRs</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P7-13" transform="translate(1633.0390625, 50.099998474121094)"><rect class="basic label-container" style="" x="-86.3984375" y="-24.5" width="172.796875" height="49"></rect><g class="label" style="" transform="translate(0, -9.5)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">7</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> architecture</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P8-15" transform="translate(1894.0390625, 50.099998474121094)"><rect class="basic label-container" style="" x="-124.6015625" y="-33.29999923706055" width="249.203125" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">8</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> specification</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">db</tspan><tspan class="text-inner-tspan"> /</tspan><tspan class="text-inner-tspan"> api</tspan><tspan class="text-inner-tspan"> /</tspan><tspan class="text-inner-tspan"> ux</tspan><tspan class="text-inner-tspan"> (conditional)</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P9-17" transform="translate(2135.390625, 50.099998474121094)"><rect class="basic label-container" style="" x="-66.75" y="-24.5" width="133.5" height="49"></rect><g class="label" style="" transform="translate(0, -9.5)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">9</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> quality</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P10-19" transform="translate(2367.7890625, 50.099998474121094)"><rect class="basic label-container" style="" x="-115.6484375" y="-24.5" width="231.296875" height="49"></rect><g class="label" style="" transform="translate(0, -9.5)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">10</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> parity</tspan><tspan class="text-inner-tspan"> (conditional)</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P11-21" transform="translate(2627.1640625, 50.099998474121094)"><rect class="basic label-container" style="" x="-93.7265625" y="-24.5" width="187.453125" height="49"></rect><g class="label" style="" transform="translate(0, -9.5)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">11</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> consolidation</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P12-23" transform="translate(2876.1875, 50.099998474121094)"><rect class="basic label-container" style="" x="-105.296875" y="-33.29999923706055" width="210.59375" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">12</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> planning</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">implementation-plan</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P13-25" transform="translate(3113.1796875, 50.099998474121094)"><rect class="basic label-container" style="" x="-81.6953125" y="-33.29999923706055" width="163.390625" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">13</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> validation</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">7</tspan><tspan class="text-inner-tspan"> audits</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P14-27" transform="translate(3331.6015625, 50.099998474121094)"><rect class="basic label-container" style="" x="-86.7265625" y="-33.29999923706055" width="173.453125" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">14</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> finalization</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">playbook</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-P15-29" transform="translate(3637.375, 50.099998474121094)"><rect class="basic label-container" style="" x="-82.40625" y="-33.29999923706055" width="164.8125" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">15</tspan><tspan class="text-inner-tspan"> ·</tspan><tspan class="text-inner-tspan"> build</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">stateless</tspan><tspan class="text-inner-tspan"> loops</tspan></tspan></text></g></g></g><g class="label edgeLabel" id="P15---P15---1" transform="translate(3769.831250000745, 32.574998473748565)"><rect width="0.1" height="0.1"></rect><g class="label" style="" transform="translate(0, 0)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"></tspan></text></g></g></g><g class="label edgeLabel" id="P15---P15---2" transform="translate(3930.040625002235, 50.099998474121094)"><rect width="0.1" height="0.1"></rect><g class="label" style="" transform="translate(0, 0)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"></tspan></text></g></g></g></g></g></g><defs></defs><defs></defs></svg></figure>
1235
+ <p>The arrows show the <em>phase</em> progression, not the exact step-level dependency
1236
+ graph — a single step usually depends on one upstream step, not its whole
1237
+ phase. See <a href="#why-a-step-is-blocked">Why a step is blocked</a> for how dependencies
1238
+ actually gate execution.</p>
1239
+ <h2 id="methodology-depth">Methodology &#x26; depth</h2>
1240
+ <p>Two orthogonal knobs control how much of the pipeline runs and how thoroughly:</p>
1241
+ <ol>
1242
+ <li><strong>Preset</strong> — <em>which</em> steps are enabled. Three presets ship
1243
+ (<code>content/methodology/</code>): <code>mvp</code>, <code>custom</code> (balanced, depth 3), and <code>deep</code> (the
1244
+ schema default).</li>
1245
+ <li><strong>Depth</strong> — <em>how thorough</em> each enabled step's output is, on a 1–5 scale.</li>
1246
+ </ol>
1247
+ <h3 id="depth-15">Depth (1–5)</h3>
1248
+ <p>Every depth level dials the same step from a sketch to an exhaustive document.
1249
+ Each step's <code>## Methodology Scaling</code> section spells out its behavior per level —
1250
+ <code>coding-standards</code> at depth 1 is "core naming conventions, commit format, import
1251
+ ordering, 1–2 pages"; at depth 5 it's "full suite with all sections, custom
1252
+ linter rules, and code review checklist, 15–20 pages."</p>
1253
+ <div class="filter-table"><input type="text" class="filter-input" placeholder="Filter…" aria-label="Filter table rows" disabled>
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+ <table><thead><tr><th>depth</th><th>name</th><th>what you get</th></tr></thead><tbody><tr><td>1</td><td>Minimal</td><td>Bare minimum to start building</td></tr><tr><td>2</td><td>Light</td><td>Slightly more detail; still speed-first</td></tr><tr><td>3</td><td>Balanced</td><td>Recommended default — good coverage, no excess</td></tr><tr><td>4</td><td>Thorough</td><td>Comprehensive; review/validation steps add external-model validation (Codex/Gemini) where their Methodology Scaling declares it</td></tr><tr><td>5</td><td>Exhaustive</td><td>Maximum detail; multi-model reconciliation on the steps that opt into it; for critical/regulated work</td></tr></tbody></table></div>
1289
+ <p>External-model / multi-model dispatch at depth 4–5 is <strong>step-specific</strong> — it
1290
+ applies to the prompts whose <code>## Methodology Scaling</code> section declares it
1291
+ (chiefly the <code>review-*</code> / <code>innovate-*</code> / validation steps). For most authoring
1292
+ steps, higher depth just means a more thorough single-model output.</p>
1293
+ <p>Depth 3 is the inflection point where steps start adding structure,
1294
+ cross-references, and validation beyond the basics. Override depth per run with
1295
+ <code>scaffold run &#x3C;step> --depth N</code>.</p>
1296
+ <h3 id="the-three-presets">The three presets</h3>
1297
+ <div class="tabs"><div class="tablist" role="tablist"></div><p>:::tab{title=mvp (depth 1)}
1298
+ <strong>Ship fast with minimal ceremony.</strong> Only the essential planning steps are
1299
+ enabled: vision, PRD + stories (with reviews), tech-stack, coding-standards,
1300
+ tdd, project-structure, dev-env-setup, implementation-plan, and
1301
+ implementation-playbook — then the build loops. Everything else (domain
1302
+ modeling, ADRs, architecture, specs, quality gates, validation) is <strong>disabled</strong>.
1303
+ This is the <em>minimum safe depth</em>: still enough spec to TDD against, but no
1304
+ ceremony you'd skip on a weekend project.
1305
+ :::
1306
+ :::tab{title=custom (depth 3)}
1307
+ <strong>Balanced.</strong> Most steps are enabled at depth 3. The exceptions:
1308
+ the three <code>innovate-*</code> steps and <code>automated-pr-review</code> are off by default, and
1309
+ the conditional steps (<code>beads</code>, <code>design-system</code>, <code>add-e2e-testing</code>, the spec
1310
+ steps, <code>platform-parity-review</code>) are enabled-but-<code>if-needed</code>. You override
1311
+ individual steps to taste.
1312
+ :::
1313
+ :::tab{title=deep (depth 5)}
1314
+ <strong>Maximum quality — and the schema default</strong> (<code>methodology</code> defaults to <code>deep</code>
1315
+ <span class="fp" data-path="src/config/schema.ts:272">src/config/schema.ts:272</span>; the resolver also falls back to <code>deep</code>). <em>Every</em>
1316
+ planning step is enabled, including the
1317
+ <code>innovate-*</code> steps (as <code>if-needed</code>), domain modeling, ADRs, full architecture,
1318
+ all specs, every quality gate, all seven validation audits, and the full
1319
+ finalization phase. External-model dispatch kicks in at depth 4+. Best for
1320
+ complex or regulated systems.
1321
+ :::</p></div>
1322
+ <div class="callout callout-note"><p><strong>Game / multi-service / platform steps are off in all three presets.</strong> The 24
1323
+ game steps and 5 cross-service steps are <code>enabled: false</code> in <code>mvp</code>, <code>custom</code>,
1324
+ <em>and</em> <code>deep</code>. They only switch on via a <strong>project-type overlay</strong> — see the
1325
+ playbooks below.</p></div>
1326
+ <h2 id="project-type-playbooks">Project-type playbooks</h2>
1327
+ <p>Overlays (<code>content/methodology/*-overlay.yml</code>) layer onto a preset. Most overlays
1328
+ only <strong>inject domain knowledge</strong> into existing steps (so a web-app build pulls in
1329
+ <code>web-app-auth-patterns</code> during <code>tech-stack</code>, <code>security</code>, etc.); a few also
1330
+ <strong>enable whole step families</strong>.</p>
1331
+ <div class="tabs"><div class="tablist" role="tablist"><button class="tab-btn active" role="tab" data-tab="0">Web</button><button class="tab-btn" role="tab" data-tab="1">Game</button><button class="tab-btn" role="tab" data-tab="2">Multi-service</button></div><div class="tabpane active" data-tab="0"><p><code>web-app-overlay.yml</code> is knowledge-only — it appends web-app expertise to
1332
+ ~25 steps (rendering strategies + deployment + auth into <code>tech-stack</code>, UX
1333
+ patterns into <code>ux-spec</code>, the design system into <code>design-system</code>, and so on). The
1334
+ spec steps you'll actually use: <code>database-schema</code>, <code>api-contracts</code>, <code>ux-spec</code>
1335
+ (all conditional). <code>add-e2e-testing</code> configures <strong>Playwright</strong>.</p></div><div class="tabpane" data-tab="1"><p><code>game-overlay.yml</code> is the heavyweight: it <strong>enables a whole phase family</strong> via
1336
+ <code>step-overrides</code>. On come <code>game-design-document</code>, <code>review-gdd</code>,
1337
+ <code>performance-budgets</code>, <code>narrative-bible</code>, <code>netcode-spec</code>, <code>ai-behavior-design</code>,
1338
+ <code>art-bible</code>, <code>audio-design</code>, <code>economy-design</code>, <code>save-system-spec</code>,
1339
+ <code>game-ui-spec</code>, <code>playtest-plan</code>, <code>platform-cert-prep</code>, and more — many as
1340
+ <code>if-needed</code>. These live across the <code>pre</code>, <code>architecture</code>, <code>specification</code>, and
1341
+ <code>quality</code> phases.</p></div><div class="tabpane" data-tab="2"><p><code>multi-service-overlay.yml</code> activates when <code>services[]</code> is present in config. It
1342
+ enables five cross-service steps (<code>service-ownership-map</code>,
1343
+ <code>inter-service-contracts</code>, <code>cross-service-auth</code>, <code>cross-service-observability</code>,
1344
+ <code>integration-test-plan</code>) and — crucially — adds <strong>dependency-overrides</strong> and
1345
+ <strong>reads-overrides</strong> so downstream steps wait for and consume those cross-service
1346
+ artifacts. Use <code>scaffold next --service &#x3C;name></code> to drive a single service.</p></div><p>:::tab{title=Mobile / Expo}
1347
+ <code>mobile-app-overlay.yml</code> injects mobile knowledge the same way. The distinctive
1348
+ piece is <code>add-e2e-testing</code>, which auto-detects the platform and wires up
1349
+ <strong>Maestro</strong> for mobile/Expo instead of Playwright (phase 4 — <code>integration</code>).
1350
+ :::</p><p>:::tab{title=CLI / library}
1351
+ <code>cli-overlay.yml</code> (and <code>library-overlay.yml</code>) are knowledge-only. They append
1352
+ CLI expertise — command parsing, distribution, shell integration, output
1353
+ formatting — into <code>tech-stack</code>, <code>system-architecture</code>, <code>api-contracts</code>,
1354
+ <code>operations</code>, etc. No extra steps are enabled; you mostly skip the UX/design and
1355
+ (often) the database spec steps.
1356
+ :::</p></div>
1357
+ <p>Other shipped overlays include backend, data-pipeline, data-science, ML,
1358
+ web3, browser-extension, and several research presets — all under
1359
+ <code>content/methodology/</code>.</p>
1360
+ <h2 id="navigating-the-pipeline">Navigating the pipeline</h2>
1361
+ <p>The CLI is your driver. Every command lives in <code>src/cli/commands/</code>.</p>
1362
+ <div class="filter-table"><input type="text" class="filter-input" placeholder="Filter…" aria-label="Filter table rows" disabled>
1363
+
1364
+
1365
+
1366
+
1367
+
1368
+
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+
1394
+
1395
+
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+ <table><thead><tr><th>command</th><th>what it does</th><th>source</th></tr></thead><tbody><tr><td><code>scaffold next</code></td><td>Show the next eligible step(s) — what's unblocked right now</td><td><span class="fp" data-path="src/cli/commands/next.ts:28-29">src/cli/commands/next.ts:28-29</span></td></tr><tr><td><code>scaffold run &#x3C;step></code></td><td>Assemble + run a step; on completion, advances state</td><td><span class="fp" data-path="src/cli/commands/run.ts:45">src/cli/commands/run.ts:45</span></td></tr><tr><td><code>scaffold complete &#x3C;step></code></td><td>Mark a step done that you ran outside <code>scaffold run</code></td><td><span class="fp" data-path="src/cli/commands/complete.ts:28">src/cli/commands/complete.ts:28</span></td></tr><tr><td><code>scaffold skip &#x3C;step..></code></td><td>Skip one or more steps (treated as satisfied for deps)</td><td><span class="fp" data-path="src/cli/commands/skip.ts:35">src/cli/commands/skip.ts:35</span></td></tr><tr><td><code>scaffold rework</code></td><td>Re-run steps <strong>by phase</strong> for depth improvement or cleanup</td><td><span class="fp" data-path="src/cli/commands/rework.ts:39-40">src/cli/commands/rework.ts:39-40</span></td></tr><tr><td><code>scaffold reset [step]</code></td><td>Reset one step to pending, or wipe all pipeline state</td><td><span class="fp" data-path="src/cli/commands/reset.ts:32">src/cli/commands/reset.ts:32</span></td></tr><tr><td><code>scaffold status</code></td><td>Show overall progress and per-step statuses</td><td><span class="fp" data-path="src/cli/commands/status.ts:80-81">src/cli/commands/status.ts:80-81</span></td></tr></tbody></table></div>
1408
+ <p>A typical loop: <code>scaffold next</code> to see what's unblocked → <code>scaffold run &#x3C;step></code>
1409
+ → repeat. <code>next</code> is a pure read — it derives eligibility live from the graph +
1410
+ state and deliberately does <em>not</em> mutate <code>state.json</code>, so running it after an
1411
+ upgrade won't churn committed state.</p>
1412
+ <p><strong><code>rework</code></strong> is phase-scoped: <code>scaffold rework --through 5</code> re-runs phases 1–5,
1413
+ <code>--phases 2,7</code> re-runs just those, <code>--exclude 3</code> drops a phase, <code>--depth 5</code>
1414
+ bumps depth for the batch. It batch-resets the selected steps to <code>pending</code> and
1415
+ creates a rework session the runner skill walks through.</p>
1416
+ <p>For build-phase work you don't touch <code>next</code>/<code>complete</code> — the stateless steps
1417
+ (<code>single-agent-start</code>, <code>multi-agent-start</code>, the resume commands, <code>quick-task</code>,
1418
+ <code>new-enhancement</code>) are run on demand and never tracked. See the
1419
+ <a href="../concepts/index.md">concepts guide</a>{mode=advisory} and the
1420
+ <a href="../cli/index.md">CLI reference</a>{mode=advisory} for the full command surface.</p>
1421
+ <h2 id="why-a-step-is-blocked">Why a step is blocked</h2>
1422
+ <p>A step becomes <em>eligible</em> only when its <strong>dependencies</strong> are satisfied. The
1423
+ frontmatter distinguishes two relationships, and they behave very differently:</p>
1424
+ <ul>
1425
+ <li><strong><code>dependencies</code></strong> (<span class="fp" data-path="src/types/frontmatter.ts:114">src/types/frontmatter.ts:114</span>) — <strong>hard gates.</strong>
1426
+ <code>scaffold run</code> refuses a step whose deps aren't <code>completed</code> or <code>skipped</code>,
1427
+ exiting with <code>DEP_UNMET</code> (<span class="fp" data-path="src/cli/commands/run.ts:262-281">src/cli/commands/run.ts:262-281</span>). <code>coding-standards</code>
1428
+ declares <code>dependencies: [tech-stack]</code>, so you can't write standards before you
1429
+ pick a stack.</li>
1430
+ <li><strong><code>reads</code></strong> (<span class="fp" data-path="src/types/frontmatter.ts:122">src/types/frontmatter.ts:122</span>) — <strong>soft references.</strong> A step
1431
+ <em>reads</em> an upstream artifact if it's available, but a missing/incomplete read
1432
+ never blocks execution — the assembler silently skips it
1433
+ (<span class="fp" data-path="src/cli/commands/run.ts:413-421">src/cli/commands/run.ts:413-421</span>). <code>coding-standards</code> <em>reads</em>
1434
+ <code>create-prd</code> so the domain informs which patterns matter, but a missing PRD
1435
+ won't stop it.</li>
1436
+ </ul>
1437
+ <div class="callout callout-warning"><p><strong><code>reads</code> ≠ <code>dependencies</code> — and that trips people up.</strong> Because reads don't gate
1438
+ execution, a step can run "successfully" while silently missing context it would
1439
+ have benefited from. If you <code>skip</code> an upstream step, downstream steps that only
1440
+ <em>read</em> it proceed without warning. When ordering matters, an overlay can promote
1441
+ a read into a <code>dependency</code> (the multi-service overlay does exactly this with its
1442
+ <code>dependency-overrides</code>).</p></div>
1443
+ <h3 id="conditional-if-needed-steps">Conditional ("if-needed") steps</h3>
1444
+ <p>A step with <code>conditional: 'if-needed'</code>
1445
+ (<span class="fp" data-path="src/types/frontmatter.ts:118">src/types/frontmatter.ts:118</span>) is enabled but only <em>applies</em> to certain
1446
+ project shapes. <code>database-schema</code> is <code>conditional: "if-needed"</code>
1447
+ (<span class="fp" data-path="content/pipeline/specification/database-schema.md:10">content/pipeline/specification/database-schema.md:10</span>) — it runs only if
1448
+ your project has a database layer. The spec steps (<code>database-schema</code>,
1449
+ <code>api-contracts</code>, <code>ux-spec</code>), <code>add-e2e-testing</code>, <code>design-system</code>, <code>beads</code>, and
1450
+ <code>platform-parity-review</code> are all conditional in the default presets.</p>
1451
+ <div class="callout callout-warning"><p><strong>The silent-skip trap.</strong> Conditional steps that don't apply, and steps you
1452
+ <code>skip</code> manually, both count as "satisfied" for dependency purposes — so the
1453
+ pipeline keeps flowing and <code>scaffold next</code> shows green. That's by design, but it
1454
+ means <em>the pipeline won't warn you that you skipped something important.</em> If
1455
+ <code>ux-spec</code> is skipped on a project that genuinely has a UI, nothing downstream
1456
+ will block; the gap only surfaces in phase 13 validation (or the build
1457
+ observability audit). Run <code>scaffold status</code> to see what was actually
1458
+ skipped vs completed.</p></div>
1459
+ <h3 id="a-representative-dependency-slice">A representative dependency slice</h3>
1460
+ <p>The phase-2 foundation steps show the gating in miniature: <code>tech-stack</code> has no
1461
+ dependencies (it kicks off the foundation), and <code>coding-standards</code> depends on it.</p>
1462
+ <figure class="mermaid"><svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 1087.61px; background-color: transparent;" viewBox="0 0 1087.609375 216.79998779296875" role="graphics-document document">#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#666;stroke:#666;}#my-svg .marker.cross{stroke:#666;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#000000;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#000000;color:#000000;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#eee;stroke:#999;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#666;stroke-width:1px;}#my-svg .flowchart-link{stroke:#666;fill:none;}#my-svg .edgeLabel{background-color:white;text-align:center;}#my-svg .edgeLabel p{background-color:white;}#my-svg .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#my-svg .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#my-svg .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:white;text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:white;padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#999;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node path{stroke:url(#my-svg-gradient);stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#my-svg [data-look="neo"].node circle{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}<g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></polygon></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></circle></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"></circle></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"></path></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"></path></marker><g class="root"><g class="clusters"></g><g class="edgePaths"><path d="M144.266,103.386L151.995,106.555C159.724,109.724,175.182,116.062,189.974,119.231C204.766,122.4,218.891,122.4,225.953,122.4L233.016,122.4" id="my-svg-L_PRD_TS_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M144.266,45.759L151.995,42.391C159.724,39.023,175.182,32.286,201.876,28.918C228.57,25.55,266.5,25.55,308.385,25.55C350.271,25.55,396.112,25.55,430.054,26.6C463.996,27.651,486.038,29.751,497.059,30.802L508.081,31.852" id="my-svg-L_PRD_CS_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M371.844,105.66L383.529,102.758C395.214,99.856,418.583,94.053,441.312,88.014C464.04,81.975,486.128,75.701,497.171,72.563L508.215,69.426" id="my-svg-L_TS_CS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M702.375,41.3L714.06,41.3C725.745,41.3,749.115,41.3,771.818,41.3C794.521,41.3,816.557,41.3,827.576,41.3L838.594,41.3" id="my-svg-L_CS_TDD_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M371.844,130.121L383.529,131.459C395.214,132.797,418.583,135.474,457.813,136.812C497.042,138.15,552.13,138.15,607.219,138.15C662.307,138.15,717.396,138.15,759.858,140.408C802.32,142.666,832.155,147.182,847.073,149.44L861.99,151.698" id="my-svg-L_TS_PS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path><path d="M647.864,74.6L668.634,91.617C689.404,108.633,730.944,142.667,766.625,158.893C802.307,175.119,832.129,173.538,847.04,172.747L861.951,171.957" id="my-svg-L_CS_PS_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#my-svg_flowchart-v2-pointEnd)"></path></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(190.640625, 122.39999771118164)"><g class="label" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-21.375" y="-1" width="42.75" height="23"></rect><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"><tspan class="text-inner-tspan">reads</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(304.4296875, 25.549999237060547)"><g class="label" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-21.375" y="-1" width="42.75" height="23"></rect><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"><tspan class="text-inner-tspan">reads</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(441.953125, 88.24999809265137)"><g class="label" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-45.109375" y="-1" width="90.21875" height="23"></rect><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"><tspan class="text-inner-tspan">dependency</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(772.484375, 41.29999923706055)"><g class="label" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-45.109375" y="-1" width="90.21875" height="23"></rect><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"><tspan class="text-inner-tspan">dependency</tspan></tspan></text></g></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" text-anchor="middle"></tspan></text></g></g><g><rect class="background" style="stroke: none"></rect></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-PRD-0" transform="translate(76.1328125, 75.44999885559082)"><rect class="basic label-container" style="" x="-68.1328125" y="-33.29999923706055" width="136.265625" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">create-prd</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">(phase</tspan><tspan class="text-inner-tspan"> 1)</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-TS-1" transform="translate(304.4296875, 122.39999771118164)"><rect class="basic label-container" style="" x="-67.4140625" y="-33.29999923706055" width="134.828125" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">tech-stack</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">deps:</tspan><tspan class="text-inner-tspan"> []</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-CS-3" transform="translate(607.21875, 41.29999923706055)"><rect class="basic label-container" style="" x="-95.15625" y="-33.29999923706055" width="190.3125" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">coding-standards</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">deps:</tspan><tspan class="text-inner-tspan"> [tech-stack]</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-TDD-7" transform="translate(961.1015625, 41.29999923706055)"><rect class="basic label-container" style="" x="-118.5078125" y="-33.29999923706055" width="237.015625" height="66.5999984741211"></rect><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">tdd</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">deps:</tspan><tspan class="text-inner-tspan"> [coding-standards]</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-PS-9" transform="translate(961.1015625, 166.6999969482422)"><rect class="basic label-container" style="" x="-95.15625" y="-42.099998474121094" width="190.3125" height="84.19999694824219"></rect><g class="label" style="" transform="translate(0, -27.099998474121094)"><rect></rect><g><rect class="background" style="stroke: none"></rect><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em"><tspan class="text-inner-tspan">project-structure</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em"><tspan class="text-inner-tspan">deps:</tspan><tspan class="text-inner-tspan"> [tech-stack,</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em"><tspan class="text-inner-tspan">coding-standards]</tspan></tspan></text></g></g></g></g></g></g><defs></defs><defs></defs></svg></figure>
1463
+ <p>Solid arrows are hard <code>dependencies</code> (block until done); dashed arrows are soft
1464
+ <code>reads</code> (used if present, never block).</p>
1465
+ <h2 id="create-vs-update-mode">CREATE vs UPDATE mode</h2>
1466
+ <p>Running a planning step a second time doesn't blindly overwrite its artifact.
1467
+ Every document-creating prompt carries a <strong>Mode Detection</strong> block: if the output
1468
+ file already exists, the step runs in <strong>UPDATE mode</strong> instead of CREATE mode.</p>
1469
+ <p><code>scaffold run</code> detects this and (unless <code>--force</code>) confirms before re-running a
1470
+ completed step, and warns on a depth <em>downgrade</em> (re-running at a lower depth
1471
+ than last time). In UPDATE mode the prompt is instructed to <strong>preserve</strong>
1472
+ human/team customizations and only change what genuinely needs to change. From
1473
+ <code>coding-standards</code>'s Mode Detection block
1474
+ (<span class="fp" data-path="content/pipeline/foundation/coding-standards.md:57">content/pipeline/foundation/coding-standards.md:57</span>):</p>
1475
+ <blockquote>
1476
+ <p>Update mode if <code>docs/coding-standards.md</code> exists. In update mode: preserve
1477
+ naming conventions, lint rule customizations, commit message format, and
1478
+ project-specific patterns.</p>
1479
+ </blockquote>
1480
+ <p>So re-running <code>coding-standards</code> after you've hand-tuned its linter config keeps
1481
+ your overrides; it doesn't reset them. This is what makes the planning phases
1482
+ safe to iterate — you can <code>rework</code> a phase at higher depth and get richer
1483
+ output without losing the decisions you've already made.</p>
1484
+ <div class="callout callout-note"><p><strong>Phase-15 steps don't use the planning CREATE-vs-UPDATE semantics.</strong> They produce
1485
+ no persistent planning doc, so the document Mode Detection block doesn't apply.
1486
+ Each build prompt instead declares its own execution mode: the agent loops just
1487
+ execute, <code>single-agent-resume</code>/<code>multi-agent-resume</code> run in RESUME mode,
1488
+ <code>quick-task</code> in CREATE mode, and <code>new-enhancement</code> in ENHANCEMENT mode.</p></div>
1489
+ <h2 id="phase-boundary-audits">Phase-boundary audits</h2>
1490
+ <p>Completing certain planning docs automatically triggers a non-gating
1491
+ cross-document audit. Six steps are <strong>phase boundaries</strong>
1492
+ (<span class="fp" data-path="src/observability/engine/phase-subsets.ts:1-8">src/observability/engine/phase-subsets.ts:1-8</span>): <code>user-stories</code>,
1493
+ <code>tech-stack</code>, <code>coding-standards</code>, <code>design-system</code>, <code>implementation-plan</code>, and
1494
+ <code>implementation-playbook</code>. When you <code>complete</code> one of these, the state manager
1495
+ fires an <code>H-cross-doc</code> audit and prints a one-line summary — catching doc drift
1496
+ the moment a planning phase closes, without ever blocking the transition. See
1497
+ the <a href="../observability/index.md">build observability guide</a>{mode=advisory} for
1498
+ how that audit works and what the nine lenses check.</p>
1499
+ <h2 id="where-it-all-lives">Where it all lives</h2>
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+ <table><thead><tr><th>path</th><th>what it holds</th></tr></thead><tbody><tr><td><code>content/pipeline/&#x3C;phase>/*.md</code></td><td>The 89 meta-prompt files, one directory per phase</td></tr><tr><td><code>content/methodology/*.yml</code></td><td>Presets (<code>mvp</code>, <code>custom-defaults</code>, <code>deep</code>) + project-type overlays</td></tr><tr><td><code>content/knowledge/</code></td><td>Domain entries injected into prompts during assembly</td></tr><tr><td><code>src/types/frontmatter.ts</code></td><td>The canonical <code>PHASES</code> constant + frontmatter schema</td></tr><tr><td><code>src/cli/commands/</code></td><td><code>next</code>, <code>run</code>, <code>complete</code>, <code>skip</code>, <code>rework</code>, <code>reset</code>, <code>status</code></td></tr><tr><td><code>.scaffold/state.json</code></td><td>Per-step completion state (planning phases only)</td></tr></tbody></table>
1534
+ <p>The phase list, ordering, and slugs are defined exactly once, in <code>PHASES</code>
1535
+ (<span class="fp" data-path="src/types/frontmatter.ts:6">src/types/frontmatter.ts:6</span>); every doc, skill, and command resolves
1536
+ against it.</p></main>
1537
+ </div>
1538
+ <script>(function(){
1539
+ var LS_KEY = 'guide-theme';
1540
+ function applyTheme(t) {
1541
+ document.documentElement.setAttribute('data-theme', t);
1542
+ }
1543
+
1544
+ document.addEventListener('DOMContentLoaded', function() {
1545
+ // ─── Theme toggle ────────────────────────────────────────────────────────
1546
+ document.querySelectorAll('[data-action="theme"]').forEach(function(btn) {
1547
+ btn.addEventListener('click', function() {
1548
+ var current = document.documentElement.getAttribute('data-theme');
1549
+ var next = current === 'dark' ? 'light' : 'dark';
1550
+ applyTheme(next);
1551
+ try { localStorage.setItem(LS_KEY, next); } catch(e) {}
1552
+ });
1553
+ });
1554
+
1555
+ // ─── Mobile nav ──────────────────────────────────────────────────────────
1556
+ document.querySelectorAll('[data-action="nav"]').forEach(function(btn) {
1557
+ btn.addEventListener('click', function() {
1558
+ var rail = document.querySelector('.rail');
1559
+ if (rail) rail.classList.toggle('open');
1560
+ });
1561
+ });
1562
+
1563
+ // ─── Copy buttons ─────────────────────────────────────────────────────────
1564
+ document.querySelectorAll('pre').forEach(function(pre) {
1565
+ if (!pre.parentNode) return;
1566
+ var wrapper = document.createElement('div');
1567
+ wrapper.className = 'code';
1568
+ pre.parentNode.insertBefore(wrapper, pre);
1569
+ wrapper.appendChild(pre);
1570
+ var btn = document.createElement('button');
1571
+ btn.className = 'copy-btn';
1572
+ btn.textContent = 'Copy';
1573
+ btn.addEventListener('click', function() {
1574
+ var text = pre.textContent || '';
1575
+ if (navigator.clipboard && navigator.clipboard.writeText) {
1576
+ navigator.clipboard.writeText(text).then(function() {
1577
+ btn.textContent = 'Copied';
1578
+ setTimeout(function() { btn.textContent = 'Copy'; }, 1200);
1579
+ }, function() {
1580
+ btn.textContent = 'Copy';
1581
+ });
1582
+ }
1583
+ });
1584
+ wrapper.insertBefore(btn, pre);
1585
+ });
1586
+
1587
+ // ─── Tabs ─────────────────────────────────────────────────────────────────
1588
+ document.querySelectorAll('.tabs').forEach(function(group) {
1589
+ group.querySelectorAll('.tab-btn').forEach(function(btn) {
1590
+ btn.addEventListener('click', function() {
1591
+ var idx = btn.getAttribute('data-tab');
1592
+ group.querySelectorAll('.tab-btn').forEach(function(b) {
1593
+ b.classList.toggle('active', b === btn);
1594
+ });
1595
+ group.querySelectorAll('.tabpane').forEach(function(pane) {
1596
+ pane.classList.toggle('active', pane.getAttribute('data-tab') === idx);
1597
+ });
1598
+ });
1599
+ });
1600
+ });
1601
+
1602
+ // ─── Filter tables ────────────────────────────────────────────────────────
1603
+ document.querySelectorAll('.filter-input').forEach(function(input) {
1604
+ input.addEventListener('input', function() {
1605
+ var q = input.value.toLowerCase();
1606
+ var container = input.closest('.filter-table');
1607
+ if (!container) return;
1608
+ container.querySelectorAll('tbody tr').forEach(function(row) {
1609
+ var text = (row.textContent || '').toLowerCase();
1610
+ row.style.display = text.includes(q) ? '' : 'none';
1611
+ });
1612
+ });
1613
+ });
1614
+
1615
+ // ─── Scrollspy ────────────────────────────────────────────────────────────
1616
+ if (typeof IntersectionObserver === 'undefined') return;
1617
+ var headings = document.querySelectorAll('h2[id],h3[id]');
1618
+ if (!headings.length) return;
1619
+ var observer = new IntersectionObserver(function(entries) {
1620
+ entries.forEach(function(entry) {
1621
+ if (!entry.isIntersecting) return;
1622
+ var id = entry.target.getAttribute('id');
1623
+ document.querySelectorAll('.toc a').forEach(function(a) {
1624
+ a.classList.toggle('active', a.getAttribute('href') === '#' + id);
1625
+ });
1626
+ });
1627
+ }, { rootMargin: '0px 0px -70% 0px', threshold: 0 });
1628
+ headings.forEach(function(h) { observer.observe(h); });
1629
+ });
1630
+ })();</script>
1631
+ </body>
1632
+ </html>