@geraldmaron/construct 1.2.0 → 1.2.2
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 +8 -7
- package/bin/construct +206 -62
- package/commands/plan/decide.md +1 -1
- package/commands/remember/runbook.md +1 -1
- package/examples/README.md +1 -1
- package/examples/distribution/README.md +1 -1
- package/examples/distribution/sources/adr.md +2 -2
- package/examples/distribution/sources/deck-one-pager.md +1 -1
- package/examples/distribution/sources/prd-platform.md +1 -1
- package/examples/distribution/sources/research-brief.md +2 -2
- package/examples/distribution/sources/rfc-platform.md +1 -1
- package/examples/distribution/sources/runbook.md +2 -2
- package/examples/distribution/sources/strategy.md +1 -1
- package/lib/agent-instructions/inject.mjs +1 -1
- package/lib/artifact-manifest.mjs +150 -4
- package/lib/artifact-type-from-path.mjs +9 -5
- package/lib/artifact-workflow.mjs +252 -0
- package/lib/audit-specialists.mjs +1 -1
- package/lib/audit-trail.mjs +3 -3
- package/lib/auto-docs.mjs +13 -11
- package/lib/bootstrap/built-ins.mjs +3 -3
- package/lib/boundary.mjs +3 -2
- package/lib/brand-prose.mjs +1 -1
- package/lib/cache-governor.js +4 -4
- package/lib/certification/document-io-fixtures.mjs +1 -1
- package/lib/chat/config.mjs +2 -2
- package/lib/chat/desktop-binary.mjs +5 -3
- package/lib/chat/present.mjs +1 -0
- package/lib/cli-commands.mjs +23 -6
- package/lib/cli-service-inventory.mjs +42 -0
- package/lib/comment-lint.mjs +9 -5
- package/lib/config/alias.mjs +3 -2
- package/lib/config/intake-policy.mjs +139 -0
- package/lib/config/project-config.mjs +106 -7
- package/lib/config/schema.mjs +45 -6
- package/lib/config/source-targets.mjs +311 -0
- package/lib/config/xdg.mjs +63 -0
- package/lib/contracts/violation-log.mjs +2 -2
- package/lib/cost-ledger.mjs +4 -3
- package/lib/cost.mjs +3 -2
- package/lib/decisions/registry.mjs +3 -3
- package/lib/distill.mjs +2 -2
- package/lib/docs-verify.mjs +2 -0
- package/lib/doctor/audit.mjs +4 -3
- package/lib/doctor/cli.mjs +0 -1
- package/lib/doctor/index.mjs +4 -4
- package/lib/doctor/report.mjs +3 -3
- package/lib/doctor/source-checkout.mjs +16 -0
- package/lib/doctor/watchers/bd-watch.mjs +5 -5
- package/lib/doctor/watchers/cost.mjs +4 -4
- package/lib/doctor/watchers/disk.mjs +4 -3
- package/lib/doctor/watchers/service-health.mjs +5 -5
- package/lib/document-export.mjs +39 -17
- package/lib/document-extract.mjs +3 -3
- package/lib/document-ingest.mjs +13 -3
- package/lib/efficiency.mjs +2 -1
- package/lib/embed/approval-queue.mjs +3 -2
- package/lib/embed/auto-sources.mjs +44 -0
- package/lib/embed/cli.mjs +9 -6
- package/lib/embed/config.mjs +6 -5
- package/lib/embed/daemon.mjs +6 -5
- package/lib/embed/demand-fetch.mjs +50 -19
- package/lib/embed/inbox-live-watcher.mjs +1 -1
- package/lib/embed/inbox.mjs +52 -41
- package/lib/embed/intake-metrics.mjs +3 -2
- package/lib/embed/reconcile.mjs +1 -1
- package/lib/embed/semantic.mjs +3 -2
- package/lib/embed/supervision.mjs +4 -2
- package/lib/embed/worker.mjs +2 -1
- package/lib/embedded-contract/index.mjs +11 -0
- package/lib/engine/registry.mjs +3 -3
- package/lib/env-config.mjs +34 -12
- package/lib/export-branding.mjs +32 -0
- package/lib/features.mjs +4 -3
- package/lib/health-check.mjs +7 -6
- package/lib/hook-health.mjs +5 -4
- package/lib/hooks/_lib/log.mjs +4 -3
- package/lib/hooks/_lib/output-mode.mjs +2 -1
- package/lib/hooks/agent-tracker.mjs +3 -4
- package/lib/hooks/audit-reads.mjs +2 -2
- package/lib/hooks/audit-trail.mjs +2 -2
- package/lib/hooks/bash-output-logger.mjs +3 -3
- package/lib/hooks/brand-prose-lint.mjs +1 -1
- package/lib/hooks/ci-status-check.mjs +3 -2
- package/lib/hooks/context-watch.mjs +2 -2
- package/lib/hooks/context-window-recovery.mjs +5 -5
- package/lib/hooks/dep-audit.mjs +2 -2
- package/lib/hooks/doc-coupling-check.mjs +3 -2
- package/lib/hooks/edit-accumulator.mjs +3 -2
- package/lib/hooks/edit-guard.mjs +3 -3
- package/lib/hooks/guard-bash.mjs +2 -2
- package/lib/hooks/model-fallback.mjs +2 -1
- package/lib/hooks/policy-engine.mjs +4 -3
- package/lib/hooks/pre-compact.mjs +7 -7
- package/lib/hooks/readme-age-check.mjs +2 -2
- package/lib/hooks/session-optimize.mjs +4 -3
- package/lib/hooks/session-start.mjs +20 -16
- package/lib/hooks/stop-notify.mjs +9 -8
- package/lib/hooks/stop-typecheck.mjs +4 -3
- package/lib/hooks/test-watch.mjs +2 -2
- package/lib/host-disposition.mjs +1 -1
- package/lib/ingest/provider-extract.mjs +2 -1
- package/lib/init/detect-existing-structure.mjs +2 -2
- package/lib/init/doc-lanes.mjs +3 -10
- package/lib/init-docs.mjs +12 -54
- package/lib/init-unified.mjs +47 -92
- package/lib/init.mjs +7 -5
- package/lib/install/desktop-binary-download.mjs +5 -2
- package/lib/intake/constants.mjs +29 -0
- package/lib/intake/daemon.mjs +31 -8
- package/lib/intake/intake-config.mjs +32 -112
- package/lib/integrations/intake-integrations.mjs +8 -7
- package/lib/knowledge/rag.mjs +2 -2
- package/lib/knowledge/search.mjs +15 -15
- package/lib/maintenance/cleanup.mjs +14 -10
- package/lib/mcp/server.mjs +20 -2
- package/lib/mcp/tools/embedded-contract.mjs +14 -0
- package/lib/mcp/tools/project.mjs +2 -1
- package/lib/model-cheapest-provider.mjs +4 -3
- package/lib/model-pricing.mjs +3 -2
- package/lib/model-router.mjs +4 -3
- package/lib/models/catalog.mjs +2 -1
- package/lib/models/execution-capability-profile.mjs +2 -1
- package/lib/models/provider-poll.mjs +2 -1
- package/lib/ollama-manager.mjs +0 -1
- package/lib/op-log.mjs +2 -1
- package/lib/opencode-runtime-plugin.mjs +3 -2
- package/lib/oracle/artifact-gate.mjs +3 -0
- package/lib/oracle/cli.mjs +2 -1
- package/lib/oracle/execute.mjs +3 -2
- package/lib/oracle/index.mjs +2 -1
- package/lib/oracle/read-model.mjs +3 -2
- package/lib/performance/generate.mjs +4 -3
- package/lib/platforms/capabilities.mjs +1 -1
- package/lib/playwright-demo.mjs +2 -0
- package/lib/plugin-registry.mjs +2 -1
- package/lib/profiles/lifecycle.mjs +3 -3
- package/lib/project-profile.mjs +2 -1
- package/lib/project-root.mjs +9 -7
- package/lib/provider-capabilities.js +4 -3
- package/lib/providers/auth-manager.mjs +2 -1
- package/lib/providers/copilot-auth.mjs +3 -2
- package/lib/providers/creds.mjs +3 -2
- package/lib/providers/registry.mjs +3 -3
- package/lib/providers/secret-resolver.mjs +3 -2
- package/lib/read-tracker-store.mjs +2 -1
- package/lib/reconcile/mcp-entry-reconcile.mjs +2 -2
- package/lib/reflect.mjs +2 -1
- package/lib/registry/generate-docs.mjs +2 -2
- package/lib/roles/approval-surface.mjs +5 -4
- package/lib/roles/event-bus.mjs +0 -1
- package/lib/roles/gateway.mjs +6 -2
- package/lib/rules-delivery.mjs +1 -1
- package/lib/runtime-pressure.mjs +5 -3
- package/lib/sandbox.mjs +3 -2
- package/lib/scheduler/solo.mjs +6 -4
- package/lib/server/auth.mjs +4 -3
- package/lib/server/index.mjs +53 -26
- package/lib/server/insights.mjs +5 -4
- package/lib/server/rate-limit.mjs +5 -3
- package/lib/server/webhook.mjs +5 -3
- package/lib/service-manager.mjs +5 -3
- package/lib/setup.mjs +9 -8
- package/lib/status.mjs +6 -5
- package/lib/storage/embeddings-local.mjs +3 -2
- package/lib/storage/sync.mjs +2 -2
- package/lib/telemetry/client.mjs +0 -1
- package/lib/telemetry/intent-verifications.mjs +6 -6
- package/lib/telemetry/model-pricing-catalog.mjs +4 -3
- package/lib/telemetry/rule-calls.mjs +3 -3
- package/lib/telemetry/skill-calls.mjs +3 -3
- package/lib/template-registry.mjs +1 -0
- package/lib/templates/visual-requirements.mjs +1 -1
- package/lib/test-corpus-inventory.mjs +1 -1
- package/lib/uninstall/uninstall.mjs +12 -10
- package/package.json +3 -3
- package/platforms/claude/settings.template.json +43 -43
- package/rules/common/no-fabrication.md +1 -1
- package/rules/common/release-gates.md +1 -1
- package/rules/common/research.md +1 -1
- package/rules/common/review-before-change.md +1 -1
- package/scripts/sync-specialists.mjs +11 -8
- package/skills/docs/adr-workflow.md +3 -3
- package/skills/docs/init-docs.md +9 -9
- package/skills/docs/prd-workflow.md +5 -5
- package/skills/docs/product-intelligence-review.md +1 -1
- package/skills/docs/product-intelligence-workflow.md +2 -2
- package/skills/docs/product-signal-workflow.md +1 -1
- package/skills/docs/runbook-workflow.md +4 -4
- package/skills/exploration/unknown-codebase-onboarding.md +1 -1
- package/skills/operating/orchestration-reference.md +1 -1
- package/skills/routing.md +3 -3
- package/specialists/artifact-manifest.json +11 -2
- package/specialists/artifact-manifest.schema.json +31 -1
- package/specialists/prompts/cx-architect.md +1 -1
- package/specialists/prompts/cx-docs-keeper.md +1 -1
- package/specialists/prompts/cx-researcher.md +1 -1
- package/specialists/prompts/cx-sre.md +1 -1
- package/specialists/role-manifests.json +6 -6
- package/templates/distribution/construct-reference.docx +0 -0
- package/templates/docs/README.md +125 -0
- package/templates/docs/construct_guide.md +3 -4
- package/templates/docs/persona-artifact.md +1 -1
- package/templates/docs/prds/README.md +25 -0
- package/templates/docs/prds/templates/_template.md +206 -0
- package/templates/docs/prds/templates/meta-prd.template.md +177 -0
- package/templates/docs/prds/templates/prd-business.template.md +61 -0
- package/templates/docs/prds/templates/prd-platform.template.md +81 -0
- package/templates/docs/prds/templates/prfaq.template.md +38 -0
- package/templates/docs/rfcs/README.md +22 -0
- package/templates/docs/rfcs/templates/_template.md +58 -0
- package/templates/docs/rfcs/templates/rfc-platform.template.md +72 -0
- package/templates/homebrew/construct.rb +1 -1
- package/templates/workflows/new-feature.yml +8 -8
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"hooks": [
|
|
10
10
|
{
|
|
11
11
|
"type": "command",
|
|
12
|
-
"command": "node \"$HOME/.construct/lib/hooks/session-start.mjs\"",
|
|
12
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/session-start.mjs\"",
|
|
13
13
|
"timeout": 10
|
|
14
14
|
}
|
|
15
15
|
],
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"hooks": [
|
|
24
24
|
{
|
|
25
25
|
"type": "command",
|
|
26
|
-
"command": "node \"$HOME/.construct/lib/hooks/policy-engine.mjs\" PreToolUse",
|
|
26
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/policy-engine.mjs\" PreToolUse",
|
|
27
27
|
"timeout": 10
|
|
28
28
|
}
|
|
29
29
|
],
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"hooks": [
|
|
36
36
|
{
|
|
37
37
|
"type": "command",
|
|
38
|
-
"command": "node \"$HOME/.construct/lib/hooks/orchestration-dispatch-guard.mjs\"",
|
|
38
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/orchestration-dispatch-guard.mjs\"",
|
|
39
39
|
"timeout": 5
|
|
40
40
|
}
|
|
41
41
|
],
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"hooks": [
|
|
48
48
|
{
|
|
49
49
|
"type": "command",
|
|
50
|
-
"command": "node \"$HOME/.construct/lib/hooks/block-no-verify.mjs\"",
|
|
50
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/block-no-verify.mjs\"",
|
|
51
51
|
"timeout": 5
|
|
52
52
|
}
|
|
53
53
|
],
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"hooks": [
|
|
60
60
|
{
|
|
61
61
|
"type": "command",
|
|
62
|
-
"command": "node \"$HOME/.construct/lib/hooks/pre-push-gate.mjs\"",
|
|
62
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/pre-push-gate.mjs\"",
|
|
63
63
|
"timeout": 180
|
|
64
64
|
}
|
|
65
65
|
],
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"hooks": [
|
|
72
72
|
{
|
|
73
73
|
"type": "command",
|
|
74
|
-
"command": "node \"$HOME/.construct/lib/hooks/guard-bash.mjs\"",
|
|
74
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/guard-bash.mjs\"",
|
|
75
75
|
"timeout": 5
|
|
76
76
|
}
|
|
77
77
|
],
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"hooks": [
|
|
84
84
|
{
|
|
85
85
|
"type": "command",
|
|
86
|
-
"command": "node \"$HOME/.construct/lib/hooks/config-protection.mjs\"",
|
|
86
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/config-protection.mjs\"",
|
|
87
87
|
"timeout": 5
|
|
88
88
|
}
|
|
89
89
|
],
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"hooks": [
|
|
96
96
|
{
|
|
97
97
|
"type": "command",
|
|
98
|
-
"command": "node \"$HOME/.construct/lib/hooks/mcp-health-check.mjs\"",
|
|
98
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/mcp-health-check.mjs\"",
|
|
99
99
|
"timeout": 3
|
|
100
100
|
}
|
|
101
101
|
],
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"hooks": [
|
|
108
108
|
{
|
|
109
109
|
"type": "command",
|
|
110
|
-
"command": "node \"$HOME/.construct/lib/hooks/edit-guard.mjs\"",
|
|
110
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/edit-guard.mjs\"",
|
|
111
111
|
"timeout": 5
|
|
112
112
|
}
|
|
113
113
|
],
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"hooks": [
|
|
134
134
|
{
|
|
135
135
|
"type": "command",
|
|
136
|
-
"command": "node \"$HOME/.construct/lib/hooks/scan-secrets.mjs\"",
|
|
136
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/scan-secrets.mjs\"",
|
|
137
137
|
"timeout": 10
|
|
138
138
|
}
|
|
139
139
|
],
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"hooks": [
|
|
146
146
|
{
|
|
147
147
|
"type": "command",
|
|
148
|
-
"command": "node \"$HOME/.construct/lib/hooks/adaptive-lint.mjs\"",
|
|
148
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/adaptive-lint.mjs\"",
|
|
149
149
|
"timeout": 30,
|
|
150
150
|
"async": true
|
|
151
151
|
}
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
"hooks": [
|
|
159
159
|
{
|
|
160
160
|
"type": "command",
|
|
161
|
-
"command": "node \"$HOME/.construct/lib/hooks/comment-lint.mjs\"",
|
|
161
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/comment-lint.mjs\"",
|
|
162
162
|
"timeout": 15
|
|
163
163
|
}
|
|
164
164
|
],
|
|
@@ -170,7 +170,7 @@
|
|
|
170
170
|
"hooks": [
|
|
171
171
|
{
|
|
172
172
|
"type": "command",
|
|
173
|
-
"command": "node \"$HOME/.construct/lib/hooks/brand-prose-lint.mjs\"",
|
|
173
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/brand-prose-lint.mjs\"",
|
|
174
174
|
"timeout": 15
|
|
175
175
|
}
|
|
176
176
|
],
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
"hooks": [
|
|
183
183
|
{
|
|
184
184
|
"type": "command",
|
|
185
|
-
"command": "node \"$HOME/.construct/lib/hooks/artifact-release-gate.mjs\"",
|
|
185
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/artifact-release-gate.mjs\"",
|
|
186
186
|
"timeout": 15
|
|
187
187
|
}
|
|
188
188
|
],
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
"hooks": [
|
|
195
195
|
{
|
|
196
196
|
"type": "command",
|
|
197
|
-
"command": "node \"$HOME/.construct/lib/hooks/doc-coupling-check.mjs\"",
|
|
197
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/doc-coupling-check.mjs\"",
|
|
198
198
|
"timeout": 5
|
|
199
199
|
}
|
|
200
200
|
],
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
"hooks": [
|
|
207
207
|
{
|
|
208
208
|
"type": "command",
|
|
209
|
-
"command": "node \"$HOME/.construct/lib/hooks/graph-impact-advisory.mjs\"",
|
|
209
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/graph-impact-advisory.mjs\"",
|
|
210
210
|
"timeout": 10
|
|
211
211
|
}
|
|
212
212
|
],
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
"hooks": [
|
|
219
219
|
{
|
|
220
220
|
"type": "command",
|
|
221
|
-
"command": "node \"$HOME/.construct/lib/hooks/edit-accumulator.mjs\"",
|
|
221
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/edit-accumulator.mjs\"",
|
|
222
222
|
"timeout": 3
|
|
223
223
|
}
|
|
224
224
|
],
|
|
@@ -230,7 +230,7 @@
|
|
|
230
230
|
"hooks": [
|
|
231
231
|
{
|
|
232
232
|
"type": "command",
|
|
233
|
-
"command": "node \"$HOME/.construct/lib/hooks/registry-sync.mjs\"",
|
|
233
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/registry-sync.mjs\"",
|
|
234
234
|
"timeout": 15,
|
|
235
235
|
"async": true
|
|
236
236
|
}
|
|
@@ -243,7 +243,7 @@
|
|
|
243
243
|
"hooks": [
|
|
244
244
|
{
|
|
245
245
|
"type": "command",
|
|
246
|
-
"command": "node \"$HOME/.construct/lib/hooks/dep-audit.mjs\"",
|
|
246
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/dep-audit.mjs\"",
|
|
247
247
|
"timeout": 35,
|
|
248
248
|
"async": true
|
|
249
249
|
}
|
|
@@ -256,7 +256,7 @@
|
|
|
256
256
|
"hooks": [
|
|
257
257
|
{
|
|
258
258
|
"type": "command",
|
|
259
|
-
"command": "node \"$HOME/.construct/lib/hooks/audit-reads.mjs\"",
|
|
259
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/audit-reads.mjs\"",
|
|
260
260
|
"timeout": 3,
|
|
261
261
|
"async": true
|
|
262
262
|
}
|
|
@@ -269,7 +269,7 @@
|
|
|
269
269
|
"hooks": [
|
|
270
270
|
{
|
|
271
271
|
"type": "command",
|
|
272
|
-
"command": "node \"$HOME/.construct/lib/hooks/mcp-audit.mjs\"",
|
|
272
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/mcp-audit.mjs\"",
|
|
273
273
|
"timeout": 3,
|
|
274
274
|
"async": true
|
|
275
275
|
}
|
|
@@ -282,7 +282,7 @@
|
|
|
282
282
|
"hooks": [
|
|
283
283
|
{
|
|
284
284
|
"type": "command",
|
|
285
|
-
"command": "node \"$HOME/.construct/lib/hooks/agent-tracker.mjs\"",
|
|
285
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/agent-tracker.mjs\"",
|
|
286
286
|
"timeout": 3,
|
|
287
287
|
"async": true
|
|
288
288
|
}
|
|
@@ -295,7 +295,7 @@
|
|
|
295
295
|
"hooks": [
|
|
296
296
|
{
|
|
297
297
|
"type": "command",
|
|
298
|
-
"command": "node \"$HOME/.construct/lib/hooks/bash-output-logger.mjs\"",
|
|
298
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/bash-output-logger.mjs\"",
|
|
299
299
|
"timeout": 5
|
|
300
300
|
}
|
|
301
301
|
],
|
|
@@ -307,7 +307,7 @@
|
|
|
307
307
|
"hooks": [
|
|
308
308
|
{
|
|
309
309
|
"type": "command",
|
|
310
|
-
"command": "node \"$HOME/.construct/lib/hooks/test-watch.mjs\"",
|
|
310
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/test-watch.mjs\"",
|
|
311
311
|
"timeout": 5,
|
|
312
312
|
"async": true
|
|
313
313
|
}
|
|
@@ -320,7 +320,7 @@
|
|
|
320
320
|
"hooks": [
|
|
321
321
|
{
|
|
322
322
|
"type": "command",
|
|
323
|
-
"command": "node \"$HOME/.construct/lib/hooks/post-merge-docs-check.mjs\"",
|
|
323
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/post-merge-docs-check.mjs\"",
|
|
324
324
|
"timeout": 5,
|
|
325
325
|
"async": true
|
|
326
326
|
}
|
|
@@ -333,7 +333,7 @@
|
|
|
333
333
|
"hooks": [
|
|
334
334
|
{
|
|
335
335
|
"type": "command",
|
|
336
|
-
"command": "node \"$HOME/.construct/lib/hooks/post-merge-tracking.mjs\"",
|
|
336
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/post-merge-tracking.mjs\"",
|
|
337
337
|
"timeout": 5,
|
|
338
338
|
"async": true
|
|
339
339
|
}
|
|
@@ -346,7 +346,7 @@
|
|
|
346
346
|
"hooks": [
|
|
347
347
|
{
|
|
348
348
|
"type": "command",
|
|
349
|
-
"command": "node \"$HOME/.construct/lib/hooks/audit-trail.mjs\"",
|
|
349
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/audit-trail.mjs\"",
|
|
350
350
|
"timeout": 5
|
|
351
351
|
}
|
|
352
352
|
],
|
|
@@ -358,7 +358,7 @@
|
|
|
358
358
|
"hooks": [
|
|
359
359
|
{
|
|
360
360
|
"type": "command",
|
|
361
|
-
"command": "node \"$HOME/.construct/lib/hooks/orchestration-dispatch-guard.mjs\"",
|
|
361
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/orchestration-dispatch-guard.mjs\"",
|
|
362
362
|
"timeout": 5
|
|
363
363
|
}
|
|
364
364
|
],
|
|
@@ -372,7 +372,7 @@
|
|
|
372
372
|
"hooks": [
|
|
373
373
|
{
|
|
374
374
|
"type": "command",
|
|
375
|
-
"command": "node \"$HOME/.construct/lib/hooks/model-fallback.mjs\"",
|
|
375
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/model-fallback.mjs\"",
|
|
376
376
|
"timeout": 130,
|
|
377
377
|
"async": true
|
|
378
378
|
}
|
|
@@ -385,7 +385,7 @@
|
|
|
385
385
|
"hooks": [
|
|
386
386
|
{
|
|
387
387
|
"type": "command",
|
|
388
|
-
"command": "node \"$HOME/.construct/lib/hooks/mcp-health-check.mjs\" --mark-failure",
|
|
388
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/mcp-health-check.mjs\" --mark-failure",
|
|
389
389
|
"timeout": 3
|
|
390
390
|
}
|
|
391
391
|
],
|
|
@@ -397,7 +397,7 @@
|
|
|
397
397
|
"hooks": [
|
|
398
398
|
{
|
|
399
399
|
"type": "command",
|
|
400
|
-
"command": "node \"$HOME/.construct/lib/hooks/context-window-recovery.mjs\"",
|
|
400
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/context-window-recovery.mjs\"",
|
|
401
401
|
"timeout": 60,
|
|
402
402
|
"async": true
|
|
403
403
|
}
|
|
@@ -410,7 +410,7 @@
|
|
|
410
410
|
"hooks": [
|
|
411
411
|
{
|
|
412
412
|
"type": "command",
|
|
413
|
-
"command": "node \"$HOME/.construct/lib/hooks/edit-error-recovery.mjs\"",
|
|
413
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/edit-error-recovery.mjs\"",
|
|
414
414
|
"timeout": 15,
|
|
415
415
|
"async": true
|
|
416
416
|
}
|
|
@@ -425,7 +425,7 @@
|
|
|
425
425
|
"hooks": [
|
|
426
426
|
{
|
|
427
427
|
"type": "command",
|
|
428
|
-
"command": "node \"$HOME/.construct/lib/hooks/pre-compact.mjs\"",
|
|
428
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/pre-compact.mjs\"",
|
|
429
429
|
"timeout": 15
|
|
430
430
|
}
|
|
431
431
|
],
|
|
@@ -439,7 +439,7 @@
|
|
|
439
439
|
"hooks": [
|
|
440
440
|
{
|
|
441
441
|
"type": "command",
|
|
442
|
-
"command": "node \"$HOME/.construct/lib/hooks/policy-engine.mjs\" Stop",
|
|
442
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/policy-engine.mjs\" Stop",
|
|
443
443
|
"timeout": 15
|
|
444
444
|
}
|
|
445
445
|
],
|
|
@@ -451,7 +451,7 @@
|
|
|
451
451
|
"hooks": [
|
|
452
452
|
{
|
|
453
453
|
"type": "command",
|
|
454
|
-
"command": "node \"$HOME/.construct/lib/hooks/stop-typecheck.mjs\"",
|
|
454
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/stop-typecheck.mjs\"",
|
|
455
455
|
"timeout": 120,
|
|
456
456
|
"async": true
|
|
457
457
|
}
|
|
@@ -464,7 +464,7 @@
|
|
|
464
464
|
"hooks": [
|
|
465
465
|
{
|
|
466
466
|
"type": "command",
|
|
467
|
-
"command": "node \"$HOME/.construct/lib/hooks/readme-age-check.mjs\"",
|
|
467
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/readme-age-check.mjs\"",
|
|
468
468
|
"timeout": 5,
|
|
469
469
|
"async": true
|
|
470
470
|
}
|
|
@@ -477,7 +477,7 @@
|
|
|
477
477
|
"hooks": [
|
|
478
478
|
{
|
|
479
479
|
"type": "command",
|
|
480
|
-
"command": "node \"$HOME/.construct/lib/hooks/stop-notify.mjs\"",
|
|
480
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/stop-notify.mjs\"",
|
|
481
481
|
"timeout": 10,
|
|
482
482
|
"async": true
|
|
483
483
|
}
|
|
@@ -490,7 +490,7 @@
|
|
|
490
490
|
"hooks": [
|
|
491
491
|
{
|
|
492
492
|
"type": "command",
|
|
493
|
-
"command": "node \"$HOME/.construct/lib/hooks/pre-compact.mjs\"",
|
|
493
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/pre-compact.mjs\"",
|
|
494
494
|
"timeout": 15,
|
|
495
495
|
"async": true
|
|
496
496
|
}
|
|
@@ -503,7 +503,7 @@
|
|
|
503
503
|
"hooks": [
|
|
504
504
|
{
|
|
505
505
|
"type": "command",
|
|
506
|
-
"command": "node \"$HOME/.construct/lib/hooks/session-optimize.mjs\"",
|
|
506
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/session-optimize.mjs\"",
|
|
507
507
|
"timeout": 600,
|
|
508
508
|
"async": true
|
|
509
509
|
}
|
|
@@ -516,7 +516,7 @@
|
|
|
516
516
|
"hooks": [
|
|
517
517
|
{
|
|
518
518
|
"type": "command",
|
|
519
|
-
"command": "node \"$HOME/.construct/lib/hooks/session-reflect.mjs\"",
|
|
519
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/session-reflect.mjs\"",
|
|
520
520
|
"timeout": 5,
|
|
521
521
|
"async": true
|
|
522
522
|
}
|
|
@@ -529,7 +529,7 @@
|
|
|
529
529
|
"hooks": [
|
|
530
530
|
{
|
|
531
531
|
"type": "command",
|
|
532
|
-
"command": "node \"$HOME/.construct/lib/hooks/session-tracking-refresh.mjs\"",
|
|
532
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/session-tracking-refresh.mjs\"",
|
|
533
533
|
"timeout": 5,
|
|
534
534
|
"async": true
|
|
535
535
|
}
|
|
@@ -544,7 +544,7 @@
|
|
|
544
544
|
"hooks": [
|
|
545
545
|
{
|
|
546
546
|
"type": "command",
|
|
547
|
-
"command": "node \"$HOME/.construct/lib/hooks/context-watch.mjs\"",
|
|
547
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/context-watch.mjs\"",
|
|
548
548
|
"timeout": 5
|
|
549
549
|
}
|
|
550
550
|
],
|
|
@@ -556,7 +556,7 @@
|
|
|
556
556
|
"hooks": [
|
|
557
557
|
{
|
|
558
558
|
"type": "command",
|
|
559
|
-
"command": "node \"$HOME/.construct/lib/hooks/ci-status-check.mjs\"",
|
|
559
|
+
"command": "node \"$HOME/.config/construct/lib/hooks/ci-status-check.mjs\"",
|
|
560
560
|
"timeout": 5
|
|
561
561
|
}
|
|
562
562
|
],
|
|
@@ -55,7 +55,7 @@ Fabrication is the single largest threat to trust in an agent system. A persona
|
|
|
55
55
|
|
|
56
56
|
## Enforcement
|
|
57
57
|
|
|
58
|
-
- `lib/comment-lint.mjs` enforces a subset of these patterns on artifact paths (`docs/prd/**`, `docs/adr/**`, `docs/rfc/**`, `docs/research/**`, `.cx/knowledge/**`, `.cx/handoffs/**`, `.cx/research/**`). PostToolUse warns; `npm run lint:comments`, `construct lint:comments`, and the release gate block.
|
|
58
|
+
- `lib/comment-lint.mjs` enforces a subset of these patterns on artifact paths (`docs/specs/prd/**`, `docs/decisions/adr/**`, `docs/decisions/rfc/**`, `docs/notes/research/**`, `.cx/knowledge/**`, `.cx/handoffs/**`, `.cx/research/**`). PostToolUse warns; `npm run lint:comments`, `construct lint:comments`, and the release gate block.
|
|
59
59
|
- `specialists/contracts.json` postconditions check structural requirements (mandatory sections, intake traceability, citation density). `lib/contracts/validate.mjs#validateHandoff` blocks handoffs that fail validation; binary postconditions in `lib/specialists/postconditions.mjs` block rubber-stamp reviews, post-hoc threat models, symptom-only fixes, stale-doc PRs, and post-hoc accessibility. Enforcement is hard-default `block`.
|
|
60
60
|
- `construct intake done <id> --output=<path>` stamps `intake_id`, `intake_confidence`, and `intake_rationale` into the artifact's frontmatter so every intake-derived artifact carries verifiable provenance.
|
|
61
61
|
|
|
@@ -42,7 +42,7 @@ For every non-trivial change:
|
|
|
42
42
|
|
|
43
43
|
1. **A Beads issue exists.** `bd ready` to find or create one. `bd show <id>` to read context. `bd update <id> --claim` to claim before editing files.
|
|
44
44
|
2. **`plan.md` reflects the work.** Even though `plan.md` is local-only and gitignored, it stays the human-readable working plan. Mark items `done` when they ship; add new rows for work that wasn't previously tracked.
|
|
45
|
-
3. **Doc updates land in the same change as code.** If runtime shape, contracts, boundaries, or major dependencies changed, update `docs/concepts/architecture.md` in the same commit. If the docs surface or maintenance contract changed, update `docs/README.md`. If active work, decisions, or assumptions changed, update `.cx/context.md` and `.cx/context.json`. Always add a `CHANGELOG.md` entry.
|
|
45
|
+
3. **Doc updates land in the same change as code.** If runtime shape, contracts, boundaries, or major dependencies changed, update `docs/guides/concepts/architecture.md` in the same commit. If the docs surface or maintenance contract changed, update `docs/README.md`. If active work, decisions, or assumptions changed, update `.cx/context.md` and `.cx/context.json`. Always add a `CHANGELOG.md` entry.
|
|
46
46
|
4. **Beads close on green.** `bd close <id>` happens after CI is green and the work is verified: not before.
|
|
47
47
|
|
|
48
48
|
## Hard rules
|
package/rules/common/research.md
CHANGED
|
@@ -47,7 +47,7 @@ Start with the narrowest authoritative source that can answer the question:
|
|
|
47
47
|
1. **Local project evidence first**
|
|
48
48
|
- `.cx/research/`
|
|
49
49
|
- `.cx/knowledge/`
|
|
50
|
-
- `docs/prd/`, `docs/meta-prd/`, `docs/adr/`, `docs/runbooks/`
|
|
50
|
+
- `docs/specs/prd/`, `docs/meta-prd/`, `docs/decisions/adr/`, `docs/operations/runbooks/`
|
|
51
51
|
- ingested markdown artifacts under `.cx/knowledge/`
|
|
52
52
|
- repo code, tests, configs, and existing decisions
|
|
53
53
|
2. **Primary external sources second**
|
|
@@ -44,7 +44,7 @@ For artifacts that go through a review cycle (strategy, PRD, ADR, RFC), the fram
|
|
|
44
44
|
- Writing a new rule that paraphrases an existing one.
|
|
45
45
|
- Adding a new template alongside `templates/docs/strategy.md` because the existing one "needed a couple of tweaks."
|
|
46
46
|
- Drafting an ADR for a decision already captured in an existing ADR.
|
|
47
|
-
- Producing a recipe in `docs/cookbook/` for a workflow already documented in `docs/concepts/`.
|
|
47
|
+
- Producing a recipe in `docs/guides/cookbook/` for a workflow already documented in `docs/guides/concepts/`.
|
|
48
48
|
|
|
49
49
|
## Related
|
|
50
50
|
|
|
@@ -55,6 +55,7 @@ import {
|
|
|
55
55
|
getOpenCodeMcpId,
|
|
56
56
|
} from "../lib/mcp-platform-config.mjs";
|
|
57
57
|
import { loadConstructEnv } from "../lib/env-config.mjs";
|
|
58
|
+
import { configDir } from "../lib/config/xdg.mjs";
|
|
58
59
|
import { inlineRoleAntiPatterns, PROMPT_WORD_CAP } from "../lib/role-preload.mjs";
|
|
59
60
|
import { inlineValidationContract } from "../lib/prompt-validation-contract.mjs";
|
|
60
61
|
import { loadManifest } from "../lib/roles/manifest.mjs";
|
|
@@ -852,7 +853,7 @@ ${buildPrompt(entry, allEntries, "claude")}
|
|
|
852
853
|
|
|
853
854
|
/**
|
|
854
855
|
* Rewrite the home-mode hook command pattern
|
|
855
|
-
* node "$HOME/.construct/lib/hooks/<name>.mjs"
|
|
856
|
+
* node "$HOME/.config/construct/lib/hooks/<name>.mjs"
|
|
856
857
|
* into the project-portable form
|
|
857
858
|
* node .construct/run.mjs hook <name>
|
|
858
859
|
* so the resulting settings.json works on any clone where the project ships
|
|
@@ -866,7 +867,7 @@ function makeHooksPortable(hooksJson) {
|
|
|
866
867
|
// Operate on the in-memory object so we don't fight JSON string escaping.
|
|
867
868
|
const replaceCommand = (cmd) => {
|
|
868
869
|
if (typeof cmd !== 'string') return cmd;
|
|
869
|
-
const m = cmd.match(/^node\s+"?\$HOME\/\.construct\/lib\/hooks\/([a-z0-9-]+)\.mjs"?\s*(.*)$/);
|
|
870
|
+
const m = cmd.match(/^node\s+"?\$HOME\/\.config\/construct\/lib\/hooks\/([a-z0-9-]+)\.mjs"?\s*(.*)$/);
|
|
870
871
|
if (!m) return cmd;
|
|
871
872
|
const [, name, rest] = m;
|
|
872
873
|
return `node .construct/run.mjs hook ${name}${rest ? ' ' + rest.trim() : ''}`;
|
|
@@ -1044,13 +1045,15 @@ ${personaList}
|
|
|
1044
1045
|
if (fs.existsSync(templatePath)) {
|
|
1045
1046
|
const template = JSON.parse(fs.readFileSync(templatePath, "utf8"));
|
|
1046
1047
|
if (template.hooks) {
|
|
1047
|
-
// Resolve $HOME/.construct to the real
|
|
1048
|
-
// symlink traversal inside Claude Code's hook
|
|
1049
|
-
|
|
1050
|
-
|
|
1048
|
+
// Resolve the $HOME/.config/construct token to the real config dir so
|
|
1049
|
+
// hook commands survive symlink traversal inside Claude Code's hook
|
|
1050
|
+
// runner environment, and honor a custom XDG_CONFIG_HOME at sync time.
|
|
1051
|
+
const configReal = (() => {
|
|
1052
|
+
const dir = configDir(home);
|
|
1053
|
+
try { return fs.realpathSync(dir); } catch { return dir; }
|
|
1051
1054
|
})();
|
|
1052
1055
|
const hookStr = JSON.stringify(filterGlobalClaudeHooks(template.hooks))
|
|
1053
|
-
.replace(/\$HOME\/\.construct/g,
|
|
1056
|
+
.replace(/\$HOME\/\.config\/construct/g, configReal.replace(/\\/g, "/"));
|
|
1054
1057
|
settings.hooks = JSON.parse(hookStr);
|
|
1055
1058
|
}
|
|
1056
1059
|
}
|
|
@@ -1445,7 +1448,7 @@ function syncCursor(targetDir = null, wants = true) {
|
|
|
1445
1448
|
|
|
1446
1449
|
// Glob-scoped language rules land as managed per-rule .mdc files only when
|
|
1447
1450
|
// the project's own files match their globs — Cursor's native auto-attach
|
|
1448
|
-
// convention. See docs/concepts/rules-delivery.md.
|
|
1451
|
+
// convention. See docs/guides/concepts/rules-delivery.md.
|
|
1449
1452
|
try {
|
|
1450
1453
|
emitCursorRules({ rulesDir: path.join(root, "rules"), targetDir, dryRun: DRY_RUN });
|
|
1451
1454
|
} catch (err) {
|
|
@@ -18,14 +18,14 @@ Use when: an architectural decision is made that affects the system structure, d
|
|
|
18
18
|
## Steps
|
|
19
19
|
|
|
20
20
|
1. **cx-architect** or **cx-engineer** identifies the decision
|
|
21
|
-
2. **Write to `docs/adr/ADR-{NNN}-{slug}.md`** using the template from `get_template("adr")`: resolves `.cx/templates/docs/adr.md` (override) then `templates/docs/adr.md` (shipped)
|
|
21
|
+
2. **Write to `docs/decisions/adr/ADR-{NNN}-{slug}.md`** using the template from `get_template("adr")`: resolves `.cx/templates/docs/adr.md` (override) then `templates/docs/adr.md` (shipped)
|
|
22
22
|
- NNN = next sequential number (check existing files)
|
|
23
23
|
3. **Also write a shorter entry to `.cx/decisions/`** for session context
|
|
24
24
|
4. **cx-docs-keeper** updates `.cx/context.md` Architecture Notes with a one-line summary and link
|
|
25
25
|
|
|
26
26
|
## File naming
|
|
27
|
-
- `docs/adr/ADR-001-use-postgres-over-mysql.md`
|
|
28
|
-
- `docs/adr/ADR-002-jwt-auth-strategy.md`
|
|
27
|
+
- `docs/decisions/adr/ADR-001-use-postgres-over-mysql.md`
|
|
28
|
+
- `docs/decisions/adr/ADR-002-jwt-auth-strategy.md`
|
|
29
29
|
|
|
30
30
|
## Cross-referencing
|
|
31
31
|
- If this ADR supersedes another: update the old ADR's status field
|
package/skills/docs/init-docs.md
CHANGED
|
@@ -54,7 +54,7 @@ When run interactively, `construct init --docs-preset=*` renders a keyboard-driv
|
|
|
54
54
|
- **Enter**: confirm and scaffold
|
|
55
55
|
- Follow-up choices use the same menu pattern instead of free-text answers
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
The single canonical drop zone for ingestable files is `inbox/` at the project root (ADR-0045 §C); `construct init` scaffolds it with a gitignored `inbox/.staging/` for atomic handoff. The `intake` docs lane (`docs/intake/`) is a separate, optional durable paper-trail lane for intake batch records — it is not a watched drop zone.
|
|
58
58
|
|
|
59
59
|
When run non-interactively (`--yes` or piped stdin), the lean default set is used unless `--docs=` is supplied. `--docs=lean|product|full` or `--docs=adrs,prds,rfcs` both work.
|
|
60
60
|
|
|
@@ -64,18 +64,18 @@ When run non-interactively (`--yes` or piped stdin), the lean default set is use
|
|
|
64
64
|
|
|
65
65
|
| Lane | Directory | What goes here |
|
|
66
66
|
|--------------|-----------------|----------------|
|
|
67
|
-
| adrs | `docs/adr/` | Architecture decisions that have already been made |
|
|
67
|
+
| adrs | `docs/decisions/adr/` | Architecture decisions that have already been made |
|
|
68
68
|
| briefs | `docs/briefs/` | Research, evidence, signals, one-pagers, customer profiles |
|
|
69
69
|
| changelogs | `docs/changelogs/` | User-facing release notes and version history entries |
|
|
70
70
|
| intake | `docs/intake/` | Intake batch records that explain what arrived, why it matters, and how it should be ingested |
|
|
71
|
-
| memos | `docs/memos/` | Decision memos and internal arguments for alignment |
|
|
72
|
-
| meetings | `docs/meetings/` | Meeting notes, minutes, standups, retros, agendas, and session summaries |
|
|
71
|
+
| memos | `docs/notes/memos/` | Decision memos and internal arguments for alignment |
|
|
72
|
+
| meetings | `docs/notes/meetings/` | Meeting notes, minutes, standups, retros, agendas, and session summaries |
|
|
73
73
|
| notes | `docs/notes/` | Working notes and lightweight durable context outside formal docs or meetings |
|
|
74
74
|
| onboarding | `docs/onboarding/` | Runnable setup guides and first-day workflows |
|
|
75
75
|
| postmortems | `docs/postmortems/` | Blameless incident reports with root cause and corrective actions |
|
|
76
|
-
| prds | `docs/prds/` | Product and capability requirement documents |
|
|
77
|
-
| rfcs | `docs/rfcs/` | Architecture and implementation proposals needing review |
|
|
78
|
-
| runbooks | `docs/runbooks/` | Operational procedures, diagnostics, escalation paths |
|
|
76
|
+
| prds | `templates/docs/prds/` | Product and capability requirement documents |
|
|
77
|
+
| rfcs | `templates/docs/rfcs/` | Architecture and implementation proposals needing review |
|
|
78
|
+
| runbooks | `docs/operations/runbooks/` | Operational procedures, diagnostics, escalation paths |
|
|
79
79
|
|
|
80
80
|
### Guidance: which lanes to suggest
|
|
81
81
|
|
|
@@ -152,7 +152,7 @@ Last updated: [date]
|
|
|
152
152
|
|
|
153
153
|
## Key decisions
|
|
154
154
|
|
|
155
|
-
Link to `docs/adr/` or the canonical project decision log used in this repo.
|
|
155
|
+
Link to `docs/decisions/adr/` or the canonical project decision log used in this repo.
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
---
|
|
@@ -188,7 +188,7 @@ Stack: [stack]
|
|
|
188
188
|
|
|
189
189
|
After completing the docs init:
|
|
190
190
|
- If the user has architecture questions → `@cx-explorer` or `@cx-docs-keeper` to explore and update `docs/architecture/`
|
|
191
|
-
- If the user wants to document a decision → record it in `docs/adr/` using the ADR template
|
|
191
|
+
- If the user wants to document a decision → record it in `docs/decisions/adr/` using the ADR template
|
|
192
192
|
- If the user wants to add API docs → `@cx-docs-keeper` to generate stubs from code
|
|
193
193
|
- If the user wants to file an incident report → use `docs/postmortems/` with the incident-report template
|
|
194
194
|
- If the user wants to document a release → use `docs/changelogs/` with the changelog-entry template
|
|
@@ -33,12 +33,12 @@ Style constraint: do not produce a wall of bullets. Use paragraphs for reasoning
|
|
|
33
33
|
|
|
34
34
|
| Template | Output path |
|
|
35
35
|
|---|---|
|
|
36
|
-
| `prd` | `docs/prd/{YYYY-MM-DD}-{slug}.md` |
|
|
36
|
+
| `prd` | `docs/specs/prd/{YYYY-MM-DD}-{slug}.md` |
|
|
37
37
|
| `prd-platform` | `docs/prd-platform/{YYYY-MM-DD}-{slug}.md` |
|
|
38
38
|
| `prd-business` | `docs/prd-business/{YYYY-MM-DD}-{slug}.md` |
|
|
39
39
|
| `meta-prd` | `docs/meta-prd/{YYYY-MM-DD}-{slug}.md` |
|
|
40
|
-
| `rfc` | `docs/rfc/{YYYY-MM-DD}-{slug}.md` |
|
|
41
|
-
| `rfc-platform` | `docs/rfc/{YYYY-MM-DD}-{slug}.md` |
|
|
40
|
+
| `rfc` | `docs/decisions/rfc/{YYYY-MM-DD}-{slug}.md` |
|
|
41
|
+
| `rfc-platform` | `docs/decisions/rfc/{YYYY-MM-DD}-{slug}.md` |
|
|
42
42
|
5. **cx-devil-advocate** runs the FMEA challenge pass (`roles/reviewer.devil-advocate`) on the draft; highest-RPN failure modes need a mitigation or explicit accept-with-rationale before ship. Their specialist id must appear in `.cx/agent-log.jsonl` (manifest `releaseGate.requiredReviewers` for PRD-family types).
|
|
43
43
|
6. **cx-docs-keeper** updates `.cx/context.md` with a link to the PRD
|
|
44
44
|
|
|
@@ -47,11 +47,11 @@ Run `construct artifact validate <path> --type=<type>` before marking the artifa
|
|
|
47
47
|
## File naming
|
|
48
48
|
- `docs/{template-type}/{YYYY-MM-DD}-{slug}.md`
|
|
49
49
|
- Examples:
|
|
50
|
-
- `docs/prd/2026-04-search-autocomplete.md`
|
|
50
|
+
- `docs/specs/prd/2026-04-search-autocomplete.md`
|
|
51
51
|
- `docs/prd-platform/2026-04-events-api-v2.md`
|
|
52
52
|
- `docs/prd-business/2026-04-enterprise-tier.md`
|
|
53
53
|
- `docs/meta-prd/2026-04-product-intelligence-workflow.md`
|
|
54
|
-
- `docs/rfc/2026-04-storage-backend-migration.md`
|
|
54
|
+
- `docs/decisions/rfc/2026-04-storage-backend-migration.md`
|
|
55
55
|
|
|
56
56
|
## PRD lifecycle
|
|
57
57
|
- Draft → stakeholder review → approved → link to implementation tasks
|
|
@@ -17,7 +17,7 @@ Score each dimension as pass, warning, or fail:
|
|
|
17
17
|
- Acceptance criteria: observable and pass/fail.
|
|
18
18
|
- Scope discipline: goals, non-goals, and tradeoffs are explicit.
|
|
19
19
|
- Approval safety: external writes and approved status are gated.
|
|
20
|
-
- Storage readiness: artifact path is under `.cx/knowledge/`, `docs/prd/`, or `docs/meta-prd/` so hybrid retrieval can index it.
|
|
20
|
+
- Storage readiness: artifact path is under `.cx/knowledge/`, `docs/specs/prd/`, or `docs/meta-prd/` so hybrid retrieval can index it.
|
|
21
21
|
- Readability: balanced paragraphs, tables, and bullets. Few em dashes.
|
|
22
22
|
|
|
23
23
|
## Output
|
|
@@ -54,9 +54,9 @@ Load the core product-manager role guidance and the selected overlay before draf
|
|
|
54
54
|
|
|
55
55
|
## Storage
|
|
56
56
|
|
|
57
|
-
Write working artifacts under `.cx/knowledge/` unless they are docs of record. Approved PRDs live in `docs/prd/`; approved Meta PRDs live in `docs/meta-prd/`.
|
|
57
|
+
Write working artifacts under `.cx/knowledge/` unless they are docs of record. Approved PRDs live in `docs/specs/prd/`; approved Meta PRDs live in `docs/meta-prd/`.
|
|
58
58
|
|
|
59
|
-
The hybrid storage layer indexes `.cx/knowledge/`, `docs/prd/`, and `docs/meta-prd/`. When Postgres is configured, `construct storage sync` can persist these artifacts into shared SQL rows. The vector layer scores the same documents for local, remote, or file-backed semantic retrieval.
|
|
59
|
+
The hybrid storage layer indexes `.cx/knowledge/`, `docs/specs/prd/`, and `docs/meta-prd/`. When Postgres is configured, `construct storage sync` can persist these artifacts into shared SQL rows. The vector layer scores the same documents for local, remote, or file-backed semantic retrieval.
|
|
60
60
|
|
|
61
61
|
## Approval boundaries
|
|
62
62
|
|
|
@@ -57,7 +57,7 @@ After grouping evidence, check `.cx/knowledge/decisions/strategy/` for any decla
|
|
|
57
57
|
|---|---|
|
|
58
58
|
| Signal brief | `.cx/knowledge/internal/signals/` |
|
|
59
59
|
| Evidence brief | `.cx/knowledge/internal/evidence-briefs/` |
|
|
60
|
-
| PRD | `docs/prd/` |
|
|
60
|
+
| PRD | `docs/specs/prd/` |
|
|
61
61
|
| PRFAQ | `docs/prfaq/` |
|
|
62
62
|
| Meta PRD | `docs/meta-prd/` |
|
|
63
63
|
| Backlog proposal | pending approval gate: do not file until explicit user approval |
|
|
@@ -12,14 +12,14 @@ Use when: creating operational procedures for services, alerts, or recurring ope
|
|
|
12
12
|
## Steps
|
|
13
13
|
|
|
14
14
|
1. **cx-sre** or **cx-release-manager** identifies the need
|
|
15
|
-
2. **Write to `docs/runbooks/{service}-{operation}.md`** using the template from `get_template("runbook")`: resolves `.cx/templates/docs/runbook.md` (override) then `templates/docs/runbook.md` (shipped)
|
|
15
|
+
2. **Write to `docs/operations/runbooks/{service}-{operation}.md`** using the template from `get_template("runbook")`: resolves `.cx/templates/docs/runbook.md` (override) then `templates/docs/runbook.md` (shipped)
|
|
16
16
|
3. **Link from the relevant alert** or monitoring dashboard
|
|
17
17
|
4. **cx-docs-keeper** adds to `.cx/context.md` if it's a critical path runbook
|
|
18
18
|
|
|
19
19
|
## File naming
|
|
20
|
-
- `docs/runbooks/telemetry-restart.md`
|
|
21
|
-
- `docs/runbooks/db-migration.md`
|
|
22
|
-
- `docs/runbooks/incident-response.md`
|
|
20
|
+
- `docs/operations/runbooks/telemetry-restart.md`
|
|
21
|
+
- `docs/operations/runbooks/db-migration.md`
|
|
22
|
+
- `docs/operations/runbooks/incident-response.md`
|
|
23
23
|
|
|
24
24
|
## Review cadence
|
|
25
25
|
- Runbooks should be tested (table-top or live) at least quarterly
|
|
@@ -71,7 +71,7 @@ grep -r 'process\.env\.\|os\.environ\|getenv' --include='*.js' --include='*.py'
|
|
|
71
71
|
- Leaf nodes are safe to modify; hub changes have blast radius.
|
|
72
72
|
|
|
73
73
|
**Read the ADRs and postmortems:**
|
|
74
|
-
- Architecture decisions (`docs/adr/`, `decisions/`, `DECISIONS.md`) explain why the code is shaped the way it is.
|
|
74
|
+
- Architecture decisions (`docs/decisions/adr/`, `decisions/`, `DECISIONS.md`) explain why the code is shaped the way it is.
|
|
75
75
|
- Postmortems explain what has already broken and how the system defends against it. Don't break a defense you don't understand.
|
|
76
76
|
|
|
77
77
|
**Find the test coverage gaps:**
|