naive-framework 0.0.0-stage → 0.1.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 (338) hide show
  1. package/AGENTS.md +61 -0
  2. package/LICENSE +21 -0
  3. package/README.md +37 -2
  4. package/docs/decisions/decisions.json +861 -0
  5. package/docs/ontology.json +796 -0
  6. package/docs/ontology.md +163 -0
  7. package/docs/reference/ROUTES.md +125 -0
  8. package/evidence/benchmarks/2026-10-27-golden.jev.after-catalog-fix.json +558 -0
  9. package/evidence/benchmarks/2026-10-27-golden.jev.json +501 -0
  10. package/evidence/benchmarks/2026-10-27-golden.reasoning-answers.json +177 -0
  11. package/evidence/benchmarks/JEV_VS_REASONING_MODEL_2026-10-27.md +68 -0
  12. package/evidence/capabilities/agent-capabilities.json +86 -0
  13. package/evidence/design-documents.registry.json +2896 -0
  14. package/evidence/evals/evals.json +25 -0
  15. package/evidence/evals/harness-evals.json +140 -0
  16. package/evidence/layer.json +51 -0
  17. package/evidence/skills/agent-capabilities/SKILL.md +35 -0
  18. package/evidence/skills/design-coverage/SKILL.md +57 -0
  19. package/evidence/skills/design-coverage/check.mjs +192 -0
  20. package/evidence/skills/design-coverage/scan.mjs +45 -0
  21. package/evidence/skills/fidelity-ladder-audit/SKILL.md +121 -0
  22. package/evidence/skills/fidelity-ladder-audit/ladder-census.mjs +180 -0
  23. package/evidence/skills/findability/SKILL.md +32 -0
  24. package/evidence/skills/findability/inventory.rb +41 -0
  25. package/evidence/skills/foreshadowing-audit/SKILL.md +183 -0
  26. package/evidence/skills/metrics-review/SKILL.md +177 -0
  27. package/evidence/tooling/integrations.json +153 -0
  28. package/governance/layer.json +101 -0
  29. package/governance/references/references.json +26 -0
  30. package/governance/skills/board-design/SKILL.md +68 -0
  31. package/governance/skills/brand-pillar/SKILL.md +90 -0
  32. package/governance/skills/business-pillar/SKILL.md +96 -0
  33. package/governance/skills/chief-of-staff/SKILL.md +45 -0
  34. package/governance/skills/cofounder-structure/SKILL.md +64 -0
  35. package/governance/skills/cross-pillar-tradeoff/SKILL.md +168 -0
  36. package/governance/skills/equity-and-share-classes/SKILL.md +68 -0
  37. package/governance/skills/executive-roles/SKILL.md +95 -0
  38. package/governance/skills/exit-planning/SKILL.md +66 -0
  39. package/governance/skills/financing-and-investor-rights/SKILL.md +73 -0
  40. package/governance/skills/office-hours-mode/SKILL.md +113 -0
  41. package/governance/skills/product-pillar/SKILL.md +81 -0
  42. package/governance/skills/publication-policy/SKILL.md +63 -0
  43. package/governance/skills/role-and-candidate-authoring/SKILL.md +198 -0
  44. package/governance/skills/stakeholder-update/SKILL.md +177 -0
  45. package/governance/tooling/integrations.json +37 -0
  46. package/governance/venture-template/AGENT_ROLES_AND_DECISION_RIGHTS.md +58 -0
  47. package/governance/venture-template/COMPANY_VAULT_DEFINITION_2026-10-25.md +204 -0
  48. package/governance/venture-template/README.md +74 -0
  49. package/governance/venture-template/decision-rights.json +186 -0
  50. package/governance/venture-template/index.md +151 -0
  51. package/governance/venture-template/pillars/brand.md +209 -0
  52. package/governance/venture-template/pillars/business.md +255 -0
  53. package/governance/venture-template/pillars/product.md +254 -0
  54. package/governance/venture-template/render-roles.py +11 -0
  55. package/governance/venture-template/roles/README.md +85 -0
  56. package/governance/venture-template/roles/agent-roles.json +202 -0
  57. package/governance/venture-template/roles/ceo.md +163 -0
  58. package/governance/venture-template/roles/chief-of-staff.md +153 -0
  59. package/governance/venture-template/roles/cmo.md +165 -0
  60. package/governance/venture-template/roles/coo.md +189 -0
  61. package/governance/venture-template/roles/cto.md +158 -0
  62. package/governance/venture-template/roles/department-head.md +47 -0
  63. package/governance/venture-template/roles/forward-deployed-engineer.md +51 -0
  64. package/governance/venture-template/roles/founder.md +173 -0
  65. package/governance/venture-template/roles/hr-manager.md +49 -0
  66. package/governance/venture-template/roles/talent-acquisition-manager.md +50 -0
  67. package/interface/api/server.mjs +69 -0
  68. package/interface/cli/find-venture.mjs +15 -0
  69. package/interface/cli/mentura.mjs +271 -0
  70. package/interface/cli/naive.mjs +169 -0
  71. package/interface/demo/board.mjs +581 -0
  72. package/interface/demo/decision-harness.mjs +91 -0
  73. package/interface/demo/live-agent.mjs +47 -0
  74. package/interface/harness/evals.mjs +90 -0
  75. package/interface/harness/examples/pt-no-shows.dump.md +19 -0
  76. package/interface/harness/run.mjs +313 -0
  77. package/interface/harness/site.mjs +59 -0
  78. package/interface/layer.json +31 -0
  79. package/interface/mcp/server.mjs +122 -0
  80. package/interface/operator-console/README.md +58 -0
  81. package/interface/provenance.mjs +42 -0
  82. package/interface/references/references.json +28 -0
  83. package/interface/route-aliases.json +32 -0
  84. package/interface/router.mjs +580 -0
  85. package/interface/skills/install-mentura/SKILL.md +88 -0
  86. package/interface/tooling/integrations.json +112 -0
  87. package/knowledge/connectors/README.md +54 -0
  88. package/knowledge/connectors/catalog.mjs +118 -0
  89. package/knowledge/connectors/contract.mjs +56 -0
  90. package/knowledge/connectors/eval.mjs +176 -0
  91. package/knowledge/connectors/filesystem.mjs +79 -0
  92. package/knowledge/connectors/index.mjs +102 -0
  93. package/knowledge/connectors/resolve.mjs +44 -0
  94. package/knowledge/connectors/suite.mjs +80 -0
  95. package/knowledge/layer.json +42 -0
  96. package/knowledge/skills/find-reference/SKILL.md +38 -0
  97. package/knowledge/skills/industry-awareness/SKILL.md +277 -0
  98. package/knowledge/tooling/integrations.json +127 -0
  99. package/knowledge/tooling/questions.md +46 -0
  100. package/operations/FOUNDER_OPERATING_MODEL_CAMPAIGN_2026-10-14.md +16 -0
  101. package/operations/departments.json +162 -0
  102. package/operations/handoff-v2.md +93 -0
  103. package/operations/layer.json +60 -0
  104. package/operations/marketing/check-public.mjs +68 -0
  105. package/operations/marketing/site/README.md +86 -0
  106. package/operations/marketing/site/matrix.json +731 -0
  107. package/operations/marketing/site/plan.mjs +117 -0
  108. package/operations/marketing/site/presence.mjs +252 -0
  109. package/operations/references/references.json +45 -0
  110. package/operations/skills/recruiting/SKILL.md +32 -0
  111. package/operations/skills/team-design/SKILL.md +36 -0
  112. package/operations/skills/tool-selection/SKILL.md +46 -0
  113. package/operations/templates/recruiting-brief.md +35 -0
  114. package/operations/tooling/integrations.json +158 -0
  115. package/package.json +57 -4
  116. package/packages/catalog.json +272 -0
  117. package/packages/cofounder/package.json +42 -0
  118. package/packages/counsel/package.json +47 -0
  119. package/packages/customers/package.json +21 -0
  120. package/packages/decisions/package.json +17 -0
  121. package/packages/engineering/package.json +41 -0
  122. package/packages/evidence/package.json +17 -0
  123. package/packages/finance/package.json +48 -0
  124. package/packages/foundation/package.json +52 -0
  125. package/packages/investor/package.json +57 -0
  126. package/packages/investors/package.json +21 -0
  127. package/packages/legal/package.json +73 -0
  128. package/packages/marketing/package.json +57 -0
  129. package/packages/money/package.json +21 -0
  130. package/packages/operations/package.json +74 -0
  131. package/packages/partner/package.json +38 -0
  132. package/packages/people/package.json +64 -0
  133. package/packages/product/package.json +49 -0
  134. package/packages/raw/package.json +19 -0
  135. package/packages/relationships/package.json +52 -0
  136. package/packages/validation/package.json +99 -0
  137. package/platform/README.md +45 -0
  138. package/platform/connectors/eval.mjs +154 -0
  139. package/platform/connectors/fake-github.mjs +91 -0
  140. package/platform/connectors/github.mjs +105 -0
  141. package/platform/integrations/jev.mjs +30 -0
  142. package/platform/integrations/langsmith-docket.mjs +53 -0
  143. package/platform/integrations/langsmith-setup.mjs +115 -0
  144. package/platform/integrations/langsmith.mjs +47 -0
  145. package/platform/integrations/rho.mjs +145 -0
  146. package/platform/integrations/site.mjs +75 -0
  147. package/platform/kits/README.md +7 -0
  148. package/platform/mcp/research.mjs +64 -0
  149. package/purpose/checklists/vault-and-tooling-consultancy-setup.md +216 -0
  150. package/purpose/frameworks/business-discovery-framework-amendments-2026-05-20.md +181 -0
  151. package/purpose/frameworks/business-discovery-framework.html +938 -0
  152. package/purpose/frameworks/business-discovery-framework.md +326 -0
  153. package/purpose/frameworks/idea-map/README.md +74 -0
  154. package/purpose/frameworks/idea-map/conventions.json +146 -0
  155. package/purpose/frameworks/idea-map/graph.mjs +182 -0
  156. package/purpose/frameworks/idea-map/ideamap.mjs +179 -0
  157. package/purpose/frameworks/idea-map/route.mjs +140 -0
  158. package/purpose/frameworks/onboarding-handoff-framework.md +269 -0
  159. package/purpose/frameworks/post-discovery-deliverable-playbook.md +274 -0
  160. package/purpose/frameworks/product-anatomy/README.md +63 -0
  161. package/purpose/frameworks/product-anatomy/anatomy.mjs +195 -0
  162. package/purpose/frameworks/product-anatomy/examples/polity.answers.reasoned.json +11 -0
  163. package/purpose/frameworks/product-anatomy/examples/polity.json +89 -0
  164. package/purpose/frameworks/product-anatomy/phases.json +107 -0
  165. package/purpose/frameworks/product-anatomy/questions.json +74 -0
  166. package/purpose/kits/validation/README.md +14 -0
  167. package/purpose/kits/validation/references/references.json +122 -0
  168. package/purpose/kits/validation/skills/problem-validation/SKILL.md +43 -0
  169. package/purpose/kits/validation/skills/validation-score/SKILL.md +35 -0
  170. package/purpose/kits/validation/templates/go-to-market.md +19 -0
  171. package/purpose/kits/validation/templates/operations-readiness.md +20 -0
  172. package/purpose/kits/validation/templates/pricing.md +22 -0
  173. package/purpose/kits/validation/templates/problem-interview.md +36 -0
  174. package/purpose/kits/validation/templates/problem.md +45 -0
  175. package/purpose/kits/validation/templates/product-market-fit.md +23 -0
  176. package/purpose/kits/validation/templates/solution.md +18 -0
  177. package/purpose/kits/validation/templates/team.md +19 -0
  178. package/purpose/kits/validation/weights.json +22 -0
  179. package/purpose/layer.json +53 -0
  180. package/purpose/references/references.json +324 -0
  181. package/purpose/skills/ambition-tier/SKILL.md +205 -0
  182. package/purpose/skills/telos/SKILL.md +52 -0
  183. package/purpose/strategic-foundation.json +133 -0
  184. package/purpose/templates/telos-based-smart.md +39 -0
  185. package/purpose/tooling/integrations.json +48 -0
  186. package/schema/README.md +61 -0
  187. package/schema/VERSION +1 -0
  188. package/schema/account.schema.json +79 -0
  189. package/schema/add-department.mjs +41 -0
  190. package/schema/agent-capability.schema.json +94 -0
  191. package/schema/alignment.schema.json +61 -0
  192. package/schema/assess-problem.mjs +131 -0
  193. package/schema/bdd.mjs +56 -0
  194. package/schema/board.schema.json +101 -0
  195. package/schema/check-boundary.mjs +54 -0
  196. package/schema/check-data-model.mjs +170 -0
  197. package/schema/check-data-packages.mjs +83 -0
  198. package/schema/check-departments.mjs +45 -0
  199. package/schema/check-execution.mjs +85 -0
  200. package/schema/check-governance.mjs +98 -0
  201. package/schema/check-integrations.mjs +33 -0
  202. package/schema/check-nextjs-status.mjs +77 -0
  203. package/schema/check-nouns.mjs +49 -0
  204. package/schema/check-private.mjs +61 -0
  205. package/schema/check-provenance.mjs +55 -0
  206. package/schema/check-publication.mjs +96 -0
  207. package/schema/check-ready.mjs +89 -0
  208. package/schema/check-sources.mjs +66 -0
  209. package/schema/check-team.mjs +94 -0
  210. package/schema/check-telos.mjs +59 -0
  211. package/schema/check-validation.mjs +165 -0
  212. package/schema/check-ventures.mjs +81 -0
  213. package/schema/check-where-used.mjs +58 -0
  214. package/schema/data-master.schema.json +14 -0
  215. package/schema/data-model.json +1258 -0
  216. package/schema/data-model.schema.json +152 -0
  217. package/schema/decision-analytics.mjs +77 -0
  218. package/schema/decision-record.schema.json +290 -0
  219. package/schema/decision-rights.schema.json +34 -0
  220. package/schema/decision.schema.json +30 -0
  221. package/schema/decisions.mjs +321 -0
  222. package/schema/department-catalog.schema.json +55 -0
  223. package/schema/department.schema.json +15 -0
  224. package/schema/departments.mjs +32 -0
  225. package/schema/docket-eval.mjs +89 -0
  226. package/schema/docket.mjs +135 -0
  227. package/schema/eval-suite.schema.json +45 -0
  228. package/schema/evidence.schema.json +110 -0
  229. package/schema/examples/migrate/agent.mjs +12 -0
  230. package/schema/examples/workspace/ventures/studio/accounts/bakery/account.json +18 -0
  231. package/schema/examples/workspace/ventures/studio/evidence/.gitkeep +0 -0
  232. package/schema/examples/workspace/ventures/studio/governance/.gitkeep +0 -0
  233. package/schema/examples/workspace/ventures/studio/knowledge/.gitkeep +0 -0
  234. package/schema/examples/workspace/ventures/studio/operations/.gitkeep +0 -0
  235. package/schema/examples/workspace/ventures/studio/print/knowledge/.gitkeep +0 -0
  236. package/schema/examples/workspace/ventures/studio/print/purpose/.gitkeep +0 -0
  237. package/schema/examples/workspace/ventures/studio/print/venture.json +37 -0
  238. package/schema/examples/workspace/ventures/studio/products/brand-care.json +19 -0
  239. package/schema/examples/workspace/ventures/studio/products/brand-kit.json +23 -0
  240. package/schema/examples/workspace/ventures/studio/provenance.jsonl +3 -0
  241. package/schema/examples/workspace/ventures/studio/purpose/.gitkeep +0 -0
  242. package/schema/examples/workspace/ventures/studio/venture.json +43 -0
  243. package/schema/examples/workspace/ventures/tandem/accounts/.gitkeep +0 -0
  244. package/schema/examples/workspace/ventures/tandem/evidence/README.md +3 -0
  245. package/schema/examples/workspace/ventures/tandem/governance/README.md +3 -0
  246. package/schema/examples/workspace/ventures/tandem/governance/agreements/dee-fast.md +3 -0
  247. package/schema/examples/workspace/ventures/tandem/governance/board.json +51 -0
  248. package/schema/examples/workspace/ventures/tandem/governance/departments/finance/charter.md +5 -0
  249. package/schema/examples/workspace/ventures/tandem/governance/departments/finance/department.json +5 -0
  250. package/schema/examples/workspace/ventures/tandem/governance/departments/primary/marketing-and-sales/charter.md +5 -0
  251. package/schema/examples/workspace/ventures/tandem/governance/departments/primary/marketing-and-sales/department.json +5 -0
  252. package/schema/examples/workspace/ventures/tandem/governance/exit.json +33 -0
  253. package/schema/examples/workspace/ventures/tandem/governance/founder-agreement.json +24 -0
  254. package/schema/examples/workspace/ventures/tandem/governance/founder-agreement.md +3 -0
  255. package/schema/examples/workspace/ventures/tandem/governance/ownership.json +131 -0
  256. package/schema/examples/workspace/ventures/tandem/governance/publication-policy.json +171 -0
  257. package/schema/examples/workspace/ventures/tandem/knowledge/README.md +3 -0
  258. package/schema/examples/workspace/ventures/tandem/knowledge/research/friends-feedback-2026-08.md +3 -0
  259. package/schema/examples/workspace/ventures/tandem/knowledge/research/pilot-2026-10.md +3 -0
  260. package/schema/examples/workspace/ventures/tandem/knowledge/research/problem-interviews-2026-09.md +20 -0
  261. package/schema/examples/workspace/ventures/tandem/knowledge/sources.json +8 -0
  262. package/schema/examples/workspace/ventures/tandem/knowledge/where-used.json +13 -0
  263. package/schema/examples/workspace/ventures/tandem/operations/README.md +3 -0
  264. package/schema/examples/workspace/ventures/tandem/operations/departments/finance/README.md +5 -0
  265. package/schema/examples/workspace/ventures/tandem/operations/departments/finance/department.json +5 -0
  266. package/schema/examples/workspace/ventures/tandem/operations/departments/primary/marketing-and-sales/README.md +5 -0
  267. package/schema/examples/workspace/ventures/tandem/operations/departments/primary/marketing-and-sales/department.json +5 -0
  268. package/schema/examples/workspace/ventures/tandem/pillars/brand.md +5 -0
  269. package/schema/examples/workspace/ventures/tandem/pillars/business.md +5 -0
  270. package/schema/examples/workspace/ventures/tandem/pillars/product.md +5 -0
  271. package/schema/examples/workspace/ventures/tandem/products/.gitkeep +0 -0
  272. package/schema/examples/workspace/ventures/tandem/products/shop-app.json +22 -0
  273. package/schema/examples/workspace/ventures/tandem/profile.md +5 -0
  274. package/schema/examples/workspace/ventures/tandem/provenance.jsonl +13 -0
  275. package/schema/examples/workspace/ventures/tandem/purpose/README.md +3 -0
  276. package/schema/examples/workspace/ventures/tandem/purpose/telos.json +78 -0
  277. package/schema/examples/workspace/ventures/tandem/purpose/validation/go-to-market.json +35 -0
  278. package/schema/examples/workspace/ventures/tandem/purpose/validation/pricing.json +37 -0
  279. package/schema/examples/workspace/ventures/tandem/purpose/validation/problem.json +74 -0
  280. package/schema/examples/workspace/ventures/tandem/purpose/validation/product-market-fit.json +66 -0
  281. package/schema/examples/workspace/ventures/tandem/purpose/validation/solution.json +33 -0
  282. package/schema/examples/workspace/ventures/tandem/purpose/validation/team.json +52 -0
  283. package/schema/examples/workspace/ventures/tandem/venture.json +79 -0
  284. package/schema/examples/workspace/ventures/woodworking/knowledge/.gitkeep +0 -0
  285. package/schema/examples/workspace/ventures/woodworking/venture.json +21 -0
  286. package/schema/examples/workspace/workspace.json +8 -0
  287. package/schema/exit.schema.json +74 -0
  288. package/schema/foundation.mjs +118 -0
  289. package/schema/founder-agreement.schema.json +83 -0
  290. package/schema/gate.mjs +39 -0
  291. package/schema/handoff.schema.json +239 -0
  292. package/schema/icp.schema.json +136 -0
  293. package/schema/idea-graph.schema.json +61 -0
  294. package/schema/init-venture.mjs +98 -0
  295. package/schema/integration.schema.json +143 -0
  296. package/schema/knowledge-sources.schema.json +130 -0
  297. package/schema/layer.json +46 -0
  298. package/schema/layer.schema.json +119 -0
  299. package/schema/load-packages.mjs +26 -0
  300. package/schema/marketing-sitemap.schema.json +232 -0
  301. package/schema/migrate-venture.mjs +192 -0
  302. package/schema/need-now.json +601 -0
  303. package/schema/need-now.mjs +107 -0
  304. package/schema/nextjs-status.schema.json +29 -0
  305. package/schema/ownership.schema.json +282 -0
  306. package/schema/packages.json +4 -0
  307. package/schema/packages.mjs +247 -0
  308. package/schema/payouts.mjs +91 -0
  309. package/schema/port-venture.mjs +161 -0
  310. package/schema/product.schema.json +223 -0
  311. package/schema/provenance-entry.schema.json +154 -0
  312. package/schema/publication-policy.schema.json +293 -0
  313. package/schema/raw-source.schema.json +15 -0
  314. package/schema/reference.schema.json +115 -0
  315. package/schema/route-aliases.schema.json +25 -0
  316. package/schema/run-handoff.mjs +51 -0
  317. package/schema/scaffold/defaults.json +54 -0
  318. package/schema/site-presence.schema.json +337 -0
  319. package/schema/strategic-foundation.schema.json +74 -0
  320. package/schema/stream.schema.json +14 -0
  321. package/schema/team-plan.schema.json +157 -0
  322. package/schema/telos.schema.json +197 -0
  323. package/schema/time-to-ready.mjs +93 -0
  324. package/schema/upgrade-venture.mjs +129 -0
  325. package/schema/use-model.mjs +10 -0
  326. package/schema/validate.py +49 -0
  327. package/schema/validation-evidence.schema.json +123 -0
  328. package/schema/validation-go-to-market.schema.json +110 -0
  329. package/schema/validation-operations-readiness.schema.json +91 -0
  330. package/schema/validation-pricing.schema.json +114 -0
  331. package/schema/validation-problem.schema.json +118 -0
  332. package/schema/validation-product-market-fit.schema.json +135 -0
  333. package/schema/validation-solution.schema.json +79 -0
  334. package/schema/validation-team.schema.json +116 -0
  335. package/schema/venture.schema.json +407 -0
  336. package/schema/vocab/business-models.json +298 -0
  337. package/schema/where-used.schema.json +56 -0
  338. package/schema/workspace.schema.json +38 -0
@@ -0,0 +1,2896 @@
1
+ {
2
+ "$schema_note": "Machine-readable registry of design documents for SAD v3 projects, in five layers: domain (DD), product (PA), experience (XD), interface (UI) and systems (SD). IDs are questions, not folders. Where each layer lives across the vault and the code repo: DOMAIN_AND_SYSTEMS_DESIGN_METHOD.md §4a. Companion to that method and the Canonical Asset Registry. Read by design-coverage/check.mjs.",
3
+ "version": "1.2.0",
4
+ "created": "2026-10-09",
5
+ "ai_model": "claude-opus-5.5",
6
+ "definitions": {
7
+ "domain_design": "Designing what the system means: the actors, concepts, rules, invariants, lifecycles and policies of the problem it serves, independent of technology. Answers 'what is true, what is allowed, what must never happen'. Output: domain documents (DD-*).",
8
+ "systems_design": "Designing how a running system implements the domain under real constraints: requirements and non-functional promises, components and boundaries, data storage, interfaces, behaviour under concurrency and failure, trust, operations, testing and cost. Answers 'what runs where, how it talks, how it stays correct and available'. Output: system documents (SD-*).",
9
+ "relationship": "Domain design comes first and constrains everything after it. Experience design follows the domain (and product architecture) and states what people must be able to do and understand. Interface design follows experience design. Systems design implements the domain for the interface: its API contracts (SD-08) answer the front-end contract (UI-06), consumer first, rather than the interface adapting to whatever the back end exposes. Every system choice must preserve the domain's invariants and be traceable to a domain concept (SD-22). Later layers may reveal gaps in earlier ones; those are fixed by amending the earlier documents, never by working around them.",
10
+ "trigger_for_systems_design": "Start a systems-design package for a scope when (1) its domain core is ratified or tested on real data (DD-10, DD-11) and (2) the next phase's outcome requires running software. Write the full package for the next phase, an outline (SD-04, SD-05, SD-21) for the phase after, and nothing for later phases. Exception: a domain decision with irreversible system consequences (e.g. an append-only log) is recorded early as an ADR (SD-21).",
11
+ "product_architecture": "How what is built is organised for the people who use and buy it: the levels (platform, edition, suite or equivalent), naming, who uses which part, how it is packaged and bought, and what it competes with. Output: product documents (PA-*). Built on the capability map (DD-12).",
12
+ "capability_map": "Capabilities grouped into categories by job. Each category has one job, its own vocabulary and the facts it mainly changes (a bounded context), and is sorted as core (differentiating: build), supporting (necessary: build simply) or generic (solved: buy or integrate). Categories organise architecture, investment, ownership and sequencing first; packaging and competitive comparison follow from them.",
13
+ "experience_design": "Designing what using the system is like: who the people are, what they are trying to get done, in what setting, which words and mental models they bring, the journeys they take, how they find things, what each state means to them, and how trust is earned and kept. Independent of screens and technology. Answers 'what must a person be able to do and understand, and how will we know they can'. Output: experience documents (XD-*). Built on the domain (actors DD-02, language DD-03, lifecycles DD-06) and the product structure (PA-01).",
14
+ "interface_design": "Designing the concrete means of use: the method chosen for exploring and then fixing the interface, wireframes and prototypes, object renderings (fidelity ladders), the design system, and the front-end contract the interface needs from the back end. Answers 'what does the person see and touch, and what must the system provide for it'. Output: interface documents (UI-*). Built on experience design; brand supplies identity.",
15
+ "trigger_for_interface_design": "Start interface design for a scope when its experience core (XD-01, XD-04, XD-05, XD-06) exists. Explore first (UI-02, UI-03: wireframes and a prototype on real data), then fix what exploration settles (UI-04 to UI-08). Spec-as-source and test-driven methods are unfit while interaction is being discovered (methodology catalog); they apply once the front-end contract and journey scenarios are written."
16
+ },
17
+ "status_vocabulary": {
18
+ "exists": "✓ authored: a document answers all of its questions",
19
+ "partial": "↺ partial: a document exists but some questions are unanswered",
20
+ "null": "✗ missing: no document found",
21
+ "deferred": "— deferred, with a trigger",
22
+ "not_applicable": "N/A, with the reason (required_when not met)"
23
+ },
24
+ "stages": {
25
+ "domain": [
26
+ "D1 Frame",
27
+ "D2 Model",
28
+ "D3 Vary",
29
+ "D4 Prove",
30
+ "D5 Ratify"
31
+ ],
32
+ "system": [
33
+ "S1 Requirements",
34
+ "S2 Architecture",
35
+ "S3 Data",
36
+ "S4 Interfaces",
37
+ "S5 Behaviour",
38
+ "S6 Trust",
39
+ "S7 Operations",
40
+ "S8 Plan"
41
+ ],
42
+ "product": [
43
+ "P1 Structure",
44
+ "P2 Market"
45
+ ],
46
+ "experience": [
47
+ "X1 Understand",
48
+ "X2 Structure",
49
+ "X3 Behave",
50
+ "X4 Prove"
51
+ ],
52
+ "interface": [
53
+ "U1 Method",
54
+ "U2 Explore",
55
+ "U3 Systematize",
56
+ "U4 Contract"
57
+ ]
58
+ },
59
+ "documents": [
60
+ {
61
+ "id": "DD-01",
62
+ "layer": "domain",
63
+ "stage": "D1 Frame",
64
+ "name": "Problem, goals and non-goals",
65
+ "aliases": [],
66
+ "purpose": "States what the system is for, who it serves, and what it will not do, so every later design choice can be traced to a purpose.",
67
+ "required_when": "always",
68
+ "depends_on": [],
69
+ "questions": [
70
+ {
71
+ "id": "DD-01-Q1",
72
+ "text": "What problem does this solve, for whom, and why now?"
73
+ },
74
+ {
75
+ "id": "DD-01-Q2",
76
+ "text": "What are the goals, stated so that we could tell if they were met?"
77
+ },
78
+ {
79
+ "id": "DD-01-Q3",
80
+ "text": "What are the explicit non-goals, and why is each excluded?"
81
+ },
82
+ {
83
+ "id": "DD-01-Q4",
84
+ "text": "What would make this not worth building?"
85
+ },
86
+ {
87
+ "id": "DD-01-Q5",
88
+ "text": "Which decisions in this scope belong to the people who use it rather than to us?"
89
+ }
90
+ ],
91
+ "evidence": {
92
+ "frontmatter_types": [
93
+ "research",
94
+ "planning",
95
+ "spec"
96
+ ],
97
+ "title_patterns": [
98
+ "first principles",
99
+ "goals",
100
+ "non-goals",
101
+ "vision",
102
+ "problem statement",
103
+ "strategy"
104
+ ],
105
+ "path_globs": []
106
+ },
107
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
108
+ "sources": []
109
+ },
110
+ {
111
+ "id": "DD-02",
112
+ "layer": "domain",
113
+ "stage": "D1 Frame",
114
+ "name": "Actors, roles and operations",
115
+ "aliases": [],
116
+ "purpose": "Names every kind of person or system that acts, what each may do, and the main operations, before any technology is chosen.",
117
+ "required_when": "always",
118
+ "depends_on": [],
119
+ "questions": [
120
+ {
121
+ "id": "DD-02-Q1",
122
+ "text": "Who are the actors (people, institutions, systems), and which roles can one person hold?",
123
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
124
+ },
125
+ {
126
+ "id": "DD-02-Q2",
127
+ "text": "What are the main operations each role performs, from start to finish?",
128
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
129
+ },
130
+ {
131
+ "id": "DD-02-Q3",
132
+ "text": "What may each role do, and what must it never be able to do?"
133
+ },
134
+ {
135
+ "id": "DD-02-Q4",
136
+ "text": "Which operations are consequential (hard to reverse, affect other people, have legal effect)?"
137
+ },
138
+ {
139
+ "id": "DD-02-Q5",
140
+ "text": "Who checks or oversees each operation?"
141
+ }
142
+ ],
143
+ "evidence": {
144
+ "frontmatter_types": [
145
+ "research",
146
+ "spec"
147
+ ],
148
+ "title_patterns": [
149
+ "actors",
150
+ "roles",
151
+ "personas",
152
+ "segment",
153
+ "jobs"
154
+ ],
155
+ "path_globs": []
156
+ },
157
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
158
+ "sources": []
159
+ },
160
+ {
161
+ "id": "DD-03",
162
+ "layer": "domain",
163
+ "stage": "D2 Model",
164
+ "name": "Ubiquitous language (glossary)",
165
+ "aliases": [],
166
+ "purpose": "Fixes one meaning per term, so documents, code and conversation use the same words for the same things.",
167
+ "required_when": "always",
168
+ "depends_on": [],
169
+ "questions": [
170
+ {
171
+ "id": "DD-03-Q1",
172
+ "text": "What are the core terms, each with one definition?"
173
+ },
174
+ {
175
+ "id": "DD-03-Q2",
176
+ "text": "Which everyday words are ambiguous here, and which meaning do we use?"
177
+ },
178
+ {
179
+ "id": "DD-03-Q3",
180
+ "text": "Which terms must never be used interchangeably?"
181
+ },
182
+ {
183
+ "id": "DD-03-Q4",
184
+ "text": "Which terms are borrowed from a standard, and which are ours?"
185
+ }
186
+ ],
187
+ "evidence": {
188
+ "frontmatter_types": [
189
+ "reference",
190
+ "spec",
191
+ "knowledge"
192
+ ],
193
+ "title_patterns": [
194
+ "glossary",
195
+ "lexicon",
196
+ "definitions",
197
+ "vocabulary",
198
+ "terminology"
199
+ ],
200
+ "path_globs": []
201
+ },
202
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
203
+ "sources": []
204
+ },
205
+ {
206
+ "id": "DD-04",
207
+ "layer": "domain",
208
+ "stage": "D2 Model",
209
+ "name": "Conceptual domain model",
210
+ "aliases": [],
211
+ "purpose": "Defines the things the domain is made of, how they relate, how each is identified, and how identity survives change.",
212
+ "required_when": "always",
213
+ "depends_on": [],
214
+ "questions": [
215
+ {
216
+ "id": "DD-04-Q1",
217
+ "text": "What are the primitives (entities, events, values), and why is each one necessary?"
218
+ },
219
+ {
220
+ "id": "DD-04-Q2",
221
+ "text": "How do they relate, and with what cardinality?"
222
+ },
223
+ {
224
+ "id": "DD-04-Q3",
225
+ "text": "How is each thing identified, and does that identity survive renames, merges and versions?"
226
+ },
227
+ {
228
+ "id": "DD-04-Q4",
229
+ "text": "What is deliberately not a primitive, and why?"
230
+ },
231
+ {
232
+ "id": "DD-04-Q5",
233
+ "text": "Which existing standards or models does it map to?"
234
+ }
235
+ ],
236
+ "evidence": {
237
+ "frontmatter_types": [
238
+ "spec",
239
+ "research"
240
+ ],
241
+ "title_patterns": [
242
+ "primitive",
243
+ "domain model",
244
+ "spec",
245
+ "ontology",
246
+ "entity"
247
+ ],
248
+ "path_globs": []
249
+ },
250
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
251
+ "sources": []
252
+ },
253
+ {
254
+ "id": "DD-05",
255
+ "layer": "domain",
256
+ "stage": "D2 Model",
257
+ "name": "Rules, invariants and constraints",
258
+ "aliases": [],
259
+ "purpose": "Lists what must always be true and the rules that govern the domain, independent of how they will be enforced.",
260
+ "required_when": "always",
261
+ "depends_on": [],
262
+ "questions": [
263
+ {
264
+ "id": "DD-05-Q1",
265
+ "text": "What must always be true, including when operations overlap, repeat or fail?",
266
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
267
+ },
268
+ {
269
+ "id": "DD-05-Q2",
270
+ "text": "Which data is authoritative, and which are only copies?",
271
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
272
+ },
273
+ {
274
+ "id": "DD-05-Q3",
275
+ "text": "What does the model forbid (impossible states or combinations)?"
276
+ },
277
+ {
278
+ "id": "DD-05-Q4",
279
+ "text": "Where do the rules come from (law, policy, physics, the business), and how are they cited?"
280
+ },
281
+ {
282
+ "id": "DD-05-Q5",
283
+ "text": "Which rules have exceptions, and how is priority between rules decided?"
284
+ }
285
+ ],
286
+ "evidence": {
287
+ "frontmatter_types": [
288
+ "spec"
289
+ ],
290
+ "title_patterns": [
291
+ "invariant",
292
+ "forbid",
293
+ "rules",
294
+ "constraints",
295
+ "validity"
296
+ ],
297
+ "path_globs": []
298
+ },
299
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
300
+ "sources": []
301
+ },
302
+ {
303
+ "id": "DD-06",
304
+ "layer": "domain",
305
+ "stage": "D2 Model",
306
+ "name": "States, events and lifecycles",
307
+ "aliases": [],
308
+ "purpose": "Describes how things come into being, change and end, and which events cause each change.",
309
+ "required_when": "always",
310
+ "depends_on": [],
311
+ "questions": [
312
+ {
313
+ "id": "DD-06-Q1",
314
+ "text": "What is the lifecycle of each primary thing, from creation to end?"
315
+ },
316
+ {
317
+ "id": "DD-06-Q2",
318
+ "text": "Which events cause each transition, and who or what triggers them?"
319
+ },
320
+ {
321
+ "id": "DD-06-Q3",
322
+ "text": "Which changes happen with no actor (time passing, deadlines, deemed effects)?"
323
+ },
324
+ {
325
+ "id": "DD-06-Q4",
326
+ "text": "How is history kept: what was true when, and what was known when?"
327
+ },
328
+ {
329
+ "id": "DD-06-Q5",
330
+ "text": "How are mistakes corrected without erasing history?"
331
+ }
332
+ ],
333
+ "evidence": {
334
+ "frontmatter_types": [
335
+ "spec"
336
+ ],
337
+ "title_patterns": [
338
+ "lifecycle",
339
+ "states",
340
+ "transitions",
341
+ "events",
342
+ "tenure",
343
+ "deadline",
344
+ "versioning"
345
+ ],
346
+ "path_globs": []
347
+ },
348
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
349
+ "sources": []
350
+ },
351
+ {
352
+ "id": "DD-07",
353
+ "layer": "domain",
354
+ "stage": "D2 Model",
355
+ "name": "Domain policies",
356
+ "aliases": [],
357
+ "purpose": "Records the cross-cutting domain rules that shape every feature: provenance, trust, authority, correction, privacy at the level of meaning.",
358
+ "required_when": "always",
359
+ "depends_on": [],
360
+ "questions": [
361
+ {
362
+ "id": "DD-07-Q1",
363
+ "text": "How does every fact record where it came from and how much to trust it?"
364
+ },
365
+ {
366
+ "id": "DD-07-Q2",
367
+ "text": "Who has authority to assert, change or correct each kind of fact?"
368
+ },
369
+ {
370
+ "id": "DD-07-Q3",
371
+ "text": "How are disagreements between sources represented?"
372
+ },
373
+ {
374
+ "id": "DD-07-Q4",
375
+ "text": "Which domain-level privacy and access rules apply (who may know what)?"
376
+ }
377
+ ],
378
+ "evidence": {
379
+ "frontmatter_types": [
380
+ "spec",
381
+ "policy"
382
+ ],
383
+ "title_patterns": [
384
+ "provenance",
385
+ "policy",
386
+ "trust",
387
+ "correction",
388
+ "authority"
389
+ ],
390
+ "path_globs": []
391
+ },
392
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
393
+ "sources": []
394
+ },
395
+ {
396
+ "id": "DD-08",
397
+ "layer": "domain",
398
+ "stage": "D3 Vary",
399
+ "name": "Variation points and layers",
400
+ "aliases": [],
401
+ "purpose": "Separates what is universal in the domain from what varies by jurisdiction, customer, market or version, so variation doesn't leak into the core.",
402
+ "required_when": "always",
403
+ "depends_on": [],
404
+ "questions": [
405
+ {
406
+ "id": "DD-08-Q1",
407
+ "text": "Which assumptions are specific to one context (country, customer, market), and where do they live?"
408
+ },
409
+ {
410
+ "id": "DD-08-Q2",
411
+ "text": "What can be replaced without changing the core?"
412
+ },
413
+ {
414
+ "id": "DD-08-Q3",
415
+ "text": "Which variants are known now, and what is the first one to test?"
416
+ }
417
+ ],
418
+ "evidence": {
419
+ "frontmatter_types": [
420
+ "spec",
421
+ "research"
422
+ ],
423
+ "title_patterns": [
424
+ "layer",
425
+ "jurisdiction",
426
+ "replaceable",
427
+ "variant",
428
+ "assumptions"
429
+ ],
430
+ "path_globs": []
431
+ },
432
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
433
+ "sources": []
434
+ },
435
+ {
436
+ "id": "DD-09",
437
+ "layer": "domain",
438
+ "stage": "D4 Prove",
439
+ "name": "Worked examples and edge cases",
440
+ "aliases": [],
441
+ "purpose": "Shows the model expressing real and adversarial cases, so gaps appear before code.",
442
+ "required_when": "always",
443
+ "depends_on": [],
444
+ "questions": [
445
+ {
446
+ "id": "DD-09-Q1",
447
+ "text": "Can each primary operation be expressed with the model, using real examples?"
448
+ },
449
+ {
450
+ "id": "DD-09-Q2",
451
+ "text": "Which edge cases are hardest (acting, contested, retroactive, partial evidence), and how are they expressed?"
452
+ },
453
+ {
454
+ "id": "DD-09-Q3",
455
+ "text": "Which cases could not be expressed, and what changed as a result?"
456
+ }
457
+ ],
458
+ "evidence": {
459
+ "frontmatter_types": [
460
+ "spec",
461
+ "verification-log"
462
+ ],
463
+ "title_patterns": [
464
+ "worked example",
465
+ "test case",
466
+ "edge case",
467
+ "examples"
468
+ ],
469
+ "path_globs": []
470
+ },
471
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
472
+ "sources": []
473
+ },
474
+ {
475
+ "id": "DD-10",
476
+ "layer": "domain",
477
+ "stage": "D4 Prove",
478
+ "name": "Domain acceptance test on real data",
479
+ "aliases": [],
480
+ "purpose": "Runs the model against real data and records what it could and couldn't decide.",
481
+ "required_when": "always",
482
+ "depends_on": [],
483
+ "questions": [
484
+ {
485
+ "id": "DD-10-Q1",
486
+ "text": "Which real cases were encoded, and from which sources?"
487
+ },
488
+ {
489
+ "id": "DD-10-Q2",
490
+ "text": "Did every case fit the model without a new primitive?"
491
+ },
492
+ {
493
+ "id": "DD-10-Q3",
494
+ "text": "Which questions came out undecided, and why (missing evidence, silent rules, disagreement)?"
495
+ },
496
+ {
497
+ "id": "DD-10-Q4",
498
+ "text": "Which spec revisions did the test force?"
499
+ }
500
+ ],
501
+ "evidence": {
502
+ "frontmatter_types": [
503
+ "verification-log"
504
+ ],
505
+ "title_patterns": [
506
+ "acceptance test",
507
+ "test run",
508
+ "results"
509
+ ],
510
+ "path_globs": []
511
+ },
512
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
513
+ "sources": []
514
+ },
515
+ {
516
+ "id": "DD-11",
517
+ "layer": "domain",
518
+ "stage": "D5 Ratify",
519
+ "name": "Domain decision record and ratification",
520
+ "aliases": [],
521
+ "purpose": "Records which domain decisions are binding, with conditions and holds, so systems design builds on settled ground.",
522
+ "required_when": "always",
523
+ "depends_on": [],
524
+ "questions": [
525
+ {
526
+ "id": "DD-11-Q1",
527
+ "text": "Which domain specs are ratified, and which are held, and why?"
528
+ },
529
+ {
530
+ "id": "DD-11-Q2",
531
+ "text": "Which decisions are hardest to reverse?"
532
+ },
533
+ {
534
+ "id": "DD-11-Q3",
535
+ "text": "What conditions remain on ratified specs?"
536
+ }
537
+ ],
538
+ "evidence": {
539
+ "frontmatter_types": [
540
+ "planning",
541
+ "architecture-decision"
542
+ ],
543
+ "title_patterns": [
544
+ "ratification",
545
+ "decision ledger",
546
+ "ratified",
547
+ "in-force"
548
+ ],
549
+ "path_globs": []
550
+ },
551
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
552
+ "sources": []
553
+ },
554
+ {
555
+ "id": "DD-12",
556
+ "layer": "domain",
557
+ "stage": "D2 Model",
558
+ "name": "Capability map (categories and subdomain types)",
559
+ "aliases": [
560
+ "capability categories",
561
+ "business capability map",
562
+ "subdomain map"
563
+ ],
564
+ "purpose": "Groups what the scope does into categories by job, sorts each as core, supporting or generic, and orders them by dependency, so architecture boundaries, investment, ownership, sequencing, packaging and comparison all rest on one map.",
565
+ "required_when": "always",
566
+ "depends_on": [
567
+ "DD-01",
568
+ "DD-02"
569
+ ],
570
+ "questions": [
571
+ {
572
+ "id": "DD-12-Q1",
573
+ "text": "What jobs does this do, grouped into categories where each has one job, its own vocabulary and the facts it mainly changes?",
574
+ "source": "Domain-driven design: bounded contexts (Evans, 2003)"
575
+ },
576
+ {
577
+ "id": "DD-12-Q2",
578
+ "text": "Which categories are core (differentiating: build), supporting (necessary: build simply) and generic (solved: buy or integrate), and why each?",
579
+ "source": "Domain-driven design: core, supporting and generic subdomains"
580
+ },
581
+ {
582
+ "id": "DD-12-Q3",
583
+ "text": "How do the categories depend on each other, and what order does that impose on the roadmap?"
584
+ },
585
+ {
586
+ "id": "DD-12-Q4",
587
+ "text": "What is deliberately not a category (integrated or excluded), and what decision would add one?"
588
+ },
589
+ {
590
+ "id": "DD-12-Q5",
591
+ "text": "How will we know each category works: one success measure per category?",
592
+ "source": "Business capability mapping (enterprise architecture)"
593
+ },
594
+ {
595
+ "id": "DD-12-Q6",
596
+ "text": "Who owns each category now, and who would own it as the team grows?"
597
+ }
598
+ ],
599
+ "evidence": {
600
+ "frontmatter_types": [
601
+ "spec",
602
+ "planning",
603
+ "architecture-spec",
604
+ "research"
605
+ ],
606
+ "title_patterns": [
607
+ "capability map",
608
+ "capability categor",
609
+ "categories",
610
+ "subdomain",
611
+ "product architecture",
612
+ "core, supporting"
613
+ ],
614
+ "path_globs": []
615
+ },
616
+ "done_when": "Every category has a job, a subdomain type, a build-or-integrate decision, its dependencies, a success measure and an owner; exclusions are listed.",
617
+ "sources": [
618
+ "Evans, Domain-Driven Design (2003): subdomains and bounded contexts",
619
+ "Business capability mapping (BIZBOK, TOGAF)"
620
+ ]
621
+ },
622
+ {
623
+ "id": "PA-01",
624
+ "layer": "product",
625
+ "stage": "P1 Structure",
626
+ "name": "Product structure and naming",
627
+ "aliases": [
628
+ "product architecture",
629
+ "platform, editions and suites"
630
+ ],
631
+ "purpose": "Fixes the levels of the product (platform, edition, suite or equivalents), what each is named, which roles use which part, and what is never sold or named as a product.",
632
+ "required_when": "characteristics:C-19",
633
+ "depends_on": [
634
+ "DD-02",
635
+ "DD-12"
636
+ ],
637
+ "questions": [
638
+ {
639
+ "id": "PA-01-Q1",
640
+ "text": "What are the levels of the product (for example platform, edition, suite, capability), and which levels carry names?"
641
+ },
642
+ {
643
+ "id": "PA-01-Q2",
644
+ "text": "Which roles use which part, and which capability categories does each part draw on?"
645
+ },
646
+ {
647
+ "id": "PA-01-Q3",
648
+ "text": "How do permissions follow from roles or offices, and where is that specified?"
649
+ },
650
+ {
651
+ "id": "PA-01-Q4",
652
+ "text": "What is never sold or named as a product, and why?"
653
+ },
654
+ {
655
+ "id": "PA-01-Q5",
656
+ "text": "Which other editions or markets are recognised but deferred, and what triggers them?"
657
+ }
658
+ ],
659
+ "evidence": {
660
+ "frontmatter_types": [
661
+ "planning",
662
+ "spec"
663
+ ],
664
+ "title_patterns": [
665
+ "product architecture",
666
+ "product structure",
667
+ "editions",
668
+ "suites",
669
+ "naming"
670
+ ],
671
+ "path_globs": []
672
+ },
673
+ "done_when": "Levels, names, role-to-part mapping, permission basis and exclusions are written and linked from the capability map.",
674
+ "sources": []
675
+ },
676
+ {
677
+ "id": "PA-02",
678
+ "layer": "product",
679
+ "stage": "P2 Market",
680
+ "name": "Packaging and buyer mapping",
681
+ "aliases": [
682
+ "packaging",
683
+ "go-to-market structure",
684
+ "buyer mapping"
685
+ ],
686
+ "purpose": "States what the buyer buys and who buys versus who uses, maps each capability category to the budget line or procurement category it is bought from, and how adoption expands.",
687
+ "required_when": "entity-class:business|hybrid",
688
+ "depends_on": [
689
+ "DD-12",
690
+ "PA-01"
691
+ ],
692
+ "questions": [
693
+ {
694
+ "id": "PA-02-Q1",
695
+ "text": "What unit does the buyer buy, and who buys versus who uses?"
696
+ },
697
+ {
698
+ "id": "PA-02-Q2",
699
+ "text": "Which budget line or procurement category does each capability category map to?"
700
+ },
701
+ {
702
+ "id": "PA-02-Q3",
703
+ "text": "How does adoption expand after the first purchase?"
704
+ },
705
+ {
706
+ "id": "PA-02-Q4",
707
+ "text": "What is included, what is integrated from others, and what is out of scope?"
708
+ },
709
+ {
710
+ "id": "PA-02-Q5",
711
+ "text": "Where is pricing decided, and on what value measure?"
712
+ }
713
+ ],
714
+ "evidence": {
715
+ "frontmatter_types": [
716
+ "planning",
717
+ "research"
718
+ ],
719
+ "title_patterns": [
720
+ "packaging",
721
+ "pricing",
722
+ "go-to-market",
723
+ "buyer",
724
+ "procurement",
725
+ "product architecture"
726
+ ],
727
+ "path_globs": []
728
+ },
729
+ "done_when": "Every capability category maps to a buyer category or is marked not sold; the buy/use split and expansion path are written.",
730
+ "sources": []
731
+ },
732
+ {
733
+ "id": "PA-03",
734
+ "layer": "product",
735
+ "stage": "P2 Market",
736
+ "name": "Competitive landscape by category",
737
+ "aliases": [
738
+ "competitive analysis",
739
+ "comparison charts",
740
+ "competitor landscape"
741
+ ],
742
+ "purpose": "Lists the alternatives buyers consider in each capability category, compares on verifiable dimensions with sourced and dated claims, and states which category is positioned as new.",
743
+ "required_when": "entity-class:business|hybrid",
744
+ "depends_on": [
745
+ "DD-12",
746
+ "PA-02"
747
+ ],
748
+ "questions": [
749
+ {
750
+ "id": "PA-03-Q1",
751
+ "text": "What alternatives does a buyer consider in each category, including doing nothing or doing it by hand?"
752
+ },
753
+ {
754
+ "id": "PA-03-Q2",
755
+ "text": "Which verifiable dimensions does each category's comparison use?"
756
+ },
757
+ {
758
+ "id": "PA-03-Q3",
759
+ "text": "Where are we weaker, per category?"
760
+ },
761
+ {
762
+ "id": "PA-03-Q4",
763
+ "text": "Is every competitor claim sourced and dated, and which are still unverified?"
764
+ },
765
+ {
766
+ "id": "PA-03-Q5",
767
+ "text": "Which category do we position as new rather than compete within, and why?",
768
+ "source": "Category design (Play Bigger, 2016)"
769
+ }
770
+ ],
771
+ "evidence": {
772
+ "frontmatter_types": [
773
+ "research",
774
+ "planning"
775
+ ],
776
+ "title_patterns": [
777
+ "competitive",
778
+ "competitor",
779
+ "landscape",
780
+ "comparison"
781
+ ],
782
+ "path_globs": []
783
+ },
784
+ "done_when": "One comparison per category with sourced, dated cells (or 'not verified'), weaknesses stated, and the positioning decided.",
785
+ "sources": []
786
+ },
787
+ {
788
+ "id": "XD-01",
789
+ "layer": "experience",
790
+ "stage": "X1 Understand",
791
+ "name": "Users, contexts and jobs",
792
+ "aliases": [
793
+ "personas",
794
+ "user profiles",
795
+ "jobs to be done",
796
+ "job stories"
797
+ ],
798
+ "purpose": "Names the people who use the scope, the setting and constraints they work under, and the jobs they are trying to get done, so every later design choice serves a named person and job.",
799
+ "required_when": "always",
800
+ "depends_on": [
801
+ "DD-02",
802
+ "PA-01"
803
+ ],
804
+ "questions": [
805
+ {
806
+ "id": "XD-01-Q1",
807
+ "text": "Who uses this, grouped by what they are trying to get done rather than by demographics?",
808
+ "source": "Jobs to be done (Christensen; Ulwick); job stories (Klement)"
809
+ },
810
+ {
811
+ "id": "XD-01-Q2",
812
+ "text": "For each group: what jobs, how often, under what pressure (deadlines, legal exposure, interruptions), and with what tools today?"
813
+ },
814
+ {
815
+ "id": "XD-01-Q3",
816
+ "text": "What setting do they work in: device, connectivity, time available, skill with software, who helps them?"
817
+ },
818
+ {
819
+ "id": "XD-01-Q4",
820
+ "text": "What does success look like to them in their own terms, and what does failure cost them?"
821
+ },
822
+ {
823
+ "id": "XD-01-Q5",
824
+ "text": "Which of these are known from evidence and which are assumptions, and how will each assumption be checked?"
825
+ },
826
+ {
827
+ "id": "XD-01-Q6",
828
+ "text": "For each user group, which parts of their job does the scope not cover, and is each built, integrated (with its acts or data captured and a place in the product) or excluded with a reason? Measure the job from evidence (job descriptions, duties), not from the features planned.",
829
+ "source": "Founder direction 2026-10-11 (full-coverage rule); the reference system job coverage audit"
830
+ }
831
+ ],
832
+ "evidence": {
833
+ "frontmatter_types": [
834
+ "research",
835
+ "spec",
836
+ "design",
837
+ "planning"
838
+ ],
839
+ "title_patterns": [
840
+ "users and jobs",
841
+ "personas",
842
+ "jobs to be done",
843
+ "job stories",
844
+ "user profiles"
845
+ ],
846
+ "path_globs": []
847
+ },
848
+ "done_when": "Every user group has its jobs, frequency, setting, success and failure in its own terms, with each claim marked evidenced or assumed; every component of every job has a home: built, integrated (acts captured, reachable from the product) or excluded with a reason.",
849
+ "sources": [
850
+ "Christensen et al., Competing Against Luck (2016)",
851
+ "Klement, When Coffee and Kale Compete (2016)"
852
+ ]
853
+ },
854
+ {
855
+ "id": "XD-02",
856
+ "layer": "experience",
857
+ "stage": "X1 Understand",
858
+ "name": "User research plan and evidence",
859
+ "aliases": [
860
+ "research plan",
861
+ "discovery research",
862
+ "usability research"
863
+ ],
864
+ "purpose": "States what must be learned about users, how (secondary research, observation, interviews, usability testing), under what constraints, and records what was found.",
865
+ "required_when": "always",
866
+ "depends_on": [
867
+ "XD-01"
868
+ ],
869
+ "questions": [
870
+ {
871
+ "id": "XD-02-Q1",
872
+ "text": "What do we need to learn, and which design decisions does each question unblock?"
873
+ },
874
+ {
875
+ "id": "XD-02-Q2",
876
+ "text": "Which methods answer each question (secondary sources, observation, contextual inquiry, interviews, usability tests), and why those?",
877
+ "source": "Contextual inquiry (Beyer and Holtzblatt); Nielsen Norman Group method selection"
878
+ },
879
+ {
880
+ "id": "XD-02-Q3",
881
+ "text": "What constraints apply (contact, consent, privacy, cost), and what can be learned within them?"
882
+ },
883
+ {
884
+ "id": "XD-02-Q4",
885
+ "text": "What has been found so far, with sources, and which assumptions in XD-01 has it confirmed or overturned?"
886
+ },
887
+ {
888
+ "id": "XD-02-Q5",
889
+ "text": "When is research enough to proceed, and what would reopen it?"
890
+ }
891
+ ],
892
+ "evidence": {
893
+ "frontmatter_types": [
894
+ "research",
895
+ "spec",
896
+ "design",
897
+ "planning"
898
+ ],
899
+ "title_patterns": [
900
+ "user research",
901
+ "research plan",
902
+ "discovery research",
903
+ "usability research"
904
+ ],
905
+ "path_globs": []
906
+ },
907
+ "done_when": "Each open question has a method, a constraint check and a status; findings are sourced and linked back to the assumptions they settle.",
908
+ "sources": [
909
+ "Beyer and Holtzblatt, Contextual Design (1998)"
910
+ ]
911
+ },
912
+ {
913
+ "id": "XD-03",
914
+ "layer": "experience",
915
+ "stage": "X1 Understand",
916
+ "name": "Users' vocabulary and mental models",
917
+ "aliases": [
918
+ "mental models",
919
+ "user language",
920
+ "terminology map"
921
+ ],
922
+ "purpose": "Maps the words and mental models users bring onto the domain's ubiquitous language, so the interface speaks their language without corrupting the model.",
923
+ "required_when": "always",
924
+ "depends_on": [
925
+ "DD-03",
926
+ "XD-01"
927
+ ],
928
+ "questions": [
929
+ {
930
+ "id": "XD-03-Q1",
931
+ "text": "What words do users use for each domain concept, and where do they differ from the glossary?"
932
+ },
933
+ {
934
+ "id": "XD-03-Q2",
935
+ "text": "What mental model does each user group hold of how the work happens, and where does it diverge from the domain model?",
936
+ "source": "Mental models (Young, 2008)"
937
+ },
938
+ {
939
+ "id": "XD-03-Q3",
940
+ "text": "Which domain terms must never be shown to users, and which user terms must never enter the model?"
941
+ },
942
+ {
943
+ "id": "XD-03-Q4",
944
+ "text": "Where will a user's existing model mislead them in this system, and how is that corrected?"
945
+ }
946
+ ],
947
+ "evidence": {
948
+ "frontmatter_types": [
949
+ "research",
950
+ "spec",
951
+ "design",
952
+ "planning"
953
+ ],
954
+ "title_patterns": [
955
+ "mental model",
956
+ "vocabulary map",
957
+ "terminology map",
958
+ "user language"
959
+ ],
960
+ "path_globs": []
961
+ },
962
+ "done_when": "Every domain concept a user meets has its user-facing term and any divergence of mental model, with the correction.",
963
+ "sources": [
964
+ "Young, Mental Models (2008)"
965
+ ]
966
+ },
967
+ {
968
+ "id": "XD-04",
969
+ "layer": "experience",
970
+ "stage": "X2 Structure",
971
+ "name": "Key journeys and service blueprint",
972
+ "aliases": [
973
+ "user journeys",
974
+ "journey map",
975
+ "service blueprint",
976
+ "user flows"
977
+ ],
978
+ "purpose": "Describes the journeys users take end to end, across people, time and systems, showing what the user does, what happens behind the scenes, and where the system helps, checks or waits.",
979
+ "required_when": "always",
980
+ "depends_on": [
981
+ "XD-01",
982
+ "DD-06"
983
+ ],
984
+ "questions": [
985
+ {
986
+ "id": "XD-04-Q1",
987
+ "text": "Which journeys matter most (by frequency, consequence and job), and where does each begin and end?"
988
+ },
989
+ {
990
+ "id": "XD-04-Q2",
991
+ "text": "For each, what are the steps, who acts at each, what the user sees (frontstage) and what happens behind it (backstage)?",
992
+ "source": "Service blueprinting (Shostack, 1984; Bitner et al., 2008)"
993
+ },
994
+ {
995
+ "id": "XD-04-Q3",
996
+ "text": "Where are the deadlines, handoffs, waits and points of failure, and what must the user know at each?"
997
+ },
998
+ {
999
+ "id": "XD-04-Q4",
1000
+ "text": "Where does the system check, remind or record, and where must it stay silent (decisions that belong to the user)?"
1001
+ },
1002
+ {
1003
+ "id": "XD-04-Q5",
1004
+ "text": "Which journeys cross into other institutions or other users, and how is the handoff experienced?"
1005
+ }
1006
+ ],
1007
+ "evidence": {
1008
+ "frontmatter_types": [
1009
+ "research",
1010
+ "spec",
1011
+ "design",
1012
+ "planning"
1013
+ ],
1014
+ "title_patterns": [
1015
+ "journey map",
1016
+ "user journey",
1017
+ "service blueprint",
1018
+ "user flow"
1019
+ ],
1020
+ "path_globs": []
1021
+ },
1022
+ "done_when": "The key journeys are mapped front and back stage, with actors, deadlines, failure points and the system's role at each step.",
1023
+ "sources": [
1024
+ "Shostack, Designing Services That Deliver (1984)",
1025
+ "Bitner, Ostrom and Morgan, Service Blueprinting (2008)"
1026
+ ]
1027
+ },
1028
+ {
1029
+ "id": "XD-05",
1030
+ "layer": "experience",
1031
+ "stage": "X2 Structure",
1032
+ "name": "Object model and information architecture",
1033
+ "aliases": [
1034
+ "information architecture",
1035
+ "OOUX object map",
1036
+ "navigation",
1037
+ "sitemap"
1038
+ ],
1039
+ "purpose": "Derives the objects users work with from the domain model, their relationships and the actions on each, and from them the structure of places, navigation and search.",
1040
+ "required_when": "always",
1041
+ "depends_on": [
1042
+ "DD-04",
1043
+ "XD-04"
1044
+ ],
1045
+ "questions": [
1046
+ {
1047
+ "id": "XD-05-Q1",
1048
+ "text": "Which domain objects do users see and act on, and how do they relate from the user's point of view?",
1049
+ "source": "Object-oriented UX (Prater)"
1050
+ },
1051
+ {
1052
+ "id": "XD-05-Q2",
1053
+ "text": "What actions does each user group take on each object, and which actions are consequential?"
1054
+ },
1055
+ {
1056
+ "id": "XD-05-Q3",
1057
+ "text": "What are the places (views, routes) and how does a user move between them; what is always reachable?"
1058
+ },
1059
+ {
1060
+ "id": "XD-05-Q4",
1061
+ "text": "How do users find a specific thing (search, filters, browse), and by which attributes?"
1062
+ },
1063
+ {
1064
+ "id": "XD-05-Q5",
1065
+ "text": "Which structures are shared across user groups and which differ?"
1066
+ }
1067
+ ],
1068
+ "evidence": {
1069
+ "frontmatter_types": [
1070
+ "research",
1071
+ "spec",
1072
+ "design",
1073
+ "planning"
1074
+ ],
1075
+ "title_patterns": [
1076
+ "information architecture",
1077
+ "object map",
1078
+ "ooux",
1079
+ "sitemap",
1080
+ "navigation model"
1081
+ ],
1082
+ "path_globs": []
1083
+ },
1084
+ "done_when": "Every user-facing object has its relationships, actions per user group and places; navigation and finding are specified.",
1085
+ "sources": [
1086
+ "Prater, Object-Oriented UX (2020)",
1087
+ "Rosenfeld, Morville and Arango, Information Architecture (4th ed.)"
1088
+ ]
1089
+ },
1090
+ {
1091
+ "id": "XD-06",
1092
+ "layer": "experience",
1093
+ "stage": "X3 Behave",
1094
+ "name": "State, feedback and trust semantics",
1095
+ "aliases": [
1096
+ "empty and error states",
1097
+ "state table",
1098
+ "trust design",
1099
+ "uncertainty display"
1100
+ ],
1101
+ "purpose": "Fixes what every state means to the user and how it is shown: empty, loading, partial, error, permission and success, plus the domain's own states (uncertainty, disagreement, provenance), so the interface never implies more certainty than the system has.",
1102
+ "required_when": "always",
1103
+ "depends_on": [
1104
+ "XD-05",
1105
+ "DD-07"
1106
+ ],
1107
+ "questions": [
1108
+ {
1109
+ "id": "XD-06-Q1",
1110
+ "text": "For each object and view, what are its states (empty, loading, partial, error, no permission, success) and what does the user see and do in each?"
1111
+ },
1112
+ {
1113
+ "id": "XD-06-Q2",
1114
+ "text": "Which domain states must be shown (for example findings, uncertainty and its reasons, disagreement between sources, provenance), and how?"
1115
+ },
1116
+ {
1117
+ "id": "XD-06-Q3",
1118
+ "text": "How is the difference between what the system knows, infers and cannot know made visible?",
1119
+ "source": "Uncertainty visualisation; provenance display"
1120
+ },
1121
+ {
1122
+ "id": "XD-06-Q4",
1123
+ "text": "What does the system promise, and how does the user see whether the promise was kept?"
1124
+ },
1125
+ {
1126
+ "id": "XD-06-Q5",
1127
+ "text": "How does a user recover from each error, and what is never silent?"
1128
+ }
1129
+ ],
1130
+ "evidence": {
1131
+ "frontmatter_types": [
1132
+ "research",
1133
+ "spec",
1134
+ "design",
1135
+ "planning"
1136
+ ],
1137
+ "title_patterns": [
1138
+ "state table",
1139
+ "empty and error",
1140
+ "trust semantics",
1141
+ "uncertainty display",
1142
+ "states and feedback"
1143
+ ],
1144
+ "path_globs": []
1145
+ },
1146
+ "done_when": "Every view has its full state table; domain uncertainty and provenance have a specified presentation; recovery is defined for each error.",
1147
+ "sources": []
1148
+ },
1149
+ {
1150
+ "id": "XD-07",
1151
+ "layer": "experience",
1152
+ "stage": "X3 Behave",
1153
+ "name": "Content and language rules",
1154
+ "aliases": [
1155
+ "content design",
1156
+ "voice for product copy",
1157
+ "microcopy rules"
1158
+ ],
1159
+ "purpose": "Sets the rules for what the product says: plain language, tone, required labels and disclaimers, forbidden phrasings, and how legal or sensitive findings are worded.",
1160
+ "required_when": "always",
1161
+ "depends_on": [
1162
+ "XD-03",
1163
+ "XD-06"
1164
+ ],
1165
+ "questions": [
1166
+ {
1167
+ "id": "XD-07-Q1",
1168
+ "text": "What reading level and tone does each user group need?"
1169
+ },
1170
+ {
1171
+ "id": "XD-07-Q2",
1172
+ "text": "Which labels, disclaimers or notices are required, where, and why?"
1173
+ },
1174
+ {
1175
+ "id": "XD-07-Q3",
1176
+ "text": "Which phrasings are forbidden (for example statements about people rather than records), and what replaces them?"
1177
+ },
1178
+ {
1179
+ "id": "XD-07-Q4",
1180
+ "text": "How are numbers, dates, deadlines, citations and uncertainty written?"
1181
+ },
1182
+ {
1183
+ "id": "XD-07-Q5",
1184
+ "text": "Who reviews sensitive content before it ships?"
1185
+ }
1186
+ ],
1187
+ "evidence": {
1188
+ "frontmatter_types": [
1189
+ "research",
1190
+ "spec",
1191
+ "design",
1192
+ "planning"
1193
+ ],
1194
+ "title_patterns": [
1195
+ "content design",
1196
+ "content rules",
1197
+ "microcopy",
1198
+ "copy rules",
1199
+ "content and language"
1200
+ ],
1201
+ "path_globs": []
1202
+ },
1203
+ "done_when": "Rules for tone, required notices, forbidden phrasings and formatting are written with examples; the review owner is named.",
1204
+ "sources": [
1205
+ "Plain language guidelines (plainlanguage.gov)"
1206
+ ]
1207
+ },
1208
+ {
1209
+ "id": "XD-08",
1210
+ "layer": "experience",
1211
+ "stage": "X3 Behave",
1212
+ "name": "Accessibility and inclusion commitments",
1213
+ "aliases": [
1214
+ "accessibility",
1215
+ "WCAG conformance",
1216
+ "inclusive design"
1217
+ ],
1218
+ "purpose": "Commits to an accessibility standard and the inclusion needs of the actual users, including legal obligations, before interface work starts.",
1219
+ "required_when": "always",
1220
+ "depends_on": [
1221
+ "XD-01"
1222
+ ],
1223
+ "questions": [
1224
+ {
1225
+ "id": "XD-08-Q1",
1226
+ "text": "Which standard and level is committed to (for example WCAG 2.2 AA), and which laws or procurement rules require it?",
1227
+ "source": "W3C WCAG 2.2"
1228
+ },
1229
+ {
1230
+ "id": "XD-08-Q2",
1231
+ "text": "What assistive technologies, devices and conditions must be supported for these users?"
1232
+ },
1233
+ {
1234
+ "id": "XD-08-Q3",
1235
+ "text": "What inclusion needs follow from the users' settings (language, literacy, bandwidth, age)?"
1236
+ },
1237
+ {
1238
+ "id": "XD-08-Q4",
1239
+ "text": "How is conformance verified, and how often?"
1240
+ }
1241
+ ],
1242
+ "evidence": {
1243
+ "frontmatter_types": [
1244
+ "research",
1245
+ "spec",
1246
+ "design",
1247
+ "planning"
1248
+ ],
1249
+ "title_patterns": [
1250
+ "accessibility",
1251
+ "wcag",
1252
+ "inclusive design"
1253
+ ],
1254
+ "path_globs": []
1255
+ },
1256
+ "done_when": "The standard, its legal basis, supported technologies, inclusion needs and verification method are written.",
1257
+ "sources": [
1258
+ "W3C, Web Content Accessibility Guidelines 2.2"
1259
+ ]
1260
+ },
1261
+ {
1262
+ "id": "XD-09",
1263
+ "layer": "experience",
1264
+ "stage": "X4 Prove",
1265
+ "name": "Experience acceptance test",
1266
+ "aliases": [
1267
+ "usability test plan",
1268
+ "task-based evaluation",
1269
+ "experience test"
1270
+ ],
1271
+ "purpose": "Proves the experience design works: users (or, before contact, scenario walkthroughs) complete the key jobs on real data, with measures and pass criteria set in advance.",
1272
+ "required_when": "always",
1273
+ "depends_on": [
1274
+ "XD-04",
1275
+ "XD-06"
1276
+ ],
1277
+ "questions": [
1278
+ {
1279
+ "id": "XD-09-Q1",
1280
+ "text": "Which tasks are tested, drawn from the key journeys, and what counts as success for each?",
1281
+ "source": "Task-based usability testing; ISO 9241-11 (effectiveness, efficiency, satisfaction)"
1282
+ },
1283
+ {
1284
+ "id": "XD-09-Q2",
1285
+ "text": "What is measured (task success, time, errors, recovery, comprehension of findings), and what are the pass thresholds?"
1286
+ },
1287
+ {
1288
+ "id": "XD-09-Q3",
1289
+ "text": "On what real data is it run, and with whom (users, proxies, expert walkthrough), given the research constraints?"
1290
+ },
1291
+ {
1292
+ "id": "XD-09-Q4",
1293
+ "text": "What did it find, and which documents did it revise?"
1294
+ }
1295
+ ],
1296
+ "evidence": {
1297
+ "frontmatter_types": [
1298
+ "research",
1299
+ "spec",
1300
+ "design",
1301
+ "planning"
1302
+ ],
1303
+ "title_patterns": [
1304
+ "usability test",
1305
+ "experience acceptance",
1306
+ "task-based evaluation"
1307
+ ],
1308
+ "path_globs": []
1309
+ },
1310
+ "done_when": "Tasks, measures, thresholds, participants and real data are fixed in advance; results and resulting revisions are recorded.",
1311
+ "sources": [
1312
+ "ISO 9241-11:2018",
1313
+ "Nielsen, Usability Engineering (1993)"
1314
+ ]
1315
+ },
1316
+ {
1317
+ "id": "XD-10",
1318
+ "layer": "experience",
1319
+ "stage": "X4 Prove",
1320
+ "name": "Experience decision record",
1321
+ "aliases": [
1322
+ "experience decisions",
1323
+ "UX ratification"
1324
+ ],
1325
+ "purpose": "Records the binding experience decisions and their ratification, so later interface and systems work can rely on them.",
1326
+ "required_when": "always",
1327
+ "depends_on": [
1328
+ "XD-09"
1329
+ ],
1330
+ "questions": [
1331
+ {
1332
+ "id": "XD-10-Q1",
1333
+ "text": "Which experience decisions are binding, and on what evidence?"
1334
+ },
1335
+ {
1336
+ "id": "XD-10-Q2",
1337
+ "text": "Which remain assumptions to be tested with real users, and when?"
1338
+ },
1339
+ {
1340
+ "id": "XD-10-Q3",
1341
+ "text": "Who ratified them, and under what conditions?"
1342
+ }
1343
+ ],
1344
+ "evidence": {
1345
+ "frontmatter_types": [
1346
+ "planning",
1347
+ "spec"
1348
+ ],
1349
+ "title_patterns": [
1350
+ "experience decision",
1351
+ "ux decision"
1352
+ ],
1353
+ "path_globs": []
1354
+ },
1355
+ "done_when": "Binding decisions, open assumptions and ratification are recorded.",
1356
+ "sources": []
1357
+ },
1358
+ {
1359
+ "id": "UI-01",
1360
+ "layer": "interface",
1361
+ "stage": "U1 Method",
1362
+ "name": "Interface method decision",
1363
+ "aliases": [
1364
+ "UI methodology",
1365
+ "design method ADR"
1366
+ ],
1367
+ "purpose": "Chooses how the interface will be designed and built: what is explored and how, when designs are fixed, which artifacts become authoritative, and which tools are used.",
1368
+ "required_when": "always",
1369
+ "depends_on": [
1370
+ "XD-10"
1371
+ ],
1372
+ "questions": [
1373
+ {
1374
+ "id": "UI-01-Q1",
1375
+ "text": "Which parts of the interface are still being discovered, and which are settled enough to specify?"
1376
+ },
1377
+ {
1378
+ "id": "UI-01-Q2",
1379
+ "text": "Which method fits each part (explore by prototype; specify by contract, scenarios or fidelity ladders), checked against the methodology catalog?",
1380
+ "source": "Everything Ecosystem methodology catalog"
1381
+ },
1382
+ {
1383
+ "id": "UI-01-Q3",
1384
+ "text": "Which artifact is the source of truth for each part, and how is it kept current?"
1385
+ },
1386
+ {
1387
+ "id": "UI-01-Q4",
1388
+ "text": "What fidelity sequence is followed (sketch, wireframe, prototype, production), and what gates each step?"
1389
+ },
1390
+ {
1391
+ "id": "UI-01-Q5",
1392
+ "text": "Which tools are used, and what is the cost of iterating with them?"
1393
+ }
1394
+ ],
1395
+ "evidence": {
1396
+ "frontmatter_types": [
1397
+ "planning",
1398
+ "spec",
1399
+ "architecture-spec"
1400
+ ],
1401
+ "title_patterns": [
1402
+ "interface method",
1403
+ "ui method",
1404
+ "design method",
1405
+ "front-end method"
1406
+ ],
1407
+ "path_globs": []
1408
+ },
1409
+ "done_when": "Each part of the interface has a method, a source of truth and a fidelity sequence, chosen against the catalog.",
1410
+ "sources": []
1411
+ },
1412
+ {
1413
+ "id": "UI-02",
1414
+ "layer": "interface",
1415
+ "stage": "U2 Explore",
1416
+ "name": "Wireframes and vision sketches",
1417
+ "aliases": [
1418
+ "wireframes",
1419
+ "vision wireframing",
1420
+ "Phase 0D"
1421
+ ],
1422
+ "purpose": "Sketches the key views at low fidelity to test the experience design by visualisation; surfaces ambiguity that prose missed and feeds it back to the specs.",
1423
+ "required_when": "always",
1424
+ "depends_on": [
1425
+ "XD-04",
1426
+ "XD-05"
1427
+ ],
1428
+ "questions": [
1429
+ {
1430
+ "id": "UI-02-Q1",
1431
+ "text": "Which views and journeys are sketched, and why those first?"
1432
+ },
1433
+ {
1434
+ "id": "UI-02-Q2",
1435
+ "text": "What ambiguity did sketching surface, and which documents did it revise?"
1436
+ },
1437
+ {
1438
+ "id": "UI-02-Q3",
1439
+ "text": "Which sketches are set aside, and which carry forward?"
1440
+ }
1441
+ ],
1442
+ "evidence": {
1443
+ "frontmatter_types": [
1444
+ "design"
1445
+ ],
1446
+ "title_patterns": [
1447
+ "wireframe",
1448
+ "vision sketch"
1449
+ ],
1450
+ "path_globs": [
1451
+ "**/design/**/wireframe*",
1452
+ "**/design/vision/**"
1453
+ ]
1454
+ },
1455
+ "done_when": "Key views are sketched; surfaced questions are recorded with the revisions they caused; set-aside sketches are marked.",
1456
+ "sources": [
1457
+ "SAD Phase 0D pilots (the reference project, 2026-04/05)"
1458
+ ]
1459
+ },
1460
+ {
1461
+ "id": "UI-03",
1462
+ "layer": "interface",
1463
+ "stage": "U2 Explore",
1464
+ "name": "Interactive prototype on real data",
1465
+ "aliases": [
1466
+ "clickable prototype",
1467
+ "spike prototype"
1468
+ ],
1469
+ "purpose": "Builds a working prototype of the key journeys over real data, to learn what static designs cannot show: flow, density, timing, and how real records look.",
1470
+ "required_when": "always",
1471
+ "depends_on": [
1472
+ "UI-02"
1473
+ ],
1474
+ "questions": [
1475
+ {
1476
+ "id": "UI-03-Q1",
1477
+ "text": "Which journeys does it cover, on which real data?"
1478
+ },
1479
+ {
1480
+ "id": "UI-03-Q2",
1481
+ "text": "What is it meant to teach, and what did it teach?"
1482
+ },
1483
+ {
1484
+ "id": "UI-03-Q3",
1485
+ "text": "What is thrown away and what is kept?"
1486
+ }
1487
+ ],
1488
+ "evidence": {
1489
+ "frontmatter_types": [
1490
+ "design",
1491
+ "research",
1492
+ "planning"
1493
+ ],
1494
+ "title_patterns": [
1495
+ "interactive prototype",
1496
+ "clickable prototype",
1497
+ "ui prototype"
1498
+ ],
1499
+ "path_globs": []
1500
+ },
1501
+ "done_when": "The prototype runs the key journeys on real data; its learning note records what was learned and what is kept.",
1502
+ "sources": [
1503
+ "Everything Ecosystem catalog: spike / prototype"
1504
+ ]
1505
+ },
1506
+ {
1507
+ "id": "UI-04",
1508
+ "layer": "interface",
1509
+ "stage": "U3 Systematize",
1510
+ "name": "Fidelity ladders for core objects",
1511
+ "aliases": [
1512
+ "object renderings",
1513
+ "projection matrix"
1514
+ ],
1515
+ "purpose": "For each core object, defines every rendering by fidelity, its kernel fields and its projection matrix, including machine renderings.",
1516
+ "required_when": "always",
1517
+ "depends_on": [
1518
+ "XD-05",
1519
+ "UI-03"
1520
+ ],
1521
+ "questions": [
1522
+ {
1523
+ "id": "UI-04-Q1",
1524
+ "text": "Which objects need ladders, and what are their rungs?"
1525
+ },
1526
+ {
1527
+ "id": "UI-04-Q2",
1528
+ "text": "What is each object's kernel, and how does each field project at each rung?",
1529
+ "source": "Fidelity Ladders (Everything Ecosystem); OOUX"
1530
+ },
1531
+ {
1532
+ "id": "UI-04-Q3",
1533
+ "text": "Which machine renderings (API responses, exports) are rungs?"
1534
+ },
1535
+ {
1536
+ "id": "UI-04-Q4",
1537
+ "text": "Where do two renderings disagree about fields?"
1538
+ }
1539
+ ],
1540
+ "evidence": {
1541
+ "frontmatter_types": [
1542
+ "design",
1543
+ "spec"
1544
+ ],
1545
+ "title_patterns": [
1546
+ "fidelity ladder",
1547
+ "projection matrix"
1548
+ ],
1549
+ "path_globs": []
1550
+ },
1551
+ "done_when": "Every core object has a ladder with kernel and matrix, machine rungs included, and no conflicting renderings.",
1552
+ "sources": [
1553
+ "Fidelity Ladders (a SAD method document, removed by EE-036; in git history)"
1554
+ ]
1555
+ },
1556
+ {
1557
+ "id": "UI-05",
1558
+ "layer": "interface",
1559
+ "stage": "U3 Systematize",
1560
+ "name": "Design system: tokens and components",
1561
+ "aliases": [
1562
+ "component library",
1563
+ "design tokens",
1564
+ "UI kit"
1565
+ ],
1566
+ "purpose": "The shared vocabulary of the interface: tokens imported from brand, components keyed to objects and fidelity, and their states.",
1567
+ "required_when": "always",
1568
+ "depends_on": [
1569
+ "UI-04",
1570
+ "XD-08"
1571
+ ],
1572
+ "questions": [
1573
+ {
1574
+ "id": "UI-05-Q1",
1575
+ "text": "Which tokens (color, type, spacing, elevation, motion) come from brand, and which are product-specific?"
1576
+ },
1577
+ {
1578
+ "id": "UI-05-Q2",
1579
+ "text": "Which components exist, keyed to which object and fidelity, with which states?"
1580
+ },
1581
+ {
1582
+ "id": "UI-05-Q3",
1583
+ "text": "How do components meet the accessibility commitment?"
1584
+ },
1585
+ {
1586
+ "id": "UI-05-Q4",
1587
+ "text": "How is the system versioned and its drift detected?"
1588
+ }
1589
+ ],
1590
+ "evidence": {
1591
+ "frontmatter_types": [
1592
+ "design",
1593
+ "spec"
1594
+ ],
1595
+ "title_patterns": [
1596
+ "design system",
1597
+ "component library",
1598
+ "design tokens",
1599
+ "ui kit"
1600
+ ],
1601
+ "path_globs": []
1602
+ },
1603
+ "done_when": "Tokens trace to brand; components are keyed to objects and fidelity with full states; accessibility and versioning are defined.",
1604
+ "sources": [
1605
+ "UX/UI deliverables inventory (methodology/templates)"
1606
+ ]
1607
+ },
1608
+ {
1609
+ "id": "UI-06",
1610
+ "layer": "interface",
1611
+ "stage": "U4 Contract",
1612
+ "name": "Front-end contract",
1613
+ "aliases": [
1614
+ "BFF contract",
1615
+ "view model contract",
1616
+ "front-end API needs"
1617
+ ],
1618
+ "purpose": "States, from the interface's side, exactly what each view needs from the back end and what each user action sends, so the back-end API is written to meet it (consumer-driven).",
1619
+ "required_when": "always",
1620
+ "depends_on": [
1621
+ "UI-04",
1622
+ "XD-06"
1623
+ ],
1624
+ "questions": [
1625
+ {
1626
+ "id": "UI-06-Q1",
1627
+ "text": "For each view, what data does it need, in what shape and with what freshness?",
1628
+ "source": "Consumer-driven contracts (Robinson, 2006)"
1629
+ },
1630
+ {
1631
+ "id": "UI-06-Q2",
1632
+ "text": "For each user action, what is sent, what can come back (including every error and permission outcome), and is it idempotent?"
1633
+ },
1634
+ {
1635
+ "id": "UI-06-Q3",
1636
+ "text": "How are domain states (uncertainty, provenance, claim versus record) carried so the interface can show them faithfully?"
1637
+ },
1638
+ {
1639
+ "id": "UI-06-Q4",
1640
+ "text": "Which contract tests prove the back end meets it?"
1641
+ },
1642
+ {
1643
+ "id": "UI-06-Q5",
1644
+ "text": "How is it versioned with the interface?"
1645
+ }
1646
+ ],
1647
+ "evidence": {
1648
+ "frontmatter_types": [
1649
+ "spec"
1650
+ ],
1651
+ "title_patterns": [
1652
+ "front-end contract",
1653
+ "frontend contract",
1654
+ "view model",
1655
+ "consumer contract",
1656
+ "bff"
1657
+ ],
1658
+ "path_globs": [
1659
+ "**/*front*end*contract*",
1660
+ "**/view-models/**"
1661
+ ]
1662
+ },
1663
+ "done_when": "Every view and action has its contract with errors and permissions; domain states are carried; contract tests exist; SD-08 answers it.",
1664
+ "sources": [
1665
+ "Robinson, Consumer-Driven Contracts (2006)",
1666
+ "Everything Ecosystem: contract-first skill"
1667
+ ]
1668
+ },
1669
+ {
1670
+ "id": "UI-07",
1671
+ "layer": "interface",
1672
+ "stage": "U4 Contract",
1673
+ "name": "Executable journey scenarios",
1674
+ "aliases": [
1675
+ "BDD scenarios",
1676
+ "acceptance scenarios"
1677
+ ],
1678
+ "purpose": "Writes the key journeys as Given/When/Then scenarios in the users' language, runnable against the built interface.",
1679
+ "required_when": "always",
1680
+ "depends_on": [
1681
+ "XD-04",
1682
+ "UI-06"
1683
+ ],
1684
+ "questions": [
1685
+ {
1686
+ "id": "UI-07-Q1",
1687
+ "text": "Which journeys and edge cases are written as scenarios?",
1688
+ "source": "Behaviour-driven development (North)"
1689
+ },
1690
+ {
1691
+ "id": "UI-07-Q2",
1692
+ "text": "Do they use the users' vocabulary (XD-03)?"
1693
+ },
1694
+ {
1695
+ "id": "UI-07-Q3",
1696
+ "text": "Which run automatically, and against what?"
1697
+ }
1698
+ ],
1699
+ "evidence": {
1700
+ "frontmatter_types": [
1701
+ "spec"
1702
+ ],
1703
+ "title_patterns": [
1704
+ "journey scenarios",
1705
+ "gherkin",
1706
+ "bdd scenarios",
1707
+ "acceptance scenarios"
1708
+ ],
1709
+ "path_globs": [
1710
+ "**/*.feature"
1711
+ ]
1712
+ },
1713
+ "done_when": "Key journeys and edge cases are executable scenarios in user vocabulary, run in CI.",
1714
+ "sources": [
1715
+ "North, Introducing BDD (2006)"
1716
+ ]
1717
+ },
1718
+ {
1719
+ "id": "UI-08",
1720
+ "layer": "interface",
1721
+ "stage": "U4 Contract",
1722
+ "name": "Interface verification",
1723
+ "aliases": [
1724
+ "accessibility testing",
1725
+ "visual regression",
1726
+ "UI test plan"
1727
+ ],
1728
+ "purpose": "Verifies the built interface: accessibility conformance, visual and state coverage, and performance on the users' devices.",
1729
+ "required_when": "always",
1730
+ "depends_on": [
1731
+ "UI-05",
1732
+ "UI-07"
1733
+ ],
1734
+ "questions": [
1735
+ {
1736
+ "id": "UI-08-Q1",
1737
+ "text": "How is accessibility conformance tested (automated and manual)?"
1738
+ },
1739
+ {
1740
+ "id": "UI-08-Q2",
1741
+ "text": "How are visual regressions and state coverage checked?"
1742
+ },
1743
+ {
1744
+ "id": "UI-08-Q3",
1745
+ "text": "What performance budget applies on the users' devices and connections?"
1746
+ }
1747
+ ],
1748
+ "evidence": {
1749
+ "frontmatter_types": [
1750
+ "spec",
1751
+ "verification-log",
1752
+ "planning"
1753
+ ],
1754
+ "title_patterns": [
1755
+ "accessibility test",
1756
+ "visual regression",
1757
+ "ui verification",
1758
+ "interface verification"
1759
+ ],
1760
+ "path_globs": []
1761
+ },
1762
+ "done_when": "Accessibility, visual/state coverage and performance are verified with stated tools and thresholds.",
1763
+ "sources": []
1764
+ },
1765
+ {
1766
+ "id": "SD-01",
1767
+ "layer": "system",
1768
+ "stage": "S1 Requirements",
1769
+ "name": "Functional requirements brief",
1770
+ "aliases": [],
1771
+ "purpose": "Turns the domain and the phase's outcome into a bounded design problem: what this build must do, for whom, now.",
1772
+ "required_when": "always",
1773
+ "depends_on": [
1774
+ "DD-02",
1775
+ "DD-05"
1776
+ ],
1777
+ "questions": [
1778
+ {
1779
+ "id": "SD-01-Q1",
1780
+ "text": "Which roles use this build, and which operations must it support in this phase?",
1781
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1782
+ },
1783
+ {
1784
+ "id": "SD-01-Q2",
1785
+ "text": "Which workflows are required now, and which are explicitly deferred?",
1786
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1787
+ },
1788
+ {
1789
+ "id": "SD-01-Q3",
1790
+ "text": "Which assumptions must the product owner confirm?",
1791
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1792
+ },
1793
+ {
1794
+ "id": "SD-01-Q4",
1795
+ "text": "What must finish before responding, and what can happen later?",
1796
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1797
+ },
1798
+ {
1799
+ "id": "SD-01-Q5",
1800
+ "text": "Which failure scenario proves the requirements are specific enough?",
1801
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1802
+ }
1803
+ ],
1804
+ "evidence": {
1805
+ "frontmatter_types": [
1806
+ "spec",
1807
+ "planning"
1808
+ ],
1809
+ "title_patterns": [
1810
+ "requirements",
1811
+ "brief",
1812
+ "system design",
1813
+ "phase"
1814
+ ],
1815
+ "path_globs": []
1816
+ },
1817
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
1818
+ "sources": []
1819
+ },
1820
+ {
1821
+ "id": "SD-02",
1822
+ "layer": "system",
1823
+ "stage": "S1 Requirements",
1824
+ "name": "Non-functional requirements",
1825
+ "aliases": [],
1826
+ "purpose": "States measurable promises about speed, availability, durability, consistency, freshness, retention and privacy.",
1827
+ "required_when": "always",
1828
+ "depends_on": [
1829
+ "SD-01"
1830
+ ],
1831
+ "questions": [
1832
+ {
1833
+ "id": "SD-02-Q1",
1834
+ "text": "What latency, throughput and availability are required, with a measurement and a time window?",
1835
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.03"
1836
+ },
1837
+ {
1838
+ "id": "SD-02-Q2",
1839
+ "text": "Which operations may degrade under failure, and how fast must service and data recover?",
1840
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1841
+ },
1842
+ {
1843
+ "id": "SD-02-Q3",
1844
+ "text": "How fresh must each copy of data be (how long may a cache disagree with the source)?",
1845
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1846
+ },
1847
+ {
1848
+ "id": "SD-02-Q4",
1849
+ "text": "How long must each record be retained, and what growth should we plan for?",
1850
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1851
+ },
1852
+ {
1853
+ "id": "SD-02-Q5",
1854
+ "text": "Which consistency guarantee does each operation need?",
1855
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.05"
1856
+ },
1857
+ {
1858
+ "id": "SD-02-Q6",
1859
+ "text": "Who may read each record, and which sensitive fields are actually needed?",
1860
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.01"
1861
+ }
1862
+ ],
1863
+ "evidence": {
1864
+ "frontmatter_types": [
1865
+ "spec"
1866
+ ],
1867
+ "title_patterns": [
1868
+ "non-functional",
1869
+ "NFR",
1870
+ "SLO",
1871
+ "availability",
1872
+ "latency"
1873
+ ],
1874
+ "path_globs": []
1875
+ },
1876
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
1877
+ "sources": []
1878
+ },
1879
+ {
1880
+ "id": "SD-03",
1881
+ "layer": "system",
1882
+ "stage": "S1 Requirements",
1883
+ "name": "Capacity and cost estimate",
1884
+ "aliases": [],
1885
+ "purpose": "Converts planning assumptions into rates, storage and money, so the design is sized for reality.",
1886
+ "required_when": "always",
1887
+ "depends_on": [
1888
+ "SD-02"
1889
+ ],
1890
+ "questions": [
1891
+ {
1892
+ "id": "SD-03-Q1",
1893
+ "text": "What are the planning assumptions (users, requests, records, growth), and which are measured vs assumed?",
1894
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.06"
1895
+ },
1896
+ {
1897
+ "id": "SD-03-Q2",
1898
+ "text": "What do they imply for reads, writes, storage and bandwidth per second and per year?",
1899
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.06"
1900
+ },
1901
+ {
1902
+ "id": "SD-03-Q3",
1903
+ "text": "What will it cost to run at this size, and what is the budget?",
1904
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.12"
1905
+ },
1906
+ {
1907
+ "id": "SD-03-Q4",
1908
+ "text": "What infrastructure should we deliberately not add yet?",
1909
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.13"
1910
+ }
1911
+ ],
1912
+ "evidence": {
1913
+ "frontmatter_types": [
1914
+ "spec",
1915
+ "planning"
1916
+ ],
1917
+ "title_patterns": [
1918
+ "capacity",
1919
+ "estimate",
1920
+ "cost model",
1921
+ "sizing"
1922
+ ],
1923
+ "path_globs": []
1924
+ },
1925
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
1926
+ "sources": []
1927
+ },
1928
+ {
1929
+ "id": "SD-04",
1930
+ "layer": "system",
1931
+ "stage": "S2 Architecture",
1932
+ "name": "System context (C4 level 1)",
1933
+ "aliases": [],
1934
+ "purpose": "Shows the system as one box among its users and the external systems it talks to.",
1935
+ "required_when": "always",
1936
+ "depends_on": [
1937
+ "SD-01"
1938
+ ],
1939
+ "questions": [
1940
+ {
1941
+ "id": "SD-04-Q1",
1942
+ "text": "Who uses the system, and through which interfaces?"
1943
+ },
1944
+ {
1945
+ "id": "SD-04-Q2",
1946
+ "text": "Which external systems does it depend on or serve, and what flows each way?"
1947
+ },
1948
+ {
1949
+ "id": "SD-04-Q3",
1950
+ "text": "What is inside the system boundary, and what is explicitly outside?"
1951
+ }
1952
+ ],
1953
+ "evidence": {
1954
+ "frontmatter_types": [
1955
+ "architecture-decision",
1956
+ "spec"
1957
+ ],
1958
+ "title_patterns": [
1959
+ "context diagram",
1960
+ "C4",
1961
+ "system context"
1962
+ ],
1963
+ "path_globs": []
1964
+ },
1965
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
1966
+ "sources": []
1967
+ },
1968
+ {
1969
+ "id": "SD-05",
1970
+ "layer": "system",
1971
+ "stage": "S2 Architecture",
1972
+ "name": "Containers and deployment units (C4 level 2)",
1973
+ "aliases": [],
1974
+ "purpose": "Names the deployable pieces (apps, services, databases, queues) and why each is separate.",
1975
+ "required_when": "always",
1976
+ "depends_on": [
1977
+ "SD-04"
1978
+ ],
1979
+ "questions": [
1980
+ {
1981
+ "id": "SD-05-Q1",
1982
+ "text": "What are the deployable units, and what does each own?"
1983
+ },
1984
+ {
1985
+ "id": "SD-05-Q2",
1986
+ "text": "Monolith or services: which responsibilities need independent deployment, and why?",
1987
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.09"
1988
+ },
1989
+ {
1990
+ "id": "SD-05-Q3",
1991
+ "text": "How does each unit communicate with the others (calls, events, shared storage)?",
1992
+ "source": "Fanout system design curriculum (fanout.sh/system) 02.02"
1993
+ },
1994
+ {
1995
+ "id": "SD-05-Q4",
1996
+ "text": "Where does each unit run, and what does it cost?",
1997
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.12"
1998
+ },
1999
+ {
2000
+ "id": "SD-05-Q5",
2001
+ "text": "Which piece of infrastructure could we remove without breaking a requirement?",
2002
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.13"
2003
+ }
2004
+ ],
2005
+ "evidence": {
2006
+ "frontmatter_types": [
2007
+ "architecture-decision",
2008
+ "spec"
2009
+ ],
2010
+ "title_patterns": [
2011
+ "containers",
2012
+ "deployment",
2013
+ "architecture",
2014
+ "C4"
2015
+ ],
2016
+ "path_globs": []
2017
+ },
2018
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2019
+ "sources": []
2020
+ },
2021
+ {
2022
+ "id": "SD-06",
2023
+ "layer": "system",
2024
+ "stage": "S2 Architecture",
2025
+ "name": "Logical design: components, boundaries and result contracts (C4 level 3)",
2026
+ "aliases": [],
2027
+ "purpose": "Assigns each rule an owner and defines the agreement at each boundary, including every result a caller must handle.",
2028
+ "required_when": "always",
2029
+ "depends_on": [
2030
+ "SD-05",
2031
+ "DD-05"
2032
+ ],
2033
+ "questions": [
2034
+ {
2035
+ "id": "SD-06-Q1",
2036
+ "text": "Which component owns each domain rule, so a change touches one place?",
2037
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.02"
2038
+ },
2039
+ {
2040
+ "id": "SD-06-Q2",
2041
+ "text": "What does each boundary promise, including 'missing', 'refused' and 'unavailable' as distinct results?",
2042
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.02"
2043
+ },
2044
+ {
2045
+ "id": "SD-06-Q3",
2046
+ "text": "How is each rule tested through its boundary without the real database or network?",
2047
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.02"
2048
+ },
2049
+ {
2050
+ "id": "SD-06-Q4",
2051
+ "text": "Where would an added boundary be ceremony rather than protection?",
2052
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.02"
2053
+ },
2054
+ {
2055
+ "id": "SD-06-Q5",
2056
+ "text": "How are external providers wrapped so their quirks stay in one place?",
2057
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.10"
2058
+ }
2059
+ ],
2060
+ "evidence": {
2061
+ "frontmatter_types": [
2062
+ "spec",
2063
+ "architecture-decision"
2064
+ ],
2065
+ "title_patterns": [
2066
+ "components",
2067
+ "boundaries",
2068
+ "logical design",
2069
+ "modules"
2070
+ ],
2071
+ "path_globs": []
2072
+ },
2073
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2074
+ "sources": []
2075
+ },
2076
+ {
2077
+ "id": "SD-07",
2078
+ "layer": "system",
2079
+ "stage": "S3 Data",
2080
+ "name": "Data architecture (logical and physical)",
2081
+ "aliases": [],
2082
+ "purpose": "Turns the conceptual domain model into storage: tables or documents, keys, indexes, history, migrations.",
2083
+ "required_when": "always",
2084
+ "depends_on": [
2085
+ "DD-04",
2086
+ "SD-02"
2087
+ ],
2088
+ "questions": [
2089
+ {
2090
+ "id": "SD-07-Q1",
2091
+ "text": "How does each domain concept map to storage, and what is stored vs computed?",
2092
+ "source": "Fanout system design curriculum (fanout.sh/system) 03.01"
2093
+ },
2094
+ {
2095
+ "id": "SD-07-Q2",
2096
+ "text": "How are identifiers generated, and do they survive renames and merges?",
2097
+ "source": "Fanout system design curriculum (fanout.sh/system) 04.08"
2098
+ },
2099
+ {
2100
+ "id": "SD-07-Q3",
2101
+ "text": "Which queries must be fast, and which indexes serve them?",
2102
+ "source": "Fanout system design curriculum (fanout.sh/system) 03.03"
2103
+ },
2104
+ {
2105
+ "id": "SD-07-Q4",
2106
+ "text": "How is history kept (append-only, bitemporal), and how are deletions and corrections handled?",
2107
+ "source": "Fanout system design curriculum (fanout.sh/system) 03.13"
2108
+ },
2109
+ {
2110
+ "id": "SD-07-Q5",
2111
+ "text": "How will the schema evolve without downtime or data loss?",
2112
+ "source": "Fanout system design curriculum (fanout.sh/system) 03.12"
2113
+ },
2114
+ {
2115
+ "id": "SD-07-Q6",
2116
+ "text": "Which data store is right for each kind of data, and why not the alternatives?",
2117
+ "source": "Fanout system design curriculum (fanout.sh/system) 04.01"
2118
+ }
2119
+ ],
2120
+ "evidence": {
2121
+ "frontmatter_types": [
2122
+ "architecture-decision",
2123
+ "spec"
2124
+ ],
2125
+ "title_patterns": [
2126
+ "data architecture",
2127
+ "schema",
2128
+ "migration",
2129
+ "storage",
2130
+ "database"
2131
+ ],
2132
+ "path_globs": []
2133
+ },
2134
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2135
+ "sources": []
2136
+ },
2137
+ {
2138
+ "id": "SD-08",
2139
+ "layer": "system",
2140
+ "stage": "S4 Interfaces",
2141
+ "name": "API and event contracts",
2142
+ "aliases": [],
2143
+ "purpose": "Publishes the machine contracts (OpenAPI, AsyncAPI, MCP, JSON Schema) before building, so clients and servers agree first.",
2144
+ "required_when": "always",
2145
+ "depends_on": [
2146
+ "SD-06",
2147
+ "UI-06"
2148
+ ],
2149
+ "questions": [
2150
+ {
2151
+ "id": "SD-08-Q1",
2152
+ "text": "What operations does each interface expose, with request, response and error shapes?",
2153
+ "source": "Fanout system design curriculum (fanout.sh/system) 02.01"
2154
+ },
2155
+ {
2156
+ "id": "SD-08-Q2",
2157
+ "text": "Which operations must be idempotent, and how are retries, timeouts and duplicates handled?",
2158
+ "source": "Fanout system design curriculum (fanout.sh/system) 02.09"
2159
+ },
2160
+ {
2161
+ "id": "SD-08-Q3",
2162
+ "text": "Which events are published, with what schema and delivery guarantee?",
2163
+ "source": "Fanout system design curriculum (fanout.sh/system) 02.08"
2164
+ },
2165
+ {
2166
+ "id": "SD-08-Q4",
2167
+ "text": "How are contracts versioned and deprecated?"
2168
+ },
2169
+ {
2170
+ "id": "SD-08-Q5",
2171
+ "text": "Where are the contract files and their fixtures?"
2172
+ }
2173
+ ],
2174
+ "evidence": {
2175
+ "frontmatter_types": [
2176
+ "spec"
2177
+ ],
2178
+ "title_patterns": [
2179
+ "openapi",
2180
+ "contract",
2181
+ "asyncapi",
2182
+ "json schema",
2183
+ "MCP"
2184
+ ],
2185
+ "path_globs": [
2186
+ "**/*.openapi.*",
2187
+ "**/openapi*.y*ml",
2188
+ "**/*.schema.json"
2189
+ ]
2190
+ },
2191
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2192
+ "sources": []
2193
+ },
2194
+ {
2195
+ "id": "SD-09",
2196
+ "layer": "system",
2197
+ "stage": "S4 Interfaces",
2198
+ "name": "Ingestion and integration design",
2199
+ "aliases": [],
2200
+ "purpose": "Specifies how external data and systems enter or are reached: sources, adapters, parsing, provenance stamping, failure handling.",
2201
+ "required_when": "characteristics:C-03",
2202
+ "depends_on": [
2203
+ "SD-06",
2204
+ "DD-07"
2205
+ ],
2206
+ "questions": [
2207
+ {
2208
+ "id": "SD-09-Q1",
2209
+ "text": "Which external sources or providers are used, and what are their limits, licences and failure modes?"
2210
+ },
2211
+ {
2212
+ "id": "SD-09-Q2",
2213
+ "text": "How is each source fetched, parsed and validated (including scans and OCR)?"
2214
+ },
2215
+ {
2216
+ "id": "SD-09-Q3",
2217
+ "text": "How is provenance recorded on everything ingested?"
2218
+ },
2219
+ {
2220
+ "id": "SD-09-Q4",
2221
+ "text": "What happens when a source is down, rate-limited or changes format?",
2222
+ "source": "Fanout system design curriculum (fanout.sh/system) 06.10"
2223
+ },
2224
+ {
2225
+ "id": "SD-09-Q5",
2226
+ "text": "How is re-ingestion made idempotent?",
2227
+ "source": "Fanout system design curriculum (fanout.sh/system) 02.09"
2228
+ }
2229
+ ],
2230
+ "evidence": {
2231
+ "frontmatter_types": [
2232
+ "spec"
2233
+ ],
2234
+ "title_patterns": [
2235
+ "ingestion",
2236
+ "integration",
2237
+ "adapter",
2238
+ "scraper",
2239
+ "pipeline"
2240
+ ],
2241
+ "path_globs": []
2242
+ },
2243
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2244
+ "sources": []
2245
+ },
2246
+ {
2247
+ "id": "SD-10",
2248
+ "layer": "system",
2249
+ "stage": "S5 Behaviour",
2250
+ "name": "Concurrency, consistency and ordering",
2251
+ "aliases": [],
2252
+ "purpose": "Shows how invariants hold when operations overlap, repeat, or arrive out of order.",
2253
+ "required_when": "always",
2254
+ "depends_on": [
2255
+ "SD-07",
2256
+ "DD-05"
2257
+ ],
2258
+ "questions": [
2259
+ {
2260
+ "id": "SD-10-Q1",
2261
+ "text": "Which operations can race, and how is each invariant protected (transactions, constraints, locks)?",
2262
+ "source": "Fanout system design curriculum (fanout.sh/system) 03.06"
2263
+ },
2264
+ {
2265
+ "id": "SD-10-Q2",
2266
+ "text": "Which isolation level does each transaction need?",
2267
+ "source": "Fanout system design curriculum (fanout.sh/system) 03.07"
2268
+ },
2269
+ {
2270
+ "id": "SD-10-Q3",
2271
+ "text": "How are events ordered, and what clock or sequence is trusted?",
2272
+ "source": "Fanout system design curriculum (fanout.sh/system) 06.05"
2273
+ },
2274
+ {
2275
+ "id": "SD-10-Q4",
2276
+ "text": "Which operations are retried, and are they safe to repeat?",
2277
+ "source": "Fanout system design curriculum (fanout.sh/system) 02.09"
2278
+ }
2279
+ ],
2280
+ "evidence": {
2281
+ "frontmatter_types": [
2282
+ "spec",
2283
+ "architecture-decision"
2284
+ ],
2285
+ "title_patterns": [
2286
+ "concurrency",
2287
+ "consistency",
2288
+ "isolation",
2289
+ "ordering",
2290
+ "idempotency"
2291
+ ],
2292
+ "path_globs": []
2293
+ },
2294
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2295
+ "sources": []
2296
+ },
2297
+ {
2298
+ "id": "SD-11",
2299
+ "layer": "system",
2300
+ "stage": "S5 Behaviour",
2301
+ "name": "Async work, scheduling and background jobs",
2302
+ "aliases": [],
2303
+ "purpose": "Defines work that happens off the request path: queues, schedulers, workflows, triggers.",
2304
+ "required_when": "when the build has work off the request path",
2305
+ "depends_on": [
2306
+ "SD-06"
2307
+ ],
2308
+ "questions": [
2309
+ {
2310
+ "id": "SD-11-Q1",
2311
+ "text": "Which work is done asynchronously, and what may be lost or delayed?",
2312
+ "source": "Fanout system design curriculum (fanout.sh/system) 08.01"
2313
+ },
2314
+ {
2315
+ "id": "SD-11-Q2",
2316
+ "text": "Queue or event stream, and why?",
2317
+ "source": "Fanout system design curriculum (fanout.sh/system) 08.02"
2318
+ },
2319
+ {
2320
+ "id": "SD-11-Q3",
2321
+ "text": "How are scheduled jobs and deadlines triggered and made exactly-once in effect?",
2322
+ "source": "Fanout system design curriculum (fanout.sh/system) 08.05"
2323
+ },
2324
+ {
2325
+ "id": "SD-11-Q4",
2326
+ "text": "How is lag measured and handled?",
2327
+ "source": "Fanout system design curriculum (fanout.sh/system) 08.04"
2328
+ }
2329
+ ],
2330
+ "evidence": {
2331
+ "frontmatter_types": [
2332
+ "spec"
2333
+ ],
2334
+ "title_patterns": [
2335
+ "queue",
2336
+ "scheduler",
2337
+ "background",
2338
+ "async",
2339
+ "workflow"
2340
+ ],
2341
+ "path_globs": []
2342
+ },
2343
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2344
+ "sources": []
2345
+ },
2346
+ {
2347
+ "id": "SD-12",
2348
+ "layer": "system",
2349
+ "stage": "S5 Behaviour",
2350
+ "name": "Read path: caching and search",
2351
+ "aliases": [],
2352
+ "purpose": "Describes how reads are made fast without copies becoming a second authority.",
2353
+ "required_when": "when reads need to be faster than the source store or search is required",
2354
+ "depends_on": [
2355
+ "SD-07"
2356
+ ],
2357
+ "questions": [
2358
+ {
2359
+ "id": "SD-12-Q1",
2360
+ "text": "Which reads are hot, and where are they cached?",
2361
+ "source": "Fanout system design curriculum (fanout.sh/system) 05.01"
2362
+ },
2363
+ {
2364
+ "id": "SD-12-Q2",
2365
+ "text": "How are caches invalidated, and how stale may each be?",
2366
+ "source": "Fanout system design curriculum (fanout.sh/system) 05.04"
2367
+ },
2368
+ {
2369
+ "id": "SD-12-Q3",
2370
+ "text": "Is search or retrieval needed, and how is the index kept in sync with the source?",
2371
+ "source": "Fanout system design curriculum (fanout.sh/system) 09.10"
2372
+ },
2373
+ {
2374
+ "id": "SD-12-Q4",
2375
+ "text": "What happens when the cache or index is unavailable?",
2376
+ "source": "Fanout system design curriculum (fanout.sh/system) 05.06"
2377
+ }
2378
+ ],
2379
+ "evidence": {
2380
+ "frontmatter_types": [
2381
+ "spec"
2382
+ ],
2383
+ "title_patterns": [
2384
+ "cache",
2385
+ "search",
2386
+ "index",
2387
+ "read path"
2388
+ ],
2389
+ "path_globs": []
2390
+ },
2391
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2392
+ "sources": []
2393
+ },
2394
+ {
2395
+ "id": "SD-13",
2396
+ "layer": "system",
2397
+ "stage": "S6 Trust",
2398
+ "name": "Identity, authentication, authorization and secrets",
2399
+ "aliases": [],
2400
+ "purpose": "Specifies who users and services are, how they prove it, what each may do, and how secrets are kept.",
2401
+ "required_when": "characteristics:C-06|C-01",
2402
+ "depends_on": [
2403
+ "SD-06",
2404
+ "DD-02"
2405
+ ],
2406
+ "questions": [
2407
+ {
2408
+ "id": "SD-13-Q1",
2409
+ "text": "How do people and services authenticate?"
2410
+ },
2411
+ {
2412
+ "id": "SD-13-Q2",
2413
+ "text": "How is authorization decided, and where is it enforced?"
2414
+ },
2415
+ {
2416
+ "id": "SD-13-Q3",
2417
+ "text": "How are signing keys and secrets created, stored, rotated and revoked?"
2418
+ },
2419
+ {
2420
+ "id": "SD-13-Q4",
2421
+ "text": "How are privileged actions audited?"
2422
+ }
2423
+ ],
2424
+ "evidence": {
2425
+ "frontmatter_types": [
2426
+ "spec",
2427
+ "architecture-decision"
2428
+ ],
2429
+ "title_patterns": [
2430
+ "identity",
2431
+ "authentication",
2432
+ "authorization",
2433
+ "keys",
2434
+ "signing",
2435
+ "secrets"
2436
+ ],
2437
+ "path_globs": []
2438
+ },
2439
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2440
+ "sources": []
2441
+ },
2442
+ {
2443
+ "id": "SD-14",
2444
+ "layer": "system",
2445
+ "stage": "S6 Trust",
2446
+ "name": "Security and threat model",
2447
+ "aliases": [],
2448
+ "purpose": "Identifies threats, abuse cases and controls, sized to the system's risk.",
2449
+ "required_when": "obligations:O-02",
2450
+ "depends_on": [
2451
+ "SD-05"
2452
+ ],
2453
+ "questions": [
2454
+ {
2455
+ "id": "SD-14-Q1",
2456
+ "text": "Who might attack or abuse the system, and what would they want?",
2457
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.10"
2458
+ },
2459
+ {
2460
+ "id": "SD-14-Q2",
2461
+ "text": "Which assets and operations are most valuable to protect?"
2462
+ },
2463
+ {
2464
+ "id": "SD-14-Q3",
2465
+ "text": "Which controls address each threat (validation, rate limits, isolation, encryption)?",
2466
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.11"
2467
+ },
2468
+ {
2469
+ "id": "SD-14-Q4",
2470
+ "text": "Which compliance regime applies (e.g. GovRAMP, CJIS, SOC 2)?"
2471
+ }
2472
+ ],
2473
+ "evidence": {
2474
+ "frontmatter_types": [
2475
+ "spec",
2476
+ "policy"
2477
+ ],
2478
+ "title_patterns": [
2479
+ "threat model",
2480
+ "security",
2481
+ "abuse",
2482
+ "rate limit"
2483
+ ],
2484
+ "path_globs": []
2485
+ },
2486
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2487
+ "sources": []
2488
+ },
2489
+ {
2490
+ "id": "SD-15",
2491
+ "layer": "system",
2492
+ "stage": "S6 Trust",
2493
+ "name": "Privacy, retention and deletion enforcement",
2494
+ "aliases": [],
2495
+ "purpose": "Shows how the system enforces the domain's privacy and retention rules, including lawful deletion.",
2496
+ "required_when": "obligations:O-01",
2497
+ "depends_on": [
2498
+ "SD-07",
2499
+ "DD-07"
2500
+ ],
2501
+ "questions": [
2502
+ {
2503
+ "id": "SD-15-Q1",
2504
+ "text": "Where does each category of personal or sensitive data live?",
2505
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.09"
2506
+ },
2507
+ {
2508
+ "id": "SD-15-Q2",
2509
+ "text": "How are retention periods and holds enforced?",
2510
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.09"
2511
+ },
2512
+ {
2513
+ "id": "SD-15-Q3",
2514
+ "text": "How is lawful deletion done without breaking audit or history?"
2515
+ },
2516
+ {
2517
+ "id": "SD-15-Q4",
2518
+ "text": "How are access requests and exports fulfilled?"
2519
+ }
2520
+ ],
2521
+ "evidence": {
2522
+ "frontmatter_types": [
2523
+ "spec",
2524
+ "policy"
2525
+ ],
2526
+ "title_patterns": [
2527
+ "retention",
2528
+ "privacy",
2529
+ "deletion",
2530
+ "erasure"
2531
+ ],
2532
+ "path_globs": []
2533
+ },
2534
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2535
+ "sources": []
2536
+ },
2537
+ {
2538
+ "id": "SD-16",
2539
+ "layer": "system",
2540
+ "stage": "S7 Operations",
2541
+ "name": "Reliability: failure modes, backups and recovery",
2542
+ "aliases": [],
2543
+ "purpose": "Lists how the system fails and recovers, with targets for recovery time and data loss.",
2544
+ "required_when": "always",
2545
+ "depends_on": [
2546
+ "SD-05",
2547
+ "SD-02"
2548
+ ],
2549
+ "questions": [
2550
+ {
2551
+ "id": "SD-16-Q1",
2552
+ "text": "What are the main failure modes, and what does the user see in each?",
2553
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.08"
2554
+ },
2555
+ {
2556
+ "id": "SD-16-Q2",
2557
+ "text": "What are the recovery time and data-loss targets, and how are they met?",
2558
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.07"
2559
+ },
2560
+ {
2561
+ "id": "SD-16-Q3",
2562
+ "text": "How are backups taken, and when was restore last tested?",
2563
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.07"
2564
+ },
2565
+ {
2566
+ "id": "SD-16-Q4",
2567
+ "text": "Which dependencies can bring the system down, and how is that contained?",
2568
+ "source": "Fanout system design curriculum (fanout.sh/system) 06.10"
2569
+ }
2570
+ ],
2571
+ "evidence": {
2572
+ "frontmatter_types": [
2573
+ "spec",
2574
+ "runbook"
2575
+ ],
2576
+ "title_patterns": [
2577
+ "reliability",
2578
+ "backup",
2579
+ "disaster recovery",
2580
+ "failure modes"
2581
+ ],
2582
+ "path_globs": []
2583
+ },
2584
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2585
+ "sources": []
2586
+ },
2587
+ {
2588
+ "id": "SD-17",
2589
+ "layer": "system",
2590
+ "stage": "S7 Operations",
2591
+ "name": "Observability, SLOs and incident response",
2592
+ "aliases": [],
2593
+ "purpose": "Defines how the team knows the system is healthy and what happens when it isn't.",
2594
+ "required_when": "always",
2595
+ "depends_on": [
2596
+ "SD-02"
2597
+ ],
2598
+ "questions": [
2599
+ {
2600
+ "id": "SD-17-Q1",
2601
+ "text": "Which signals (logs, metrics, traces) show each requirement is met?",
2602
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.01"
2603
+ },
2604
+ {
2605
+ "id": "SD-17-Q2",
2606
+ "text": "What are the SLOs and error budgets?",
2607
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.02"
2608
+ },
2609
+ {
2610
+ "id": "SD-17-Q3",
2611
+ "text": "Who is alerted, for what, and what do they do?",
2612
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.03"
2613
+ }
2614
+ ],
2615
+ "evidence": {
2616
+ "frontmatter_types": [
2617
+ "spec",
2618
+ "runbook"
2619
+ ],
2620
+ "title_patterns": [
2621
+ "observability",
2622
+ "SLO",
2623
+ "monitoring",
2624
+ "incident"
2625
+ ],
2626
+ "path_globs": []
2627
+ },
2628
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2629
+ "sources": []
2630
+ },
2631
+ {
2632
+ "id": "SD-18",
2633
+ "layer": "system",
2634
+ "stage": "S7 Operations",
2635
+ "name": "Deployment, environments and migration safety",
2636
+ "aliases": [],
2637
+ "purpose": "Specifies how code and schema reach production safely and how changes are rolled back.",
2638
+ "required_when": "always",
2639
+ "depends_on": [
2640
+ "SD-05"
2641
+ ],
2642
+ "questions": [
2643
+ {
2644
+ "id": "SD-18-Q1",
2645
+ "text": "Which environments exist, and how does each match production?"
2646
+ },
2647
+ {
2648
+ "id": "SD-18-Q2",
2649
+ "text": "How are deployments and database migrations made safe and reversible?",
2650
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.04"
2651
+ },
2652
+ {
2653
+ "id": "SD-18-Q3",
2654
+ "text": "How are feature flags, data backfills and cutovers handled?",
2655
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.06"
2656
+ }
2657
+ ],
2658
+ "evidence": {
2659
+ "frontmatter_types": [
2660
+ "spec",
2661
+ "runbook",
2662
+ "architecture-decision"
2663
+ ],
2664
+ "title_patterns": [
2665
+ "deployment",
2666
+ "environments",
2667
+ "CI",
2668
+ "migration safety"
2669
+ ],
2670
+ "path_globs": []
2671
+ },
2672
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2673
+ "sources": []
2674
+ },
2675
+ {
2676
+ "id": "SD-19",
2677
+ "layer": "system",
2678
+ "stage": "S7 Operations",
2679
+ "name": "Multi-tenancy and federation",
2680
+ "aliases": [],
2681
+ "purpose": "Defines how tenants or jurisdictions are isolated, configured and (if federated) connected.",
2682
+ "required_when": "characteristics:C-14",
2683
+ "depends_on": [
2684
+ "SD-05",
2685
+ "DD-08"
2686
+ ],
2687
+ "questions": [
2688
+ {
2689
+ "id": "SD-19-Q1",
2690
+ "text": "What is a tenant, and how is its data isolated?",
2691
+ "source": "Fanout system design curriculum (fanout.sh/system) 14.13"
2692
+ },
2693
+ {
2694
+ "id": "SD-19-Q2",
2695
+ "text": "Which settings vary per tenant, and where are they stored?"
2696
+ },
2697
+ {
2698
+ "id": "SD-19-Q3",
2699
+ "text": "How do separate deployments exchange data, if at all?"
2700
+ }
2701
+ ],
2702
+ "evidence": {
2703
+ "frontmatter_types": [
2704
+ "spec",
2705
+ "architecture-decision"
2706
+ ],
2707
+ "title_patterns": [
2708
+ "multi-tenant",
2709
+ "tenancy",
2710
+ "federation",
2711
+ "custody"
2712
+ ],
2713
+ "path_globs": []
2714
+ },
2715
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2716
+ "sources": []
2717
+ },
2718
+ {
2719
+ "id": "SD-20",
2720
+ "layer": "system",
2721
+ "stage": "S8 Plan",
2722
+ "name": "Testing strategy",
2723
+ "aliases": [],
2724
+ "purpose": "States how correctness is shown at each level, including tests that come from the domain acceptance tests.",
2725
+ "required_when": "always",
2726
+ "depends_on": [
2727
+ "SD-06",
2728
+ "DD-10"
2729
+ ],
2730
+ "questions": [
2731
+ {
2732
+ "id": "SD-20-Q1",
2733
+ "text": "Which rules are unit-tested through their boundaries?",
2734
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.02"
2735
+ },
2736
+ {
2737
+ "id": "SD-20-Q2",
2738
+ "text": "Which integration and contract tests run against real dependencies?"
2739
+ },
2740
+ {
2741
+ "id": "SD-20-Q3",
2742
+ "text": "Which golden tests come from the domain acceptance tests (expected outputs on real data)?"
2743
+ },
2744
+ {
2745
+ "id": "SD-20-Q4",
2746
+ "text": "How is performance or load tested against the non-functional requirements?"
2747
+ }
2748
+ ],
2749
+ "evidence": {
2750
+ "frontmatter_types": [
2751
+ "spec",
2752
+ "planning"
2753
+ ],
2754
+ "title_patterns": [
2755
+ "testing strategy",
2756
+ "test plan",
2757
+ "golden"
2758
+ ],
2759
+ "path_globs": []
2760
+ },
2761
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2762
+ "sources": []
2763
+ },
2764
+ {
2765
+ "id": "SD-21",
2766
+ "layer": "system",
2767
+ "stage": "S8 Plan",
2768
+ "name": "Architecture decision records",
2769
+ "aliases": [],
2770
+ "purpose": "Keeps every hard-to-reverse system choice, its alternatives and its trade-offs.",
2771
+ "required_when": "always",
2772
+ "depends_on": [],
2773
+ "questions": [
2774
+ {
2775
+ "id": "SD-21-Q1",
2776
+ "text": "Which system decisions are hard to reverse, and is each recorded with alternatives considered?",
2777
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.04"
2778
+ },
2779
+ {
2780
+ "id": "SD-21-Q2",
2781
+ "text": "Which trade-off did each decision accept (cost, consistency, availability, complexity)?",
2782
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.04"
2783
+ },
2784
+ {
2785
+ "id": "SD-21-Q3",
2786
+ "text": "Which decisions are still open, and what would settle them?"
2787
+ }
2788
+ ],
2789
+ "evidence": {
2790
+ "frontmatter_types": [
2791
+ "architecture-decision"
2792
+ ],
2793
+ "title_patterns": [
2794
+ "ADR"
2795
+ ],
2796
+ "path_globs": [
2797
+ "**/adrs/*.md"
2798
+ ]
2799
+ },
2800
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2801
+ "sources": []
2802
+ },
2803
+ {
2804
+ "id": "SD-22",
2805
+ "layer": "system",
2806
+ "stage": "S8 Plan",
2807
+ "name": "Domain-to-system traceability",
2808
+ "aliases": [],
2809
+ "purpose": "Maps every domain primitive, invariant and policy to the component, table, contract and test that implements it.",
2810
+ "required_when": "always",
2811
+ "depends_on": [
2812
+ "DD-04",
2813
+ "DD-05",
2814
+ "SD-06",
2815
+ "SD-07",
2816
+ "SD-08"
2817
+ ],
2818
+ "questions": [
2819
+ {
2820
+ "id": "SD-22-Q1",
2821
+ "text": "For each domain invariant, which component enforces it and which test proves it?"
2822
+ },
2823
+ {
2824
+ "id": "SD-22-Q2",
2825
+ "text": "For each domain primitive, where is it stored and which contract exposes it?"
2826
+ },
2827
+ {
2828
+ "id": "SD-22-Q3",
2829
+ "text": "Which domain rules have no implementation yet?"
2830
+ }
2831
+ ],
2832
+ "evidence": {
2833
+ "frontmatter_types": [
2834
+ "spec",
2835
+ "planning"
2836
+ ],
2837
+ "title_patterns": [
2838
+ "traceability",
2839
+ "mapping"
2840
+ ],
2841
+ "path_globs": []
2842
+ },
2843
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2844
+ "sources": []
2845
+ },
2846
+ {
2847
+ "id": "SD-23",
2848
+ "layer": "system",
2849
+ "stage": "S8 Plan",
2850
+ "name": "Build plan and slices",
2851
+ "aliases": [],
2852
+ "purpose": "Orders the build into slices that each deliver a testable outcome toward the phase's completion criteria.",
2853
+ "required_when": "always",
2854
+ "depends_on": [
2855
+ "SD-01",
2856
+ "SD-20"
2857
+ ],
2858
+ "questions": [
2859
+ {
2860
+ "id": "SD-23-Q1",
2861
+ "text": "What is the first slice that runs end to end?"
2862
+ },
2863
+ {
2864
+ "id": "SD-23-Q2",
2865
+ "text": "How does each slice map to the phase's completion criteria?"
2866
+ },
2867
+ {
2868
+ "id": "SD-23-Q3",
2869
+ "text": "What is deliberately left out of this build?",
2870
+ "source": "Fanout system design curriculum (fanout.sh/system) 01.13"
2871
+ }
2872
+ ],
2873
+ "evidence": {
2874
+ "frontmatter_types": [
2875
+ "planning"
2876
+ ],
2877
+ "title_patterns": [
2878
+ "build plan",
2879
+ "roadmap",
2880
+ "slices",
2881
+ "milestones"
2882
+ ],
2883
+ "path_globs": []
2884
+ },
2885
+ "done_when": "Every question has a written, specific answer (or an explicit 'not applicable, because …'), and the document is linked from the scope's design index.",
2886
+ "sources": []
2887
+ }
2888
+ ],
2889
+ "required_when_keys": {
2890
+ "always": "every scope",
2891
+ "characteristics:C-xx|C-yy": "any listed ARS characteristic declared",
2892
+ "obligations:O-xx": "any listed ARS obligation declared",
2893
+ "entity-class:a|b": "the entity profile's entity-class is one of the listed values",
2894
+ "<prose>": "a stated condition, judged by the person running the check"
2895
+ }
2896
+ }