@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.
- package/README.md +29 -19
- package/bin/construct +311 -81
- package/bin/construct-postinstall.mjs +30 -2
- package/examples/distribution/README.md +42 -0
- package/examples/distribution/manifest.json +53 -0
- package/examples/distribution/sources/adr.md +84 -0
- package/examples/distribution/sources/deck-one-pager.md +65 -0
- package/examples/distribution/sources/prd-platform.md +161 -0
- package/examples/distribution/sources/research-brief.md +80 -0
- package/examples/distribution/sources/rfc-platform.md +82 -0
- package/examples/distribution/sources/runbook.md +103 -0
- package/examples/distribution/sources/strategy.md +88 -0
- package/lib/adapters-sync.mjs +67 -0
- package/lib/artifact-gate-notice.mjs +38 -0
- package/lib/artifact-manifest.mjs +112 -0
- package/lib/artifact-release-gate.mjs +171 -0
- package/lib/artifact-reviewers.mjs +68 -0
- package/lib/artifact-type-from-path.mjs +79 -0
- package/lib/audit-skills.mjs +4 -0
- package/lib/audit-specialists.mjs +285 -0
- package/lib/audit-trail.mjs +1 -1
- package/lib/auto-docs.mjs +87 -18
- package/lib/beads/drift.mjs +27 -6
- package/lib/beads-client.mjs +49 -121
- package/lib/beads-optimistic.mjs +5 -12
- package/lib/brand-fonts.mjs +93 -0
- package/lib/brand-prose.mjs +214 -0
- package/lib/brand-tokens.mjs +92 -0
- package/lib/bridges/copilot-proxy.mjs +13 -26
- package/lib/capability-ledger.mjs +156 -0
- package/lib/certification/artifact-fixtures.mjs +132 -0
- package/lib/certification/artifact-gates.mjs +63 -0
- package/lib/certification/artifact-provenance.mjs +97 -0
- package/lib/certification/canonical-scenarios.mjs +78 -0
- package/lib/certification/cli.mjs +191 -0
- package/lib/certification/dashboard-api.mjs +71 -0
- package/lib/certification/demo-parity.mjs +116 -0
- package/lib/certification/document-io-fixtures.mjs +246 -0
- package/lib/certification/document-workflow.mjs +97 -0
- package/lib/certification/eval-bridge.mjs +77 -0
- package/lib/certification/model-routing.mjs +149 -0
- package/lib/certification/prompt-budget.mjs +119 -0
- package/lib/certification/rc-gate.mjs +206 -0
- package/lib/certification/real-llm-scenarios.mjs +303 -0
- package/lib/certification/role-cards.mjs +113 -0
- package/lib/certification/role-overlays.mjs +117 -0
- package/lib/certification/run.mjs +122 -0
- package/lib/certification/runner.mjs +323 -0
- package/lib/certification/scenarios.mjs +51 -0
- package/lib/certification/skill-inventory.mjs +289 -0
- package/lib/certification/skill-scenarios.mjs +147 -0
- package/lib/certification/specialist-contracts.mjs +85 -0
- package/lib/certification/specialist-scenarios.mjs +175 -0
- package/lib/certification/stale-impact.mjs +146 -0
- package/lib/certification/status.mjs +252 -0
- package/lib/certification/store.mjs +77 -0
- package/lib/chat/cli.mjs +333 -0
- package/lib/chat/command-suggest.mjs +161 -0
- package/lib/chat/commands.mjs +215 -0
- package/lib/chat/config.mjs +142 -0
- package/lib/chat/context-compactor.mjs +250 -0
- package/lib/chat/context-continuation.mjs +253 -0
- package/lib/chat/continuation-source.mjs +58 -0
- package/lib/chat/demo-guide.mjs +61 -0
- package/lib/chat/design-tokens.mjs +91 -0
- package/lib/chat/desktop-binary.mjs +79 -0
- package/lib/chat/desktop-build.mjs +130 -0
- package/lib/chat/desktop-launcher.mjs +133 -0
- package/lib/chat/evidence.mjs +145 -0
- package/lib/chat/export.mjs +74 -0
- package/lib/chat/harness/driver.mjs +91 -0
- package/lib/chat/list-picker.mjs +112 -0
- package/lib/chat/model-picker.mjs +356 -0
- package/lib/chat/openrouter-fallback.mjs +151 -0
- package/lib/chat/permission-prompt.mjs +33 -0
- package/lib/chat/picker-catalog.mjs +45 -0
- package/lib/chat/policy-telemetry.mjs +34 -0
- package/lib/chat/present.mjs +245 -0
- package/lib/chat/session-context.mjs +39 -0
- package/lib/chat/session-persist.mjs +73 -0
- package/lib/chat/session-restore.mjs +71 -0
- package/lib/chat/session-settings.mjs +53 -0
- package/lib/chat/system-prompt.mjs +52 -0
- package/lib/chat/transparency.mjs +93 -0
- package/lib/chat/tui/color-scheme.mjs +42 -0
- package/lib/chat/tui/markdown.mjs +123 -0
- package/lib/chat/tui/presentation.mjs +100 -0
- package/lib/chat/tui/render.mjs +500 -0
- package/lib/chat/tui/turn-block.mjs +284 -0
- package/lib/chat/tui/turn-present.mjs +18 -0
- package/lib/chat/tui/turn-state.mjs +88 -0
- package/lib/chat/tui/usage.mjs +122 -0
- package/lib/chat/web-commands.mjs +146 -0
- package/lib/chat/web-launcher.mjs +63 -0
- package/lib/chat/web-picker-keys.mjs +46 -0
- package/lib/chat/web-session.mjs +159 -0
- package/lib/cli-commands.mjs +129 -15
- package/lib/comment-lint.mjs +6 -4
- package/lib/config/schema.mjs +36 -5
- package/lib/contract-schemas/decision.json +50 -0
- package/lib/contract-schemas/implementation.json +51 -0
- package/lib/contract-schemas/review-report.json +32 -0
- package/lib/contract-schemas/test-report.json +43 -0
- package/lib/contracts/construct-handoff.mjs +60 -0
- package/lib/contracts/validate.mjs +32 -3
- package/lib/contracts/violation-log.mjs +58 -5
- package/lib/dashboard-demo.mjs +71 -0
- package/lib/dashboard-static.mjs +19 -5
- package/lib/decisions/registry.mjs +5 -3
- package/lib/deck-export-pptx.mjs +1152 -0
- package/lib/demo-recording.mjs +142 -0
- package/lib/demo-script.mjs +114 -0
- package/lib/demo-surface.mjs +249 -0
- package/lib/demo.mjs +598 -140
- package/lib/diagram-export.mjs +192 -0
- package/lib/diagram.mjs +13 -11
- package/lib/docs-verify.mjs +25 -7
- package/lib/doctor/index.mjs +3 -1
- package/lib/doctor/project-adapters.mjs +44 -0
- package/lib/doctor/watchers/cx-budget.mjs +98 -0
- package/lib/doctor/watchers/graph-staleness.mjs +52 -0
- package/lib/doctor/watchers/process-pressure.mjs +4 -3
- package/lib/document-export.mjs +360 -36
- package/lib/document-extract.mjs +44 -4
- package/lib/document-ingest.mjs +29 -20
- package/lib/embed/cli.mjs +2 -2
- package/lib/embed/daemon.mjs +18 -46
- package/lib/embed/worker.mjs +2 -2
- package/lib/embedded-contract/model-resolve.mjs +10 -9
- package/lib/env-config.mjs +26 -0
- package/lib/evals/dataset.mjs +137 -0
- package/lib/evals/gates.mjs +175 -0
- package/lib/graph/build-co-change.mjs +54 -0
- package/lib/graph/build-from-registry.mjs +136 -0
- package/lib/graph/build-import-graph.mjs +153 -0
- package/lib/graph/cli.mjs +110 -0
- package/lib/graph/impact-cli.mjs +89 -0
- package/lib/graph/impact.mjs +108 -0
- package/lib/graph/staleness.mjs +44 -0
- package/lib/graph/store.mjs +172 -0
- package/lib/health-check.mjs +90 -76
- package/lib/hooks/artifact-release-gate.mjs +43 -0
- package/lib/hooks/brand-prose-lint.mjs +38 -0
- package/lib/hooks/graph-impact-advisory.mjs +62 -0
- package/lib/hooks/session-optimize.mjs +84 -207
- package/lib/hooks/session-start.mjs +4 -5
- package/lib/host-disposition.mjs +7 -0
- package/lib/improvement/cli.mjs +189 -0
- package/lib/improvement/controller.mjs +137 -0
- package/lib/improvement/proposal.mjs +120 -0
- package/lib/improvement/specialist-loop.mjs +192 -0
- package/lib/improvement/store.mjs +89 -0
- package/lib/improvement/surface.mjs +219 -0
- package/lib/ingest-tooling.mjs +97 -0
- package/lib/init/doc-lanes.mjs +165 -0
- package/lib/init-docs.mjs +31 -178
- package/lib/init-unified.mjs +27 -97
- package/lib/init-update-guide.mjs +102 -0
- package/lib/init-update.mjs +32 -1
- package/lib/init.mjs +8 -0
- package/lib/install/desktop-binary-download.mjs +85 -0
- package/lib/install/legacy-global-cleanup.mjs +189 -0
- package/lib/intake/daemon.mjs +2 -0
- package/lib/intake/git-queue.mjs +9 -8
- package/lib/intake/queue.mjs +2 -1
- package/lib/intake/session-prelude.mjs +90 -1
- package/lib/libreoffice-export.mjs +97 -0
- package/lib/logging/rotate.mjs +9 -0
- package/lib/maintenance/docker-reclaim.mjs +206 -0
- package/lib/mcp/external-schema-cost.mjs +74 -0
- package/lib/mcp/server.mjs +84 -9
- package/lib/mcp/stdio-mcp-probe.mjs +188 -0
- package/lib/mcp/tool-budget.mjs +55 -4
- package/lib/mcp/tools/document.mjs +18 -4
- package/lib/mcp/tools/skills.mjs +32 -3
- package/lib/mcp/tools/workflow.mjs +13 -1
- package/lib/model-free-selector.mjs +18 -0
- package/lib/model-registry.mjs +13 -229
- package/lib/model-router.mjs +373 -92
- package/lib/models/behavior-matrix.mjs +289 -0
- package/lib/models/catalog.mjs +209 -0
- package/lib/models/execution-capability-profile.mjs +196 -0
- package/lib/models/execution-policy.mjs +307 -0
- package/lib/models/provider-poll.mjs +383 -0
- package/lib/npm-spawn-env.mjs +17 -0
- package/lib/ollama/installed-models.mjs +129 -0
- package/lib/oracle/actions.mjs +187 -0
- package/lib/oracle/artifact-gate.mjs +99 -0
- package/lib/oracle/cli.mjs +204 -0
- package/lib/oracle/daemon-entry.mjs +14 -0
- package/lib/oracle/dispatch.mjs +81 -0
- package/lib/oracle/execute.mjs +143 -0
- package/lib/oracle/gaps.mjs +76 -0
- package/lib/oracle/index.mjs +84 -0
- package/lib/oracle/issues.mjs +164 -0
- package/lib/oracle/org-graph.mjs +170 -0
- package/lib/oracle/policy.mjs +80 -0
- package/lib/oracle/read-model.mjs +398 -0
- package/lib/oracle/reconcile.mjs +191 -0
- package/lib/oracle/routing.mjs +89 -0
- package/lib/oracle/synthesize.mjs +384 -0
- package/lib/oracle/verdicts.mjs +51 -0
- package/lib/orchestration/worker.mjs +88 -27
- package/lib/orchestration-policy.mjs +50 -0
- package/lib/parity.mjs +96 -2
- package/lib/playwright-demo.mjs +252 -0
- package/lib/project-init-shared.mjs +4 -1
- package/lib/prompt-composer.js +7 -3
- package/lib/prompt-validation-contract.mjs +24 -0
- package/lib/provider-capabilities.js +57 -11
- package/lib/providers/contract/adapters/confluence/index.mjs +181 -0
- package/lib/providers/contract/adapters/git/index.mjs +115 -0
- package/lib/providers/contract/adapters/github/index.mjs +166 -0
- package/lib/providers/contract/adapters/jira/index.mjs +187 -0
- package/lib/providers/contract/adapters/slack/index.mjs +175 -0
- package/lib/providers/contract/contract-tests.mjs +57 -0
- package/lib/providers/contract/errors.mjs +48 -0
- package/lib/providers/contract/interface.mjs +50 -0
- package/lib/providers/contract/registry.mjs +102 -0
- package/lib/providers/copilot-auth.mjs +297 -0
- package/lib/providers/credential-bootstrap.mjs +178 -0
- package/lib/providers/credential-catalog.mjs +46 -0
- package/lib/providers/credential-sources.mjs +63 -0
- package/lib/providers/creds.mjs +5 -2
- package/lib/providers/op-run.mjs +59 -0
- package/lib/providers/secret-resolver.mjs +159 -0
- package/lib/publish-template.mjs +163 -0
- package/lib/publish-tooling.mjs +119 -0
- package/lib/publish.mjs +305 -0
- package/lib/registry/cli.mjs +82 -0
- package/lib/registry/consolidation.mjs +147 -0
- package/lib/registry/generate-docs.mjs +75 -0
- package/lib/registry/skill-verification.mjs +57 -0
- package/lib/registry/surface-map.mjs +76 -0
- package/lib/registry/validate.mjs +135 -0
- package/lib/resources/budget.mjs +82 -0
- package/lib/resources/process-budget.mjs +45 -0
- package/lib/rules-delivery.mjs +9 -2
- package/lib/rules-read.mjs +26 -0
- package/lib/runtime-env.mjs +23 -0
- package/lib/runtime-pressure.mjs +51 -7
- package/lib/schema-infer.mjs +13 -2
- package/lib/server/chat-loop.mjs +622 -0
- package/lib/server/demo-preview.mjs +63 -0
- package/lib/server/index.mjs +228 -7
- package/lib/service-manager.mjs +60 -8
- package/lib/setup.mjs +70 -7
- package/lib/specialists/prompt-schema.mjs +19 -10
- package/lib/specialists/roster.mjs +43 -0
- package/lib/specialists/scaffold.mjs +56 -0
- package/lib/storage/backend.mjs +6 -6
- package/lib/storage/hybrid-query.mjs +7 -4
- package/lib/storage/state-source.mjs +5 -5
- package/lib/storage/sync.mjs +2 -3
- package/lib/telemetry/rule-calls.mjs +52 -0
- package/lib/template-registry.mjs +2 -2
- package/lib/templates/visual-requirements.mjs +27 -51
- package/lib/test-corpus-inventory.mjs +313 -0
- package/lib/uninstall/uninstall.mjs +19 -7
- package/lib/update.mjs +12 -0
- package/lib/upgrade.mjs +14 -0
- package/lib/wireframe.mjs +20 -14
- package/lib/worker/run.mjs +17 -4
- package/lib/worker/trace.mjs +11 -3
- package/package.json +28 -14
- package/personas/construct.md +2 -2
- package/platforms/claude/settings.template.json +36 -0
- package/rules/common/patterns.md +1 -1
- package/rules/common/release-gates.md +4 -3
- package/scripts/sync-specialists.mjs +41 -28
- package/skills/devops/data-engineering.md +1 -1
- package/skills/docs/adr-workflow.md +1 -0
- package/skills/docs/backlog-proposal-workflow.md +1 -0
- package/skills/docs/codebase-research-workflow.md +40 -0
- package/skills/docs/customer-profile-workflow.md +1 -0
- package/skills/docs/document-ingest-workflow.md +1 -0
- package/skills/docs/evidence-ingest-workflow.md +1 -0
- package/skills/docs/init-docs.md +2 -2
- package/skills/docs/init-project.md +7 -2
- package/skills/docs/prd-workflow.md +24 -1
- package/skills/docs/prfaq-workflow.md +1 -0
- package/skills/docs/product-intelligence-workflow.md +1 -0
- package/skills/docs/product-signal-workflow.md +1 -0
- package/skills/docs/research-workflow.md +54 -37
- package/skills/docs/runbook-workflow.md +1 -0
- package/skills/docs/strategy-workflow.md +1 -0
- package/skills/docs/user-research-workflow.md +40 -0
- package/skills/operating/orchestration-reference.md +1 -1
- package/skills/roles/architect.md +5 -0
- package/skills/roles/operator.docs.md +4 -0
- package/skills/routing.md +4 -2
- package/specialists/artifact-manifest.json +480 -0
- package/specialists/artifact-manifest.schema.json +53 -0
- package/specialists/audit-enrichments.json +454 -0
- package/specialists/contracts.json +37 -25
- package/specialists/prompts/_shared/validation-contract.md +26 -0
- package/specialists/prompts/cx-accessibility.md +21 -2
- package/specialists/prompts/cx-ai-engineer.md +24 -1
- package/specialists/prompts/cx-architect.md +4 -1
- package/specialists/prompts/cx-business-strategist.md +23 -2
- package/specialists/prompts/cx-data-analyst.md +22 -1
- package/specialists/prompts/cx-data-engineer.md +23 -2
- package/specialists/prompts/cx-debugger.md +21 -2
- package/specialists/prompts/cx-designer.md +26 -3
- package/specialists/prompts/cx-devil-advocate.md +19 -2
- package/specialists/prompts/cx-docs-keeper.md +28 -1
- package/specialists/prompts/cx-engineer.md +22 -1
- package/specialists/prompts/cx-evaluator.md +18 -1
- package/specialists/prompts/cx-explorer.md +21 -2
- package/specialists/prompts/cx-legal-compliance.md +21 -2
- package/specialists/prompts/cx-operations.md +21 -2
- package/specialists/prompts/cx-oracle.md +94 -0
- package/specialists/prompts/cx-orchestrator.md +20 -1
- package/specialists/prompts/cx-platform-engineer.md +25 -2
- package/specialists/prompts/cx-product-manager.md +32 -1
- package/specialists/prompts/cx-qa.md +24 -2
- package/specialists/prompts/cx-rd-lead.md +23 -2
- package/specialists/prompts/cx-release-manager.md +23 -2
- package/specialists/prompts/cx-researcher.md +22 -2
- package/specialists/prompts/cx-reviewer.md +18 -1
- package/specialists/prompts/cx-security.md +22 -2
- package/specialists/prompts/cx-sre.md +30 -3
- package/specialists/prompts/cx-test-automation.md +7 -1
- package/specialists/prompts/cx-trace-reviewer.md +22 -3
- package/specialists/prompts/cx-ux-researcher.md +21 -2
- package/specialists/registry.json +52 -173
- package/specialists/tone-profiles.json +42 -0
- package/templates/demos/playwright/demo-recording.config.mjs +47 -0
- package/templates/demos/recordings/agentic-platforms-prd.json +19 -0
- package/templates/demos/scripts/agentic-platforms-prd.json +44 -0
- package/templates/demos/specs/_helpers/scroll-artifact.ts +89 -0
- package/templates/demos/tapes/agentic-platforms-prd.tape +49 -0
- package/templates/demos/tapes/resource-guard-rails.tape +49 -0
- package/templates/demos/vhs/construct-cockpit.json +24 -0
- package/templates/distribution/construct-brand.typ +446 -0
- package/templates/distribution/construct-decision.typ +38 -0
- package/templates/distribution/construct-deck.html +95 -0
- package/templates/distribution/construct-pdf.typ +38 -0
- package/templates/distribution/construct-prd.typ +38 -0
- package/templates/distribution/construct-research.typ +38 -0
- package/templates/distribution/construct-web.html +92 -0
- package/templates/distribution/fonts/Geist-Bold.ttf +0 -0
- package/templates/distribution/fonts/Geist-Medium.ttf +0 -0
- package/templates/distribution/fonts/Geist-Regular.ttf +0 -0
- package/templates/distribution/fonts/Geist-SemiBold.ttf +0 -0
- package/templates/distribution/fonts/GeistMono-Medium.ttf +0 -0
- package/templates/distribution/fonts/GeistMono-Regular.ttf +0 -0
- package/templates/distribution/fonts/GeistMono-SemiBold.ttf +0 -0
- package/templates/distribution/fonts/IBMPlexMono-Regular.otf +0 -0
- package/templates/distribution/fonts/JetBrainsMono-Medium.ttf +0 -0
- package/templates/distribution/fonts/JetBrainsMono-Regular.ttf +0 -0
- package/templates/distribution/fonts/JetBrainsMono-SemiBold.ttf +0 -0
- package/templates/distribution/fonts/PlusJakartaSans-Bold.ttf +0 -0
- package/templates/distribution/fonts/PlusJakartaSans-Medium.ttf +0 -0
- package/templates/distribution/fonts/PlusJakartaSans-Regular.ttf +0 -0
- package/templates/distribution/fonts/PlusJakartaSans-SemiBold.ttf +0 -0
- package/templates/distribution/fonts/README.md +36 -0
- package/templates/distribution/fonts/SpaceGrotesk-Variable.ttf +0 -0
- package/templates/distribution/fonts/handwritten/Caveat.ttf +0 -0
- package/templates/distribution/fonts/legacy/IBMPlexMono-Regular.otf +0 -0
- package/templates/distribution/fonts/legacy/Inter-Medium.otf +0 -0
- package/templates/distribution/fonts/legacy/Inter-Regular.otf +0 -0
- package/templates/distribution/fonts/legacy/Inter-SemiBold.otf +0 -0
- package/templates/distribution/fonts/legacy/InterDisplay-SemiBold.otf +0 -0
- package/templates/distribution/fonts/legacy/SourceSerif4-Regular.otf +0 -0
- package/templates/distribution/fonts/legacy/SourceSerif4-Semibold.otf +0 -0
- package/templates/distribution/icons/activity.svg +15 -0
- package/templates/distribution/icons/alert-triangle.svg +17 -0
- package/templates/distribution/icons/book-open.svg +16 -0
- package/templates/distribution/icons/bot.svg +20 -0
- package/templates/distribution/icons/brain.svg +22 -0
- package/templates/distribution/icons/circle-check.svg +16 -0
- package/templates/distribution/icons/clipboard-check.svg +17 -0
- package/templates/distribution/icons/cpu.svg +28 -0
- package/templates/distribution/icons/database.svg +17 -0
- package/templates/distribution/icons/eye.svg +16 -0
- package/templates/distribution/icons/file-text.svg +19 -0
- package/templates/distribution/icons/gauge.svg +16 -0
- package/templates/distribution/icons/git-branch.svg +17 -0
- package/templates/distribution/icons/key.svg +17 -0
- package/templates/distribution/icons/layers.svg +17 -0
- package/templates/distribution/icons/list-checks.svg +19 -0
- package/templates/distribution/icons/lock.svg +16 -0
- package/templates/distribution/icons/message-square.svg +15 -0
- package/templates/distribution/icons/network.svg +19 -0
- package/templates/distribution/icons/route.svg +17 -0
- package/templates/distribution/icons/scale.svg +19 -0
- package/templates/distribution/icons/search.svg +16 -0
- package/templates/distribution/icons/send.svg +16 -0
- package/templates/distribution/icons/server.svg +18 -0
- package/templates/distribution/icons/shield-check.svg +16 -0
- package/templates/distribution/icons/users.svg +18 -0
- package/templates/distribution/icons/webhook.svg +17 -0
- package/templates/distribution/icons/workflow.svg +17 -0
- package/templates/distribution/icons/wrench.svg +15 -0
- package/templates/distribution/run.mjs +18 -1
- package/templates/docs/adr.md +7 -0
- package/templates/docs/construct_guide.md +8 -8
- package/templates/docs/customer-profile.md +4 -0
- package/templates/docs/one-pager.md +4 -0
- package/templates/docs/postmortem.md +31 -0
- package/templates/docs/prd-platform.md +19 -0
- package/templates/docs/prd.md +15 -0
- package/templates/docs/prfaq.md +7 -0
- package/templates/docs/qa-strategy.md +103 -0
- package/templates/docs/research-brief.md +8 -0
- package/templates/docs/rfc-platform.md +12 -0
- 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` |
|
|
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-
|
|
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
|
+
}
|