@geraldmaron/construct 1.2.2 → 1.3.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 (497) hide show
  1. package/README.md +7 -10
  2. package/bin/construct +286 -220
  3. package/bin/construct-postinstall.mjs +0 -21
  4. package/commands/work/optimize-prompts.md +1 -1
  5. package/examples/distribution/sources/adr.md +2 -2
  6. package/examples/seed-observations/decisions.md +1 -1
  7. package/lib/artifact-loop-core.mjs +412 -0
  8. package/lib/artifact-manifest.mjs +6 -0
  9. package/lib/artifact-release-gate.mjs +115 -49
  10. package/lib/audit-rules.mjs +2 -4
  11. package/lib/audit-skills.mjs +32 -20
  12. package/lib/audit-specialists.mjs +44 -26
  13. package/lib/auto-docs.mjs +6 -5
  14. package/lib/brand-prose.mjs +3 -3
  15. package/lib/brand-tokens.mjs +2 -2
  16. package/lib/certification/artifact-fixtures.mjs +4 -1
  17. package/lib/certification/demo-parity.mjs +6 -32
  18. package/lib/certification/real-llm-scenarios.mjs +58 -13
  19. package/lib/certification/role-cards.mjs +7 -6
  20. package/lib/certification/role-overlays.mjs +4 -4
  21. package/lib/certification/runner.mjs +9 -2
  22. package/lib/certification/skill-inventory.mjs +34 -22
  23. package/lib/certification/skill-scenarios.mjs +21 -8
  24. package/lib/certification/specialist-contracts.mjs +4 -3
  25. package/lib/certification/specialist-scenarios.mjs +7 -6
  26. package/lib/certification/status.mjs +5 -4
  27. package/lib/cli-commands.mjs +56 -57
  28. package/lib/comment-lint.mjs +1 -5
  29. package/lib/completions.mjs +20 -2
  30. package/lib/config/legacy-config-migration.mjs +125 -0
  31. package/lib/config/schema.mjs +5 -5
  32. package/lib/config/source-targets.mjs +80 -0
  33. package/lib/contracts/validate.mjs +119 -51
  34. package/lib/decisions/golden.mjs +3 -2
  35. package/lib/decisions/registry.mjs +11 -6
  36. package/lib/demo-project.mjs +188 -0
  37. package/lib/demo-recording.mjs +9 -34
  38. package/lib/demo-script.mjs +2 -2
  39. package/lib/demo-surface.mjs +13 -131
  40. package/lib/demo-tour-renderer.mjs +92 -0
  41. package/lib/demo.mjs +69 -54
  42. package/lib/diagram-export.mjs +63 -14
  43. package/lib/doctor/source-checkout.mjs +3 -4
  44. package/lib/doctor/watchers/consistency.mjs +90 -22
  45. package/lib/doctor/watchers/credential-parity.mjs +97 -0
  46. package/lib/doctor/watchers/mcp-protocol.mjs +1 -1
  47. package/lib/doctor/watchers/service-health.mjs +4 -32
  48. package/lib/document-export.mjs +73 -9
  49. package/lib/document-extract.mjs +10 -198
  50. package/lib/embed/artifact.mjs +2 -3
  51. package/lib/embed/cli.mjs +1 -1
  52. package/lib/embed/config.mjs +1 -2
  53. package/lib/embed/customer-profiles.mjs +1 -1
  54. package/lib/embed/daemon.mjs +5 -6
  55. package/lib/embed/demand-fetch.mjs +114 -2
  56. package/lib/embed/docs-lifecycle.mjs +9 -5
  57. package/lib/embed/intake-metrics.mjs +2 -2
  58. package/lib/embed/notifications.mjs +2 -3
  59. package/lib/embed/recommendation-store.mjs +25 -22
  60. package/lib/embed/role-framing.mjs +4 -9
  61. package/lib/embedded-contract/capability.mjs +4 -2
  62. package/lib/embedded-contract/contract-version.mjs +1 -1
  63. package/lib/env-config.mjs +2 -2
  64. package/lib/flavors/loader.mjs +21 -19
  65. package/lib/graph/build-from-registry.mjs +31 -7
  66. package/lib/graph/staleness.mjs +1 -1
  67. package/lib/headhunt.mjs +82 -35
  68. package/lib/hooks/agent-tracker.mjs +2 -2
  69. package/lib/hooks/config-protection.mjs +1 -1
  70. package/lib/hooks/registry-sync.mjs +3 -3
  71. package/lib/host-capabilities.mjs +5 -5
  72. package/lib/improvement/controller.mjs +2 -2
  73. package/lib/init-unified.mjs +19 -21
  74. package/lib/intake/classify.mjs +26 -0
  75. package/lib/intake/daemon.mjs +2 -3
  76. package/lib/intake/prepare.mjs +10 -3
  77. package/lib/intake/session-prelude.mjs +1 -1
  78. package/lib/intake/tables/creative.mjs +9 -9
  79. package/lib/intake/tables/operations.mjs +4 -4
  80. package/lib/intake/tables/research.mjs +2 -2
  81. package/lib/integrations/intake-integrations.mjs +9 -10
  82. package/lib/knowledge/research-store.mjs +2 -2
  83. package/lib/mcp/server.mjs +104 -61
  84. package/lib/mcp/tool-budget.mjs +1 -46
  85. package/lib/mcp/tool-recovery.mjs +44 -0
  86. package/lib/mcp/tools/artifact-author.mjs +36 -0
  87. package/lib/mcp/tools/find-tool.mjs +86 -0
  88. package/lib/mcp/tools/orchestration-run.mjs +107 -69
  89. package/lib/mcp/tools/project.mjs +4 -3
  90. package/lib/mcp/tools/{profile.mjs → scope.mjs} +54 -52
  91. package/lib/mcp/tools/skills.mjs +39 -22
  92. package/lib/mcp/tools/telemetry.mjs +2 -1
  93. package/lib/mcp/tools/workflow.mjs +1 -1
  94. package/lib/mcp-platform-config.mjs +7 -5
  95. package/lib/migrations/index.mjs +4 -2
  96. package/lib/migrations/v2-unified-registry.mjs +35 -0
  97. package/lib/model-router.mjs +203 -36
  98. package/lib/models/catalog.mjs +25 -9
  99. package/lib/models/execution-capability-profile.mjs +3 -3
  100. package/lib/models/execution-policy.mjs +7 -6
  101. package/lib/models/provider-poll.mjs +18 -4
  102. package/lib/opencode-config.mjs +56 -1
  103. package/lib/opencode-runtime-plugin.mjs +13 -10
  104. package/lib/oracle/artifact-gate.mjs +14 -4
  105. package/lib/oracle/cli.mjs +2 -0
  106. package/lib/oracle/dispatch.mjs +18 -1
  107. package/lib/oracle/execute.mjs +39 -7
  108. package/lib/oracle/index.mjs +1 -1
  109. package/lib/oracle/org-graph.mjs +10 -5
  110. package/lib/oracle/policy.mjs +6 -0
  111. package/lib/oracle/read-model.mjs +103 -6
  112. package/lib/oracle/reconcile.mjs +31 -4
  113. package/lib/oracle/remediation-dispatch.mjs +53 -0
  114. package/lib/oracle/routing.mjs +5 -0
  115. package/lib/oracle/synthesize.mjs +80 -3
  116. package/lib/orchestration/routing-tables.mjs +44 -10
  117. package/lib/orchestration/runtime.mjs +2 -0
  118. package/lib/orchestration/worker.mjs +1 -1
  119. package/lib/orchestration-policy.mjs +351 -62
  120. package/lib/overrides/resolver.mjs +1 -12
  121. package/lib/parity.mjs +37 -11
  122. package/lib/policy/engine.mjs +80 -15
  123. package/lib/prompt-composer.js +51 -15
  124. package/lib/prompt-metadata.mjs +3 -2
  125. package/lib/providers/connection-probe.mjs +58 -0
  126. package/lib/providers/copilot-auth.mjs +1 -1
  127. package/lib/providers/credential-bootstrap.mjs +1 -1
  128. package/lib/providers/op-run.mjs +3 -4
  129. package/lib/providers/secret-resolver.mjs +31 -0
  130. package/lib/publish-tooling.mjs +3 -11
  131. package/lib/publish.mjs +12 -29
  132. package/lib/reconcile/mcp-entry-reconcile.mjs +14 -9
  133. package/lib/reflect.mjs +2 -2
  134. package/lib/registry/agent-manifest.mjs +190 -0
  135. package/lib/registry/assemble.mjs +133 -0
  136. package/lib/registry/catalog.mjs +171 -0
  137. package/lib/registry/cli.mjs +590 -6
  138. package/lib/registry/consolidation.mjs +5 -4
  139. package/lib/registry/docs-sync.mjs +67 -0
  140. package/lib/registry/loader.mjs +147 -0
  141. package/lib/registry/org-io.mjs +76 -0
  142. package/lib/registry/retired-paths.mjs +71 -0
  143. package/lib/registry/surface-map.mjs +5 -7
  144. package/lib/registry/validator.mjs +438 -0
  145. package/lib/research-execution-policy.mjs +173 -0
  146. package/lib/roles/catalog.mjs +4 -9
  147. package/lib/roles/fence.mjs +107 -1
  148. package/lib/roles/flavor-bindings.mjs +68 -0
  149. package/lib/roles/gateway.mjs +140 -29
  150. package/lib/roles/manifest.mjs +22 -13
  151. package/lib/roles/router.mjs +1 -1
  152. package/lib/runtime-env.mjs +1 -1
  153. package/lib/scopes/enrich.mjs +67 -0
  154. package/lib/scopes/hooks.mjs +12 -0
  155. package/lib/{profiles → scopes}/lifecycle.mjs +70 -70
  156. package/lib/scopes/loader.mjs +104 -0
  157. package/lib/scopes/rebrand.mjs +32 -0
  158. package/lib/scopes/research-profile.mjs +16 -0
  159. package/lib/scopes/teams.mjs +98 -0
  160. package/lib/service-manager.mjs +1 -117
  161. package/lib/setup-prompts.mjs +1 -1
  162. package/lib/setup.mjs +17 -28
  163. package/lib/skills/composition-graph.mjs +98 -0
  164. package/lib/skills/router.mjs +80 -0
  165. package/lib/specialist-contracts.mjs +17 -18
  166. package/lib/specialists/postconditions.mjs +2 -2
  167. package/lib/specialists/prompt-schema.mjs +6 -5
  168. package/lib/specialists/roster.mjs +7 -12
  169. package/lib/specialists/schema.mjs +9 -6
  170. package/lib/status.mjs +25 -90
  171. package/lib/storage/file-lock.mjs +6 -3
  172. package/lib/telemetry/skill-calls.mjs +1 -1
  173. package/lib/templates/doc-presentation.mjs +63 -0
  174. package/lib/templates/visual-requirements.mjs +35 -2
  175. package/lib/term-format.mjs +107 -2
  176. package/lib/test-env-setup.mjs +21 -0
  177. package/lib/ui/components.mjs +42 -0
  178. package/lib/ui/glyphs.mjs +58 -0
  179. package/lib/ui/links.mjs +115 -0
  180. package/lib/ui/theme.mjs +108 -0
  181. package/lib/uninstall/uninstall.mjs +2 -1
  182. package/lib/validator.mjs +45 -8
  183. package/lib/validators/skill-effectiveness.mjs +174 -0
  184. package/lib/validators/skills.mjs +1 -1
  185. package/package.json +12 -7
  186. package/personas/construct.md +12 -3
  187. package/platforms/claude/CLAUDE.md +1 -1
  188. package/rules/common/beads-hygiene.md +52 -0
  189. package/rules/common/neurodivergent-output.md +4 -7
  190. package/rules/common/research.md +2 -0
  191. package/scripts/sync-specialists.mjs +260 -49
  192. package/skills/ai/prompt-optimizer.md +3 -3
  193. package/skills/brand/output-vibe.md +48 -0
  194. package/skills/docs/adr-workflow.md +3 -0
  195. package/skills/docs/backlog-proposal-workflow.md +3 -0
  196. package/skills/docs/codebase-research-workflow.md +5 -2
  197. package/skills/docs/customer-profile-workflow.md +3 -0
  198. package/skills/docs/document-ingest-workflow.md +3 -0
  199. package/skills/docs/evidence-ingest-workflow.md +4 -1
  200. package/skills/docs/init-project.md +1 -1
  201. package/skills/docs/prd-workflow.md +1 -1
  202. package/skills/docs/prfaq-workflow.md +3 -0
  203. package/skills/docs/product-intelligence-workflow.md +4 -1
  204. package/skills/docs/product-signal-workflow.md +3 -0
  205. package/skills/docs/research-workflow.md +13 -6
  206. package/skills/docs/runbook-workflow.md +3 -0
  207. package/skills/docs/strategy-workflow.md +3 -0
  208. package/skills/docs/user-research-workflow.md +6 -3
  209. package/skills/operating/orchestration-reference.md +1 -1
  210. package/skills/roles/{engineer.ai.md → ai-engineer.md} +2 -2
  211. package/skills/roles/architect.ai-systems.md +1 -1
  212. package/skills/roles/architect.data.md +1 -1
  213. package/skills/roles/architect.enterprise.md +1 -1
  214. package/skills/roles/architect.integration.md +1 -1
  215. package/skills/roles/architect.md +1 -1
  216. package/skills/roles/architect.platform.md +1 -1
  217. package/skills/roles/{product-manager.business-strategy.md → business-strategist.md} +3 -3
  218. package/skills/roles/data-analyst.experiment.md +1 -1
  219. package/skills/roles/data-analyst.md +1 -1
  220. package/skills/roles/data-analyst.product-intelligence.md +1 -1
  221. package/skills/roles/data-analyst.product.md +1 -1
  222. package/skills/roles/data-analyst.telemetry.md +1 -1
  223. package/skills/roles/{engineer.data.md → data-engineer.md} +2 -2
  224. package/skills/roles/data-engineer.pipeline.md +2 -2
  225. package/skills/roles/data-engineer.vector-retrieval.md +2 -2
  226. package/skills/roles/data-engineer.warehouse.md +2 -2
  227. package/skills/roles/debugger.md +1 -1
  228. package/skills/roles/designer.accessibility.md +1 -1
  229. package/skills/roles/designer.md +1 -1
  230. package/skills/roles/{reviewer.devil-advocate.md → devil-advocate.md} +2 -2
  231. package/skills/roles/{operator.docs.md → docs-keeper.md} +3 -3
  232. package/skills/roles/engineer.md +3 -7
  233. package/skills/roles/{reviewer.evaluator.md → evaluator.md} +2 -2
  234. package/skills/roles/{researcher.explorer.md → explorer.md} +2 -2
  235. package/skills/roles/{operator.md → operations.md} +2 -5
  236. package/skills/roles/orchestrator.md +1 -1
  237. package/skills/roles/{engineer.platform.md → platform-engineer.md} +2 -2
  238. package/skills/roles/product-manager.ai-product.md +1 -1
  239. package/skills/roles/product-manager.enterprise.md +1 -1
  240. package/skills/roles/product-manager.growth.md +1 -2
  241. package/skills/roles/product-manager.md +1 -2
  242. package/skills/roles/product-manager.platform.md +1 -1
  243. package/skills/roles/product-manager.product.md +1 -1
  244. package/skills/roles/qa.ai-eval.md +1 -1
  245. package/skills/roles/qa.api-contract.md +1 -1
  246. package/skills/roles/qa.data-pipeline.md +1 -1
  247. package/skills/roles/qa.md +1 -1
  248. package/skills/roles/qa.web-ui.md +1 -1
  249. package/skills/roles/{operator.release.md → release-manager.md} +3 -3
  250. package/skills/roles/researcher.md +1 -1
  251. package/skills/roles/reviewer.md +1 -1
  252. package/skills/roles/security.ai.md +1 -1
  253. package/skills/roles/security.appsec.md +1 -1
  254. package/skills/roles/security.cloud.md +1 -1
  255. package/skills/roles/security.legal-compliance.md +1 -1
  256. package/skills/roles/security.md +1 -1
  257. package/skills/roles/security.privacy.md +1 -1
  258. package/skills/roles/security.supply-chain.md +1 -1
  259. package/skills/roles/{operator.sre.md → sre.md} +3 -3
  260. package/skills/roles/{qa.test-automation.md → test-automation.md} +2 -2
  261. package/skills/roles/{reviewer.trace.md → trace-reviewer.md} +2 -2
  262. package/skills/roles/{researcher.ux.md → ux-researcher.md} +2 -2
  263. package/skills/routing.json +18 -0
  264. package/skills/routing.md +1 -1
  265. package/specialists/artifact-manifest.json +2 -1
  266. package/specialists/audit-enrichments.json +14 -14
  267. package/specialists/org/contracts/accessibility-to-qa.json +37 -0
  268. package/specialists/org/contracts/any-to-business-strategist.json +57 -0
  269. package/specialists/org/contracts/any-to-debugger.json +38 -0
  270. package/specialists/org/contracts/any-to-designer.json +33 -0
  271. package/specialists/org/contracts/any-to-docs-keeper.json +34 -0
  272. package/specialists/org/contracts/any-to-explorer.json +39 -0
  273. package/specialists/org/contracts/any-to-sre-incident.json +33 -0
  274. package/specialists/org/contracts/any-to-trace-reviewer.json +32 -0
  275. package/specialists/org/contracts/architect-to-ai-engineer.json +32 -0
  276. package/specialists/org/contracts/architect-to-data-engineer.json +52 -0
  277. package/specialists/org/contracts/architect-to-devil-advocate.json +38 -0
  278. package/specialists/org/contracts/architect-to-engineer.json +34 -0
  279. package/specialists/org/contracts/architect-to-evaluator.json +59 -0
  280. package/specialists/org/contracts/architect-to-legal-compliance.json +55 -0
  281. package/specialists/org/contracts/architect-to-operations.json +45 -0
  282. package/specialists/org/contracts/architect-to-platform-engineer.json +42 -0
  283. package/specialists/org/contracts/business-strategist-to-product-manager.json +39 -0
  284. package/specialists/org/contracts/construct-to-orchestrator.json +36 -0
  285. package/specialists/org/contracts/construct-to-rd-lead.json +53 -0
  286. package/specialists/org/contracts/data-analyst-to-product-manager.json +43 -0
  287. package/specialists/org/contracts/data-engineer-to-platform-engineer.json +36 -0
  288. package/specialists/org/contracts/designer-to-accessibility.json +36 -0
  289. package/specialists/org/contracts/engineer-to-qa.json +34 -0
  290. package/specialists/org/contracts/engineer-to-reviewer.json +52 -0
  291. package/specialists/org/contracts/explorer-to-engineer.json +38 -0
  292. package/specialists/org/contracts/legal-compliance-to-release-manager.json +43 -0
  293. package/specialists/org/contracts/platform-engineer-to-engineer.json +31 -0
  294. package/specialists/org/contracts/product-manager-to-architect.json +71 -0
  295. package/specialists/org/contracts/product-manager-to-data-analyst.json +49 -0
  296. package/specialists/org/contracts/product-manager-to-ux-researcher.json +51 -0
  297. package/specialists/org/contracts/qa-to-release-manager.json +42 -0
  298. package/specialists/org/contracts/qa-to-test-automation.json +42 -0
  299. package/specialists/org/contracts/rd-lead-to-architect.json +38 -0
  300. package/specialists/org/contracts/researcher-to-architect.json +40 -0
  301. package/specialists/org/contracts/researcher-to-product-manager.json +57 -0
  302. package/specialists/org/contracts/reviewer-to-security.json +41 -0
  303. package/specialists/org/contracts/sre-to-release-manager.json +36 -0
  304. package/specialists/org/contracts/test-automation-to-engineer.json +34 -0
  305. package/specialists/org/contracts/trace-reviewer-to-sre.json +41 -0
  306. package/specialists/org/contracts/user-to-construct.json +30 -0
  307. package/specialists/org/groups/engineering-group.json +43 -0
  308. package/specialists/org/groups/governance-group.json +38 -0
  309. package/specialists/org/groups/operations-group.json +41 -0
  310. package/specialists/org/groups/product-group.json +46 -0
  311. package/specialists/org/groups/quality-group.json +42 -0
  312. package/specialists/org/groups/strategy-group.json +41 -0
  313. package/specialists/org/policies/action-approval.json +13 -0
  314. package/specialists/org/policies/agents-routing.json +13 -0
  315. package/specialists/org/policies/architecture.json +20 -0
  316. package/specialists/org/policies/bash-safety.json +13 -0
  317. package/specialists/org/policies/beads-hygiene.json +13 -0
  318. package/specialists/org/policies/bootstrap-state.json +13 -0
  319. package/specialists/org/policies/code-review.json +13 -0
  320. package/specialists/org/policies/coding-style.json +13 -0
  321. package/specialists/org/policies/comments.json +13 -0
  322. package/specialists/org/policies/commit-approval.json +13 -0
  323. package/specialists/org/policies/contract-preconditions.json +13 -0
  324. package/specialists/org/policies/deployment.json +20 -0
  325. package/specialists/org/policies/description.json +14 -0
  326. package/specialists/org/policies/design-approval.json +19 -0
  327. package/specialists/org/policies/doc-ownership.json +13 -0
  328. package/specialists/org/policies/file-path-fence.json +13 -0
  329. package/specialists/org/policies/framing.json +13 -0
  330. package/specialists/org/policies/git-workflow.json +13 -0
  331. package/specialists/org/policies/incident-response.json +15 -0
  332. package/specialists/org/policies/intake-triage.json +15 -0
  333. package/specialists/org/policies/neurodivergent-output.json +13 -0
  334. package/specialists/org/policies/no-fabrication.json +13 -0
  335. package/specialists/org/policies/patterns.json +13 -0
  336. package/specialists/org/policies/quality-gate-approval.json +17 -0
  337. package/specialists/org/policies/release-gates.json +13 -0
  338. package/specialists/org/policies/research-evidence.json +13 -0
  339. package/specialists/org/policies/review-before-change.json +13 -0
  340. package/specialists/org/policies/rollback.json +15 -0
  341. package/specialists/org/policies/scope-change.json +20 -0
  342. package/specialists/org/policies/secret-scan.json +13 -0
  343. package/specialists/org/policies/security-approval.json +17 -0
  344. package/specialists/org/policies/security.json +13 -0
  345. package/specialists/org/policies/session-efficiency.json +13 -0
  346. package/specialists/org/policies/skill-routing.json +13 -0
  347. package/specialists/org/policies/strategic-prioritization.json +17 -0
  348. package/specialists/org/policies/testing.json +13 -0
  349. package/specialists/org/policies/tool-invisibility.json +14 -0
  350. package/specialists/org/scopes/creative.json +54 -0
  351. package/specialists/org/scopes/operations.json +51 -0
  352. package/specialists/org/scopes/research.json +60 -0
  353. package/specialists/org/scopes/rnd.json +81 -0
  354. package/specialists/org/specialists/cx-accessibility.json +69 -0
  355. package/specialists/org/specialists/cx-ai-engineer.json +75 -0
  356. package/specialists/org/specialists/cx-architect.json +89 -0
  357. package/specialists/org/specialists/cx-business-strategist.json +72 -0
  358. package/specialists/org/specialists/cx-data-analyst.json +68 -0
  359. package/specialists/org/specialists/cx-data-engineer.json +71 -0
  360. package/specialists/org/specialists/cx-debugger.json +75 -0
  361. package/specialists/org/specialists/cx-designer.json +85 -0
  362. package/specialists/org/specialists/cx-devil-advocate.json +71 -0
  363. package/specialists/org/specialists/cx-docs-keeper.json +82 -0
  364. package/specialists/org/specialists/cx-engineer.json +106 -0
  365. package/specialists/org/specialists/cx-evaluator.json +69 -0
  366. package/specialists/org/specialists/cx-explorer.json +69 -0
  367. package/specialists/org/specialists/cx-legal-compliance.json +74 -0
  368. package/specialists/org/specialists/cx-operations.json +72 -0
  369. package/specialists/org/specialists/cx-oracle.json +46 -0
  370. package/specialists/org/specialists/cx-orchestrator.json +81 -0
  371. package/specialists/org/specialists/cx-platform-engineer.json +80 -0
  372. package/specialists/org/specialists/cx-product-manager.json +102 -0
  373. package/specialists/org/specialists/cx-qa.json +79 -0
  374. package/specialists/org/specialists/cx-rd-lead.json +73 -0
  375. package/specialists/org/specialists/cx-release-manager.json +77 -0
  376. package/specialists/org/specialists/cx-researcher.json +82 -0
  377. package/specialists/org/specialists/cx-reviewer.json +71 -0
  378. package/specialists/org/specialists/cx-security.json +91 -0
  379. package/specialists/org/specialists/cx-sre.json +94 -0
  380. package/specialists/org/specialists/cx-test-automation.json +69 -0
  381. package/specialists/org/specialists/cx-trace-reviewer.json +69 -0
  382. package/specialists/org/specialists/cx-ux-researcher.json +68 -0
  383. package/specialists/org/teams/accessibility-team.json +39 -0
  384. package/specialists/org/teams/design-team.json +40 -0
  385. package/specialists/org/teams/engineering-team.json +50 -0
  386. package/specialists/org/teams/governance-team.json +41 -0
  387. package/specialists/org/teams/operations-team.json +46 -0
  388. package/specialists/org/teams/product-management-team.json +45 -0
  389. package/specialists/org/teams/quality-team.json +49 -0
  390. package/specialists/org/teams/research-team.json +39 -0
  391. package/specialists/org/teams/strategy-team.json +48 -0
  392. package/specialists/org/teams/ux-research-team.json +39 -0
  393. package/specialists/prompts/_shared/validation-contract.md +1 -1
  394. package/specialists/prompts/_team-template.md +10 -0
  395. package/specialists/prompts/cx-accessibility.md +1 -0
  396. package/specialists/prompts/cx-ai-engineer.md +1 -1
  397. package/specialists/prompts/cx-business-strategist.md +1 -1
  398. package/specialists/prompts/cx-data-engineer.md +1 -1
  399. package/specialists/prompts/cx-designer.md +1 -0
  400. package/specialists/prompts/cx-devil-advocate.md +1 -1
  401. package/specialists/prompts/cx-docs-keeper.md +1 -1
  402. package/specialists/prompts/cx-evaluator.md +1 -1
  403. package/specialists/prompts/cx-explorer.md +1 -1
  404. package/specialists/prompts/cx-operations.md +1 -1
  405. package/specialists/prompts/cx-oracle.md +7 -3
  406. package/specialists/prompts/cx-orchestrator.md +17 -1
  407. package/specialists/prompts/cx-platform-engineer.md +1 -1
  408. package/specialists/prompts/cx-product-manager.md +2 -0
  409. package/specialists/prompts/cx-release-manager.md +1 -1
  410. package/specialists/prompts/cx-researcher.md +7 -4
  411. package/specialists/prompts/cx-sre.md +1 -1
  412. package/specialists/prompts/cx-test-automation.md +2 -2
  413. package/specialists/prompts/cx-trace-reviewer.md +3 -3
  414. package/specialists/prompts/cx-ux-researcher.md +2 -1
  415. package/templates/demos/scripts/architecture-review-adr.json +30 -0
  416. package/templates/demos/scripts/capability-contract.json +25 -0
  417. package/templates/demos/scripts/intake-triage.json +25 -0
  418. package/templates/demos/scripts/profile-doctor-health.json +25 -0
  419. package/templates/demos/tapes/agentic-platforms-prd.tape +2 -2
  420. package/templates/demos/tapes/architecture-review-adr.tape +44 -0
  421. package/templates/demos/tapes/capability-contract.tape +39 -0
  422. package/templates/demos/tapes/intake-triage.tape +39 -0
  423. package/templates/demos/tapes/profile-doctor-health.tape +39 -0
  424. package/templates/distribution/construct-brand.typ +23 -18
  425. package/templates/distribution/construct-decision.typ +1 -1
  426. package/templates/distribution/construct-pdf.typ +1 -1
  427. package/templates/distribution/construct-prd.typ +1 -1
  428. package/templates/distribution/construct-research.typ +1 -1
  429. package/templates/distribution/mermaid-puppeteer.json +8 -0
  430. package/templates/docs/persona-artifact.md +1 -1
  431. package/templates/docs/prd.md +6 -0
  432. package/lib/boundary.mjs +0 -127
  433. package/lib/certification/dashboard-api.mjs +0 -71
  434. package/lib/chat/cli.mjs +0 -333
  435. package/lib/chat/command-suggest.mjs +0 -161
  436. package/lib/chat/commands.mjs +0 -215
  437. package/lib/chat/config.mjs +0 -142
  438. package/lib/chat/context-compactor.mjs +0 -250
  439. package/lib/chat/context-continuation.mjs +0 -253
  440. package/lib/chat/continuation-source.mjs +0 -58
  441. package/lib/chat/demo-guide.mjs +0 -61
  442. package/lib/chat/design-tokens.mjs +0 -91
  443. package/lib/chat/desktop-binary.mjs +0 -81
  444. package/lib/chat/desktop-build.mjs +0 -130
  445. package/lib/chat/desktop-launcher.mjs +0 -133
  446. package/lib/chat/evidence.mjs +0 -145
  447. package/lib/chat/export.mjs +0 -74
  448. package/lib/chat/harness/driver.mjs +0 -91
  449. package/lib/chat/list-picker.mjs +0 -112
  450. package/lib/chat/model-picker.mjs +0 -356
  451. package/lib/chat/openrouter-fallback.mjs +0 -151
  452. package/lib/chat/permission-prompt.mjs +0 -33
  453. package/lib/chat/picker-catalog.mjs +0 -45
  454. package/lib/chat/policy-telemetry.mjs +0 -34
  455. package/lib/chat/present.mjs +0 -246
  456. package/lib/chat/session-context.mjs +0 -39
  457. package/lib/chat/session-persist.mjs +0 -73
  458. package/lib/chat/session-restore.mjs +0 -71
  459. package/lib/chat/session-settings.mjs +0 -53
  460. package/lib/chat/system-prompt.mjs +0 -52
  461. package/lib/chat/transparency.mjs +0 -93
  462. package/lib/chat/tui/color-scheme.mjs +0 -42
  463. package/lib/chat/tui/markdown.mjs +0 -123
  464. package/lib/chat/tui/presentation.mjs +0 -100
  465. package/lib/chat/tui/render.mjs +0 -500
  466. package/lib/chat/tui/turn-block.mjs +0 -284
  467. package/lib/chat/tui/turn-present.mjs +0 -18
  468. package/lib/chat/tui/turn-state.mjs +0 -88
  469. package/lib/chat/tui/usage.mjs +0 -122
  470. package/lib/chat/web-commands.mjs +0 -146
  471. package/lib/chat/web-launcher.mjs +0 -63
  472. package/lib/chat/web-picker-keys.mjs +0 -46
  473. package/lib/chat/web-session.mjs +0 -159
  474. package/lib/config/alias.mjs +0 -57
  475. package/lib/dashboard-demo.mjs +0 -71
  476. package/lib/dashboard-static.mjs +0 -175
  477. package/lib/install/desktop-binary-download.mjs +0 -88
  478. package/lib/profiles/loader.mjs +0 -123
  479. package/lib/profiles/rebrand.mjs +0 -46
  480. package/lib/server/auth.mjs +0 -169
  481. package/lib/server/chat-loop.mjs +0 -622
  482. package/lib/server/chat.mjs +0 -336
  483. package/lib/server/cors.mjs +0 -77
  484. package/lib/server/csrf.mjs +0 -103
  485. package/lib/server/demo-preview.mjs +0 -63
  486. package/lib/server/index.mjs +0 -2641
  487. package/lib/server/insights.mjs +0 -780
  488. package/lib/server/langfuse-login.mjs +0 -58
  489. package/lib/server/rate-limit.mjs +0 -93
  490. package/lib/server/telemetry-login.mjs +0 -100
  491. package/lib/server/webhook.mjs +0 -512
  492. package/specialists/contracts.json +0 -1032
  493. package/specialists/contracts.schema.json +0 -83
  494. package/specialists/policy-inventory.json +0 -188
  495. package/specialists/registry.json +0 -1412
  496. package/specialists/role-manifests.json +0 -217
  497. package/specialists/teams.json +0 -94
@@ -1,1032 +0,0 @@
1
- {
2
- "$schema": "./contracts.schema.json",
3
- "version": 1,
4
- "description": "Explicit service contracts between Construct agents. Each contract binds a producer→consumer pair to a typed handoff: what artifact, what preconditions, what postconditions, what the terminal state looks like. Consolidates doc ownership, routing map, output schemas, and framing/research/quality gates into one machine-readable source of truth.",
5
- "terminalStates": ["DONE", "BLOCKED", "NEEDS_MAIN_INPUT"],
6
- "severities": {
7
- "blocking": ["BLOCKED_CONTRACT", "CRITICAL"],
8
- "warning": ["HIGH", "APPROVED_WITH_WARNINGS"],
9
- "info": ["MEDIUM", "LOW"]
10
- },
11
- "contracts": [
12
- {
13
- "id": "user-to-construct",
14
- "producer": "user",
15
- "consumer": "construct",
16
- "trigger": { "always": true },
17
- "input": {
18
- "shape": "natural-language-request",
19
- "mustContain": ["goal"]
20
- },
21
- "output": {
22
- "shape": "routed-plan",
23
- "mustContain": ["track", "specialists", "dispatchPlan"]
24
- },
25
- "preconditions": [
26
- "Session bootstrap completed: project_context and memory_search called, plus relevant repo docs read as needed"
27
- ],
28
- "postconditions": [
29
- "Intent classified; work category tagged",
30
- "Route decision surfaced as a single-sentence plan"
31
- ]
32
- },
33
- {
34
- "id": "construct-to-orchestrator",
35
- "producer": "construct",
36
- "consumer": "cx-orchestrator",
37
- "trigger": { "track": "orchestrated" },
38
- "input": {
39
- "shape": "task-packet",
40
- "mustContain": ["goal", "intent", "workCategory", "riskFlags", "acceptanceCriteria"]
41
- },
42
- "output": {
43
- "schema": "lib/contract-schemas/decision.json",
44
- "type": "decision"
45
- },
46
- "preconditions": [
47
- "framingChallenge gate honored if required",
48
- "externalResearch gate honored if required",
49
- "docAuthoring.owner present if authoring a typed document"
50
- ],
51
- "postconditions": [
52
- "Dispatch plan emitted with specialists in sequence",
53
- "Parallel work marked with [parallel: ...] tags"
54
- ]
55
- },
56
- {
57
- "id": "researcher-to-architect",
58
- "producer": "cx-researcher",
59
- "consumer": "cx-architect",
60
- "trigger": { "externalResearch.required": true, "riskFlags": ["architecture"] },
61
- "input": {
62
- "shape": "research-brief",
63
- "mustContain": ["question", "method", "sources", "findings", "confidence"]
64
- },
65
- "output": {
66
- "schema": "lib/contract-schemas/decision.json",
67
- "type": "decision"
68
- },
69
- "preconditions": [
70
- "≥2 independent primary sources cited per load-bearing claim",
71
- "Source classes tagged (internal/primary/secondary/tertiary)"
72
- ],
73
- "postconditions": [
74
- "Architect's ADR cites the primary sources provided",
75
- "Any conflicting evidence surfaced, not suppressed"
76
- ]
77
- },
78
- {
79
- "id": "researcher-to-product-manager",
80
- "producer": "cx-researcher",
81
- "consumer": "cx-product-manager",
82
- "trigger": { "docAuthoring.docType": ["prd", "meta-prd", "prfaq", "one-pager"] },
83
- "input": {
84
- "shape": "evidence-brief",
85
- "mustContain": ["question", "findings", "sources", "confidence", "openQuestions"]
86
- },
87
- "output": {
88
- "shape": "prd-handoff",
89
- "mustContain": ["problem", "users", "functionalRequirements", "acceptanceCriteria"]
90
- },
91
- "preconditions": [
92
- "Evidence threshold stated and met for each requirement"
93
- ],
94
- "postconditions": [
95
- "PRD Problem section does not reference ticket IDs, roadmap items, or artifact filenames",
96
- "Every functional requirement traces to observed user evidence",
97
- {
98
- "id": "prd-has-problem-section",
99
- "description": "PRD must contain a Problem section",
100
- "check": "artifact-has-section",
101
- "section": "Problem"
102
- },
103
- {
104
- "id": "prd-numeric-claims-cited",
105
- "description": "Every numeric claim in the PRD body cites a source (no fabricated percentages or multipliers)",
106
- "check": "artifact-claims-cited"
107
- },
108
- {
109
- "id": "prd-manifest-reviewers",
110
- "description": "Manifest required reviewers must appear in agent log before handoff",
111
- "check": "artifact-reviewers-seen",
112
- "fromManifest": true
113
- }
114
- ]
115
- },
116
- {
117
- "id": "product-manager-to-architect",
118
- "producer": "cx-product-manager",
119
- "consumer": "cx-architect",
120
- "trigger": { "docAuthoring.docType": ["prd", "meta-prd", "adr", "rfc"] },
121
- "input": {
122
- "shape": "prd-handoff",
123
- "mustContain": ["problem", "functionalRequirements", "nonFunctionalRequirements", "acceptanceCriteria", "constraints"]
124
- },
125
- "output": {
126
- "schema": "lib/contract-schemas/decision.json",
127
- "type": "decision"
128
- },
129
- "preconditions": [
130
- "cx-devil-advocate framing challenge logged if riskFlags.architecture"
131
- ],
132
- "postconditions": [
133
- "ADR Problem section traces to PRD Problem, not to tickets",
134
- "ADR Rejected alternatives section present with ≥2 alternatives and specific rejection reasons",
135
- "Reversibility section states whether one-way or two-way door",
136
- {
137
- "id": "adr-has-rejected-alternatives",
138
- "description": "ADR must contain a Rejected Alternatives section",
139
- "check": "artifact-has-section",
140
- "section": "Rejected Alternatives"
141
- },
142
- {
143
- "id": "adr-reversibility-stated",
144
- "description": "ADR Reversibility section is present and non-empty",
145
- "check": "artifact-section-nonempty",
146
- "section": "Reversibility"
147
- },
148
- {
149
- "id": "adr-consequences-stated",
150
- "description": "ADR Consequences section is present and non-empty",
151
- "check": "artifact-section-nonempty",
152
- "section": "Consequences"
153
- },
154
- {
155
- "id": "adr-numeric-claims-cited",
156
- "description": "Every numeric claim in the ADR body cites a source",
157
- "check": "artifact-claims-cited"
158
- },
159
- {
160
- "id": "adr-manifest-reviewers",
161
- "description": "Manifest required reviewers must appear in agent log before handoff",
162
- "check": "artifact-reviewers-seen",
163
- "fromManifest": true
164
- }
165
- ]
166
- },
167
- {
168
- "id": "architect-to-devil-advocate",
169
- "producer": "cx-architect",
170
- "consumer": "cx-devil-advocate",
171
- "trigger": { "framingChallenge.required": true },
172
- "input": {
173
- "shape": "framing-proposal",
174
- "mustContain": ["problemStatement", "proposedApproach", "assumptions"]
175
- },
176
- "output": {
177
- "shape": "challenge-report",
178
- "mustContain": ["verdict", "counterevidence", "reframingProposals"]
179
- },
180
- "preconditions": [
181
- "Problem statement stated independent of tickets/transcripts"
182
- ],
183
- "postconditions": [
184
- "If verdict is BLOCKED, architect revises framing before proceeding",
185
- "Challenge checkpoint logged to audit trail"
186
- ]
187
- },
188
- {
189
- "id": "architect-to-engineer",
190
- "producer": "cx-architect",
191
- "consumer": "cx-engineer",
192
- "trigger": { "intent": ["implementation", "fix"] },
193
- "input": {
194
- "schema": "lib/contract-schemas/decision.json",
195
- "mustContain": ["goal", "approach", "tasks", "acceptanceCriteria"]
196
- },
197
- "output": {
198
- "schema": "lib/contract-schemas/implementation.json",
199
- "type": "implementation"
200
- },
201
- "preconditions": [
202
- "ADR approved (or fast-track noted); no pending CRITICAL review findings",
203
- "Task packet contains readFirst and doNotChange lists"
204
- ],
205
- "postconditions": [
206
- "Implementation cites the ADR tasks it completed",
207
- "filesChanged matches tasks in the ADR",
208
- "verificationChecklist evaluated before DONE"
209
- ]
210
- },
211
- {
212
- "id": "architect-to-ai-engineer",
213
- "producer": "cx-architect",
214
- "consumer": "cx-ai-engineer",
215
- "trigger": { "riskFlags": ["ai"], "intent": ["implementation"] },
216
- "input": {
217
- "schema": "lib/contract-schemas/decision.json",
218
- "mustContain": ["goal", "approach", "evalCriteria"]
219
- },
220
- "output": {
221
- "schema": "lib/contract-schemas/implementation.json",
222
- "type": "implementation"
223
- },
224
- "preconditions": [
225
- "Eval set defined with failure cases before prompt/model changes ship"
226
- ],
227
- "postconditions": [
228
- "Eval verdict from cx-evaluator before DONE"
229
- ]
230
- },
231
- {
232
- "id": "engineer-to-reviewer",
233
- "producer": "cx-engineer",
234
- "consumer": "cx-reviewer",
235
- "trigger": { "always": true },
236
- "input": {
237
- "schema": "lib/contract-schemas/implementation.json",
238
- "mustContain": ["filesChanged", "verificationChecklist"]
239
- },
240
- "output": {
241
- "schema": "lib/contract-schemas/review-report.json",
242
- "type": "review-report",
243
- "mustContain": ["verdict"],
244
- "mustContainOneOf": [["findings", "noIssuesFoundAt"]],
245
- "mustMatchEnum": {
246
- "verdict": ["APPROVED", "APPROVED_WITH_WARNINGS", "BLOCKED"]
247
- }
248
- },
249
- "preconditions": [
250
- "Engineer status is not BLOCKED",
251
- "Tests compiled; static analysis run"
252
- ],
253
- "postconditions": [
254
- "Verdict in {APPROVED, APPROVED_WITH_WARNINGS, BLOCKED}",
255
- "BLOCKED verdict stops downstream work until addressed",
256
- "CRITICAL findings prevent release",
257
- "Either findings is non-empty or noIssuesFoundAt enumerates the inspected paths — prevents silent rubber-stamp reviews"
258
- ]
259
- },
260
- {
261
- "id": "engineer-to-qa",
262
- "producer": "cx-engineer",
263
- "consumer": "cx-qa",
264
- "trigger": { "always": true },
265
- "input": {
266
- "schema": "lib/contract-schemas/implementation.json",
267
- "mustContain": ["filesChanged", "tests"]
268
- },
269
- "output": {
270
- "schema": "lib/contract-schemas/test-report.json",
271
- "type": "test-report"
272
- },
273
- "preconditions": [
274
- "Test plan exists or is derivable from acceptance criteria"
275
- ],
276
- "postconditions": [
277
- "Verdict in {PASS, FAIL}",
278
- "Coverage meets project threshold",
279
- "FAIL blocks DONE in workflow"
280
- ]
281
- },
282
- {
283
- "id": "reviewer-to-security",
284
- "producer": "cx-reviewer",
285
- "consumer": "cx-security",
286
- "trigger": { "riskFlags": ["security"] },
287
- "input": {
288
- "schema": "lib/contract-schemas/review-report.json",
289
- "mustContain": ["target", "findings"]
290
- },
291
- "output": {
292
- "schema": "lib/contract-schemas/review-report.json",
293
- "type": "review-report",
294
- "specialization": "security",
295
- "mustContain": ["threatModelUpdatedAt", "contractStart"]
296
- },
297
- "preconditions": [
298
- "Scope tagged as auth/secrets/payments/user-data"
299
- ],
300
- "postconditions": [
301
- "Attacker-perspective findings logged",
302
- "Threat model updated if architecture surface changed",
303
- "threatModelUpdatedAt >= contractStart — prevents post-hoc threat models written after the architecture has shipped"
304
- ]
305
- },
306
- {
307
- "id": "qa-to-release-manager",
308
- "producer": "cx-qa",
309
- "consumer": "cx-release-manager",
310
- "trigger": { "intent": ["implementation"], "workCategory": "deep" },
311
- "input": {
312
- "schema": "lib/contract-schemas/test-report.json",
313
- "mustContain": ["verdict", "passed", "failed", "coverage"]
314
- },
315
- "output": {
316
- "shape": "release-decision",
317
- "mustContain": ["decision", "rolloutPlan", "rollbackPlan"]
318
- },
319
- "preconditions": [
320
- "All upstream verdicts APPROVED; QA verdict PASS"
321
- ],
322
- "postconditions": [
323
- "Rollback plan tested, not just described",
324
- "Rollout plan has concrete checkpoint signals"
325
- ]
326
- },
327
- {
328
- "id": "sre-to-release-manager",
329
- "producer": "cx-sre",
330
- "consumer": "cx-release-manager",
331
- "trigger": { "riskFlags": ["dataIntegrity"], "intent": ["implementation"] },
332
- "input": {
333
- "shape": "sre-readiness",
334
- "mustContain": ["slos", "runbooks", "alerts", "dashboards"]
335
- },
336
- "output": {
337
- "shape": "release-decision",
338
- "mustContain": ["decision", "rollbackPlan"]
339
- },
340
- "preconditions": [
341
- "Runbook exists for the new code path; rollback procedure verified"
342
- ],
343
- "postconditions": [
344
- "On-call briefed; alert thresholds set"
345
- ]
346
- },
347
- {
348
- "id": "any-to-docs-keeper",
349
- "producer": "*",
350
- "consumer": "cx-docs-keeper",
351
- "trigger": { "postConsumer": true, "changedCoreDocs": true },
352
- "input": {
353
- "shape": "doc-delta",
354
- "mustContain": ["filesChanged", "decision"]
355
- },
356
- "output": {
357
- "shape": "doc-sync",
358
- "mustContain": ["updatedDocs", "crossReferencesAdded", "crossDocCoherenceCheckRan", "coherenceDiff"]
359
- },
360
- "preconditions": [
361
- "Implementation or decision is marked DONE"
362
- ],
363
- "postconditions": [
364
- "Cross-doc coherence preserved (PRD ↔ ADR ↔ code)",
365
- "AUTO-managed regions regenerated via construct sync",
366
- "crossDocCoherenceCheckRan=true with a named coherenceDiff — prevents stale-doc PRs that claim 'docs updated' without a real diff"
367
- ]
368
- },
369
- {
370
- "id": "any-to-debugger",
371
- "producer": "*",
372
- "consumer": "cx-debugger",
373
- "trigger": { "intent": "investigation", "category": "bug" },
374
- "input": {
375
- "shape": "bug-signal",
376
- "mustContain": ["symptoms", "scope"]
377
- },
378
- "output": {
379
- "shape": "root-cause-report",
380
- "mustContain": ["rootCause", "rootCauseConfirmedVia", "fix"],
381
- "mustMatchEnum": {
382
- "rootCauseConfirmedVia": ["reproduction", "trace", "test"]
383
- }
384
- },
385
- "preconditions": [
386
- "Bug reproduced or trace captured before proposing a fix"
387
- ],
388
- "postconditions": [
389
- "rootCauseConfirmedVia in {reproduction, trace, test} — prevents symptom-only fixes that don't address the actual cause"
390
- ]
391
- },
392
- {
393
- "id": "any-to-designer",
394
- "producer": "*",
395
- "consumer": "cx-designer",
396
- "trigger": { "riskFlags": ["ui", "accessibility"] },
397
- "input": {
398
- "shape": "design-brief",
399
- "mustContain": ["surface", "users", "context"]
400
- },
401
- "output": {
402
- "shape": "design-deliverable",
403
- "mustContain": ["deliverable", "accessibilityCheckRan"]
404
- },
405
- "preconditions": [
406
- "Affected surface scoped"
407
- ],
408
- "postconditions": [
409
- "accessibilityCheckRan=true — prevents post-hoc a11y fixes by forcing a pre-ship check on every design deliverable"
410
- ]
411
- },
412
- {
413
- "id": "any-to-sre-incident",
414
- "producer": "*",
415
- "consumer": "cx-sre",
416
- "trigger": { "intent": "investigation", "category": "incident" },
417
- "input": {
418
- "shape": "incident-signal",
419
- "mustContain": ["symptoms", "scope", "firstObserved"]
420
- },
421
- "output": {
422
- "shape": "incident-report",
423
- "mustContain": ["rootCause", "timeline", "remediation", "preventions"]
424
- },
425
- "preconditions": [
426
- "Blast radius assessed before remediation"
427
- ],
428
- "postconditions": [
429
- "Blameless postmortem; no tickets in Problem statement"
430
- ]
431
- },
432
- {
433
- "id": "construct-to-rd-lead",
434
- "producer": "construct",
435
- "consumer": "cx-rd-lead",
436
- "trigger": { "framingChallenge.required": true },
437
- "input": {
438
- "shape": "framing-request",
439
- "mustContain": ["goal", "uncertainty", "assumptions"]
440
- },
441
- "output": {
442
- "shape": "framing-brief",
443
- "mustContain": ["problemStatement", "hypothesis", "keyUnknowns", "evidenceThreshold", "recommendation"]
444
- },
445
- "preconditions": [
446
- "Framing gate fires before architecture work begins",
447
- "Strategy bets and non-bets reviewed in `.cx/knowledge/decisions/strategy/`"
448
- ],
449
- "postconditions": [
450
- "Hypothesis is falsifiable and stated as 'We believe [X] will result in [Y] because [Z].'",
451
- "Evidence threshold names a specific result that would confirm or disconfirm",
452
- {
453
- "id": "rd-framing-has-problem-section",
454
- "description": "Framing artifact must contain a Problem section",
455
- "check": "artifact-has-section",
456
- "section": "Problem"
457
- },
458
- {
459
- "id": "rd-framing-has-constraints-section",
460
- "description": "Framing artifact must contain a Constraints section",
461
- "check": "artifact-has-section",
462
- "section": "Constraints"
463
- },
464
- {
465
- "id": "rd-framing-has-open-questions-section",
466
- "description": "Framing artifact must contain an Open Questions section",
467
- "check": "artifact-has-section",
468
- "section": "Open Questions"
469
- }
470
- ]
471
- },
472
- {
473
- "id": "rd-lead-to-architect",
474
- "producer": "cx-rd-lead",
475
- "consumer": "cx-architect",
476
- "trigger": { "framingChallenge.required": true, "rdLead.verdict": "frame-approved" },
477
- "input": {
478
- "shape": "framing-brief",
479
- "mustContain": ["problemStatement", "hypothesis", "keyUnknowns", "evidenceThreshold", "recommendation"]
480
- },
481
- "output": {
482
- "schema": "lib/contract-schemas/decision.json",
483
- "type": "decision"
484
- },
485
- "preconditions": [
486
- "Framing artifact exists at `.cx/framing/<slug>.md`",
487
- "Hypothesis cleared of unverified assumptions"
488
- ],
489
- "postconditions": [
490
- "ADR cites the framing brief as the upstream source for its Problem statement",
491
- "Architect does not productionize components listed under 'WHAT NOT TO PRODUCTIONIZE YET'"
492
- ]
493
- },
494
- {
495
- "id": "product-manager-to-ux-researcher",
496
- "producer": "cx-product-manager",
497
- "consumer": "cx-ux-researcher",
498
- "trigger": { "docAuthoring.docType": ["prd", "meta-prd", "prfaq"], "riskFlags": ["ux"] },
499
- "input": {
500
- "shape": "ux-research-request",
501
- "mustContain": ["surface", "userQuestion", "decisionPending"]
502
- },
503
- "output": {
504
- "shape": "ux-brief",
505
- "mustContain": ["userProfiles", "jobsToBeDone", "frictionMap", "assumptionsLog"]
506
- },
507
- "preconditions": [
508
- "PRD has an open user-research question; PRD not finalized"
509
- ],
510
- "postconditions": [
511
- "Every friction-map entry cites the observation or session it came from",
512
- "Stated preferences are labeled distinctly from observed behaviors",
513
- {
514
- "id": "ux-research-has-sources-section",
515
- "description": "UX research artifact must contain a Sources section",
516
- "check": "artifact-has-section",
517
- "section": "Sources"
518
- },
519
- {
520
- "id": "ux-research-claims-cited",
521
- "description": "Every numeric or generalization claim in the UX brief cites the research source",
522
- "check": "artifact-claims-cited"
523
- }
524
- ]
525
- },
526
- {
527
- "id": "architect-to-operations",
528
- "producer": "cx-architect",
529
- "consumer": "cx-operations",
530
- "trigger": { "intent": ["implementation"], "workCategory": "deep" },
531
- "input": {
532
- "schema": "lib/contract-schemas/decision.json",
533
- "mustContain": ["goal", "approach", "tasks", "acceptanceCriteria"]
534
- },
535
- "output": {
536
- "shape": "ops-plan",
537
- "mustContain": ["sequencedTasks", "dependencyGraph", "ownershipMatrix", "verificationGates"]
538
- },
539
- "preconditions": [
540
- "Architect plan and devil-advocate feedback resolved",
541
- "Tasks are atomic and individually verifiable"
542
- ],
543
- "postconditions": [
544
- "Every task names a single owner",
545
- "Every task names a verification gate and definition-of-done",
546
- "Dependency graph identifies blockers; no task lies on a hidden critical path"
547
- ]
548
- },
549
- {
550
- "id": "any-to-business-strategist",
551
- "producer": "*",
552
- "consumer": "cx-business-strategist",
553
- "trigger": { "strategy.required": true },
554
- "input": {
555
- "shape": "strategy-request",
556
- "mustContain": ["goal", "marketContext", "decisionPending"]
557
- },
558
- "output": {
559
- "shape": "strategic-memo",
560
- "mustContain": ["strategicContext", "options", "recommendation", "evidence", "decisionDeadline"]
561
- },
562
- "preconditions": [
563
- "Strategy documents in `.cx/knowledge/decisions/strategy/` reviewed for declared Bets and Non-bets"
564
- ],
565
- "postconditions": [
566
- "Options section contains 2-4 genuinely distinct strategic paths, not implementation variants",
567
- "Any recommendation that contradicts a declared Non-bet is surfaced explicitly with a user-decision marker",
568
- {
569
- "id": "strategic-memo-has-market-context",
570
- "description": "Strategic memo must contain a Market Context section",
571
- "check": "artifact-has-section",
572
- "section": "Market Context"
573
- },
574
- {
575
- "id": "strategic-memo-options-nonempty",
576
- "description": "Strategic memo Options section is present and non-empty",
577
- "check": "artifact-section-nonempty",
578
- "section": "Options"
579
- },
580
- {
581
- "id": "strategic-memo-has-strategic-risks",
582
- "description": "Strategic memo must contain a Strategic Risks section",
583
- "check": "artifact-has-section",
584
- "section": "Strategic Risks"
585
- },
586
- {
587
- "id": "strategic-memo-claims-cited",
588
- "description": "Every market/competitive numeric claim cites a primary source with a date",
589
- "check": "artifact-claims-cited"
590
- }
591
- ]
592
- },
593
- {
594
- "id": "business-strategist-to-product-manager",
595
- "producer": "cx-business-strategist",
596
- "consumer": "cx-product-manager",
597
- "trigger": { "strategy.required": true },
598
- "input": {
599
- "shape": "strategic-memo",
600
- "mustContain": ["strategicContext", "recommendation", "evidence"]
601
- },
602
- "output": {
603
- "shape": "prd-handoff",
604
- "mustContain": ["problem", "users", "functionalRequirements", "acceptanceCriteria"]
605
- },
606
- "preconditions": [
607
- "Strategic memo signed off; recommended option carried into PRD framing"
608
- ],
609
- "postconditions": [
610
- "PRD Problem statement traces to the strategic memo's market context, not to internal roadmap items",
611
- "PRD acknowledges the competitive dynamic named in the strategic memo"
612
- ]
613
- },
614
- {
615
- "id": "product-manager-to-data-analyst",
616
- "producer": "cx-product-manager",
617
- "consumer": "cx-data-analyst",
618
- "trigger": { "docAuthoring.docType": ["prd", "meta-prd"], "riskFlags": ["metrics"] },
619
- "input": {
620
- "shape": "metrics-request",
621
- "mustContain": ["successDefinition", "decisionPending"]
622
- },
623
- "output": {
624
- "shape": "metrics-analysis",
625
- "mustContain": ["metricDefinition", "baseline", "successThreshold", "dataQualityCaveats"]
626
- },
627
- "preconditions": [
628
- "Success definition stated in writing before metric design begins"
629
- ],
630
- "postconditions": [
631
- "Every percentage, multiplier, or magnitude cites the query, dashboard, or run that produced it",
632
- "Baseline is a measured value or names the plan to establish one",
633
- {
634
- "id": "metrics-analysis-claims-cited",
635
- "description": "Every numeric claim in the analysis cites the query or dashboard",
636
- "check": "artifact-claims-cited"
637
- }
638
- ]
639
- },
640
- {
641
- "id": "data-analyst-to-product-manager",
642
- "producer": "cx-data-analyst",
643
- "consumer": "cx-product-manager",
644
- "trigger": { "docAuthoring.docType": ["prd", "meta-prd"], "riskFlags": ["metrics"] },
645
- "input": {
646
- "shape": "metrics-analysis",
647
- "mustContain": ["metricDefinition", "baseline", "successThreshold"]
648
- },
649
- "output": {
650
- "shape": "prd-handoff",
651
- "mustContain": ["acceptanceCriteria", "successMetrics"]
652
- },
653
- "preconditions": [
654
- "Metric definition reviewed for vanity-metric risk and for hit-without-solving-the-problem risk"
655
- ],
656
- "postconditions": [
657
- "PRD success metrics carry the cited baseline and threshold from the analysis",
658
- "Metrics that can be hit without solving the problem are flagged and replaced"
659
- ]
660
- },
661
- {
662
- "id": "architect-to-evaluator",
663
- "producer": "cx-architect",
664
- "consumer": "cx-evaluator",
665
- "trigger": { "riskFlags": ["ai", "quality"], "intent": ["implementation"] },
666
- "input": {
667
- "schema": "lib/contract-schemas/decision.json",
668
- "mustContain": ["goal", "approach", "evalCriteria"]
669
- },
670
- "output": {
671
- "shape": "eval-spec",
672
- "mustContain": ["evaluationCriteria", "scoringRubric", "testCases", "comparisonProtocol", "passFailThreshold"]
673
- },
674
- "preconditions": [
675
- "What 'better' means is defined in writing before the work is done",
676
- "Baseline run identified or scheduled before proposed change runs"
677
- ],
678
- "postconditions": [
679
- "Failing case is defined before results are seen",
680
- "Regression checks enumerated; not just success-path test cases",
681
- {
682
- "id": "eval-spec-has-success-criteria",
683
- "description": "Eval spec must contain a Success Criteria section",
684
- "check": "artifact-has-section",
685
- "section": "Success Criteria"
686
- },
687
- {
688
- "id": "eval-spec-has-baseline",
689
- "description": "Eval spec must contain a Baseline section",
690
- "check": "artifact-has-section",
691
- "section": "Baseline"
692
- }
693
- ]
694
- },
695
- {
696
- "id": "architect-to-platform-engineer",
697
- "producer": "cx-architect",
698
- "consumer": "cx-platform-engineer",
699
- "trigger": { "riskFlags": ["platform", "infrastructure"], "intent": ["implementation"] },
700
- "input": {
701
- "schema": "lib/contract-schemas/decision.json",
702
- "mustContain": ["goal", "approach", "platformDependencies"]
703
- },
704
- "output": {
705
- "shape": "platform-plan",
706
- "mustContain": ["problem", "solution", "impact", "migration", "rollback"]
707
- },
708
- "preconditions": [
709
- "Observed friction quantified; not hypothetical future problems",
710
- "Existing CI/CD and tooling surveyed before proposing new tooling"
711
- ],
712
- "postconditions": [
713
- "Migration path described for existing workflows",
714
- "Rollback procedure exists in case the change makes things worse",
715
- "Improvement removes more configuration than it adds, or the added config is justified"
716
- ]
717
- },
718
- {
719
- "id": "platform-engineer-to-engineer",
720
- "producer": "cx-platform-engineer",
721
- "consumer": "cx-engineer",
722
- "trigger": { "riskFlags": ["platform"] },
723
- "input": {
724
- "shape": "platform-plan",
725
- "mustContain": ["solution", "migration", "rollback"]
726
- },
727
- "output": {
728
- "schema": "lib/contract-schemas/implementation.json",
729
- "type": "implementation"
730
- },
731
- "preconditions": [
732
- "Platform deps available in CI; lockfile updates reviewed",
733
- "Secrets confirmed absent from build logs"
734
- ],
735
- "postconditions": [
736
- "Implementation cites the platform plan and applies the migration steps in order",
737
- "Rollback procedure verified once on a non-production environment"
738
- ]
739
- },
740
- {
741
- "id": "architect-to-legal-compliance",
742
- "producer": "cx-architect",
743
- "consumer": "cx-legal-compliance",
744
- "trigger": { "riskFlags": ["compliance", "privacy", "licensing"] },
745
- "input": {
746
- "schema": "lib/contract-schemas/decision.json",
747
- "mustContain": ["goal", "approach", "dataFlows"]
748
- },
749
- "output": {
750
- "shape": "compliance-memo",
751
- "mustContain": ["risks", "severity", "remediation"]
752
- },
753
- "preconditions": [
754
- "Data flows enumerated: what is collected, stored, processed, and exported",
755
- "Dependency tree surfaced past the first layer for licensing review"
756
- ],
757
- "postconditions": [
758
- "Every assertion cites the regulation, standard, or contract clause it rests on",
759
- "AI-generated user-facing content has a disclosure strategy noted, or is marked not-applicable with reason",
760
- {
761
- "id": "compliance-memo-has-regulatory-citations",
762
- "description": "Compliance memo must contain a Regulatory Citations section",
763
- "check": "artifact-has-section",
764
- "section": "Regulatory Citations"
765
- },
766
- {
767
- "id": "compliance-memo-has-remediation-plan",
768
- "description": "Compliance memo must contain a Remediation Plan section",
769
- "check": "artifact-has-section",
770
- "section": "Remediation Plan"
771
- }
772
- ]
773
- },
774
- {
775
- "id": "legal-compliance-to-release-manager",
776
- "producer": "cx-legal-compliance",
777
- "consumer": "cx-release-manager",
778
- "trigger": { "riskFlags": ["compliance"], "intent": ["implementation"] },
779
- "input": {
780
- "shape": "compliance-memo",
781
- "mustContain": ["risks", "severity", "remediation"]
782
- },
783
- "output": {
784
- "shape": "release-decision",
785
- "mustContain": ["decision", "rolloutPlan", "rollbackPlan"]
786
- },
787
- "preconditions": [
788
- "All must-fix compliance items closed or accepted in writing by the release owner"
789
- ],
790
- "postconditions": [
791
- "Release blocks if any must-fix item is unresolved",
792
- "Should-fix items carry a tracking issue and an owner"
793
- ]
794
- },
795
- {
796
- "id": "designer-to-accessibility",
797
- "producer": "cx-designer",
798
- "consumer": "cx-accessibility",
799
- "trigger": { "riskFlags": ["ui", "accessibility"] },
800
- "input": {
801
- "shape": "design-deliverable",
802
- "mustContain": ["surface", "deliverable", "accessibilityCheckRan"]
803
- },
804
- "output": {
805
- "shape": "a11y-findings",
806
- "mustContain": ["findings", "wcagCriterion", "userImpact", "fix"]
807
- },
808
- "preconditions": [
809
- "Flow exercised with a keyboard and a screen reader; not just spec-read"
810
- ],
811
- "postconditions": [
812
- "Every finding cites a WCAG criterion and a concrete repro step",
813
- "Findings that weren't exercised with the assistive technology are labeled 'unverified'"
814
- ]
815
- },
816
- {
817
- "id": "accessibility-to-qa",
818
- "producer": "cx-accessibility",
819
- "consumer": "cx-qa",
820
- "trigger": { "riskFlags": ["ui", "accessibility"] },
821
- "input": {
822
- "shape": "a11y-findings",
823
- "mustContain": ["findings", "wcagCriterion", "userImpact"]
824
- },
825
- "output": {
826
- "schema": "lib/contract-schemas/test-report.json",
827
- "type": "test-report"
828
- },
829
- "preconditions": [
830
- "A11y findings filed against specific elements (file:line) before QA verification"
831
- ],
832
- "postconditions": [
833
- "QA test plan covers keyboard-only and screen-reader paths for each finding",
834
- "Findings flagged 'unverified' by accessibility get a verified test in QA before close"
835
- ]
836
- },
837
- {
838
- "id": "any-to-explorer",
839
- "producer": "*",
840
- "consumer": "cx-explorer",
841
- "trigger": { "intent": "investigation", "category": "exploration" },
842
- "input": {
843
- "shape": "exploration-request",
844
- "mustContain": ["question", "scope"]
845
- },
846
- "output": {
847
- "shape": "exploration-findings",
848
- "mustContain": ["entryPoints", "executionPath", "keyFiles", "dataFlow", "gaps"]
849
- },
850
- "preconditions": [
851
- "Scope tagged; investigation does not follow imports past two hops from named entry points"
852
- ],
853
- "postconditions": [
854
- "Every claim about existing code cites file:line from a read actually performed",
855
- "One match is not called a pattern; multi-callsite patterns cite each call site",
856
- {
857
- "id": "exploration-findings-claims-cited",
858
- "description": "Every load-bearing claim cites file:line or a primary external reference",
859
- "check": "artifact-claims-cited"
860
- }
861
- ]
862
- },
863
- {
864
- "id": "explorer-to-engineer",
865
- "producer": "cx-explorer",
866
- "consumer": "cx-engineer",
867
- "trigger": { "intent": ["implementation", "fix"], "explorer.findingsReady": true },
868
- "input": {
869
- "shape": "exploration-findings",
870
- "mustContain": ["entryPoints", "keyFiles", "gaps"]
871
- },
872
- "output": {
873
- "schema": "lib/contract-schemas/implementation.json",
874
- "type": "implementation"
875
- },
876
- "preconditions": [
877
- "Exploration findings reviewed; gaps and surprising dependencies surfaced"
878
- ],
879
- "postconditions": [
880
- "Implementation reads the files cited in keyFiles before edits",
881
- "Gaps named by explorer (missing tests, missing error handling) are addressed or filed"
882
- ]
883
- },
884
- {
885
- "id": "any-to-trace-reviewer",
886
- "producer": "*",
887
- "consumer": "cx-trace-reviewer",
888
- "trigger": { "trace.anomaly": true },
889
- "input": {
890
- "shape": "trace-analysis-request",
891
- "mustContain": ["scope", "window"]
892
- },
893
- "output": {
894
- "shape": "trace-analysis",
895
- "mustContain": ["flaggedAgents", "evidence", "recommendation"]
896
- },
897
- "preconditions": [
898
- "Trace backend reachable via the configured `CONSTRUCT_TRACE_BACKEND` adapter"
899
- ],
900
- "postconditions": [
901
- "Every performance claim cites the trace id and span",
902
- "Promotion verdicts cite the staging-vs-production score delta, not a vibe",
903
- "Variance and trend reported alongside median; stable medians that hide tail variance are surfaced"
904
- ]
905
- },
906
- {
907
- "id": "trace-reviewer-to-sre",
908
- "producer": "cx-trace-reviewer",
909
- "consumer": "cx-sre",
910
- "trigger": { "trace.anomaly": true, "riskFlags": ["performance", "reliability"] },
911
- "input": {
912
- "shape": "trace-analysis",
913
- "mustContain": ["flaggedAgents", "evidence"]
914
- },
915
- "output": {
916
- "shape": "sre-readiness",
917
- "mustContain": ["slos", "runbooks", "alerts"]
918
- },
919
- "preconditions": [
920
- "Flagged agents meet the minimum trace threshold (20+); insufficient-trace agents deferred"
921
- ],
922
- "postconditions": [
923
- "SRE adjusts alert thresholds or SLOs based on the cited trace evidence",
924
- "Runbook updated for the failure pattern identified at fleet level"
925
- ]
926
- },
927
- {
928
- "id": "architect-to-data-engineer",
929
- "producer": "cx-architect",
930
- "consumer": "cx-data-engineer",
931
- "trigger": { "riskFlags": ["data", "pipeline"], "intent": ["implementation"] },
932
- "input": {
933
- "schema": "lib/contract-schemas/decision.json",
934
- "mustContain": ["goal", "approach", "dataContracts"]
935
- },
936
- "output": {
937
- "shape": "pipeline-spec",
938
- "mustContain": ["dataContract", "schema", "qualityGates", "retryPolicy"]
939
- },
940
- "preconditions": [
941
- "Data volume, latency requirements, and existing stack clarified before architecture proposed",
942
- "Existing schema inspected; column names and table relationships not invented"
943
- ],
944
- "postconditions": [
945
- "Pipeline is idempotent and observable; not running on faith",
946
- "Data contract is written down; quality gates defined as part of the design",
947
- {
948
- "id": "pipeline-spec-has-idempotency-plan",
949
- "description": "Pipeline spec must contain an Idempotency Plan section",
950
- "check": "artifact-has-section",
951
- "section": "Idempotency Plan"
952
- },
953
- {
954
- "id": "pipeline-spec-has-observability",
955
- "description": "Pipeline spec must contain an Observability section",
956
- "check": "artifact-has-section",
957
- "section": "Observability"
958
- }
959
- ]
960
- },
961
- {
962
- "id": "data-engineer-to-platform-engineer",
963
- "producer": "cx-data-engineer",
964
- "consumer": "cx-platform-engineer",
965
- "trigger": { "riskFlags": ["data", "pipeline", "infrastructure"] },
966
- "input": {
967
- "shape": "pipeline-spec",
968
- "mustContain": ["dataContract", "qualityGates"]
969
- },
970
- "output": {
971
- "shape": "platform-plan",
972
- "mustContain": ["problem", "solution", "migration", "rollback"]
973
- },
974
- "preconditions": [
975
- "Pipeline operational requirements (alerts, retries, backfills) stated in pipeline spec"
976
- ],
977
- "postconditions": [
978
- "Operational burden (who maintains, how to debug) accepted by platform owner",
979
- "Pipeline observability surfaces appear on a named dashboard, not just in logs"
980
- ]
981
- },
982
- {
983
- "id": "qa-to-test-automation",
984
- "producer": "cx-qa",
985
- "consumer": "cx-test-automation",
986
- "trigger": { "intent": ["implementation"], "automation.required": true },
987
- "input": {
988
- "schema": "lib/contract-schemas/test-report.json",
989
- "mustContain": ["testStrategy", "verdict"]
990
- },
991
- "output": {
992
- "shape": "automation-plan",
993
- "mustContain": ["framework", "coverageTargets", "flakeBudget", "deterministicWaits"]
994
- },
995
- "preconditions": [
996
- "Existing test infrastructure surveyed before proposing new frameworks",
997
- "Flaky-test signal collected over N runs before calling a test flaky"
998
- ],
999
- "postconditions": [
1000
- "Tests use deterministic waits and stable selectors; not arbitrary sleeps",
1001
- "Coverage targets aim at behaviors that matter, not at line counts that pad the number",
1002
- {
1003
- "id": "automation-plan-has-flake-budget",
1004
- "description": "Automation plan must contain a Flake Budget section",
1005
- "check": "artifact-has-section",
1006
- "section": "Flake Budget"
1007
- }
1008
- ]
1009
- },
1010
- {
1011
- "id": "test-automation-to-engineer",
1012
- "producer": "cx-test-automation",
1013
- "consumer": "cx-engineer",
1014
- "trigger": { "automation.required": true },
1015
- "input": {
1016
- "shape": "automation-plan",
1017
- "mustContain": ["framework", "coverageTargets", "flakeBudget"]
1018
- },
1019
- "output": {
1020
- "schema": "lib/contract-schemas/implementation.json",
1021
- "type": "implementation"
1022
- },
1023
- "preconditions": [
1024
- "Test scaffolding lands before behavioral edits so the test fails for the right reason first"
1025
- ],
1026
- "postconditions": [
1027
- "Engineer adds at least one failing test that demonstrates the bug or missing behavior before implementing the fix",
1028
- "Quarantined flaky tests carry an owner and a remediation date"
1029
- ]
1030
- }
1031
- ]
1032
- }