@geraldmaron/construct 1.0.3 → 1.0.5
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 +51 -42
- package/agents/prompts/cx-ai-engineer.md +6 -26
- package/agents/prompts/cx-architect.md +1 -0
- package/agents/prompts/cx-business-strategist.md +2 -0
- package/agents/prompts/cx-data-analyst.md +6 -26
- package/agents/prompts/cx-docs-keeper.md +1 -31
- package/agents/prompts/cx-explorer.md +1 -0
- package/agents/prompts/cx-orchestrator.md +40 -112
- package/agents/prompts/cx-platform-engineer.md +2 -22
- package/agents/prompts/cx-product-manager.md +2 -1
- package/agents/prompts/cx-qa.md +0 -20
- package/agents/prompts/cx-rd-lead.md +2 -0
- package/agents/prompts/cx-researcher.md +77 -31
- package/agents/prompts/cx-security.md +11 -49
- package/agents/prompts/cx-sre.md +9 -43
- package/agents/prompts/cx-ux-researcher.md +1 -0
- package/agents/role-manifests.json +4 -4
- package/bin/construct +279 -4
- package/commands/understand/research.md +5 -3
- package/db/schema/004_recommendations.sql +46 -0
- package/db/schema/005_strategy.sql +21 -0
- package/lib/auto-docs.mjs +3 -4
- package/lib/beads-automation.mjs +16 -7
- package/lib/cli-commands.mjs +52 -2
- package/lib/comment-lint.mjs +7 -1
- package/lib/config/schema.mjs +3 -0
- package/lib/embed/conflict-detection.mjs +26 -9
- package/lib/embed/customer-profiles.mjs +37 -17
- package/lib/embed/daemon.mjs +10 -8
- package/lib/embed/recommendation-store.mjs +213 -14
- package/lib/embed/workspaces.mjs +53 -18
- package/lib/flavors/loader.mjs +136 -0
- package/lib/gates-audit.mjs +3 -3
- package/lib/health-check.mjs +1 -1
- package/lib/hooks/agent-tracker.mjs +22 -3
- package/lib/hooks/pre-compact.mjs +3 -0
- package/lib/hooks/pre-push-gate.mjs +14 -1
- package/lib/hooks/read-tracker.mjs +10 -101
- package/lib/hooks/session-optimize.mjs +3 -2
- package/lib/hooks/session-reflect.mjs +68 -0
- package/lib/host-capabilities.mjs +90 -1
- package/lib/init-unified.mjs +25 -2
- package/lib/init-update.mjs +246 -131
- package/lib/intake/classify.mjs +61 -183
- package/lib/intake/prepare.mjs +7 -0
- package/lib/intake/tables/creative.mjs +94 -0
- package/lib/intake/tables/operations.mjs +85 -0
- package/lib/intake/tables/research.mjs +85 -0
- package/lib/intake/tables/rnd.mjs +175 -0
- package/lib/intent-classifier.mjs +1 -0
- package/lib/knowledge/layout.mjs +10 -0
- package/lib/knowledge/research-store.mjs +109 -0
- package/lib/mcp/tools/telemetry.mjs +30 -78
- package/lib/model-router.mjs +61 -1
- package/lib/observation-store.mjs +19 -0
- package/lib/ollama-manager.mjs +1 -1
- package/lib/opencode-telemetry.mjs +4 -5
- package/lib/orchestration-policy.mjs +9 -0
- package/lib/outcomes/aggregate.mjs +104 -0
- package/lib/outcomes/record.mjs +115 -0
- package/lib/parity.mjs +121 -21
- package/lib/profiles/lifecycle.mjs +388 -0
- package/lib/profiles/loader.mjs +123 -0
- package/lib/profiles/validate-custom.mjs +114 -0
- package/lib/prompt-composer.js +106 -29
- package/lib/read-tracker-store.mjs +149 -0
- package/lib/reflect/extractor.mjs +193 -0
- package/lib/reflect.mjs +89 -2
- package/lib/sandbox.mjs +102 -0
- package/lib/server/index.mjs +76 -0
- package/lib/server/telemetry-login.mjs +17 -25
- package/lib/service-manager.mjs +30 -22
- package/lib/services/local-postgres.mjs +15 -0
- package/lib/services/telemetry-backend.mjs +1 -2
- package/lib/setup.mjs +8 -43
- package/lib/status.mjs +51 -5
- package/lib/storage/backend.mjs +12 -2
- package/lib/strategy-store.mjs +371 -0
- package/lib/telemetry/backends/local.mjs +6 -4
- package/lib/telemetry/client.mjs +185 -0
- package/lib/telemetry/ingest.mjs +13 -5
- package/lib/telemetry/team-rollup.mjs +9 -2
- package/lib/worker/trace.mjs +17 -27
- package/package.json +10 -2
- package/personas/construct.md +20 -20
- package/platforms/claude/settings.template.json +13 -0
- package/rules/common/research.md +44 -12
- package/scripts/sync-agents.mjs +11 -0
- package/skills/docs/backlog-proposal-workflow.md +2 -2
- package/skills/docs/customer-profile-workflow.md +1 -1
- package/skills/docs/evidence-ingest-workflow.md +5 -5
- package/skills/docs/prfaq-workflow.md +1 -1
- package/skills/docs/product-intelligence-review.md +1 -1
- package/skills/docs/product-intelligence-workflow.md +3 -3
- package/skills/docs/product-signal-workflow.md +48 -18
- package/skills/docs/research-workflow.md +26 -14
- package/skills/docs/strategy-workflow.md +36 -0
- package/skills/roles/architect.ai-systems.md +4 -2
- package/skills/roles/architect.data.md +4 -2
- package/skills/roles/architect.enterprise.md +4 -2
- package/skills/roles/architect.integration.md +4 -2
- package/skills/roles/architect.md +7 -5
- package/skills/roles/architect.platform.md +4 -2
- package/skills/roles/data-analyst.experiment.md +4 -2
- package/skills/roles/data-analyst.md +9 -7
- package/skills/roles/data-analyst.product-intelligence.md +5 -3
- package/skills/roles/data-analyst.product.md +4 -2
- package/skills/roles/data-analyst.telemetry.md +4 -2
- package/skills/roles/data-engineer.pipeline.md +4 -2
- package/skills/roles/data-engineer.vector-retrieval.md +4 -2
- package/skills/roles/data-engineer.warehouse.md +4 -2
- package/skills/roles/debugger.md +7 -5
- package/skills/roles/designer.accessibility.md +4 -2
- package/skills/roles/designer.md +10 -8
- package/skills/roles/engineer.ai.md +4 -2
- package/skills/roles/engineer.data.md +5 -3
- package/skills/roles/engineer.md +14 -12
- package/skills/roles/engineer.platform.md +5 -3
- package/skills/roles/operator.docs.md +6 -4
- package/skills/roles/operator.md +6 -4
- package/skills/roles/operator.release.md +4 -2
- package/skills/roles/operator.sre.md +5 -3
- package/skills/roles/orchestrator.md +5 -3
- package/skills/roles/product-manager.ai-product.md +4 -2
- package/skills/roles/product-manager.business-strategy.md +4 -2
- package/skills/roles/product-manager.enterprise.md +4 -2
- package/skills/roles/product-manager.growth.md +4 -2
- package/skills/roles/product-manager.md +6 -4
- package/skills/roles/product-manager.platform.md +4 -2
- package/skills/roles/product-manager.product.md +4 -2
- package/skills/roles/qa.ai-eval.md +4 -2
- package/skills/roles/qa.api-contract.md +4 -2
- package/skills/roles/qa.data-pipeline.md +4 -2
- package/skills/roles/qa.md +7 -5
- package/skills/roles/qa.test-automation.md +5 -3
- package/skills/roles/qa.web-ui.md +4 -2
- package/skills/roles/researcher.explorer.md +4 -2
- package/skills/roles/researcher.md +35 -20
- package/skills/roles/researcher.ux.md +4 -2
- package/skills/roles/reviewer.devil-advocate.md +4 -2
- package/skills/roles/reviewer.evaluator.md +4 -2
- package/skills/roles/reviewer.md +14 -12
- package/skills/roles/reviewer.trace.md +4 -2
- package/skills/roles/security.ai.md +4 -2
- package/skills/roles/security.appsec.md +4 -2
- package/skills/roles/security.cloud.md +4 -2
- package/skills/roles/security.legal-compliance.md +4 -2
- package/skills/roles/security.md +7 -5
- package/skills/roles/security.privacy.md +4 -2
- package/skills/roles/security.supply-chain.md +4 -2
- package/skills/routing.md +8 -1
- package/templates/docs/persona-artifact.md +36 -0
- package/templates/docs/research-brief.md +63 -9
- package/templates/docs/research-finding.md +26 -0
- package/templates/docs/skill-artifact.md +27 -0
- package/templates/docs/strategy.md +36 -0
- package/templates/homebrew/construct.rb +6 -6
package/README.md
CHANGED
|
@@ -1,73 +1,78 @@
|
|
|
1
1
|
# Construct
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Heads up. Construct is an open source project I started. I am not a developer. This is a side project. There may be bugs, there may be defects, but I'm building it to learn in public. If you'd like to contribute, please do.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
One AI interface. A team of specialists behind it. Hard gates. Runs locally, or deploys for teams.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Construct sits on top of Claude Code, OpenCode, Codex, Cursor, and Copilot. You talk to one persona called `construct`. Behind it are 28 specialists (architect, engineer, reviewer, QA, security, designer, and more) under typed contracts and enforced gates. Sessions survive boundary changes via durable state in `.cx/`, beads, and a local vector index. Solo by default. Can deploy centrally for teams that want shared memory, telemetry, queues, and policy.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
The team and enterprise modes exist because I wanted to learn what shipping a real multi-tenant tool would look like. The project is still open source, the code is still public, and the bar is still "does this help me learn." Run it solo if that's all you need.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Full docs: [`geraldmaron.github.io/construct/v2/`](https://geraldmaron.github.io/construct/v2/).
|
|
12
|
+
|
|
13
|
+
## Getting started
|
|
14
|
+
|
|
15
|
+
Install the CLI (once per machine):
|
|
12
16
|
|
|
13
17
|
```bash
|
|
14
18
|
npm install -g @geraldmaron/construct
|
|
15
19
|
```
|
|
16
20
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
First time on a new machine, bootstrap local services. `construct install` auto-spins local Postgres + telemetry backend via Docker:
|
|
21
|
+
Bootstrap local services (once per machine):
|
|
20
22
|
|
|
21
23
|
```bash
|
|
22
24
|
construct install --yes
|
|
23
|
-
# Local services:
|
|
24
|
-
# Telemetry: http://localhost:54330
|
|
25
|
-
# Postgres: postgresql://construct:construct@127.0.0.1:54329/construct
|
|
26
25
|
```
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
Initialize a project:
|
|
29
28
|
|
|
30
29
|
```bash
|
|
31
30
|
cd ~/your-project
|
|
32
31
|
construct init --auto-start
|
|
33
32
|
```
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
Open your editor and talk to `@construct`. A walkthrough lives in `construct_guide.md` at your project root.
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
No Node? Try `brew install geraldmaron/construct/construct`. Cloning a project that already uses Construct? `npx -y @geraldmaron/construct init` wires it up.
|
|
38
37
|
|
|
39
|
-
|
|
38
|
+
[Five minute walkthrough](https://geraldmaron.github.io/construct/v2/docs/start).
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
## What you can do with it
|
|
40
|
+
## What you can do
|
|
44
41
|
|
|
45
42
|
| If you want to... | Read |
|
|
46
43
|
|---|---|
|
|
47
|
-
| Install
|
|
48
|
-
| Understand how it works | [
|
|
49
|
-
| Pick a deployment mode | [
|
|
50
|
-
| Drop a signal and triage it | [
|
|
51
|
-
| Add a custom specialist | [
|
|
52
|
-
| Fix a blocked commit or red CI | [
|
|
53
|
-
| Plug in your own LLM | [
|
|
54
|
-
|
|
|
55
|
-
| Look up a CLI command | [Reference → CLI](https://geraldmaron.github.io/construct/v2/docs/reference/cli) |
|
|
56
|
-
| Recover from an outage | [Operations → Troubleshooting](https://geraldmaron.github.io/construct/v2/docs/operations/troubleshooting) |
|
|
44
|
+
| Install and run a first task | [Start](https://geraldmaron.github.io/construct/v2/docs/start) |
|
|
45
|
+
| Understand how it works | [Architecture](https://geraldmaron.github.io/construct/v2/docs/concepts/architecture) |
|
|
46
|
+
| Pick a deployment mode | [Deployment model](https://geraldmaron.github.io/construct/v2/docs/concepts/deployment-model) |
|
|
47
|
+
| Drop a signal and triage it | [Intake and triage](https://geraldmaron.github.io/construct/v2/docs/concepts/intake-and-triage) |
|
|
48
|
+
| Add a custom specialist | [Add a custom agent](https://geraldmaron.github.io/construct/v2/docs/cookbook/add-a-custom-agent) |
|
|
49
|
+
| Fix a blocked commit or red CI | [Fix a policy violation](https://geraldmaron.github.io/construct/v2/docs/cookbook/fix-a-policy-violation) |
|
|
50
|
+
| Plug in your own LLM | [Plug in your own LLM](https://geraldmaron.github.io/construct/v2/docs/cookbook/plug-in-your-own-llm) |
|
|
51
|
+
| Look up a CLI command | [CLI reference](https://geraldmaron.github.io/construct/v2/docs/reference/cli) |
|
|
57
52
|
|
|
58
53
|
Works with Anthropic, OpenRouter, Ollama, and other OpenAI-compatible providers.
|
|
59
54
|
|
|
60
|
-
##
|
|
55
|
+
## Deployment modes
|
|
56
|
+
|
|
57
|
+
Three modes. `solo` is the default and runs everything locally. Filesystem queue, local repo state, optional Postgres via Docker, local JSONL traces. If every cloud service goes down, you still work from `plan.md`, `.cx/context.md`, beads, git, and the local vector index.
|
|
61
58
|
|
|
62
|
-
|
|
59
|
+
`team` promotes the intake queue to Postgres with row-locked worker claims. Shared memory, Docker worker pool, centralized telemetry, MCP through a broker.
|
|
60
|
+
|
|
61
|
+
`enterprise` adds tenant isolation, RBAC and ABAC scaffolding, isolated worker containers, signed MCP allowlists, and mandatory audit.
|
|
62
|
+
|
|
63
|
+
Pick or change modes with `construct config mode [solo|team|enterprise]`. [Deployment model](https://geraldmaron.github.io/construct/v2/docs/concepts/deployment-model).
|
|
63
64
|
|
|
64
65
|
## Signals to R&D
|
|
65
66
|
|
|
66
|
-
Anything dropped into `.cx/inbox/` (a bug report, a customer comment, a competitor PDF, a postmortem draft) is classified into
|
|
67
|
+
Anything dropped into `.cx/inbox/` (a bug report, a customer comment, a competitor PDF, a postmortem draft) is classified into one of: bug, user-signal, experiment, eval-finding, architecture, incident, security, requirement, research, ops, legal-compliance. Each signal gets a primary owner and a recommended handoff chain. Inspect with `construct intake list` and `construct intake show <id>`. Generate a task graph with `construct graph from-intake <id>`. The classifier runs in the daemon and is deterministic. The agent in your editor does the actual analysis. [Intake and triage](https://geraldmaron.github.io/construct/v2/docs/concepts/intake-and-triage).
|
|
67
68
|
|
|
68
69
|
## Hard gates
|
|
69
70
|
|
|
70
|
-
Every code mutation runs through enforcement
|
|
71
|
+
Every code mutation runs through enforcement. No secrets committed, tests green, docs current, comments lint-clean, CI passes. Gates live in three places: write-time, commit-time, CI safety net. They can only be bypassed with explicit env vars so every exception leaves an audit trail. [Gates and enforcement](https://geraldmaron.github.io/construct/v2/docs/concepts/gates-and-enforcement).
|
|
72
|
+
|
|
73
|
+
## Learning loops
|
|
74
|
+
|
|
75
|
+
Construct gets smarter on its own. Every session ends with an automatic capture: tools used, files touched, what the final reply said. That goes into `.cx/observations/` and is searchable from the next session. See [`docs/concepts/learning-loops.md`](./docs/concepts/learning-loops.md) for what's wired, what's coming, and how to turn pieces off.
|
|
71
76
|
|
|
72
77
|
## Core commands
|
|
73
78
|
|
|
@@ -83,7 +88,9 @@ Every code mutation runs through enforcement: no secrets committed, tests green,
|
|
|
83
88
|
| `construct install` | Machine setup: install Docker, cm, and bootstrap config |
|
|
84
89
|
| `construct intake` | View and process R&D intake queue |
|
|
85
90
|
| `construct models` | Manage AI model assignments |
|
|
91
|
+
| `construct profile` | Manage the active org profile and its lifecycle (draft, promote, archive, health) |
|
|
86
92
|
| `construct recommendations` | View and manage artifact recommendations |
|
|
93
|
+
| `construct sandbox` | Isolated tmpdir-based environment for QA / specialist dry-runs |
|
|
87
94
|
| `construct status` | Show system health and credentials |
|
|
88
95
|
| `construct stop` | Stop all running services |
|
|
89
96
|
| `construct sync` | Sync agent adapters to AI tools |
|
|
@@ -101,6 +108,7 @@ Every code mutation runs through enforcement: no secrets committed, tests green,
|
|
|
101
108
|
| `construct infer` | Infer schema from documents |
|
|
102
109
|
| `construct ingest` | Convert documents to indexed markdown |
|
|
103
110
|
| `construct integrations` | Check and manage external system connections |
|
|
111
|
+
| `construct knowledge` | Query, index, or add to the project knowledge base |
|
|
104
112
|
| `construct memory` | Inspect memory layer |
|
|
105
113
|
| `construct reflect` | Capture improvement feedback |
|
|
106
114
|
| `construct search` | Hybrid search across project state |
|
|
@@ -158,10 +166,10 @@ Every code mutation runs through enforcement: no secrets committed, tests green,
|
|
|
158
166
|
|
|
159
167
|
## For contributors
|
|
160
168
|
|
|
161
|
-
- [`CONTRIBUTING.md`](./CONTRIBUTING.md)
|
|
162
|
-
- [`CHANGELOG.md`](./CHANGELOG.md)
|
|
163
|
-
- [`docs/concepts/architecture.md`](./docs/concepts/architecture.md)
|
|
164
|
-
- [`AGENTS.md`](./AGENTS.md)
|
|
169
|
+
- [`CONTRIBUTING.md`](./CONTRIBUTING.md). Branch workflow, gates, review expectations.
|
|
170
|
+
- [`CHANGELOG.md`](./CHANGELOG.md). Release history.
|
|
171
|
+
- [`docs/concepts/architecture.md`](./docs/concepts/architecture.md). Canonical architecture.
|
|
172
|
+
- [`AGENTS.md`](./AGENTS.md). Agent operating contract.
|
|
165
173
|
|
|
166
174
|
## Project structure
|
|
167
175
|
|
|
@@ -169,7 +177,7 @@ Every code mutation runs through enforcement: no secrets committed, tests green,
|
|
|
169
177
|
```text
|
|
170
178
|
construct/
|
|
171
179
|
├── agents Registry and generated platform adapter chains
|
|
172
|
-
├── apps User-facing apps shipped from this repo (e.g
|
|
180
|
+
├── apps User-facing apps shipped from this repo (e.g. apps/docs/, the Fumadocs docs site)
|
|
173
181
|
├── bin CLI entrypoint (`construct`)
|
|
174
182
|
├── commands Command prompt assets
|
|
175
183
|
├── dashboard
|
|
@@ -180,6 +188,7 @@ construct/
|
|
|
180
188
|
├── lib Core runtime: CLI, hooks, MCP, status, sync, workflow
|
|
181
189
|
├── personas Persona prompt definitions
|
|
182
190
|
├── platforms
|
|
191
|
+
├── profiles
|
|
183
192
|
├── providers
|
|
184
193
|
├── rules Coding and quality standards
|
|
185
194
|
├── schemas
|
|
@@ -193,16 +202,16 @@ construct/
|
|
|
193
202
|
|
|
194
203
|
## Uninstall
|
|
195
204
|
|
|
196
|
-
Run the uninstaller first, then
|
|
205
|
+
Run the uninstaller first, then remove the package:
|
|
197
206
|
|
|
198
207
|
```bash
|
|
199
208
|
construct uninstall # interactive; pick what to remove
|
|
200
209
|
npm uninstall @geraldmaron/construct
|
|
201
210
|
```
|
|
202
211
|
|
|
203
|
-
`construct uninstall`
|
|
212
|
+
`construct uninstall` finds both project state (`.construct/`, the Construct-owned files under `.claude/agents/` and `.claude/commands/`, hooks and mcpServers Construct added to `.claude/settings.json`) and machine state (`~/.cx/`, `~/.construct/workspace/`, the embedding model cache, the local Postgres container). Auto-risk items go by default. Ask-risk items (Postgres data, API keys, files you may have edited) are skipped unless you opt in.
|
|
204
213
|
|
|
205
|
-
It
|
|
214
|
+
It will not touch Docker itself, Homebrew CLIs like `cm` and `cass`, the pgvector image, or anything you added to `.claude/settings.json` by hand. Those appear in the final summary as follow-ups.
|
|
206
215
|
|
|
207
216
|
Useful flags:
|
|
208
217
|
|
|
@@ -210,8 +219,8 @@ Useful flags:
|
|
|
210
219
|
construct uninstall --dry-run # show the plan, change nothing
|
|
211
220
|
construct uninstall --yes # non-interactive, auto-risk only
|
|
212
221
|
construct uninstall --yes --all # non-interactive, everything
|
|
213
|
-
construct uninstall --scope=project # only this project
|
|
214
|
-
construct uninstall --keep-state # only .construct/
|
|
222
|
+
construct uninstall --scope=project # only this project, leave ~/.construct alone
|
|
223
|
+
construct uninstall --keep-state # only .construct/ and .claude/, keep .cx/, ~/.construct, Postgres
|
|
215
224
|
```
|
|
216
225
|
|
|
217
226
|
## License
|
|
@@ -30,26 +30,6 @@ Model selection:
|
|
|
30
30
|
|
|
31
31
|
Do not ship AI changes without an evaluation plan.
|
|
32
32
|
|
|
33
|
-
## Tool Contracts
|
|
34
|
-
|
|
35
|
-
### evaluate_prompt
|
|
36
|
-
- **Input:** `{ promptVersion: string, testCases: TestCase[], modelTier: string }`
|
|
37
|
-
- **Output:** `{ passRate: number, failureModes: string[], hallucinationRate: number, recommendations: string[] }`
|
|
38
|
-
- **Errors:** INSUFFICIENT_TEST_CASES, MODEL_UNAVAILABLE
|
|
39
|
-
- **Rate:** 10/min
|
|
40
|
-
|
|
41
|
-
### stress_test
|
|
42
|
-
- **Input:** `{ promptVersion: string, attackVectors: string[], edgeCases: EdgeCase[] }`
|
|
43
|
-
- **Output:** `{ vulnerabilities: Vulnerability[], gracefulFailures: number, catastrophicFailures: number }`
|
|
44
|
-
- **Errors:** NO_ATTACK_VECTORS, TIMEOUT
|
|
45
|
-
- **Rate:** 5/min
|
|
46
|
-
|
|
47
|
-
### design_eval_set
|
|
48
|
-
- **Input:** `{ domain: string, failureModes: string[], coverage: CoverageTarget }`
|
|
49
|
-
- **Output:** `{ testCases: TestCase[], goldenTraces: GoldenTrace[], rubric: EvalRubric }`
|
|
50
|
-
- **Errors:** UNDERCOVERED_FAILURE_MODE, AMBIGUOUS_DOMAIN
|
|
51
|
-
- **Rate:** 5/min
|
|
52
|
-
|
|
53
33
|
## Document Quality Loop (Evaluator-Optimizer)
|
|
54
34
|
|
|
55
35
|
Before finalizing any AI feature implementation or eval plan:
|
|
@@ -64,15 +44,15 @@ Before finalizing any AI feature implementation or eval plan:
|
|
|
64
44
|
3. **If score < 0.7**, revise based on feedback
|
|
65
45
|
4. **Max 3 iterations**, then escalate to human with score breakdown
|
|
66
46
|
|
|
67
|
-
## Parallel
|
|
47
|
+
## Parallel review discipline
|
|
68
48
|
|
|
69
|
-
|
|
49
|
+
Route these concurrently when conditions apply:
|
|
70
50
|
|
|
71
|
-
- **cx-security**
|
|
72
|
-
- **cx-qa**
|
|
73
|
-
- **cx-evaluator**
|
|
51
|
+
- **cx-security** — if the AI feature handles user data, auth decisions, or has prompt injection risk
|
|
52
|
+
- **cx-qa** — if eval set or test coverage needs independent validation
|
|
53
|
+
- **cx-evaluator** — if rubric design or quality thresholds need a second opinion
|
|
74
54
|
|
|
75
|
-
|
|
55
|
+
Handoff via bd label. Do not block your submission on their completion.
|
|
76
56
|
|
|
77
57
|
## Learning Capture
|
|
78
58
|
|
|
@@ -14,6 +14,7 @@ You have inherited enough unmaintainable systems to be permanently suspicious of
|
|
|
14
14
|
**Failure mode warning**: If the ADR has no "options rejected" section, the decision wasn't made — it defaulted. Defaulted decisions are the ones that bite hardest.
|
|
15
15
|
|
|
16
16
|
**Role guidance**: call `get_skill("roles/architect")` before drafting.
|
|
17
|
+
**Strategy grounding**: for decisions with long-term interface or data model implications, check `.cx/knowledge/decisions/strategy/` for any declared strategy documents before choosing. A decision that contradicts a declared Bet or enables a Non-bet must surface the conflict explicitly in the ADR's OPTIONS CONSIDERED section. If no strategy documents exist, proceed without — do not block the workflow or invent strategy.
|
|
17
18
|
|
|
18
19
|
When the architecture domain is clear, also load exactly one relevant overlay before drafting:
|
|
19
20
|
- `roles/architect.platform` for APIs, SDKs, developer platforms, admin surfaces, tenancy, compatibility, migrations, and platform contracts
|
|
@@ -14,6 +14,8 @@ You have seen technically excellent products fail because they built the right t
|
|
|
14
14
|
**Failure mode warning**: If the strategic brief doesn't name a specific market moment or competitive dynamic, it's not a strategy — it's a plan.
|
|
15
15
|
|
|
16
16
|
**Role guidance**: call `get_skill("roles/product-manager.business-strategy")` before drafting.
|
|
17
|
+
**Strategy grounding**: before drafting any strategic brief, read `.cx/knowledge/decisions/strategy/` for declared Bets and Non-bets. A recommendation that contradicts a declared Non-bet must surface the conflict explicitly in the OPTIONS section and require a user decision before proceeding. If no strategy documents exist, proceed without — do not block or invent.
|
|
18
|
+
**Evidence standard**: EVIDENCE section claims must cite a primary source with a date. Follow `rules/common/research.md` — most-recent-first, primary sources, verified URLs. Market timing claims without dated primary evidence are labeled as assumptions, not findings.
|
|
17
19
|
|
|
18
20
|
Produce a strategic brief:
|
|
19
21
|
STRATEGIC CONTEXT: what market or competitive condition this work responds to
|
|
@@ -29,26 +29,6 @@ EXPERIMENT DESIGN (if A/B): randomization unit, sample size, duration, minimum d
|
|
|
29
29
|
DATA QUALITY CAVEATS: known biases, missing populations, measurement errors
|
|
30
30
|
INSTRUMENTATION REQUIREMENTS: specific events, properties, and schema needed
|
|
31
31
|
|
|
32
|
-
## Tool Contracts
|
|
33
|
-
|
|
34
|
-
### analyze_metrics
|
|
35
|
-
- **Input:** `{ metricDefinitions: MetricDef[], baseline?: number, target?: number, dataSource: string }`
|
|
36
|
-
- **Output:** `{ analysis: string, recommendations: string[], confidence: number, dataQualityCaveats: string[] }`
|
|
37
|
-
- **Errors:** INSUFFICIENT_DATA, METRIC_NOT_FOUND, BASELINE_MISSING
|
|
38
|
-
- **Rate:** 10/min
|
|
39
|
-
|
|
40
|
-
### define_success_metrics
|
|
41
|
-
- **Input:** `{ feature: string, userBehavior: string, context: string }`
|
|
42
|
-
- **Output:** `{ metrics: MetricDef[], instrumentations: string[], guardrails: string[] }`
|
|
43
|
-
- **Errors:** AMBIGUOUS_BEHAVIOR, UNMEASURABLE_OUTCOME
|
|
44
|
-
- **Rate:** 5/min
|
|
45
|
-
|
|
46
|
-
### design_experiment
|
|
47
|
-
- **Input:** `{ hypothesis: string, metric: string, mde?: number, power?: number }`
|
|
48
|
-
- **Output:** `{ sampleSize: number, duration: number, randomizationUnit: string, stopRules: StopRule[] }`
|
|
49
|
-
- **Errors:** UNDERPOWERED, INVALID_RANDOMIZATION
|
|
50
|
-
- **Rate:** 5/min
|
|
51
|
-
|
|
52
32
|
## Document Quality Loop (Evaluator-Optimizer)
|
|
53
33
|
|
|
54
34
|
Before finalizing any analysis document or metric definition:
|
|
@@ -64,15 +44,15 @@ Before finalizing any analysis document or metric definition:
|
|
|
64
44
|
3. **If score < 0.7**, revise based on feedback
|
|
65
45
|
4. **Max 3 iterations**, then escalate to human with score breakdown
|
|
66
46
|
|
|
67
|
-
## Parallel
|
|
47
|
+
## Parallel review discipline
|
|
68
48
|
|
|
69
|
-
|
|
49
|
+
Route these concurrently when conditions apply:
|
|
70
50
|
|
|
71
|
-
- **cx-security**
|
|
72
|
-
- **cx-sre**
|
|
73
|
-
- **cx-product-manager**
|
|
51
|
+
- **cx-security** — if PII, user data, or access patterns are involved in the data model
|
|
52
|
+
- **cx-sre** — if operational metrics or alerting thresholds are being defined
|
|
53
|
+
- **cx-product-manager** — if success metrics affect roadmap prioritization decisions
|
|
74
54
|
|
|
75
|
-
|
|
55
|
+
Handoff via bd label. Async — do not block on their completion before submitting your analysis.
|
|
76
56
|
|
|
77
57
|
## Learning Capture
|
|
78
58
|
|
|
@@ -47,27 +47,7 @@ Memory write-back: after updating docs, call `create_entities` or `add_observati
|
|
|
47
47
|
|
|
48
48
|
Maintenance: keep `.cx/context.md` under 100 lines. Summarize and archive older entries. Check for documentation drift before work is declared complete.
|
|
49
49
|
|
|
50
|
-
Doc structure: skills at skills/docs/ define the workflow for each doc type. Product Intelligence working artifacts live under .cx/
|
|
51
|
-
|
|
52
|
-
## Tool Contracts
|
|
53
|
-
|
|
54
|
-
### create_document
|
|
55
|
-
- **Input:** `{ template: string, context: DocumentContext, stakeholders: string[] }`
|
|
56
|
-
- **Output:** `{ document: Document, qualityScore: number, missingSections: string[] }`
|
|
57
|
-
- **Errors:** TEMPLATE_NOT_FOUND, INSUFFICIENT_CONTEXT
|
|
58
|
-
- **Rate:** 10/min
|
|
59
|
-
|
|
60
|
-
### update_context
|
|
61
|
-
- **Input:** `{ contextPath: string, updates: ContextUpdate[], archiveOld: boolean }`
|
|
62
|
-
- **Output:** `{ success: boolean, newLineCount: number, archived: string[] }`
|
|
63
|
-
- **Errors:** CONTEXT_TOO_LARGE, INVALID_UPDATE
|
|
64
|
-
- **Rate:** 20/min
|
|
65
|
-
|
|
66
|
-
### record_decision
|
|
67
|
-
- **Input:** `{ decision: string, rationale: string, alternatives: Alternative[], filesAffected: string[] }`
|
|
68
|
-
- **Output:** `{ adrPath: string, entityId: string, observationId: string }`
|
|
69
|
-
- **Errors:** MISSING_RATIONALE, NO_ALTERNATIVES
|
|
70
|
-
- **Rate:** 15/min
|
|
50
|
+
Doc structure: skills at skills/docs/ define the workflow for each doc type. Product Intelligence working artifacts live under .cx/knowledge/. Research: .cx/research/{slug}.md. ADRs: docs/adr/ADR-{NNN}-{slug}.md. PRDs: docs/prd/{date}-{slug}.md. Meta PRDs: docs/meta-prd/{date}-{slug}.md. Runbooks: docs/runbooks/{service}-{operation}.md. Always use the matching template as the starting structure.
|
|
71
51
|
|
|
72
52
|
## Document Quality Loop (Evaluator-Optimizer)
|
|
73
53
|
|
|
@@ -111,16 +91,6 @@ Doc structure: skills at skills/docs/ define the workflow for each doc type. Pro
|
|
|
111
91
|
3. **If score < 0.7**, revise based on feedback
|
|
112
92
|
4. **Max 3 iterations**, then escalate to human with score breakdown
|
|
113
93
|
|
|
114
|
-
## Parallel Execution
|
|
115
|
-
|
|
116
|
-
When documenting changes, these checks run in parallel:
|
|
117
|
-
|
|
118
|
-
- **cx-security** (if doc covers auth, data handling, or security boundaries)
|
|
119
|
-
- **cx-legal-compliance** (if doc involves data retention, privacy, or regulatory scope)
|
|
120
|
-
- **cx-sre** (if runbook or operational procedure)
|
|
121
|
-
|
|
122
|
-
Do NOT wait for these to complete before drafting — they provide async feedback on content accuracy.
|
|
123
|
-
|
|
124
94
|
## Learning Capture
|
|
125
95
|
|
|
126
96
|
After completing documentation work, record observations:
|
|
@@ -14,6 +14,7 @@ You read before you conclude, because assumptions about code are wrong more ofte
|
|
|
14
14
|
**Failure mode warning**: If the investigation took less than 15 minutes and you feel confident, you probably missed something. Complex systems hide their behavior.
|
|
15
15
|
|
|
16
16
|
**Role guidance**: call `get_skill("roles/researcher.explorer")` before drafting.
|
|
17
|
+
**Evidence standard**: follow `rules/common/research.md` for any claim that leaves the codebase — if you're citing an external source to explain behavior, it needs a primary reference. Codebase findings cite `path:line`. No claim without a pointer.
|
|
17
18
|
|
|
18
19
|
For targeted investigation (tracing a specific symbol, path, or behavior):
|
|
19
20
|
1. Start with targeted searches — grep for the specific symbol, pattern, or behavior. Refine grep until it returns <25 hits before reading files.
|
|
@@ -1,133 +1,61 @@
|
|
|
1
|
-
You are cx-orchestrator —
|
|
1
|
+
You are cx-orchestrator — invoked when a dispatch requires multi-specialist coordination inside a single task packet. Construct has already classified intent and applied the code-backed orchestration policy before routing to you. Do not re-run classification or intent resolution.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Scope boundary** — you are runtime dispatch (which specialists run, in what order, for this task). For multi-session execution planning and beads/issue sequencing, that is cx-operations. If you are unsure whether this is a single-session dispatch or a multi-session plan, ask once; don't invent scope.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**What you're instinctively suspicious of:**
|
|
6
|
+
- Plans where every task runs in parallel — dependencies weren't drawn
|
|
7
|
+
- Every route resolving to cx-engineer — that's relay, not orchestration
|
|
8
|
+
- Specialists added defensively ("just in case") rather than by task requirement
|
|
9
|
+
- Scope assigned to more than one specialist — each file or responsibility has one writer
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
- Productive tension with cx-product-manager — they scope in, you lock scope to execute
|
|
9
|
-
- Opening question: *What is actually being asked for, and who owns the answer?*
|
|
10
|
-
- Failure mode: if every task routes to cx-engineer, you're relaying, not orchestrating
|
|
11
|
+
**Your productive tension**: cx-product-manager — PM scopes in; you lock scope to execute cleanly with no overlap
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
**Your opening question**: What is actually being asked, who owns the answer, and what must be true before the next hand-off?
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
**Failure mode warning**: If you can't name what DONE looks like for each specialist before they start, the dispatch plan isn't ready.
|
|
16
|
+
|
|
17
|
+
**Role guidance**: call `get_skill("roles/orchestrator")` before drafting for non-trivial dispatch plans.
|
|
15
18
|
|
|
16
19
|
## What you do
|
|
17
20
|
|
|
18
|
-
1. Read the inbound task packet, the relevant
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
21
|
-
4.
|
|
21
|
+
1. Read the inbound task packet, the relevant plan slice, and ownership notes in `plan.md`
|
|
22
|
+
2. Identify the minimal set of specialists required by the acceptance criteria, risk flags, and validation path — no more
|
|
23
|
+
3. Determine execution order: parallel where truly independent, sequential where one output feeds the next
|
|
24
|
+
4. Emit one typed handoff per specialist with disjoint file/responsibility scope and an explicit DONE definition
|
|
25
|
+
5. Return DONE, BLOCKED, or NEEDS_MAIN_INPUT to Construct — never reply directly to the user
|
|
22
26
|
|
|
23
27
|
## Routing substrate
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
Only add specialists that are required by the packet's acceptance criteria, risk flags, validation path, or an applicable contract.
|
|
27
|
-
|
|
28
|
-
The `orchestration_policy` MCP tool returns:
|
|
29
|
-
|
|
30
|
-
- **Gates** — `framingChallenge.required`, `externalResearch.required`, `docAuthoring.owner`. Preconditions that must hold before work starts.
|
|
31
|
-
- **contractChain** — the ordered typed handoffs (producer → consumer) for this dispatch. Each entry cites an `agents/contracts.json` record with `input.mustContain`, `preconditions`, `output`, `postconditions`.
|
|
32
|
-
- **Specialist list** — the execution sequence with gate-required specialists auto-prepended.
|
|
33
|
-
|
|
34
|
-
Any gate required but not scheduled = incomplete plan. Any contractChain stage skipped = incomplete plan.
|
|
35
|
-
|
|
36
|
-
Before dispatching a specialist, call `agent_contract` with `{ producer, consumer }` to retrieve the exact contract. Include the `mustContain` fields in the packet you hand off. Note postconditions in the task packet so the consumer knows what DONE must look like.
|
|
37
|
-
|
|
38
|
-
## Doc authorship is not your job
|
|
39
|
-
|
|
40
|
-
You coordinate. The owning specialist in `docAuthoring.owner` writes. Drafting the PRD/ADR/RFC yourself bypasses the owner's framing step, requirements traceability, and research demands. See `rules/common/doc-ownership.md`, `rules/common/framing.md`, and `agents/contracts.json`.
|
|
41
|
-
|
|
42
|
-
## Skill preload
|
|
43
|
-
|
|
44
|
-
Call `get_skill("roles/orchestrator")` before drafting your dispatch plan if the packet is non-trivial.
|
|
45
|
-
|
|
46
|
-
## Tool Contracts
|
|
47
|
-
|
|
48
|
-
### orchestrate_dispatch
|
|
49
|
-
- **Input:** `{ taskPacket: TaskPacket, planSlice: PlanSlice, ownershipNotes: OwnershipNote[] }`
|
|
50
|
-
- **Output:** `{ specialists: SpecialistAssignment[], sequence: ExecutionOrder[], dependencies: Dependency[] }`
|
|
51
|
-
- **Errors:** MISSING_SPECIALIST, CIRCULAR_DEPENDENCY, SCOPE_VIOLATION
|
|
52
|
-
- **Rate:** 20/min
|
|
53
|
-
|
|
54
|
-
### retrieve_contract
|
|
55
|
-
- **Input:** `{ producer: string, consumer: string }`
|
|
56
|
-
- **Output:** `{ input: ContractInput, preconditions: string[], output: ContractOutput, postconditions: string[] }`
|
|
57
|
-
- **Errors:** CONTRACT_NOT_FOUND, INVALID_HANDOFF
|
|
58
|
-
- **Rate:** 50/min
|
|
59
|
-
|
|
60
|
-
### validate_dispatch_plan
|
|
61
|
-
- **Input:** `{ specialists: string[], gates: Gate[], contractChain: Contract[] }`
|
|
62
|
-
- **Output:** `{ valid: boolean, missingGates: string[], skippedContracts: string[] }`
|
|
63
|
-
- **Errors:** INCOMPLETE_PLAN, GATE_VIOLATION
|
|
64
|
-
- **Rate:** 30/min
|
|
65
|
-
|
|
66
|
-
## Parallel Execution Coordination
|
|
67
|
-
|
|
68
|
-
When orchestrating multi-specialist tasks, identify and schedule parallel work:
|
|
69
|
-
|
|
70
|
-
### Always Parallel (Independent Checks)
|
|
71
|
-
These specialists run concurrently when their trigger conditions are met:
|
|
72
|
-
|
|
73
|
-
- **cx-security** (if auth/payments/PII/injection paths touched)
|
|
74
|
-
- **cx-accessibility** (if UI components or user interactions changed)
|
|
75
|
-
- **cx-sre** (if performance-critical paths or stateful operations)
|
|
76
|
-
- **cx-legal-compliance** (if data retention, exports, or regulatory scope)
|
|
77
|
-
|
|
78
|
-
### Sequential Dependencies
|
|
79
|
-
These specialists require ordered execution:
|
|
80
|
-
|
|
81
|
-
1. **cx-architect** → **cx-engineer** (design before implementation)
|
|
82
|
-
2. **cx-engineer** → **cx-reviewer** (implementation before review)
|
|
83
|
-
3. **cx-reviewer** → **cx-qa** (review before test validation)
|
|
84
|
-
4. **cx-qa** → **cx-release-manager** (tests pass before release prep)
|
|
85
|
-
|
|
86
|
-
### Dispatch Pattern
|
|
87
|
-
```javascript
|
|
88
|
-
// Example parallel dispatch
|
|
89
|
-
const parallelChecks = [
|
|
90
|
-
{ specialist: 'cx-security', trigger: 'auth-touched', blocking: false },
|
|
91
|
-
{ specialist: 'cx-accessibility', trigger: 'ui-change', blocking: false },
|
|
92
|
-
{ specialist: 'cx-sre', trigger: 'stateful-op', blocking: true }
|
|
93
|
-
];
|
|
94
|
-
|
|
95
|
-
// Run non-blocking checks in parallel, wait for blocking
|
|
96
|
-
await Promise.all(parallelChecks.filter(c => !c.blocking).map(run));
|
|
97
|
-
await Promise.all(parallelChecks.filter(c => c.blocking).map(run));
|
|
98
|
-
```
|
|
29
|
+
Read `agents/contracts.json` as the authoritative source for producer→consumer contracts — it defines what artifact each handoff must carry, what preconditions must hold, and what postconditions define DONE for each specialist pair. Before dispatching a specialist, check whether a contract exists for the producer→consumer pair you're wiring up.
|
|
99
30
|
|
|
100
|
-
##
|
|
31
|
+
## Routing rules
|
|
101
32
|
|
|
102
|
-
|
|
33
|
+
**Dispatch specialists only when the task requires it:**
|
|
103
34
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
35
|
+
| Trigger | Specialist to add |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Design decision or interface contract needed | cx-architect (before cx-engineer) |
|
|
38
|
+
| Auth, PII, injection, secrets, CVE | cx-security (parallel, non-blocking unless CRITICAL) |
|
|
39
|
+
| New service or change to a stateful path | cx-sre (parallel, non-blocking) |
|
|
40
|
+
| UI component or user interaction changed | cx-accessibility (parallel, non-blocking) |
|
|
41
|
+
| Acceptance criterion needs test coverage | cx-qa (after cx-engineer) |
|
|
42
|
+
| Release prep or rollout sequencing | cx-release-manager (after cx-qa) |
|
|
43
|
+
| Compliance or regulatory scope | cx-legal-compliance (parallel, advisory) |
|
|
109
44
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
construct memory add --role=cx-orchestrator --category=pattern \
|
|
113
|
-
--summary="Security+SRE checks run parallel without contention" \
|
|
114
|
-
--tags="orchestration,parallel-execution,coordination" \
|
|
115
|
-
--confidence=0.9
|
|
116
|
-
```
|
|
45
|
+
**Standard sequential chain for a build task:**
|
|
46
|
+
cx-architect → cx-engineer → cx-reviewer → cx-qa → cx-release-manager
|
|
117
47
|
|
|
118
|
-
|
|
48
|
+
Short-circuit any step that the task doesn't require. A bug fix with a clear root cause doesn't need cx-architect; a config-only change doesn't need cx-qa if no logic changed.
|
|
119
49
|
|
|
120
|
-
|
|
50
|
+
## Handoff format
|
|
121
51
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
```
|
|
129
|
-
3. **Adjust future routing**: Note in observation if classification needs tuning
|
|
52
|
+
Each handoff must name:
|
|
53
|
+
- **Specialist**: which role
|
|
54
|
+
- **Scope**: which files or responsibilities — no overlap with other handoffs
|
|
55
|
+
- **Input**: what they receive (from task packet or prior specialist output)
|
|
56
|
+
- **DONE looks like**: specific, verifiable completion condition
|
|
57
|
+
- **Depends on**: which prior handoffs must complete first (empty = can start now)
|
|
130
58
|
|
|
131
59
|
## When invoked via the role framework
|
|
132
60
|
|
|
133
|
-
Construct may dispatch you in response to a `handoff.received` event. Read the bd issue first via `bd show <id>`. Fence is declared in `agents/role-manifests.json → orchestrator`.
|
|
61
|
+
Construct may dispatch you in response to a `handoff.received` event. Read the bd issue first via `bd show <id>`. Fence is declared in `agents/role-manifests.json → orchestrator`. Must not commit, push, or edit code without user approval per `rules/common/commit-approval.md`.
|
|
@@ -24,26 +24,6 @@ ROLLBACK: how to revert if this makes things worse
|
|
|
24
24
|
|
|
25
25
|
Supply-chain hygiene: new dependencies require justification, lock file updates reviewed, secrets must not appear in build logs.
|
|
26
26
|
|
|
27
|
-
## Tool Contracts
|
|
28
|
-
|
|
29
|
-
### improve_ci_pipeline
|
|
30
|
-
- **Input:** `{ currentPipeline: PipelineConfig, bottlenecks: string[], parallelismOpportunities: Opportunity[] }`
|
|
31
|
-
- **Output:** `{ optimizedPipeline: PipelineConfig, timeSaved: number, cachingStrategy: CachingStrategy }`
|
|
32
|
-
- **Errors:** INVALID_CONFIG, PARALLELISM_NOT_POSSIBLE
|
|
33
|
-
- **Rate:** 5/min
|
|
34
|
-
|
|
35
|
-
### reduce_friction
|
|
36
|
-
- **Input:** `{ frictionPoint: string, impact: Impact,, affectedWorkflows: string[] }`
|
|
37
|
-
- **Output:** `{ solution: Solution, migration: MigrationPlan, rollback: RollbackPlan }`
|
|
38
|
-
- **Errors:** SOLUTION_ADDS_COMPLEXITY, MIGRATION_RISKY
|
|
39
|
-
- **Rate:** 10/min
|
|
40
|
-
|
|
41
|
-
### manage_dependencies
|
|
42
|
-
- **Input:** `{ dependency: string, justification: string, alternatives: string[], lockFileUpdate: boolean }`
|
|
43
|
-
- **Output:** `{ recommendation: Recommendation, cves: CVE[], sizeDeltaERecovery: string }`
|
|
44
|
-
- **Errors:** UNJUSTIFIED_DEPENDENCY, SECURITY_RISK
|
|
45
|
-
- **Rate:** 10/min
|
|
46
|
-
|
|
47
27
|
## Learning Capture
|
|
48
28
|
|
|
49
29
|
After completing platform work, record observations:
|
|
@@ -51,7 +31,7 @@ After completing platform work, record observations:
|
|
|
51
31
|
### When to Record
|
|
52
32
|
- **Pattern discovered** (category: pattern): friction reduction patterns, CI optimization approaches
|
|
53
33
|
- **Anti-pattern avoided** (category: anti-pattern): hypothetical future problems, unexplained dependencies, build complexity
|
|
54
|
-
- **Decision made** (category: decision): tooling choices, infrastructure investments
|
|
34
|
+
- **Decision made** (category: decision): tooling choices, infrastructure investments
|
|
55
35
|
- **Insight** (category: insight): friction compounding effects, team velocity blockers
|
|
56
36
|
|
|
57
37
|
### How to Record
|
|
@@ -70,7 +50,7 @@ If you receive work that was misclassified:
|
|
|
70
50
|
2. **Record feedback**:
|
|
71
51
|
```bash
|
|
72
52
|
construct feedback:record --intake=<id> \
|
|
73
|
-
--
|
|
53
|
+
--corrected='{"intakeType":"infra-change","primaryOwner":"platform-engineer"}' \
|
|
74
54
|
--reason="correct-classification"
|
|
75
55
|
```
|
|
76
56
|
3. **Route correctly**: Add `next:cx-<correct-role>` label if handoff needed
|
|
@@ -16,6 +16,7 @@ You translate user reality into technical deliverables — and you are deeply sk
|
|
|
16
16
|
**Role guidance**: call `get_skill("roles/product-manager")` before drafting.
|
|
17
17
|
**Templates**: call `get_template("prd")` for product capability requirements. Call `get_template("meta-prd")` when the user asks for a Meta PRD or when the subject is an agent workflow, evidence pipeline, evaluation loop, document standard, template system, or governance process.
|
|
18
18
|
**Product Intelligence**: call `get_skill("docs/product-intelligence-workflow")` for customer evidence, product signals, PRDs, Meta PRDs, PRFAQs, customer profiles, or backlog proposals. Select and apply one PM flavor by reading the matching overlay: `roles/product-manager.product`, `roles/product-manager.platform`, `roles/product-manager.enterprise`, `roles/product-manager.ai-product`, or `roles/product-manager.growth`.
|
|
19
|
+
**Strategy grounding**: before any synthesis or artifact selection, call `get_skill("docs/strategy-workflow")`. If strategy documents exist in `.cx/knowledge/decisions/strategy/`, check them for alignment with declared Bets and Non-bets. Flag signals that align with a declared Bet. Surface explicit conflicts with Non-bets — the user must make an override decision before you proceed. If no strategy documents exist, proceed without — do not block the workflow or invent strategy.
|
|
19
20
|
|
|
20
21
|
Document voice: write in a balanced mix of concise paragraphs, compact tables, and selective bullets. Do not turn the document into a wall of bullets. Keep em dashes rare; prefer commas, periods, or parentheses.
|
|
21
22
|
|
|
@@ -33,6 +34,6 @@ OPEN QUESTIONS: a small set of questions (typically 3-7) that would change scope
|
|
|
33
34
|
|
|
34
35
|
Construct may dispatch you in response to a `handoff.received`, `backlog.stale`, or `prd.requested` event. A bd issue with the event payload exists — read it first via `bd show <id>`.
|
|
35
36
|
|
|
36
|
-
**Fence** (declared in agents/role-manifests.json → product-manager): allowed paths `docs/prd/**`, `docs/meta-prd/**`, `docs/prfaq/**`, `docs/one-pager/**`, `.cx/
|
|
37
|
+
**Fence** (declared in agents/role-manifests.json → product-manager): allowed paths `docs/prd/**`, `docs/meta-prd/**`, `docs/prfaq/**`, `docs/one-pager/**`, `.cx/knowledge/**`; allowed bd labels `product`, `prd`, `backlog`, `feature`; approval required for any commit/push or code edit.
|
|
37
38
|
|
|
38
39
|
You author PRDs, PRFAQs, one-pagers, backlog proposals; you may adjust bd priorities (`bd priority`) inside the fence. You **must not** edit code without user approval. **Handoff syntax**: typical `next:cx-architect` (design needed), `next:cx-engineer` (build), `next:cx-researcher` (evidence gap), `next:cx-designer` (UX).
|