@geraldmaron/construct 1.1.1 → 1.2.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 (408) hide show
  1. package/README.md +29 -19
  2. package/bin/construct +311 -81
  3. package/bin/construct-postinstall.mjs +30 -2
  4. package/examples/distribution/README.md +42 -0
  5. package/examples/distribution/manifest.json +53 -0
  6. package/examples/distribution/sources/adr.md +84 -0
  7. package/examples/distribution/sources/deck-one-pager.md +65 -0
  8. package/examples/distribution/sources/prd-platform.md +161 -0
  9. package/examples/distribution/sources/research-brief.md +80 -0
  10. package/examples/distribution/sources/rfc-platform.md +82 -0
  11. package/examples/distribution/sources/runbook.md +103 -0
  12. package/examples/distribution/sources/strategy.md +88 -0
  13. package/lib/adapters-sync.mjs +67 -0
  14. package/lib/artifact-gate-notice.mjs +38 -0
  15. package/lib/artifact-manifest.mjs +112 -0
  16. package/lib/artifact-release-gate.mjs +171 -0
  17. package/lib/artifact-reviewers.mjs +68 -0
  18. package/lib/artifact-type-from-path.mjs +79 -0
  19. package/lib/audit-skills.mjs +4 -0
  20. package/lib/audit-specialists.mjs +285 -0
  21. package/lib/audit-trail.mjs +1 -1
  22. package/lib/auto-docs.mjs +87 -18
  23. package/lib/beads/drift.mjs +27 -6
  24. package/lib/beads-client.mjs +49 -121
  25. package/lib/beads-optimistic.mjs +5 -12
  26. package/lib/brand-fonts.mjs +93 -0
  27. package/lib/brand-prose.mjs +214 -0
  28. package/lib/brand-tokens.mjs +92 -0
  29. package/lib/bridges/copilot-proxy.mjs +13 -26
  30. package/lib/capability-ledger.mjs +156 -0
  31. package/lib/certification/artifact-fixtures.mjs +132 -0
  32. package/lib/certification/artifact-gates.mjs +63 -0
  33. package/lib/certification/artifact-provenance.mjs +97 -0
  34. package/lib/certification/canonical-scenarios.mjs +78 -0
  35. package/lib/certification/cli.mjs +191 -0
  36. package/lib/certification/dashboard-api.mjs +71 -0
  37. package/lib/certification/demo-parity.mjs +116 -0
  38. package/lib/certification/document-io-fixtures.mjs +246 -0
  39. package/lib/certification/document-workflow.mjs +97 -0
  40. package/lib/certification/eval-bridge.mjs +77 -0
  41. package/lib/certification/model-routing.mjs +149 -0
  42. package/lib/certification/prompt-budget.mjs +119 -0
  43. package/lib/certification/rc-gate.mjs +206 -0
  44. package/lib/certification/real-llm-scenarios.mjs +303 -0
  45. package/lib/certification/role-cards.mjs +113 -0
  46. package/lib/certification/role-overlays.mjs +117 -0
  47. package/lib/certification/run.mjs +122 -0
  48. package/lib/certification/runner.mjs +323 -0
  49. package/lib/certification/scenarios.mjs +51 -0
  50. package/lib/certification/skill-inventory.mjs +289 -0
  51. package/lib/certification/skill-scenarios.mjs +147 -0
  52. package/lib/certification/specialist-contracts.mjs +85 -0
  53. package/lib/certification/specialist-scenarios.mjs +175 -0
  54. package/lib/certification/stale-impact.mjs +146 -0
  55. package/lib/certification/status.mjs +252 -0
  56. package/lib/certification/store.mjs +77 -0
  57. package/lib/chat/cli.mjs +333 -0
  58. package/lib/chat/command-suggest.mjs +161 -0
  59. package/lib/chat/commands.mjs +215 -0
  60. package/lib/chat/config.mjs +142 -0
  61. package/lib/chat/context-compactor.mjs +250 -0
  62. package/lib/chat/context-continuation.mjs +253 -0
  63. package/lib/chat/continuation-source.mjs +58 -0
  64. package/lib/chat/demo-guide.mjs +61 -0
  65. package/lib/chat/design-tokens.mjs +91 -0
  66. package/lib/chat/desktop-binary.mjs +79 -0
  67. package/lib/chat/desktop-build.mjs +130 -0
  68. package/lib/chat/desktop-launcher.mjs +133 -0
  69. package/lib/chat/evidence.mjs +145 -0
  70. package/lib/chat/export.mjs +74 -0
  71. package/lib/chat/harness/driver.mjs +91 -0
  72. package/lib/chat/list-picker.mjs +112 -0
  73. package/lib/chat/model-picker.mjs +356 -0
  74. package/lib/chat/openrouter-fallback.mjs +151 -0
  75. package/lib/chat/permission-prompt.mjs +33 -0
  76. package/lib/chat/picker-catalog.mjs +45 -0
  77. package/lib/chat/policy-telemetry.mjs +34 -0
  78. package/lib/chat/present.mjs +245 -0
  79. package/lib/chat/session-context.mjs +39 -0
  80. package/lib/chat/session-persist.mjs +73 -0
  81. package/lib/chat/session-restore.mjs +71 -0
  82. package/lib/chat/session-settings.mjs +53 -0
  83. package/lib/chat/system-prompt.mjs +52 -0
  84. package/lib/chat/transparency.mjs +93 -0
  85. package/lib/chat/tui/color-scheme.mjs +42 -0
  86. package/lib/chat/tui/markdown.mjs +123 -0
  87. package/lib/chat/tui/presentation.mjs +100 -0
  88. package/lib/chat/tui/render.mjs +500 -0
  89. package/lib/chat/tui/turn-block.mjs +284 -0
  90. package/lib/chat/tui/turn-present.mjs +18 -0
  91. package/lib/chat/tui/turn-state.mjs +88 -0
  92. package/lib/chat/tui/usage.mjs +122 -0
  93. package/lib/chat/web-commands.mjs +146 -0
  94. package/lib/chat/web-launcher.mjs +63 -0
  95. package/lib/chat/web-picker-keys.mjs +46 -0
  96. package/lib/chat/web-session.mjs +159 -0
  97. package/lib/cli-commands.mjs +129 -15
  98. package/lib/comment-lint.mjs +6 -4
  99. package/lib/config/schema.mjs +36 -5
  100. package/lib/contract-schemas/decision.json +50 -0
  101. package/lib/contract-schemas/implementation.json +51 -0
  102. package/lib/contract-schemas/review-report.json +32 -0
  103. package/lib/contract-schemas/test-report.json +43 -0
  104. package/lib/contracts/construct-handoff.mjs +60 -0
  105. package/lib/contracts/validate.mjs +32 -3
  106. package/lib/contracts/violation-log.mjs +58 -5
  107. package/lib/dashboard-demo.mjs +71 -0
  108. package/lib/dashboard-static.mjs +19 -5
  109. package/lib/decisions/registry.mjs +5 -3
  110. package/lib/deck-export-pptx.mjs +1152 -0
  111. package/lib/demo-recording.mjs +142 -0
  112. package/lib/demo-script.mjs +114 -0
  113. package/lib/demo-surface.mjs +249 -0
  114. package/lib/demo.mjs +598 -140
  115. package/lib/diagram-export.mjs +192 -0
  116. package/lib/diagram.mjs +13 -11
  117. package/lib/docs-verify.mjs +25 -7
  118. package/lib/doctor/index.mjs +3 -1
  119. package/lib/doctor/project-adapters.mjs +44 -0
  120. package/lib/doctor/watchers/cx-budget.mjs +98 -0
  121. package/lib/doctor/watchers/graph-staleness.mjs +52 -0
  122. package/lib/doctor/watchers/process-pressure.mjs +4 -3
  123. package/lib/document-export.mjs +360 -36
  124. package/lib/document-extract.mjs +44 -4
  125. package/lib/document-ingest.mjs +29 -20
  126. package/lib/embed/cli.mjs +2 -2
  127. package/lib/embed/daemon.mjs +18 -46
  128. package/lib/embed/worker.mjs +2 -2
  129. package/lib/embedded-contract/model-resolve.mjs +10 -9
  130. package/lib/env-config.mjs +26 -0
  131. package/lib/evals/dataset.mjs +137 -0
  132. package/lib/evals/gates.mjs +175 -0
  133. package/lib/graph/build-co-change.mjs +54 -0
  134. package/lib/graph/build-from-registry.mjs +136 -0
  135. package/lib/graph/build-import-graph.mjs +153 -0
  136. package/lib/graph/cli.mjs +110 -0
  137. package/lib/graph/impact-cli.mjs +89 -0
  138. package/lib/graph/impact.mjs +108 -0
  139. package/lib/graph/staleness.mjs +44 -0
  140. package/lib/graph/store.mjs +172 -0
  141. package/lib/health-check.mjs +90 -76
  142. package/lib/hooks/artifact-release-gate.mjs +43 -0
  143. package/lib/hooks/brand-prose-lint.mjs +38 -0
  144. package/lib/hooks/graph-impact-advisory.mjs +62 -0
  145. package/lib/hooks/session-optimize.mjs +84 -207
  146. package/lib/hooks/session-start.mjs +4 -5
  147. package/lib/host-disposition.mjs +7 -0
  148. package/lib/improvement/cli.mjs +189 -0
  149. package/lib/improvement/controller.mjs +137 -0
  150. package/lib/improvement/proposal.mjs +120 -0
  151. package/lib/improvement/specialist-loop.mjs +192 -0
  152. package/lib/improvement/store.mjs +89 -0
  153. package/lib/improvement/surface.mjs +219 -0
  154. package/lib/ingest-tooling.mjs +97 -0
  155. package/lib/init/doc-lanes.mjs +165 -0
  156. package/lib/init-docs.mjs +31 -178
  157. package/lib/init-unified.mjs +27 -97
  158. package/lib/init-update-guide.mjs +102 -0
  159. package/lib/init-update.mjs +32 -1
  160. package/lib/init.mjs +8 -0
  161. package/lib/install/desktop-binary-download.mjs +85 -0
  162. package/lib/install/legacy-global-cleanup.mjs +189 -0
  163. package/lib/intake/daemon.mjs +2 -0
  164. package/lib/intake/git-queue.mjs +9 -8
  165. package/lib/intake/queue.mjs +2 -1
  166. package/lib/intake/session-prelude.mjs +90 -1
  167. package/lib/libreoffice-export.mjs +97 -0
  168. package/lib/logging/rotate.mjs +9 -0
  169. package/lib/maintenance/docker-reclaim.mjs +206 -0
  170. package/lib/mcp/external-schema-cost.mjs +74 -0
  171. package/lib/mcp/server.mjs +84 -9
  172. package/lib/mcp/stdio-mcp-probe.mjs +188 -0
  173. package/lib/mcp/tool-budget.mjs +55 -4
  174. package/lib/mcp/tools/document.mjs +18 -4
  175. package/lib/mcp/tools/skills.mjs +32 -3
  176. package/lib/mcp/tools/workflow.mjs +13 -1
  177. package/lib/model-free-selector.mjs +18 -0
  178. package/lib/model-registry.mjs +13 -229
  179. package/lib/model-router.mjs +373 -92
  180. package/lib/models/behavior-matrix.mjs +289 -0
  181. package/lib/models/catalog.mjs +209 -0
  182. package/lib/models/execution-capability-profile.mjs +196 -0
  183. package/lib/models/execution-policy.mjs +307 -0
  184. package/lib/models/provider-poll.mjs +383 -0
  185. package/lib/npm-spawn-env.mjs +17 -0
  186. package/lib/ollama/installed-models.mjs +129 -0
  187. package/lib/oracle/actions.mjs +187 -0
  188. package/lib/oracle/artifact-gate.mjs +99 -0
  189. package/lib/oracle/cli.mjs +204 -0
  190. package/lib/oracle/daemon-entry.mjs +14 -0
  191. package/lib/oracle/dispatch.mjs +81 -0
  192. package/lib/oracle/execute.mjs +143 -0
  193. package/lib/oracle/gaps.mjs +76 -0
  194. package/lib/oracle/index.mjs +84 -0
  195. package/lib/oracle/issues.mjs +164 -0
  196. package/lib/oracle/org-graph.mjs +170 -0
  197. package/lib/oracle/policy.mjs +80 -0
  198. package/lib/oracle/read-model.mjs +398 -0
  199. package/lib/oracle/reconcile.mjs +191 -0
  200. package/lib/oracle/routing.mjs +89 -0
  201. package/lib/oracle/synthesize.mjs +384 -0
  202. package/lib/oracle/verdicts.mjs +51 -0
  203. package/lib/orchestration/worker.mjs +88 -27
  204. package/lib/orchestration-policy.mjs +50 -0
  205. package/lib/parity.mjs +96 -2
  206. package/lib/playwright-demo.mjs +252 -0
  207. package/lib/project-init-shared.mjs +4 -1
  208. package/lib/prompt-composer.js +7 -3
  209. package/lib/prompt-validation-contract.mjs +24 -0
  210. package/lib/provider-capabilities.js +57 -11
  211. package/lib/providers/contract/adapters/confluence/index.mjs +181 -0
  212. package/lib/providers/contract/adapters/git/index.mjs +115 -0
  213. package/lib/providers/contract/adapters/github/index.mjs +166 -0
  214. package/lib/providers/contract/adapters/jira/index.mjs +187 -0
  215. package/lib/providers/contract/adapters/slack/index.mjs +175 -0
  216. package/lib/providers/contract/contract-tests.mjs +57 -0
  217. package/lib/providers/contract/errors.mjs +48 -0
  218. package/lib/providers/contract/interface.mjs +50 -0
  219. package/lib/providers/contract/registry.mjs +102 -0
  220. package/lib/providers/copilot-auth.mjs +297 -0
  221. package/lib/providers/credential-bootstrap.mjs +178 -0
  222. package/lib/providers/credential-catalog.mjs +46 -0
  223. package/lib/providers/credential-sources.mjs +63 -0
  224. package/lib/providers/creds.mjs +5 -2
  225. package/lib/providers/op-run.mjs +59 -0
  226. package/lib/providers/secret-resolver.mjs +159 -0
  227. package/lib/publish-template.mjs +163 -0
  228. package/lib/publish-tooling.mjs +119 -0
  229. package/lib/publish.mjs +305 -0
  230. package/lib/registry/cli.mjs +82 -0
  231. package/lib/registry/consolidation.mjs +147 -0
  232. package/lib/registry/generate-docs.mjs +75 -0
  233. package/lib/registry/skill-verification.mjs +57 -0
  234. package/lib/registry/surface-map.mjs +76 -0
  235. package/lib/registry/validate.mjs +135 -0
  236. package/lib/resources/budget.mjs +82 -0
  237. package/lib/resources/process-budget.mjs +45 -0
  238. package/lib/rules-delivery.mjs +9 -2
  239. package/lib/rules-read.mjs +26 -0
  240. package/lib/runtime-env.mjs +23 -0
  241. package/lib/runtime-pressure.mjs +51 -7
  242. package/lib/schema-infer.mjs +13 -2
  243. package/lib/server/chat-loop.mjs +622 -0
  244. package/lib/server/demo-preview.mjs +63 -0
  245. package/lib/server/index.mjs +228 -7
  246. package/lib/service-manager.mjs +60 -8
  247. package/lib/setup.mjs +70 -7
  248. package/lib/specialists/prompt-schema.mjs +19 -10
  249. package/lib/specialists/roster.mjs +43 -0
  250. package/lib/specialists/scaffold.mjs +56 -0
  251. package/lib/storage/backend.mjs +6 -6
  252. package/lib/storage/hybrid-query.mjs +7 -4
  253. package/lib/storage/state-source.mjs +5 -5
  254. package/lib/storage/sync.mjs +2 -3
  255. package/lib/telemetry/rule-calls.mjs +52 -0
  256. package/lib/template-registry.mjs +2 -2
  257. package/lib/templates/visual-requirements.mjs +27 -51
  258. package/lib/test-corpus-inventory.mjs +313 -0
  259. package/lib/uninstall/uninstall.mjs +19 -7
  260. package/lib/update.mjs +12 -0
  261. package/lib/upgrade.mjs +14 -0
  262. package/lib/wireframe.mjs +20 -14
  263. package/lib/worker/run.mjs +17 -4
  264. package/lib/worker/trace.mjs +11 -3
  265. package/package.json +28 -14
  266. package/personas/construct.md +2 -2
  267. package/platforms/claude/settings.template.json +36 -0
  268. package/rules/common/patterns.md +1 -1
  269. package/rules/common/release-gates.md +4 -3
  270. package/scripts/sync-specialists.mjs +41 -28
  271. package/skills/devops/data-engineering.md +1 -1
  272. package/skills/docs/adr-workflow.md +1 -0
  273. package/skills/docs/backlog-proposal-workflow.md +1 -0
  274. package/skills/docs/codebase-research-workflow.md +40 -0
  275. package/skills/docs/customer-profile-workflow.md +1 -0
  276. package/skills/docs/document-ingest-workflow.md +1 -0
  277. package/skills/docs/evidence-ingest-workflow.md +1 -0
  278. package/skills/docs/init-docs.md +2 -2
  279. package/skills/docs/init-project.md +7 -2
  280. package/skills/docs/prd-workflow.md +24 -1
  281. package/skills/docs/prfaq-workflow.md +1 -0
  282. package/skills/docs/product-intelligence-workflow.md +1 -0
  283. package/skills/docs/product-signal-workflow.md +1 -0
  284. package/skills/docs/research-workflow.md +54 -37
  285. package/skills/docs/runbook-workflow.md +1 -0
  286. package/skills/docs/strategy-workflow.md +1 -0
  287. package/skills/docs/user-research-workflow.md +40 -0
  288. package/skills/operating/orchestration-reference.md +1 -1
  289. package/skills/roles/architect.md +5 -0
  290. package/skills/roles/operator.docs.md +4 -0
  291. package/skills/routing.md +4 -2
  292. package/specialists/artifact-manifest.json +480 -0
  293. package/specialists/artifact-manifest.schema.json +53 -0
  294. package/specialists/audit-enrichments.json +454 -0
  295. package/specialists/contracts.json +37 -25
  296. package/specialists/prompts/_shared/validation-contract.md +26 -0
  297. package/specialists/prompts/cx-accessibility.md +21 -2
  298. package/specialists/prompts/cx-ai-engineer.md +24 -1
  299. package/specialists/prompts/cx-architect.md +4 -1
  300. package/specialists/prompts/cx-business-strategist.md +23 -2
  301. package/specialists/prompts/cx-data-analyst.md +22 -1
  302. package/specialists/prompts/cx-data-engineer.md +23 -2
  303. package/specialists/prompts/cx-debugger.md +21 -2
  304. package/specialists/prompts/cx-designer.md +26 -3
  305. package/specialists/prompts/cx-devil-advocate.md +19 -2
  306. package/specialists/prompts/cx-docs-keeper.md +28 -1
  307. package/specialists/prompts/cx-engineer.md +22 -1
  308. package/specialists/prompts/cx-evaluator.md +18 -1
  309. package/specialists/prompts/cx-explorer.md +21 -2
  310. package/specialists/prompts/cx-legal-compliance.md +21 -2
  311. package/specialists/prompts/cx-operations.md +21 -2
  312. package/specialists/prompts/cx-oracle.md +94 -0
  313. package/specialists/prompts/cx-orchestrator.md +20 -1
  314. package/specialists/prompts/cx-platform-engineer.md +25 -2
  315. package/specialists/prompts/cx-product-manager.md +32 -1
  316. package/specialists/prompts/cx-qa.md +24 -2
  317. package/specialists/prompts/cx-rd-lead.md +23 -2
  318. package/specialists/prompts/cx-release-manager.md +23 -2
  319. package/specialists/prompts/cx-researcher.md +22 -2
  320. package/specialists/prompts/cx-reviewer.md +18 -1
  321. package/specialists/prompts/cx-security.md +22 -2
  322. package/specialists/prompts/cx-sre.md +30 -3
  323. package/specialists/prompts/cx-test-automation.md +7 -1
  324. package/specialists/prompts/cx-trace-reviewer.md +22 -3
  325. package/specialists/prompts/cx-ux-researcher.md +21 -2
  326. package/specialists/registry.json +52 -173
  327. package/specialists/tone-profiles.json +42 -0
  328. package/templates/demos/playwright/demo-recording.config.mjs +47 -0
  329. package/templates/demos/recordings/agentic-platforms-prd.json +19 -0
  330. package/templates/demos/scripts/agentic-platforms-prd.json +44 -0
  331. package/templates/demos/specs/_helpers/scroll-artifact.ts +89 -0
  332. package/templates/demos/tapes/agentic-platforms-prd.tape +49 -0
  333. package/templates/demos/tapes/resource-guard-rails.tape +49 -0
  334. package/templates/demos/vhs/construct-cockpit.json +24 -0
  335. package/templates/distribution/construct-brand.typ +446 -0
  336. package/templates/distribution/construct-decision.typ +38 -0
  337. package/templates/distribution/construct-deck.html +95 -0
  338. package/templates/distribution/construct-pdf.typ +38 -0
  339. package/templates/distribution/construct-prd.typ +38 -0
  340. package/templates/distribution/construct-research.typ +38 -0
  341. package/templates/distribution/construct-web.html +92 -0
  342. package/templates/distribution/fonts/Geist-Bold.ttf +0 -0
  343. package/templates/distribution/fonts/Geist-Medium.ttf +0 -0
  344. package/templates/distribution/fonts/Geist-Regular.ttf +0 -0
  345. package/templates/distribution/fonts/Geist-SemiBold.ttf +0 -0
  346. package/templates/distribution/fonts/GeistMono-Medium.ttf +0 -0
  347. package/templates/distribution/fonts/GeistMono-Regular.ttf +0 -0
  348. package/templates/distribution/fonts/GeistMono-SemiBold.ttf +0 -0
  349. package/templates/distribution/fonts/IBMPlexMono-Regular.otf +0 -0
  350. package/templates/distribution/fonts/JetBrainsMono-Medium.ttf +0 -0
  351. package/templates/distribution/fonts/JetBrainsMono-Regular.ttf +0 -0
  352. package/templates/distribution/fonts/JetBrainsMono-SemiBold.ttf +0 -0
  353. package/templates/distribution/fonts/PlusJakartaSans-Bold.ttf +0 -0
  354. package/templates/distribution/fonts/PlusJakartaSans-Medium.ttf +0 -0
  355. package/templates/distribution/fonts/PlusJakartaSans-Regular.ttf +0 -0
  356. package/templates/distribution/fonts/PlusJakartaSans-SemiBold.ttf +0 -0
  357. package/templates/distribution/fonts/README.md +36 -0
  358. package/templates/distribution/fonts/SpaceGrotesk-Variable.ttf +0 -0
  359. package/templates/distribution/fonts/handwritten/Caveat.ttf +0 -0
  360. package/templates/distribution/fonts/legacy/IBMPlexMono-Regular.otf +0 -0
  361. package/templates/distribution/fonts/legacy/Inter-Medium.otf +0 -0
  362. package/templates/distribution/fonts/legacy/Inter-Regular.otf +0 -0
  363. package/templates/distribution/fonts/legacy/Inter-SemiBold.otf +0 -0
  364. package/templates/distribution/fonts/legacy/InterDisplay-SemiBold.otf +0 -0
  365. package/templates/distribution/fonts/legacy/SourceSerif4-Regular.otf +0 -0
  366. package/templates/distribution/fonts/legacy/SourceSerif4-Semibold.otf +0 -0
  367. package/templates/distribution/icons/activity.svg +15 -0
  368. package/templates/distribution/icons/alert-triangle.svg +17 -0
  369. package/templates/distribution/icons/book-open.svg +16 -0
  370. package/templates/distribution/icons/bot.svg +20 -0
  371. package/templates/distribution/icons/brain.svg +22 -0
  372. package/templates/distribution/icons/circle-check.svg +16 -0
  373. package/templates/distribution/icons/clipboard-check.svg +17 -0
  374. package/templates/distribution/icons/cpu.svg +28 -0
  375. package/templates/distribution/icons/database.svg +17 -0
  376. package/templates/distribution/icons/eye.svg +16 -0
  377. package/templates/distribution/icons/file-text.svg +19 -0
  378. package/templates/distribution/icons/gauge.svg +16 -0
  379. package/templates/distribution/icons/git-branch.svg +17 -0
  380. package/templates/distribution/icons/key.svg +17 -0
  381. package/templates/distribution/icons/layers.svg +17 -0
  382. package/templates/distribution/icons/list-checks.svg +19 -0
  383. package/templates/distribution/icons/lock.svg +16 -0
  384. package/templates/distribution/icons/message-square.svg +15 -0
  385. package/templates/distribution/icons/network.svg +19 -0
  386. package/templates/distribution/icons/route.svg +17 -0
  387. package/templates/distribution/icons/scale.svg +19 -0
  388. package/templates/distribution/icons/search.svg +16 -0
  389. package/templates/distribution/icons/send.svg +16 -0
  390. package/templates/distribution/icons/server.svg +18 -0
  391. package/templates/distribution/icons/shield-check.svg +16 -0
  392. package/templates/distribution/icons/users.svg +18 -0
  393. package/templates/distribution/icons/webhook.svg +17 -0
  394. package/templates/distribution/icons/workflow.svg +17 -0
  395. package/templates/distribution/icons/wrench.svg +15 -0
  396. package/templates/distribution/run.mjs +18 -1
  397. package/templates/docs/adr.md +7 -0
  398. package/templates/docs/construct_guide.md +8 -8
  399. package/templates/docs/customer-profile.md +4 -0
  400. package/templates/docs/one-pager.md +4 -0
  401. package/templates/docs/postmortem.md +31 -0
  402. package/templates/docs/prd-platform.md +19 -0
  403. package/templates/docs/prd.md +15 -0
  404. package/templates/docs/prfaq.md +7 -0
  405. package/templates/docs/qa-strategy.md +103 -0
  406. package/templates/docs/research-brief.md +8 -0
  407. package/templates/docs/rfc-platform.md +12 -0
  408. package/templates/docs/test-plan.md +7 -0
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: docs-user-research-workflow
3
+ description: "Use when: cx-ux-researcher synthesizes user evidence — interviews, support tickets, session replay, surveys, or field notes."
4
+ inputs: [user-research, interview-data]
5
+ artifactType: evidence-brief
6
+ toneDefault: pedagogical
7
+ toneAllowed: [pedagogical, direct, friendly]
8
+ verificationBar: "Observed behavior weighted over self-report; sample size stated; no invented quotes."
9
+ ---
10
+ # User Research Workflow
11
+
12
+ Use when: cx-ux-researcher gathers or synthesizes **user** evidence. Do not use for CVE lookups, API version facts, or repo structure — use `docs/research-workflow` (cx-researcher) or `docs/codebase-research-workflow` (cx-explorer) instead.
13
+
14
+ Follow [rules/common/research.md](../../rules/common/research.md) and call `get_skill("roles/researcher.ux")` before drafting.
15
+
16
+ ## Steps
17
+
18
+ 1. **Clarify the user question**: who specifically, what behavior or friction, falsifiable claim.
19
+ 2. **Check internal user evidence**: `.cx/knowledge/external/`, customer profiles, evidence briefs, support exports, ingested transcripts.
20
+ 3. **Choose source classes** (user-primary):
21
+
22
+ | Source | Class | Notes |
23
+ |---|---|---|
24
+ | Interview transcript | primary | Direct quotes with participant id, not name |
25
+ | Support ticket / chat | primary | Link ticket id; preserve ambiguity |
26
+ | Session replay / analytics | primary | State segment and timeframe |
27
+ | Survey (structured) | secondary | Note response rate and bias |
28
+ | Sales / CS summary | secondary | Trace to underlying tickets when possible |
29
+
30
+ 4. **Sampling**: state segment, N, recruitment method. Behavioral claims need ≥5 per segment unless exploratory (flag as low confidence).
31
+ 5. **Validity**: name the weakest validity threat (internal/external/construct/conclusion) per `roles/researcher.ux` — that threat is where the finding is most likely wrong.
32
+ 6. **Inter-rater reliability**: when themes are coded from qualitative data, two coders code a sample independently; report agreement (or Cohen's κ when N permits). Persistent disagreement means the codebook is unfinished — fix the codebook before shipping themes.
33
+ 7. **Tone**: default `pedagogical`; override via `.cx/brand-voice.json` if present.
34
+ 8. **Output**: `get_template("evidence-brief")` or `signal-brief` when threshold not met; store under `.cx/knowledge/internal/evidence-briefs/`.
35
+
36
+ ## Verification bar
37
+
38
+ - No invented customer names, quotes, or ticket ids.
39
+ - Findings describe problems, not prescribed UI solutions.
40
+ - cx-ux-researcher must **not** cite blog posts for API version or security claims.
@@ -52,7 +52,7 @@ Do not duplicate skill internals inside agent prompts. Reference the relevant sk
52
52
  Every producer→consumer pair has an explicit contract in `specialists/contracts.json`, loaded via `lib/specialist-contracts.mjs`. Specialists call the MCP tool `agent_contract` at the start of a handoff to see:
53
53
 
54
54
  - `input.mustContain`: fields the packet must carry
55
- - `input.schema`: JSON schema (when applicable) from `lib/schemas/`
55
+ - `input.schema`: JSON schema (when applicable) from `lib/contract-schemas/`
56
56
  - `preconditions`: what must be true before work starts
57
57
  - `output.schema` / `output.shape`: expected return shape
58
58
  - `postconditions`: what must be true before marking DONE
@@ -58,6 +58,10 @@ Load this before drafting. These are the failure modes that separate strong role
58
58
  **Why it fails**: the team now owns the maintenance of both the product and a worse version of an existing tool.
59
59
  **Counter-move**: survey existing tools honestly. If building, articulate exactly what the existing tools fail to do.
60
60
 
61
+ ## Methodology
62
+
63
+ **Experimental design (cx-rd-lead).** Before committing build capacity to an R&D bet, state the falsifiable hypothesis, the minimum detectable effect size that would change the decision, and the power analysis: given expected variance and α, what N (users, runs, or samples) is required to detect that effect? An under-powered study that returns "no difference" is inconclusive, not negative evidence — name the required N and whether the planned study meets it. Report effect sizes with confidence intervals, not only p-values or pass/fail.
64
+
61
65
  ## Self-check before shipping
62
66
 
63
67
  - [ ] Requirements are stated before tech choices
@@ -68,3 +72,4 @@ Load this before drafting. These are the failure modes that separate strong role
68
72
  - [ ] Scaling assumptions are named and tied to the business plan
69
73
  - [ ] Migration path is explicit with phases and rollback points
70
74
  - [ ] Build-vs-buy is justified when building
75
+ - [ ] R&D bets state minimum detectable effect size and required N (power analysis)
@@ -37,6 +37,10 @@ Additional failure modes on top of the operator core.
37
37
  **Why it fails**: rot is guaranteed; questions route to Slack instead of the doc.
38
38
  **Counter-move**: every doc declares an owner (person or role). Ownership appears in the header.
39
39
 
40
+ ## Methodology
41
+
42
+ **Per-doc-type tone from the manifest.** Before editing a typed artifact, resolve tone from `specialists/artifact-manifest.json` (`toneDefault`, `toneAllowed`) and the profile definitions in `specialists/tone-profiles.json`. Projects override per type via `.cx/brand-voice.json`. `construct artifact validate <path> --type=<type>` reports the resolved tone — match it unless the user explicitly requests a different allowed profile.
43
+
40
44
  ## Self-check before shipping
41
45
  - [ ] Last-reviewed date present and fresh
42
46
  - [ ] One canonical source per concept; duplicates redirect
package/skills/routing.md CHANGED
@@ -120,7 +120,9 @@ Read the matching skill file before responding when the user's request matches t
120
120
  | Trigger Keywords | Skill File | Description |
121
121
  |---|---|---|
122
122
  | init docs, create docs structure, set up documentation, docs scaffold, documentation init | `skills/docs/init-docs.md` | Initialize required project-state docs and documentation structure |
123
- | research X, investigate X, find evidence, gather evidence | `skills/docs/research-workflow.md` | Research workflow: question to .cx/research/ file |
123
+ | research X, investigate X, find evidence, gather evidence, CVE, vendor docs, market data | `skills/docs/research-workflow.md` | External research workflow (cx-researcher) |
124
+ | user research, interview synthesis, support tickets, UX evidence, field notes | `skills/docs/user-research-workflow.md` | User research workflow (cx-ux-researcher) |
125
+ | map codebase, explore repo structure, dependency graph, hot path | `skills/docs/codebase-research-workflow.md` | Codebase research workflow (cx-explorer) |
124
126
  | product intelligence, customer notes, field notes, product signals, customer profile, evidence brief, signal brief, backlog proposal | `skills/docs/product-intelligence-workflow.md` | Product Intelligence workflow: evidence to product artifacts |
125
127
  | strategy, product strategy, strategic bet, non-bet, north star, time horizon, competitive positioning | `skills/docs/strategy-workflow.md` | Product strategy: read, update, and reason about the strategy store |
126
128
  | ingest evidence, ingest customer notes, ingest Slack thread, ingest support ticket, normalize field notes | `skills/docs/evidence-ingest-workflow.md` | Evidence ingest workflow: raw source to .cx/knowledge/ |
@@ -129,7 +131,7 @@ Read the matching skill file before responding when the user's request matches t
129
131
  | create Jira proposal, update Linear, backlog proposal, issue proposal | `skills/docs/backlog-proposal-workflow.md` | Backlog proposal workflow: approval-gated issue tracker changes |
130
132
  | record this decision, create an ADR, architecture decision | `skills/docs/adr-workflow.md` | ADR workflow: decision to docs/adr/ file |
131
133
  | write a runbook, document this operation, operational procedure | `skills/docs/runbook-workflow.md` | Runbook workflow: operation to docs/runbooks/ file |
132
- | init project, new project setup, join project, set up doc structure | `skills/docs/init-project.md` | Project initialization via construct init-docs |
134
+ | init project, new project setup, join project, set up doc structure | `skills/docs/init-project.md` | Project initialization via `construct init --docs-preset=*` |
133
135
 
134
136
  ## Routing Rules
135
137
 
@@ -0,0 +1,480 @@
1
+ {
2
+ "$schema": "./artifact-manifest.schema.json",
3
+ "version": 1,
4
+ "description": "Single source of truth for document types: template, owners, workflow skill, tone, structure, visuals, and release gates.",
5
+ "artifacts": {
6
+ "prd": {
7
+ "template": "templates/docs/prd.md",
8
+ "primaryOwners": ["cx-product-manager"],
9
+ "workflowSkill": "docs/prd-workflow",
10
+ "toneDefault": "decision-forcing-direct",
11
+ "toneAllowed": ["decision-forcing-direct", "executive-concise"],
12
+ "structureRequirements": ["Problem", "Goals", "Success metrics", "Risks and mitigations"],
13
+ "visualRequirements": [
14
+ { "id": "prd-user-flow", "check": "artifact-has-mermaid", "diagram": "flowchart" },
15
+ { "id": "prd-metrics-table", "check": "artifact-table-has-columns", "columns": ["Metric", "Baseline", "Target"] }
16
+ ],
17
+ "researchProfile": "user",
18
+ "releaseGate": {
19
+ "structuralLint": true,
20
+ "citationLint": true,
21
+ "proseMinimum": 3,
22
+ "requiredReviewers": ["cx-devil-advocate"],
23
+ "optionalReviewers": ["cx-ux-researcher"]
24
+ }
25
+ },
26
+ "prd-platform": {
27
+ "template": "templates/docs/prd-platform.md",
28
+ "primaryOwners": ["cx-product-manager"],
29
+ "workflowSkill": "docs/prd-workflow",
30
+ "toneDefault": "decision-forcing-direct",
31
+ "toneAllowed": ["decision-forcing-direct", "executive-concise"],
32
+ "structureRequirements": ["Problem", "Goals and non-goals", "Success metrics", "Risks and mitigations"],
33
+ "visualRequirements": [
34
+ { "id": "prd-platform-flow", "check": "artifact-has-mermaid", "diagram": "flowchart" },
35
+ { "id": "prd-platform-metrics", "check": "artifact-table-has-columns", "columns": ["Metric", "Baseline", "Target"] }
36
+ ],
37
+ "researchProfile": "external",
38
+ "releaseGate": {
39
+ "structuralLint": true,
40
+ "citationLint": true,
41
+ "proseMinimum": 3,
42
+ "requiredReviewers": ["cx-devil-advocate", "cx-architect"],
43
+ "optionalReviewers": []
44
+ }
45
+ },
46
+ "prd-business": {
47
+ "template": "templates/docs/prd-business.md",
48
+ "primaryOwners": ["cx-product-manager", "cx-business-strategist"],
49
+ "workflowSkill": "docs/prd-workflow",
50
+ "toneDefault": "executive-concise",
51
+ "toneAllowed": ["executive-concise", "decision-forcing-direct"],
52
+ "structureRequirements": ["The bet", "Market thesis", "Problem and opportunity", "Strategic goals", "Alternatives rejected"],
53
+ "researchProfile": "market",
54
+ "releaseGate": {
55
+ "structuralLint": true,
56
+ "citationLint": true,
57
+ "proseMinimum": 3,
58
+ "requiredReviewers": ["cx-devil-advocate"],
59
+ "optionalReviewers": ["cx-business-strategist"]
60
+ }
61
+ },
62
+ "meta-prd": {
63
+ "template": "templates/docs/meta-prd.md",
64
+ "primaryOwners": ["cx-product-manager", "cx-docs-keeper"],
65
+ "workflowSkill": "docs/prd-workflow",
66
+ "toneDefault": "decision-forcing-direct",
67
+ "toneAllowed": ["decision-forcing-direct"],
68
+ "structureRequirements": ["Problem", "Goals", "Principles", "Failure modes and mitigations", "Rollout"],
69
+ "researchProfile": "external",
70
+ "releaseGate": {
71
+ "structuralLint": true,
72
+ "citationLint": true,
73
+ "proseMinimum": 3,
74
+ "requiredReviewers": ["cx-devil-advocate", "cx-reviewer"],
75
+ "optionalReviewers": []
76
+ }
77
+ },
78
+ "adr": {
79
+ "template": "templates/docs/adr.md",
80
+ "primaryOwners": ["cx-architect", "cx-rd-lead"],
81
+ "workflowSkill": "docs/adr-workflow",
82
+ "toneDefault": "decision-forcing-direct",
83
+ "toneAllowed": ["decision-forcing-direct"],
84
+ "structureRequirements": ["Problem", "Decision", "Rejected alternatives", "Consequences", "Reversibility"],
85
+ "visualRequirements": [
86
+ { "id": "adr-context-diagram", "check": "artifact-has-mermaid", "diagram": "flowchart" }
87
+ ],
88
+ "researchProfile": "external",
89
+ "releaseGate": {
90
+ "structuralLint": true,
91
+ "citationLint": true,
92
+ "proseMinimum": 2,
93
+ "requiredReviewers": ["cx-devil-advocate", "cx-reviewer"],
94
+ "optionalReviewers": ["cx-architect"]
95
+ }
96
+ },
97
+ "rfc": {
98
+ "template": "templates/docs/rfc.md",
99
+ "primaryOwners": ["cx-architect"],
100
+ "workflowSkill": "docs/prd-workflow",
101
+ "toneDefault": "decision-forcing-direct",
102
+ "toneAllowed": ["decision-forcing-direct"],
103
+ "structureRequirements": ["Summary", "Motivation", "Proposed design", "Risks", "Verification"],
104
+ "visualRequirements": [
105
+ { "id": "rfc-sequence-diagram", "check": "artifact-has-mermaid", "diagram": "sequenceDiagram" }
106
+ ],
107
+ "researchProfile": "external",
108
+ "releaseGate": {
109
+ "structuralLint": true,
110
+ "citationLint": true,
111
+ "proseMinimum": 3,
112
+ "requiredReviewers": ["cx-devil-advocate", "cx-reviewer"],
113
+ "optionalReviewers": []
114
+ }
115
+ },
116
+ "rfc-platform": {
117
+ "template": "templates/docs/rfc-platform.md",
118
+ "primaryOwners": ["cx-architect"],
119
+ "workflowSkill": "docs/prd-workflow",
120
+ "toneDefault": "decision-forcing-direct",
121
+ "toneAllowed": ["decision-forcing-direct"],
122
+ "structureRequirements": ["Summary", "Motivation", "Proposed contract", "Risks", "Verification"],
123
+ "visualRequirements": [
124
+ { "id": "rfc-platform-sequence", "check": "artifact-has-mermaid", "diagram": "sequenceDiagram" }
125
+ ],
126
+ "researchProfile": "external",
127
+ "releaseGate": {
128
+ "structuralLint": true,
129
+ "citationLint": true,
130
+ "proseMinimum": 3,
131
+ "requiredReviewers": ["cx-devil-advocate", "cx-reviewer"],
132
+ "optionalReviewers": []
133
+ }
134
+ },
135
+ "research-brief": {
136
+ "template": "templates/docs/research-brief.md",
137
+ "primaryOwners": ["cx-researcher", "cx-ux-researcher", "cx-explorer"],
138
+ "workflowSkill": "docs/research-workflow",
139
+ "toneDefault": "direct",
140
+ "toneAllowed": ["direct", "pedagogical"],
141
+ "structureRequirements": ["Sources", "Findings", "Confidence summary", "Recommendation"],
142
+ "researchProfile": "external",
143
+ "releaseGate": {
144
+ "structuralLint": true,
145
+ "citationLint": true,
146
+ "proseMinimum": 2,
147
+ "requiredReviewers": [],
148
+ "optionalReviewers": ["cx-reviewer"]
149
+ }
150
+ },
151
+ "evidence-brief": {
152
+ "template": "templates/docs/evidence-brief.md",
153
+ "primaryOwners": ["cx-product-manager", "cx-researcher", "cx-ux-researcher"],
154
+ "workflowSkill": "docs/evidence-ingest-workflow",
155
+ "toneDefault": "direct",
156
+ "toneAllowed": ["direct", "executive-concise"],
157
+ "structureRequirements": ["Sources", "What we observed", "Confidence", "Recommendation"],
158
+ "researchProfile": "user",
159
+ "releaseGate": {
160
+ "structuralLint": true,
161
+ "citationLint": true,
162
+ "proseMinimum": 2,
163
+ "requiredReviewers": [],
164
+ "optionalReviewers": ["cx-devil-advocate"]
165
+ }
166
+ },
167
+ "signal-brief": {
168
+ "template": "templates/docs/signal-brief.md",
169
+ "primaryOwners": ["cx-researcher", "cx-product-manager"],
170
+ "workflowSkill": "docs/evidence-ingest-workflow",
171
+ "toneDefault": "direct",
172
+ "toneAllowed": ["direct"],
173
+ "structureRequirements": ["Signal", "Evidence", "Counter-signal", "What would make this actionable"],
174
+ "researchProfile": "user",
175
+ "releaseGate": {
176
+ "structuralLint": true,
177
+ "citationLint": true,
178
+ "proseMinimum": 1,
179
+ "requiredReviewers": [],
180
+ "optionalReviewers": []
181
+ }
182
+ },
183
+ "runbook": {
184
+ "template": "templates/docs/runbook.md",
185
+ "primaryOwners": ["cx-sre", "cx-operations"],
186
+ "workflowSkill": "docs/runbook-workflow",
187
+ "toneDefault": "blameless",
188
+ "toneAllowed": ["blameless", "direct"],
189
+ "structureRequirements": ["Alert trigger", "Symptoms", "Impact", "Severity and response", "Diagnostic steps", "Remediation", "Rollback", "Escalation"],
190
+ "visualRequirements": [
191
+ { "id": "runbook-diagnostic-flowchart", "check": "artifact-has-mermaid", "diagram": "flowchart" }
192
+ ],
193
+ "researchProfile": null,
194
+ "releaseGate": {
195
+ "structuralLint": true,
196
+ "citationLint": false,
197
+ "proseMinimum": 2,
198
+ "requiredReviewers": [],
199
+ "optionalReviewers": ["cx-sre"]
200
+ }
201
+ },
202
+ "incident-report": {
203
+ "template": "templates/docs/incident-report.md",
204
+ "primaryOwners": ["cx-sre", "cx-operations"],
205
+ "workflowSkill": "docs/runbook-workflow",
206
+ "toneDefault": "blameless",
207
+ "toneAllowed": ["blameless"],
208
+ "structureRequirements": ["Summary", "Severity rationale", "Impact", "Timeline", "Trigger", "Root cause", "Contributing factors", "Action items"],
209
+ "visualRequirements": [
210
+ { "id": "incident-timeline-table", "check": "artifact-table-has-columns", "columns": ["Time (UTC)", "Event"] }
211
+ ],
212
+ "researchProfile": null,
213
+ "releaseGate": {
214
+ "structuralLint": true,
215
+ "citationLint": false,
216
+ "proseMinimum": 2,
217
+ "requiredReviewers": [],
218
+ "optionalReviewers": ["cx-devil-advocate"]
219
+ }
220
+ },
221
+ "postmortem": {
222
+ "template": "templates/docs/postmortem.md",
223
+ "primaryOwners": ["cx-sre"],
224
+ "workflowSkill": "docs/runbook-workflow",
225
+ "toneDefault": "blameless",
226
+ "toneAllowed": ["blameless"],
227
+ "structureRequirements": ["Summary", "Severity rationale", "Impact", "Timeline", "Trigger", "Root cause", "Contributing factors", "Action items"],
228
+ "visualRequirements": [
229
+ { "id": "postmortem-timeline-table", "check": "artifact-table-has-columns", "columns": ["Time (UTC)", "Event"] }
230
+ ],
231
+ "researchProfile": null,
232
+ "releaseGate": {
233
+ "structuralLint": true,
234
+ "citationLint": false,
235
+ "proseMinimum": 2,
236
+ "requiredReviewers": [],
237
+ "optionalReviewers": []
238
+ }
239
+ },
240
+ "strategy": {
241
+ "template": "templates/docs/strategy.md",
242
+ "primaryOwners": ["cx-business-strategist", "cx-product-manager"],
243
+ "workflowSkill": "docs/strategy-workflow",
244
+ "toneDefault": "executive-concise",
245
+ "toneAllowed": ["executive-concise", "decision-forcing-direct"],
246
+ "structureRequirements": ["Vision", "Bets", "Non-bets", "North Star Metric", "Metrics", "Milestones", "Risks"],
247
+ "visualRequirements": [
248
+ { "id": "strategy-bet-matrix", "check": "artifact-table-has-columns", "columns": ["Metric", "Type (leading/lagging)", "Baseline", "Target", "Owner"] }
249
+ ],
250
+ "researchProfile": "market",
251
+ "releaseGate": {
252
+ "structuralLint": true,
253
+ "citationLint": true,
254
+ "proseMinimum": 2,
255
+ "requiredReviewers": ["cx-devil-advocate"],
256
+ "optionalReviewers": ["cx-business-strategist"]
257
+ }
258
+ },
259
+ "memo": {
260
+ "template": "templates/docs/memo.md",
261
+ "primaryOwners": ["cx-docs-keeper", "cx-business-strategist"],
262
+ "workflowSkill": "docs/memo-and-decision-capture",
263
+ "toneDefault": "executive-concise",
264
+ "toneAllowed": ["executive-concise", "friendly", "decision-forcing-direct"],
265
+ "structureRequirements": ["TL;DR", "Context", "Argument", "Recommendation", "Risks and tradeoffs", "Decision requested"],
266
+ "researchProfile": null,
267
+ "releaseGate": {
268
+ "structuralLint": true,
269
+ "citationLint": true,
270
+ "proseMinimum": 2,
271
+ "requiredReviewers": [],
272
+ "optionalReviewers": []
273
+ }
274
+ },
275
+ "prfaq": {
276
+ "template": "templates/docs/prfaq.md",
277
+ "primaryOwners": ["cx-product-manager", "cx-business-strategist"],
278
+ "workflowSkill": "docs/prfaq-workflow",
279
+ "toneDefault": "friendly",
280
+ "toneAllowed": ["friendly", "executive-concise"],
281
+ "structureRequirements": ["Problem statement", "Press release", "External FAQ", "Internal FAQ", "Evidence appendix"],
282
+ "visualRequirements": [
283
+ { "id": "prfaq-customer-flow", "check": "artifact-has-mermaid", "diagram": "flowchart" }
284
+ ],
285
+ "researchProfile": "user",
286
+ "releaseGate": {
287
+ "structuralLint": true,
288
+ "citationLint": true,
289
+ "proseMinimum": 3,
290
+ "requiredReviewers": ["cx-devil-advocate"],
291
+ "optionalReviewers": ["cx-ux-researcher"]
292
+ }
293
+ },
294
+ "one-pager": {
295
+ "template": "templates/docs/one-pager.md",
296
+ "primaryOwners": ["cx-product-manager", "cx-business-strategist"],
297
+ "workflowSkill": "docs/prd-workflow",
298
+ "toneDefault": "executive-concise",
299
+ "toneAllowed": ["executive-concise"],
300
+ "structureRequirements": ["Problem", "Proposal", "Why now", "Success measure", "Cost", "Asks"],
301
+ "visualRequirements": [
302
+ { "id": "one-pager-success-table", "check": "artifact-table-has-columns", "columns": ["Measure", "Baseline", "Target", "By when"] }
303
+ ],
304
+ "researchProfile": "market",
305
+ "releaseGate": {
306
+ "structuralLint": true,
307
+ "citationLint": true,
308
+ "proseMinimum": 2,
309
+ "requiredReviewers": ["cx-devil-advocate"],
310
+ "optionalReviewers": []
311
+ }
312
+ },
313
+ "customer-profile": {
314
+ "template": "templates/docs/customer-profile.md",
315
+ "primaryOwners": ["cx-product-manager", "cx-docs-keeper"],
316
+ "workflowSkill": "docs/customer-profile-workflow",
317
+ "toneDefault": "direct",
318
+ "toneAllowed": ["direct", "friendly"],
319
+ "structureRequirements": ["Snapshot", "Active pain points", "Open asks", "Evidence links"],
320
+ "visualRequirements": [
321
+ { "id": "customer-profile-open-asks", "check": "artifact-table-has-columns", "columns": ["Ask", "First raised", "Status"] }
322
+ ],
323
+ "researchProfile": "user",
324
+ "releaseGate": {
325
+ "structuralLint": true,
326
+ "citationLint": true,
327
+ "proseMinimum": 1,
328
+ "requiredReviewers": [],
329
+ "optionalReviewers": []
330
+ }
331
+ },
332
+ "backlog-proposal": {
333
+ "template": "templates/docs/backlog-proposal.md",
334
+ "primaryOwners": ["cx-product-manager"],
335
+ "workflowSkill": "docs/backlog-proposal-workflow",
336
+ "toneDefault": "direct",
337
+ "toneAllowed": ["direct"],
338
+ "structureRequirements": ["Source evidence", "Proposed changes", "Duplicate and conflict check", "Approval request"],
339
+ "researchProfile": "user",
340
+ "releaseGate": {
341
+ "structuralLint": true,
342
+ "citationLint": true,
343
+ "proseMinimum": 1,
344
+ "requiredReviewers": [],
345
+ "optionalReviewers": []
346
+ }
347
+ },
348
+ "test-plan": {
349
+ "template": "templates/docs/test-plan.md",
350
+ "primaryOwners": ["cx-qa", "cx-test-automation"],
351
+ "workflowSkill": "devops/testing",
352
+ "toneDefault": "direct",
353
+ "toneAllowed": ["direct"],
354
+ "structureRequirements": ["Scope", "Test strategy", "Coverage", "Key scenarios", "Entry and exit criteria"],
355
+ "visualRequirements": [
356
+ { "id": "test-plan-coverage-table", "check": "artifact-table-has-columns", "columns": ["Scenario", "Type", "Priority"] }
357
+ ],
358
+ "researchProfile": "codebase",
359
+ "releaseGate": {
360
+ "structuralLint": true,
361
+ "citationLint": false,
362
+ "proseMinimum": 2,
363
+ "requiredReviewers": [],
364
+ "optionalReviewers": ["cx-qa"]
365
+ }
366
+ },
367
+ "qa-strategy": {
368
+ "template": "templates/docs/qa-strategy.md",
369
+ "primaryOwners": ["cx-qa"],
370
+ "workflowSkill": "devops/testing",
371
+ "toneDefault": "direct",
372
+ "toneAllowed": ["direct"],
373
+ "structureRequirements": ["Scope", "Test strategy", "Coverage", "Key scenarios", "Entry and exit criteria"],
374
+ "researchProfile": "codebase",
375
+ "releaseGate": {
376
+ "structuralLint": true,
377
+ "citationLint": false,
378
+ "proseMinimum": 2,
379
+ "requiredReviewers": [],
380
+ "optionalReviewers": []
381
+ }
382
+ },
383
+ "changelog": {
384
+ "template": "templates/docs/changelog-entry.md",
385
+ "primaryOwners": ["cx-docs-keeper", "cx-release-manager"],
386
+ "workflowSkill": "docs/memo-and-decision-capture",
387
+ "toneDefault": "direct",
388
+ "toneAllowed": ["direct", "friendly"],
389
+ "structureRequirements": [],
390
+ "researchProfile": null,
391
+ "releaseGate": {
392
+ "structuralLint": false,
393
+ "citationLint": false,
394
+ "proseMinimum": 1,
395
+ "requiredReviewers": [],
396
+ "optionalReviewers": []
397
+ }
398
+ },
399
+ "architecture-overview": {
400
+ "template": "templates/docs/adr.md",
401
+ "primaryOwners": ["cx-architect"],
402
+ "workflowSkill": "docs/adr-workflow",
403
+ "toneDefault": "pedagogical",
404
+ "toneAllowed": ["pedagogical", "decision-forcing-direct"],
405
+ "structureRequirements": ["Problem", "Decision", "Consequences"],
406
+ "researchProfile": "codebase",
407
+ "releaseGate": {
408
+ "structuralLint": true,
409
+ "citationLint": true,
410
+ "proseMinimum": 2,
411
+ "requiredReviewers": ["cx-reviewer"],
412
+ "optionalReviewers": []
413
+ }
414
+ },
415
+ "system-design": {
416
+ "template": "templates/docs/adr.md",
417
+ "primaryOwners": ["cx-architect"],
418
+ "workflowSkill": "docs/adr-workflow",
419
+ "toneDefault": "pedagogical",
420
+ "toneAllowed": ["pedagogical"],
421
+ "structureRequirements": ["Problem", "Decision", "Consequences"],
422
+ "researchProfile": "codebase",
423
+ "releaseGate": {
424
+ "structuralLint": true,
425
+ "citationLint": true,
426
+ "proseMinimum": 2,
427
+ "requiredReviewers": ["cx-reviewer"],
428
+ "optionalReviewers": []
429
+ }
430
+ },
431
+ "security-review": {
432
+ "template": "templates/docs/security-audit-report.md",
433
+ "primaryOwners": ["cx-security"],
434
+ "workflowSkill": "quality-gates/verify-security",
435
+ "toneDefault": "direct",
436
+ "toneAllowed": ["direct"],
437
+ "structureRequirements": ["Executive summary", "Findings", "Remediation priority"],
438
+ "researchProfile": "compliance",
439
+ "releaseGate": {
440
+ "structuralLint": true,
441
+ "citationLint": true,
442
+ "proseMinimum": 2,
443
+ "requiredReviewers": ["cx-devil-advocate"],
444
+ "optionalReviewers": []
445
+ }
446
+ },
447
+ "threat-model": {
448
+ "template": "templates/docs/security-audit-report.md",
449
+ "primaryOwners": ["cx-security"],
450
+ "workflowSkill": "security/threat-intel",
451
+ "toneDefault": "direct",
452
+ "toneAllowed": ["direct"],
453
+ "structureRequirements": ["Executive summary", "Findings", "Remediation priority"],
454
+ "researchProfile": "compliance",
455
+ "releaseGate": {
456
+ "structuralLint": true,
457
+ "citationLint": true,
458
+ "proseMinimum": 2,
459
+ "requiredReviewers": ["cx-devil-advocate"],
460
+ "optionalReviewers": []
461
+ }
462
+ },
463
+ "product-intelligence-report": {
464
+ "template": "templates/docs/product-intelligence-report.md",
465
+ "primaryOwners": ["cx-product-manager", "cx-business-strategist"],
466
+ "workflowSkill": "docs/product-intelligence-workflow",
467
+ "toneDefault": "executive-concise",
468
+ "toneAllowed": ["executive-concise", "direct"],
469
+ "structureRequirements": ["Executive readout", "Evidence base", "Themes", "Customer asks", "Product implications", "Recommended actions", "Gaps and risks"],
470
+ "researchProfile": "user",
471
+ "releaseGate": {
472
+ "structuralLint": true,
473
+ "citationLint": true,
474
+ "proseMinimum": 3,
475
+ "requiredReviewers": [],
476
+ "optionalReviewers": ["cx-devil-advocate"]
477
+ }
478
+ }
479
+ }
480
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://geraldmaron.github.io/construct/specialists/artifact-manifest.schema.json",
4
+ "title": "Construct artifact capability manifest",
5
+ "type": "object",
6
+ "required": ["version", "artifacts"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "version": { "type": "integer", "minimum": 1 },
10
+ "description": { "type": "string" },
11
+ "artifacts": {
12
+ "type": "object",
13
+ "additionalProperties": { "$ref": "#/$defs/artifactEntry" }
14
+ }
15
+ },
16
+ "$defs": {
17
+ "visualRequirement": {
18
+ "type": "object",
19
+ "required": ["id", "check"],
20
+ "properties": {
21
+ "id": { "type": "string" },
22
+ "check": { "type": "string", "enum": ["artifact-has-mermaid", "artifact-table-has-columns"] },
23
+ "diagram": { "type": "string" },
24
+ "columns": { "type": "array", "items": { "type": "string" } }
25
+ }
26
+ },
27
+ "releaseGate": {
28
+ "type": "object",
29
+ "properties": {
30
+ "structuralLint": { "type": "boolean" },
31
+ "citationLint": { "type": "boolean" },
32
+ "proseMinimum": { "type": "integer", "minimum": 0 },
33
+ "requiredReviewers": { "type": "array", "items": { "type": "string" } },
34
+ "optionalReviewers": { "type": "array", "items": { "type": "string" } }
35
+ }
36
+ },
37
+ "artifactEntry": {
38
+ "type": "object",
39
+ "required": ["template", "primaryOwners", "toneDefault", "releaseGate"],
40
+ "properties": {
41
+ "template": { "type": "string" },
42
+ "primaryOwners": { "type": "array", "items": { "type": "string" } },
43
+ "workflowSkill": { "type": ["string", "null"] },
44
+ "toneDefault": { "type": "string" },
45
+ "toneAllowed": { "type": "array", "items": { "type": "string" } },
46
+ "structureRequirements": { "type": "array", "items": { "type": "string" } },
47
+ "visualRequirements": { "type": "array", "items": { "$ref": "#/$defs/visualRequirement" } },
48
+ "researchProfile": { "type": ["string", "null"] },
49
+ "releaseGate": { "$ref": "#/$defs/releaseGate" }
50
+ }
51
+ }
52
+ }
53
+ }