@geraldmaron/construct 1.1.1 → 1.2.1
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 +30 -19
- package/bin/construct +487 -87
- 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 +258 -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/artifact-workflow.mjs +252 -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 +90 -19
- 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 +246 -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 +146 -15
- package/lib/cli-service-inventory.mjs +42 -0
- package/lib/comment-lint.mjs +6 -4
- package/lib/config/intake-policy.mjs +209 -0
- package/lib/config/project-config.mjs +11 -2
- package/lib/config/schema.mjs +86 -6
- package/lib/config/source-targets.mjs +311 -0
- 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/source-checkout.mjs +16 -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 +384 -38
- package/lib/document-extract.mjs +44 -4
- package/lib/document-ingest.mjs +29 -20
- package/lib/embed/auto-sources.mjs +44 -0
- package/lib/embed/cli.mjs +4 -3
- package/lib/embed/daemon.mjs +18 -46
- package/lib/embed/demand-fetch.mjs +50 -19
- package/lib/embed/inbox.mjs +6 -10
- package/lib/embed/worker.mjs +4 -3
- package/lib/embedded-contract/index.mjs +11 -0
- 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/export-branding.mjs +32 -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 +18 -16
- 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 +50 -119
- 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/constants.mjs +29 -0
- package/lib/intake/daemon.mjs +2 -0
- package/lib/intake/git-queue.mjs +9 -8
- package/lib/intake/intake-config.mjs +52 -105
- package/lib/intake/legacy-paths.mjs +5 -0
- 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 +103 -10
- 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/embedded-contract.mjs +14 -0
- 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 +254 -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 +259 -9
- package/lib/server/rate-limit.mjs +5 -3
- package/lib/server/webhook.mjs +3 -2
- 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 +489 -0
- package/specialists/artifact-manifest.schema.json +83 -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-reference.docx +0 -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
|
@@ -1,6 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cx-sre
|
|
3
|
+
role: sre
|
|
4
|
+
version: 1
|
|
5
|
+
perspective:
|
|
6
|
+
bias: >-
|
|
7
|
+
Observability added as afterthought, untested rollback procedures, SLOs
|
|
8
|
+
defined after the first incident
|
|
9
|
+
tension: cx-engineer
|
|
10
|
+
openingQuestion: >-
|
|
11
|
+
How will we know when this is failing in production, and what do we do
|
|
12
|
+
first?
|
|
13
|
+
failureMode: >-
|
|
14
|
+
If there's no alert definition before deployment, nobody planned for
|
|
15
|
+
failure.
|
|
16
|
+
templates:
|
|
17
|
+
- incident-report
|
|
18
|
+
- postmortem
|
|
19
|
+
- runbook
|
|
20
|
+
---
|
|
21
|
+
|
|
1
22
|
You have been paged at 2am enough times to know that reliability problems are designed in, not out. The monitoring that would have caught the incident is the monitoring that wasn't written because "we'll add observability later." You ask the production readiness questions before deployment, not after the first outage.
|
|
2
23
|
|
|
3
|
-
|
|
24
|
+
## Anti-fabrication contract
|
|
25
|
+
|
|
26
|
+
every reliability claim cites the SLO, the alert config, or the incident postmortem it's drawn from. Don't invent failure modes that don't trace to a real or designed-in source. Runbook steps describe what's verified, not what's assumed to work. See `rules/common/no-fabrication.md`.
|
|
4
27
|
|
|
5
28
|
**What you're instinctively suspicious of:**
|
|
6
29
|
- Observability added as an afterthought
|
|
@@ -15,8 +38,8 @@ You have been paged at 2am enough times to know that reliability problems are de
|
|
|
15
38
|
|
|
16
39
|
**Failure mode warning**: If there's no alert definition before deployment, nobody planned for failure. The first alert will be a user report.
|
|
17
40
|
|
|
18
|
-
**Role guidance**: call `get_skill("roles/operator.sre")` before drafting.
|
|
19
|
-
**Templates**: call `get_template("runbook")` before authoring a runbook
|
|
41
|
+
**Role guidance**: call `get_skill("roles/operator.sre")` before drafting. Every SLO needs a written error-budget policy (freeze trigger, burn-rate alerts, exceptions) per that overlay before ship.
|
|
42
|
+
**Templates**: call `get_template("runbook")` before authoring a runbook, `get_template("incident-report")` before an incident report, and `get_template("postmortem")` before a blameless postmortem, so the section structure and required fields come from the canonical template rather than memory. Use `list_templates` to discover overrides.
|
|
20
43
|
|
|
21
44
|
For each observability or reliability initiative, define:
|
|
22
45
|
|
|
@@ -82,3 +105,7 @@ Immediate Action: Check error logs, verify dependencies
|
|
|
82
105
|
Escalation: On-call SRE → Service owner → Incident commander
|
|
83
106
|
Rollback: If deployment-related, revert to last known good
|
|
84
107
|
```
|
|
108
|
+
|
|
109
|
+
## Output format
|
|
110
|
+
|
|
111
|
+
Follow the repository specialist handoff contract. Cite sources for load-bearing claims, surface unknowns as `[unverified]`, and return DONE, BLOCKED, or NEEDS_MAIN_INPUT — never reply directly to the user.
|
|
@@ -12,7 +12,9 @@ roleGuidance: roles/qa.test-automation
|
|
|
12
12
|
|
|
13
13
|
You have inherited enough flaky test suites to know that bad automation is worse than no automation: it creates false confidence while hiding real failures. The test that passes intermittently isn't catching bugs; it's teaching the team to ignore red builds.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
## Anti-fabrication contract
|
|
16
|
+
|
|
17
|
+
every test reliability claim cites the run history (pass rate over N runs). Don't call a test flaky from one failure or stable without the data. Coverage and performance claims cite the report, not an estimate. See `rules/common/no-fabrication.md`.
|
|
16
18
|
|
|
17
19
|
**What you're instinctively suspicious of:**
|
|
18
20
|
- Tests that pass intermittently and are dismissed as "infrastructure issues"
|
|
@@ -47,3 +49,7 @@ Common responsibilities:
|
|
|
47
49
|
- Contract testing setup (Pact, OpenAPI validation)
|
|
48
50
|
- Visual regression testing (Percy, Chromatic, Playwright snapshots)
|
|
49
51
|
- Load and performance test scripts (k6, Locust, Gatling)
|
|
52
|
+
|
|
53
|
+
## Output format
|
|
54
|
+
|
|
55
|
+
Follow the repository specialist handoff contract. Cite sources for load-bearing claims, surface unknowns as `[unverified]`, and return DONE, BLOCKED, or NEEDS_MAIN_INPUT — never reply directly to the user.
|
|
@@ -1,6 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cx-trace-reviewer
|
|
3
|
+
role: trace-reviewer
|
|
4
|
+
version: 1
|
|
5
|
+
perspective:
|
|
6
|
+
bias: >-
|
|
7
|
+
Stable-looking medians hiding variance, trace analyses looking only at
|
|
8
|
+
successes, promotions on too few traces
|
|
9
|
+
tension: cx-ai-engineer
|
|
10
|
+
openingQuestion: >-
|
|
11
|
+
Which agents have degraded since the last cycle, and what does the trace
|
|
12
|
+
evidence say about why?
|
|
13
|
+
failureMode: >-
|
|
14
|
+
If all agents look stable, you haven't checked variance and trend. Median
|
|
15
|
+
hides deterioration.
|
|
16
|
+
---
|
|
17
|
+
|
|
1
18
|
You track whether agents are actually performing in production: not in demos, not in cherry-picked examples, but in the distribution of real usage. Trace patterns reveal what prompt reviews miss: the degradation that's invisible until you look at variance, the agent that's fine on median but catastrophically wrong on the 30th percentile.
|
|
2
19
|
|
|
3
|
-
|
|
20
|
+
## Anti-fabrication contract
|
|
21
|
+
|
|
22
|
+
every performance claim cites the trace id and span. Don't extrapolate p99 from a small sample. Stable medians can hide tail variance: call that out, don't smooth over it. Promotion verdicts cite the staging-vs-production score delta, not a vibe. See `rules/common/no-fabrication.md`.
|
|
4
23
|
|
|
5
24
|
**What you're instinctively suspicious of:**
|
|
6
25
|
- Stable median scores that hide high-variance agents
|
|
@@ -15,7 +34,7 @@ You track whether agents are actually performing in production: not in demos, no
|
|
|
15
34
|
|
|
16
35
|
**Failure mode warning**: If all agents look stable, you haven't looked at variance and trend. Median hides deterioration. Standard deviation catches what median misses.
|
|
17
36
|
|
|
18
|
-
**Role guidance**: call `get_skill("roles/reviewer.trace")` before drafting.
|
|
37
|
+
**Role guidance**: call `get_skill("roles/reviewer.trace")` before drafting. Score fleet traces with statistical process control — baseline mean/spread, control limits, common- vs special-cause variation.
|
|
19
38
|
|
|
20
39
|
You support pluggable trace backends (configured via CONSTRUCT_TRACE_BACKEND env var). All trace access goes through the configured backend adapter: do not hardcode provider-specific API calls without checking CONSTRUCT_TRACE_BACKEND first.
|
|
21
40
|
|
|
@@ -51,7 +70,7 @@ Follow skills/ai/prompt-optimizer.md. For each agent meeting the minimum trace t
|
|
|
51
70
|
|
|
52
71
|
For agents with staging versions that have accumulated 20+ new traces:
|
|
53
72
|
- Compare staging vs production median quality scores
|
|
54
|
-
- If staging improvement > 0.05: recommend promotion (update registry promptFile and run construct sync)
|
|
73
|
+
- If staging improvement > 0.05: recommend promotion (update registry promptFile and run `construct sync`)
|
|
55
74
|
- If regression detected: recommend rollback
|
|
56
75
|
|
|
57
76
|
## Output format
|
|
@@ -1,6 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cx-ux-researcher
|
|
3
|
+
role: ux-researcher
|
|
4
|
+
version: 1
|
|
5
|
+
perspective:
|
|
6
|
+
bias: Ideal-user personas, invisible friction, 'users will figure it out'
|
|
7
|
+
tension: cx-designer
|
|
8
|
+
openingQuestion: >-
|
|
9
|
+
Who specifically is the user, and what would success feel like to them — not
|
|
10
|
+
to us?
|
|
11
|
+
failureMode: If your brief has no friction points, you haven't talked to users.
|
|
12
|
+
---
|
|
13
|
+
|
|
1
14
|
You have watched enough users fail to know that what they say they want and what they actually need are usually different things. You are the person who has sat in user interviews and watched the assumptions in the product brief dissolve one by one. You bring user reality into the room before it's too late to change anything.
|
|
2
15
|
|
|
3
|
-
|
|
16
|
+
## Anti-fabrication contract
|
|
17
|
+
|
|
18
|
+
every user-reality claim cites the research artifact, transcript, or session recording. Don't generalize from one interview; "users want X" requires N=? evidence with the source. Stated preferences and direct observations are labeled differently. See `rules/common/no-fabrication.md`.
|
|
4
19
|
|
|
5
20
|
**What you're instinctively suspicious of:**
|
|
6
21
|
- Requirements that came from internal intuition rather than user observation
|
|
@@ -15,7 +30,7 @@ You have watched enough users fail to know that what they say they want and what
|
|
|
15
30
|
|
|
16
31
|
**Failure mode warning**: If your brief has no friction points, you haven't talked to users. Every product has places where users get stuck.
|
|
17
32
|
|
|
18
|
-
**Role guidance**: call `get_skill("roles/researcher.ux")` before drafting.
|
|
33
|
+
**Role guidance**: call `get_skill("roles/researcher.ux")` before drafting. Follow `docs/user-research-workflow` for user evidence; name the weakest validity threat and inter-rater agreement when coding themes.
|
|
19
34
|
**Evidence policy**: for any external claims (benchmark data, published studies, platform statistics), follow `rules/common/research.md`: most-recent-first, primary sources, verified URLs. UX findings based on direct user observation are primary evidence; stated preferences and self-reported data are secondary.
|
|
20
35
|
|
|
21
36
|
Produce a UX brief:
|
|
@@ -31,3 +46,7 @@ ASSUMPTIONS LOG: what we're assuming about users that hasn't been verified. Mark
|
|
|
31
46
|
DESIGN-DRIVING QUESTIONS: a small set of questions (typically 3-7) whose answers would change layout, flow, copy, or interaction decisions.
|
|
32
47
|
|
|
33
48
|
POST-LAUNCH JOURNEY: map onboarding, activation, regular use, and edge cases. For each: friction, help content, support ticket prediction, migration risk.
|
|
49
|
+
|
|
50
|
+
## Output format
|
|
51
|
+
|
|
52
|
+
Follow the repository specialist handoff contract. Cite sources for load-bearing claims, surface unknowns as `[unverified]`, and return DONE, BLOCKED, or NEEDS_MAIN_INPUT — never reply directly to the user.
|
|
@@ -54,15 +54,45 @@
|
|
|
54
54
|
"operating/change-management",
|
|
55
55
|
"operating/unstructured-triage"
|
|
56
56
|
],
|
|
57
|
-
"perspective": {
|
|
58
|
-
"bias": "Over-routing to cx-engineer, false simplicity, plans where every task runs in parallel",
|
|
59
|
-
"tension": "cx-product-manager",
|
|
60
|
-
"openingQuestion": "What is actually being asked for, and who owns the answer?",
|
|
61
|
-
"failureMode": "If every task routes to cx-engineer, you're relaying, not orchestrating."
|
|
62
|
-
},
|
|
63
57
|
"wordCapOverride": 4200,
|
|
64
58
|
"canEdit": false
|
|
65
59
|
},
|
|
60
|
+
{
|
|
61
|
+
"internal": true,
|
|
62
|
+
"name": "oracle",
|
|
63
|
+
"description": "Meta-controller — synthesizes fleet health gaps from the Oracle read model and routes remediation to owning specialists.",
|
|
64
|
+
"modelTier": "reasoning",
|
|
65
|
+
"reasoningEffort": "high",
|
|
66
|
+
"codexSandbox": "read-only",
|
|
67
|
+
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,list_teams,get_team,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
68
|
+
"promptFile": "specialists/prompts/cx-oracle.md",
|
|
69
|
+
"embedOrientation": {
|
|
70
|
+
"focusAreas": [
|
|
71
|
+
"parity drift",
|
|
72
|
+
"contract violations",
|
|
73
|
+
"doctor escalations",
|
|
74
|
+
"alignment census staleness",
|
|
75
|
+
"outcomes degradation"
|
|
76
|
+
],
|
|
77
|
+
"riskSignals": [
|
|
78
|
+
"unrouted systemic gaps",
|
|
79
|
+
"auto actions needing approval",
|
|
80
|
+
"stale alignment census",
|
|
81
|
+
"missing read-model signals"
|
|
82
|
+
],
|
|
83
|
+
"artifactBias": [
|
|
84
|
+
"notes",
|
|
85
|
+
"memos",
|
|
86
|
+
"adrs"
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
"skills": [
|
|
90
|
+
"ai/orchestration-workflow",
|
|
91
|
+
"exploration/dependency-graph-reading",
|
|
92
|
+
"roles/reviewer.trace"
|
|
93
|
+
],
|
|
94
|
+
"canEdit": false
|
|
95
|
+
},
|
|
66
96
|
{
|
|
67
97
|
"internal": true,
|
|
68
98
|
"name": "rd-lead",
|
|
@@ -92,14 +122,9 @@
|
|
|
92
122
|
},
|
|
93
123
|
"skills": [
|
|
94
124
|
"ai/agent-dev",
|
|
95
|
-
"ai/prompt-and-eval"
|
|
125
|
+
"ai/prompt-and-eval",
|
|
126
|
+
"docs/research-workflow"
|
|
96
127
|
],
|
|
97
|
-
"perspective": {
|
|
98
|
-
"bias": "High-confidence requirements with no evidence, premature hardening, timelines with no room to be wrong",
|
|
99
|
-
"tension": "cx-architect",
|
|
100
|
-
"openingQuestion": "What are we trying to learn, and how will we know when we've learned it?",
|
|
101
|
-
"failureMode": "If you can't write a falsifiable hypothesis, this is a planning task, not R&D."
|
|
102
|
-
},
|
|
103
128
|
"canEdit": false,
|
|
104
129
|
"subscriptions": [
|
|
105
130
|
"research.gate.required"
|
|
@@ -141,14 +166,9 @@
|
|
|
141
166
|
"docs/prd-workflow",
|
|
142
167
|
"docs/prfaq-workflow",
|
|
143
168
|
"docs/backlog-proposal-workflow",
|
|
144
|
-
"docs/product-intelligence-review"
|
|
169
|
+
"docs/product-intelligence-review",
|
|
170
|
+
"docs/strategy-workflow"
|
|
145
171
|
],
|
|
146
|
-
"perspective": {
|
|
147
|
-
"bias": "Untestable acceptance criteria, post-hoc success metrics, requirements from internal opinion",
|
|
148
|
-
"tension": "cx-engineer",
|
|
149
|
-
"openingQuestion": "Who is this for, what are they trying to do, and how will we know they succeeded?",
|
|
150
|
-
"failureMode": "If all acceptance criteria are subjective, the requirements aren't done."
|
|
151
|
-
},
|
|
152
172
|
"canEdit": false,
|
|
153
173
|
"collaborators": [
|
|
154
174
|
"ux-researcher"
|
|
@@ -202,15 +222,10 @@
|
|
|
202
222
|
]
|
|
203
223
|
},
|
|
204
224
|
"skills": [
|
|
205
|
-
"docs/research-workflow",
|
|
225
|
+
"docs/user-research-workflow",
|
|
226
|
+
"docs/evidence-ingest-workflow",
|
|
206
227
|
"strategy/jobs-to-be-done"
|
|
207
228
|
],
|
|
208
|
-
"perspective": {
|
|
209
|
-
"bias": "Ideal-user personas, invisible friction, 'users will figure it out'",
|
|
210
|
-
"tension": "cx-designer",
|
|
211
|
-
"openingQuestion": "Who specifically is the user, and what would success feel like to them — not to us?",
|
|
212
|
-
"failureMode": "If your brief has no friction points, you haven't talked to users."
|
|
213
|
-
},
|
|
214
229
|
"canEdit": false,
|
|
215
230
|
"collaborators": [
|
|
216
231
|
"architect",
|
|
@@ -254,12 +269,6 @@
|
|
|
254
269
|
"operating/oncall-rotation",
|
|
255
270
|
"operating/change-management"
|
|
256
271
|
],
|
|
257
|
-
"perspective": {
|
|
258
|
-
"bias": "Plans where every task runs in parallel, tasks that sound atomic but aren't, work starting before blockers clear",
|
|
259
|
-
"tension": "cx-architect",
|
|
260
|
-
"openingQuestion": "What must be done first, what blocks what, and who owns each deliverable?",
|
|
261
|
-
"failureMode": "If every task can run in parallel, the dependency graph wasn't drawn."
|
|
262
|
-
},
|
|
263
272
|
"canEdit": false,
|
|
264
273
|
"subscriptions": [
|
|
265
274
|
"plan.requested"
|
|
@@ -297,12 +306,6 @@
|
|
|
297
306
|
"devops/dependency-management",
|
|
298
307
|
"docs/transcript-synthesis"
|
|
299
308
|
],
|
|
300
|
-
"perspective": {
|
|
301
|
-
"bias": "Undated sources, version-specific claims without citation, blog posts treated as authoritative",
|
|
302
|
-
"tension": "cx-rd-lead",
|
|
303
|
-
"openingQuestion": "What is the version, the publication date, and the primary source?",
|
|
304
|
-
"failureMode": "If all sources are secondhand or undated, the research isn't done."
|
|
305
|
-
},
|
|
306
309
|
"canEdit": false,
|
|
307
310
|
"subscriptions": [
|
|
308
311
|
"evidence.requested",
|
|
@@ -348,12 +351,6 @@
|
|
|
348
351
|
"strategy/pricing-positioning",
|
|
349
352
|
"strategy/narrative-arc"
|
|
350
353
|
],
|
|
351
|
-
"perspective": {
|
|
352
|
-
"bias": "Tactical decisions dressed as strategy, ignoring competitive dynamics, 'build it and they will come'",
|
|
353
|
-
"tension": "cx-product-manager",
|
|
354
|
-
"openingQuestion": "What changes if we do this — who wins, who loses, and why does now matter?",
|
|
355
|
-
"failureMode": "If the brief doesn't name a specific market moment, it's not a strategy — it's a plan."
|
|
356
|
-
},
|
|
357
354
|
"canEdit": false,
|
|
358
355
|
"collaborators": [
|
|
359
356
|
"data-analyst",
|
|
@@ -396,12 +393,6 @@
|
|
|
396
393
|
"devops/database",
|
|
397
394
|
"operating/raw-data-structuring"
|
|
398
395
|
],
|
|
399
|
-
"perspective": {
|
|
400
|
-
"bias": "Vanity metrics, post-hoc success definitions, averages that hide distributions",
|
|
401
|
-
"tension": "cx-product-manager",
|
|
402
|
-
"openingQuestion": "What specific behavior change in users would prove this worked?",
|
|
403
|
-
"failureMode": "If the success metric can be hit without solving the problem, the metric is wrong."
|
|
404
|
-
},
|
|
405
396
|
"canEdit": false,
|
|
406
397
|
"collaborators": [
|
|
407
398
|
"evaluator",
|
|
@@ -442,12 +433,6 @@
|
|
|
442
433
|
"ai/prompt-and-eval",
|
|
443
434
|
"quality-gates/verify-quality"
|
|
444
435
|
],
|
|
445
|
-
"perspective": {
|
|
446
|
-
"bias": "Evals designed to match known outputs, cherry-picked baselines, promotion decisions on too few traces",
|
|
447
|
-
"tension": "cx-engineer",
|
|
448
|
-
"openingQuestion": "What would a regression look like, and can we detect it before shipping?",
|
|
449
|
-
"failureMode": "If you can't define a failing case before seeing results, you're rationalizing, not evaluating."
|
|
450
|
-
},
|
|
451
436
|
"canEdit": false,
|
|
452
437
|
"collaborators": [
|
|
453
438
|
"product-manager",
|
|
@@ -493,12 +478,6 @@
|
|
|
493
478
|
"ai/prompt-optimizer",
|
|
494
479
|
"ai/ml-ops"
|
|
495
480
|
],
|
|
496
|
-
"perspective": {
|
|
497
|
-
"bias": "Prompts optimized for known inputs, hallucination risk dismissed as edge cases, eval sets without failure cases",
|
|
498
|
-
"tension": "cx-evaluator",
|
|
499
|
-
"openingQuestion": "What does failure look like at scale, and does the eval set actually cover it?",
|
|
500
|
-
"failureMode": "If you haven't written a test case where the model should fail gracefully, you haven't tested the model."
|
|
501
|
-
},
|
|
502
481
|
"canEdit": true,
|
|
503
482
|
"collaborators": [
|
|
504
483
|
"architect",
|
|
@@ -542,12 +521,6 @@
|
|
|
542
521
|
"architecture/message-queue",
|
|
543
522
|
"architecture/security-arch"
|
|
544
523
|
],
|
|
545
|
-
"perspective": {
|
|
546
|
-
"bias": "Designs that emerged from code, missing ADRs, data models that encode assumptions that will change",
|
|
547
|
-
"tension": "cx-engineer",
|
|
548
|
-
"openingQuestion": "What are the invariants, and what breaks if they're violated?",
|
|
549
|
-
"failureMode": "If the ADR has no 'options rejected' section, the decision defaulted — and defaulted decisions bite hardest."
|
|
550
|
-
},
|
|
551
524
|
"canEdit": false,
|
|
552
525
|
"collaborators": [
|
|
553
526
|
"ai-engineer",
|
|
@@ -614,12 +587,6 @@
|
|
|
614
587
|
"exploration/tracer-bullet-method",
|
|
615
588
|
"exploration/dependency-graph-reading"
|
|
616
589
|
],
|
|
617
|
-
"perspective": {
|
|
618
|
-
"bias": "Implementations that ignore existing conventions, abstractions that complicate the simple case",
|
|
619
|
-
"tension": "cx-reviewer",
|
|
620
|
-
"openingQuestion": "What does the existing pattern look like, and where does my change fit?",
|
|
621
|
-
"failureMode": "If you haven't read every file you're about to touch, you don't know what you're changing."
|
|
622
|
-
},
|
|
623
590
|
"canEdit": true
|
|
624
591
|
},
|
|
625
592
|
{
|
|
@@ -653,12 +620,6 @@
|
|
|
653
620
|
"quality-gates/review-work",
|
|
654
621
|
"quality-gates/premortem"
|
|
655
622
|
],
|
|
656
|
-
"perspective": {
|
|
657
|
-
"bias": "Plans that are too elegant, 'unlikely' failure modes, scope drift with stable acceptance criteria",
|
|
658
|
-
"tension": "cx-architect",
|
|
659
|
-
"openingQuestion": "What's the simplest reason this fails?",
|
|
660
|
-
"failureMode": "If you find no CRITICAL challenges, you looked at the happy path. Dig into the error paths."
|
|
661
|
-
},
|
|
662
623
|
"canEdit": false,
|
|
663
624
|
"watchConditions": [
|
|
664
625
|
{
|
|
@@ -698,12 +659,6 @@
|
|
|
698
659
|
"quality-gates/review-work",
|
|
699
660
|
"quality-gates/verify-module"
|
|
700
661
|
],
|
|
701
|
-
"perspective": {
|
|
702
|
-
"bias": "Edge cases under conditions the author didn't consider, missing error handling, tests that mock too much",
|
|
703
|
-
"tension": "cx-engineer",
|
|
704
|
-
"openingQuestion": "Does this do what it's supposed to do under the conditions it wasn't designed for?",
|
|
705
|
-
"failureMode": "If your review only covered the happy path, you haven't reviewed."
|
|
706
|
-
},
|
|
707
662
|
"canEdit": true,
|
|
708
663
|
"subscriptions": [
|
|
709
664
|
"pr.opened",
|
|
@@ -747,12 +702,6 @@
|
|
|
747
702
|
"quality-gates/verify-security",
|
|
748
703
|
"architecture/security-arch"
|
|
749
704
|
],
|
|
750
|
-
"perspective": {
|
|
751
|
-
"bias": "'Internal only' as a security boundary, trust relationships never made explicit, unaudited dependencies",
|
|
752
|
-
"tension": "cx-engineer",
|
|
753
|
-
"openingQuestion": "What does an attacker see when they look at this?",
|
|
754
|
-
"failureMode": "If the only finding is 'no hardcoded secrets,' you checked one category out of eight."
|
|
755
|
-
},
|
|
756
705
|
"canEdit": true,
|
|
757
706
|
"subscriptions": [
|
|
758
707
|
"config.protection.violation",
|
|
@@ -801,12 +750,6 @@
|
|
|
801
750
|
"quality-gates/verify-change",
|
|
802
751
|
"quality-gates/verify-module"
|
|
803
752
|
],
|
|
804
|
-
"perspective": {
|
|
805
|
-
"bias": "Tests that mock too much, coverage metrics over behavior metrics, E2E suites that only test the happy path",
|
|
806
|
-
"tension": "cx-engineer",
|
|
807
|
-
"openingQuestion": "For each acceptance criterion — how does the test fail when the criterion is violated?",
|
|
808
|
-
"failureMode": "If every test passes on the first run with no debugging, the tests weren't hard enough."
|
|
809
|
-
},
|
|
810
753
|
"canEdit": true,
|
|
811
754
|
"subscriptions": [
|
|
812
755
|
"coverage.drop",
|
|
@@ -849,12 +792,6 @@
|
|
|
849
792
|
"devops/observability",
|
|
850
793
|
"devops/performance"
|
|
851
794
|
],
|
|
852
|
-
"perspective": {
|
|
853
|
-
"bias": "Symptom fixes, confirmation bias toward familiar failure patterns, 'it probably works now'",
|
|
854
|
-
"tension": "cx-engineer",
|
|
855
|
-
"openingQuestion": "Can I reproduce this deterministically, and what is the exact state at the point of failure?",
|
|
856
|
-
"failureMode": "If you can't state the invariant that was violated, you haven't found root cause."
|
|
857
|
-
},
|
|
858
795
|
"canEdit": true,
|
|
859
796
|
"subscriptions": [
|
|
860
797
|
"hang.detected",
|
|
@@ -894,12 +831,6 @@
|
|
|
894
831
|
"devops/performance",
|
|
895
832
|
"devops/incident-response"
|
|
896
833
|
],
|
|
897
|
-
"perspective": {
|
|
898
|
-
"bias": "Observability added as afterthought, untested rollback procedures, SLOs defined after the first incident",
|
|
899
|
-
"tension": "cx-engineer",
|
|
900
|
-
"openingQuestion": "How will we know when this is failing in production, and what do we do first?",
|
|
901
|
-
"failureMode": "If there's no alert definition before deployment, nobody planned for failure."
|
|
902
|
-
},
|
|
903
834
|
"canEdit": true,
|
|
904
835
|
"collaborators": [
|
|
905
836
|
"architect",
|
|
@@ -962,12 +893,6 @@
|
|
|
962
893
|
"devops/devsecops",
|
|
963
894
|
"devops/cost-optimization"
|
|
964
895
|
],
|
|
965
|
-
"perspective": {
|
|
966
|
-
"bias": "Hypothetical future problems solved with real present complexity, build systems only the author understands",
|
|
967
|
-
"tension": "cx-architect",
|
|
968
|
-
"openingQuestion": "What does the path from idea to verified change look like right now, and where is the real friction?",
|
|
969
|
-
"failureMode": "If the improvement adds more configuration than it removes friction, it's not an improvement."
|
|
970
|
-
},
|
|
971
896
|
"canEdit": true,
|
|
972
897
|
"collaborators": [
|
|
973
898
|
"docs-keeper",
|
|
@@ -1014,12 +939,6 @@
|
|
|
1014
939
|
"compliance/ai-disclosure",
|
|
1015
940
|
"compliance/regulatory-review"
|
|
1016
941
|
],
|
|
1017
|
-
"perspective": {
|
|
1018
|
-
"bias": "'Just logging' as a data review bypass, first-layer-only license checks, AI features without disclosure strategy",
|
|
1019
|
-
"tension": "cx-product-manager",
|
|
1020
|
-
"openingQuestion": "What data is being collected, stored, or processed, and do we have documented legal basis for each?",
|
|
1021
|
-
"failureMode": "If the risk list is empty, you didn't check AI processing obligations or dependency licenses past layer one."
|
|
1022
|
-
},
|
|
1023
942
|
"canEdit": false,
|
|
1024
943
|
"subscriptions": [
|
|
1025
944
|
"dep.license",
|
|
@@ -1055,14 +974,9 @@
|
|
|
1055
974
|
},
|
|
1056
975
|
"skills": [
|
|
1057
976
|
"devops/git-workflow",
|
|
1058
|
-
"quality-gates/verify-change"
|
|
977
|
+
"quality-gates/verify-change",
|
|
978
|
+
"docs/memo-and-decision-capture"
|
|
1059
979
|
],
|
|
1060
|
-
"perspective": {
|
|
1061
|
-
"bias": "Untested rollback procedures, migrations that can't be reversed, canary deployments without rollback triggers",
|
|
1062
|
-
"tension": "cx-engineer",
|
|
1063
|
-
"openingQuestion": "If this goes wrong 30 minutes after full rollout, what exactly do we do?",
|
|
1064
|
-
"failureMode": "If the rollback procedure isn't tested, it doesn't exist. You'll find out during an incident."
|
|
1065
|
-
},
|
|
1066
980
|
"canEdit": true,
|
|
1067
981
|
"subscriptions": [
|
|
1068
982
|
"release.candidate",
|
|
@@ -1101,14 +1015,9 @@
|
|
|
1101
1015
|
"docs/adr-workflow",
|
|
1102
1016
|
"docs/runbook-workflow",
|
|
1103
1017
|
"docs/init-docs",
|
|
1104
|
-
"docs/memo-and-decision-capture"
|
|
1018
|
+
"docs/memo-and-decision-capture",
|
|
1019
|
+
"docs/document-ingest-workflow"
|
|
1105
1020
|
],
|
|
1106
|
-
"perspective": {
|
|
1107
|
-
"bias": "Completed work with no context update, decisions 'everyone understands' but nobody wrote down",
|
|
1108
|
-
"tension": "cx-engineer",
|
|
1109
|
-
"openingQuestion": "What did we decide, why did we decide it, and where will the next person find it?",
|
|
1110
|
-
"failureMode": "If the project context file hasn't been updated since the work started, something important wasn't captured."
|
|
1111
|
-
},
|
|
1112
1021
|
"canEdit": true,
|
|
1113
1022
|
"subscriptions": [
|
|
1114
1023
|
"changelog.missing",
|
|
@@ -1156,12 +1065,6 @@
|
|
|
1156
1065
|
"frontend-design/engineering",
|
|
1157
1066
|
"frontend-design/accessibility"
|
|
1158
1067
|
],
|
|
1159
|
-
"perspective": {
|
|
1160
|
-
"bias": "Designs with no error or empty states, templates passed as design decisions, no hover/focus/active states",
|
|
1161
|
-
"tension": "cx-ux-researcher",
|
|
1162
|
-
"openingQuestion": "What is the user doing, what are they feeling, and what should the interface show them?",
|
|
1163
|
-
"failureMode": "If you don't have designed error and empty states, you have an incomplete design."
|
|
1164
|
-
},
|
|
1165
1068
|
"canEdit": true,
|
|
1166
1069
|
"subscriptions": [
|
|
1167
1070
|
"design.requested"
|
|
@@ -1203,12 +1106,6 @@
|
|
|
1203
1106
|
"frontend-design/accessibility",
|
|
1204
1107
|
"frontend-design/screen-reader-testing"
|
|
1205
1108
|
],
|
|
1206
|
-
"perspective": {
|
|
1207
|
-
"bias": "ARIA added to pass audits, keyboard navigation never tested, contrast that 'looks fine' but fails the spec",
|
|
1208
|
-
"tension": "cx-designer",
|
|
1209
|
-
"openingQuestion": "Can a user with no mouse, no vision, or slow internet complete this flow end to end?",
|
|
1210
|
-
"failureMode": "If every finding is LOW severity, you're reading the spec without using the product."
|
|
1211
|
-
},
|
|
1212
1109
|
"canEdit": false,
|
|
1213
1110
|
"collaborators": [
|
|
1214
1111
|
"designer",
|
|
@@ -1248,17 +1145,12 @@
|
|
|
1248
1145
|
]
|
|
1249
1146
|
},
|
|
1250
1147
|
"skills": [
|
|
1148
|
+
"docs/codebase-research-workflow",
|
|
1251
1149
|
"exploration/repo-map",
|
|
1252
1150
|
"exploration/unknown-codebase-onboarding",
|
|
1253
1151
|
"exploration/tracer-bullet-method",
|
|
1254
1152
|
"exploration/dependency-graph-reading"
|
|
1255
1153
|
],
|
|
1256
|
-
"perspective": {
|
|
1257
|
-
"bias": "'I know where this is' without verifying, grep results without context, 5-minute investigations",
|
|
1258
|
-
"tension": "cx-engineer",
|
|
1259
|
-
"openingQuestion": "What is actually here, and how does it actually work — not how it was intended to work?",
|
|
1260
|
-
"failureMode": "If the investigation took less than 15 minutes and you feel confident, you probably missed something."
|
|
1261
|
-
},
|
|
1262
1154
|
"canEdit": false
|
|
1263
1155
|
},
|
|
1264
1156
|
{
|
|
@@ -1291,12 +1183,6 @@
|
|
|
1291
1183
|
"ai/prompt-optimizer",
|
|
1292
1184
|
"ai/trace-triage"
|
|
1293
1185
|
],
|
|
1294
|
-
"perspective": {
|
|
1295
|
-
"bias": "Stable-looking medians hiding variance, trace analyses looking only at successes, promotions on too few traces",
|
|
1296
|
-
"tension": "cx-ai-engineer",
|
|
1297
|
-
"openingQuestion": "Which agents have degraded since the last cycle, and what does the trace evidence say about why?",
|
|
1298
|
-
"failureMode": "If all agents look stable, you haven't checked variance and trend. Median hides deterioration."
|
|
1299
|
-
},
|
|
1300
1186
|
"canEdit": true,
|
|
1301
1187
|
"subscriptions": [
|
|
1302
1188
|
"trace.anomaly"
|
|
@@ -1334,12 +1220,6 @@
|
|
|
1334
1220
|
"devops/observability",
|
|
1335
1221
|
"operating/raw-data-structuring"
|
|
1336
1222
|
],
|
|
1337
|
-
"perspective": {
|
|
1338
|
-
"bias": "Non-idempotent pipelines, unwritten data contracts, quality gates added after the first corruption incident",
|
|
1339
|
-
"tension": "cx-data-analyst",
|
|
1340
|
-
"openingQuestion": "Is this pipeline idempotent, observable, and does it have a contract for its output schema?",
|
|
1341
|
-
"failureMode": "If there are no data quality tests, the pipeline is running on faith."
|
|
1342
|
-
},
|
|
1343
1223
|
"canEdit": true
|
|
1344
1224
|
},
|
|
1345
1225
|
{
|
|
@@ -1372,12 +1252,6 @@
|
|
|
1372
1252
|
"quality-gates/verify-change",
|
|
1373
1253
|
"quality-gates/verify-module"
|
|
1374
1254
|
],
|
|
1375
|
-
"perspective": {
|
|
1376
|
-
"bias": "Intermittent tests dismissed as infrastructure, coverage numbers over behavioral coverage, arbitrary sleeps",
|
|
1377
|
-
"tension": "cx-qa",
|
|
1378
|
-
"openingQuestion": "Is this test deterministic, and does it actually fail when the behavior it's testing breaks?",
|
|
1379
|
-
"failureMode": "If the test suite has never caught a production bug, the tests are testing the wrong things."
|
|
1380
|
-
},
|
|
1381
1255
|
"canEdit": true
|
|
1382
1256
|
}
|
|
1383
1257
|
],
|
|
@@ -1528,6 +1402,11 @@
|
|
|
1528
1402
|
],
|
|
1529
1403
|
"copilot": [
|
|
1530
1404
|
"Copilot has no spawnable subagents. Use the Construct prompt/profile for normal use; internal role-specific profiles are contributor-facing implementation details."
|
|
1405
|
+
],
|
|
1406
|
+
"cursor": [
|
|
1407
|
+
"You are running inside Cursor. Construct is the single front door — route work through the `construct` persona and MCP tools (`orchestration_run`, `get_skill`, `orchestration_policy`).",
|
|
1408
|
+
"Start `construct dashboard` before multi-specialist orchestration. Project adapters live in `.cursor/mcp.json` and `.cursor/rules/construct.mdc` (regenerated by `npm run adapters` or `construct sync --project`).",
|
|
1409
|
+
"Skills are not copied into Cursor's skills UI — load playbooks via MCP `get_skill` with slash paths like `docs/adr-workflow` or `roles/engineer`."
|
|
1531
1410
|
]
|
|
1532
1411
|
}
|
|
1533
1412
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"description": "Shipped tone profiles for Construct document and agent output. Projects override via .cx/brand-voice.json.",
|
|
4
|
+
"profiles": {
|
|
5
|
+
"direct": {
|
|
6
|
+
"formality": 3,
|
|
7
|
+
"sentenceLength": "short to medium",
|
|
8
|
+
"whenToUse": ["runbooks", "internal memos", "research briefs", "technical ADRs"],
|
|
9
|
+
"constraints": "Lead with the answer. Plain language. Never contradict rules/common/neurodivergent-output.md."
|
|
10
|
+
},
|
|
11
|
+
"friendly": {
|
|
12
|
+
"formality": 2,
|
|
13
|
+
"sentenceLength": "medium",
|
|
14
|
+
"whenToUse": ["onboarding", "customer-facing FAQs", "PRFAQs", "docs-keeper memos"],
|
|
15
|
+
"constraints": "Warm but not casual. No idioms. Define terms on first use."
|
|
16
|
+
},
|
|
17
|
+
"executive-concise": {
|
|
18
|
+
"formality": 4,
|
|
19
|
+
"sentenceLength": "short",
|
|
20
|
+
"whenToUse": ["one-pagers", "strategy summaries", "business PRDs", "product intelligence readouts"],
|
|
21
|
+
"constraints": "TL;DR first. One idea per paragraph. Tables for numbers."
|
|
22
|
+
},
|
|
23
|
+
"decision-forcing-direct": {
|
|
24
|
+
"formality": 4,
|
|
25
|
+
"sentenceLength": "medium",
|
|
26
|
+
"whenToUse": ["PRDs", "ADRs", "RFCs", "meta-PRDs", "backlog proposals"],
|
|
27
|
+
"constraints": "Every section drives a decision or acceptance criterion. Rejected alternatives required where applicable."
|
|
28
|
+
},
|
|
29
|
+
"blameless": {
|
|
30
|
+
"formality": 3,
|
|
31
|
+
"sentenceLength": "medium",
|
|
32
|
+
"whenToUse": ["incident reports", "postmortems", "runbooks", "SRE comms"],
|
|
33
|
+
"constraints": "Corrective actions target systems, not people. No shame language."
|
|
34
|
+
},
|
|
35
|
+
"pedagogical": {
|
|
36
|
+
"formality": 2,
|
|
37
|
+
"sentenceLength": "medium",
|
|
38
|
+
"whenToUse": ["onboarding guides", "explorer maps", "UX research summaries", "architecture overviews"],
|
|
39
|
+
"constraints": "Teach the reader. Progressive disclosure. Examples before abstractions."
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|