@geraldmaron/construct 1.2.1 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +6 -6
  2. package/apps/chat/engine/ai-sdk-agent.mjs +183 -0
  3. package/apps/chat/engine/loop-driver.mjs +211 -0
  4. package/apps/chat/engine/models.mjs +122 -0
  5. package/apps/chat/engine/provider-adapters.mjs +171 -0
  6. package/apps/chat/engine/tools/permission.mjs +54 -0
  7. package/apps/chat/engine/tools/primitives.mjs +180 -0
  8. package/apps/chat/engine/tools/registry.mjs +122 -0
  9. package/apps/chat/engine/turn-controls.mjs +70 -0
  10. package/bin/construct +93 -79
  11. package/commands/plan/decide.md +1 -1
  12. package/commands/remember/runbook.md +1 -1
  13. package/examples/README.md +1 -1
  14. package/examples/distribution/README.md +1 -1
  15. package/examples/distribution/sources/adr.md +2 -2
  16. package/examples/distribution/sources/deck-one-pager.md +1 -1
  17. package/examples/distribution/sources/prd-platform.md +1 -1
  18. package/examples/distribution/sources/research-brief.md +2 -2
  19. package/examples/distribution/sources/rfc-platform.md +1 -1
  20. package/examples/distribution/sources/runbook.md +2 -2
  21. package/examples/distribution/sources/strategy.md +1 -1
  22. package/lib/agent-instructions/inject.mjs +1 -1
  23. package/lib/artifact-type-from-path.mjs +9 -5
  24. package/lib/audit-specialists.mjs +1 -1
  25. package/lib/audit-trail.mjs +3 -3
  26. package/lib/auto-docs.mjs +10 -10
  27. package/lib/bootstrap/built-ins.mjs +3 -3
  28. package/lib/boundary.mjs +3 -2
  29. package/lib/brand-prose.mjs +1 -1
  30. package/lib/cache-governor.js +4 -4
  31. package/lib/certification/document-io-fixtures.mjs +1 -1
  32. package/lib/chat/config.mjs +2 -2
  33. package/lib/chat/desktop-binary.mjs +5 -3
  34. package/lib/cli-commands.mjs +4 -6
  35. package/lib/cli-service-inventory.mjs +1 -1
  36. package/lib/comment-lint.mjs +9 -5
  37. package/lib/config/alias.mjs +3 -2
  38. package/lib/config/intake-policy.mjs +8 -78
  39. package/lib/config/legacy-config-migration.mjs +59 -0
  40. package/lib/config/project-config.mjs +95 -5
  41. package/lib/config/schema.mjs +9 -19
  42. package/lib/config/xdg.mjs +63 -0
  43. package/lib/contracts/violation-log.mjs +2 -2
  44. package/lib/cost-ledger.mjs +4 -3
  45. package/lib/cost.mjs +3 -2
  46. package/lib/decisions/registry.mjs +3 -3
  47. package/lib/distill.mjs +2 -2
  48. package/lib/docs-verify.mjs +2 -0
  49. package/lib/doctor/audit.mjs +4 -3
  50. package/lib/doctor/cli.mjs +0 -1
  51. package/lib/doctor/index.mjs +4 -4
  52. package/lib/doctor/report.mjs +3 -3
  53. package/lib/doctor/watchers/bd-watch.mjs +5 -5
  54. package/lib/doctor/watchers/cost.mjs +4 -4
  55. package/lib/doctor/watchers/disk.mjs +4 -3
  56. package/lib/doctor/watchers/service-health.mjs +5 -5
  57. package/lib/document-export.mjs +1 -1
  58. package/lib/document-extract.mjs +3 -3
  59. package/lib/document-ingest.mjs +13 -3
  60. package/lib/efficiency.mjs +2 -1
  61. package/lib/embed/approval-queue.mjs +3 -2
  62. package/lib/embed/cli.mjs +7 -5
  63. package/lib/embed/config.mjs +6 -5
  64. package/lib/embed/daemon.mjs +6 -5
  65. package/lib/embed/inbox-live-watcher.mjs +1 -1
  66. package/lib/embed/inbox.mjs +52 -37
  67. package/lib/embed/intake-metrics.mjs +3 -2
  68. package/lib/embed/reconcile.mjs +1 -1
  69. package/lib/embed/semantic.mjs +3 -2
  70. package/lib/embed/supervision.mjs +4 -2
  71. package/lib/engine/registry.mjs +3 -3
  72. package/lib/env-config.mjs +34 -12
  73. package/lib/features.mjs +4 -3
  74. package/lib/health-check.mjs +7 -6
  75. package/lib/hook-health.mjs +5 -4
  76. package/lib/hooks/_lib/log.mjs +4 -3
  77. package/lib/hooks/_lib/output-mode.mjs +2 -1
  78. package/lib/hooks/agent-tracker.mjs +3 -4
  79. package/lib/hooks/audit-reads.mjs +2 -2
  80. package/lib/hooks/audit-trail.mjs +2 -2
  81. package/lib/hooks/bash-output-logger.mjs +3 -3
  82. package/lib/hooks/brand-prose-lint.mjs +1 -1
  83. package/lib/hooks/ci-status-check.mjs +3 -2
  84. package/lib/hooks/context-watch.mjs +2 -2
  85. package/lib/hooks/context-window-recovery.mjs +5 -5
  86. package/lib/hooks/dep-audit.mjs +2 -2
  87. package/lib/hooks/doc-coupling-check.mjs +3 -2
  88. package/lib/hooks/edit-accumulator.mjs +3 -2
  89. package/lib/hooks/edit-guard.mjs +3 -3
  90. package/lib/hooks/guard-bash.mjs +2 -2
  91. package/lib/hooks/model-fallback.mjs +2 -1
  92. package/lib/hooks/policy-engine.mjs +4 -3
  93. package/lib/hooks/pre-compact.mjs +7 -7
  94. package/lib/hooks/readme-age-check.mjs +2 -2
  95. package/lib/hooks/session-optimize.mjs +4 -3
  96. package/lib/hooks/session-start.mjs +6 -5
  97. package/lib/hooks/stop-notify.mjs +9 -8
  98. package/lib/hooks/stop-typecheck.mjs +4 -3
  99. package/lib/hooks/test-watch.mjs +2 -2
  100. package/lib/host-disposition.mjs +1 -1
  101. package/lib/ingest/provider-extract.mjs +2 -1
  102. package/lib/init/detect-existing-structure.mjs +2 -2
  103. package/lib/init/doc-lanes.mjs +3 -10
  104. package/lib/init-docs.mjs +12 -54
  105. package/lib/init-unified.mjs +35 -81
  106. package/lib/init.mjs +7 -5
  107. package/lib/install/desktop-binary-download.mjs +5 -2
  108. package/lib/intake/daemon.mjs +31 -8
  109. package/lib/intake/intake-config.mjs +5 -32
  110. package/lib/integrations/intake-integrations.mjs +8 -7
  111. package/lib/knowledge/rag.mjs +2 -2
  112. package/lib/knowledge/search.mjs +15 -15
  113. package/lib/maintenance/cleanup.mjs +14 -10
  114. package/lib/mcp/server.mjs +1 -1
  115. package/lib/mcp/tools/project.mjs +2 -1
  116. package/lib/model-cheapest-provider.mjs +4 -3
  117. package/lib/model-pricing.mjs +3 -2
  118. package/lib/model-router.mjs +4 -3
  119. package/lib/models/catalog.mjs +2 -1
  120. package/lib/models/execution-capability-profile.mjs +2 -1
  121. package/lib/models/provider-poll.mjs +2 -1
  122. package/lib/ollama-manager.mjs +0 -1
  123. package/lib/op-log.mjs +2 -1
  124. package/lib/opencode-runtime-plugin.mjs +3 -2
  125. package/lib/oracle/artifact-gate.mjs +3 -0
  126. package/lib/oracle/cli.mjs +2 -1
  127. package/lib/oracle/execute.mjs +3 -2
  128. package/lib/oracle/index.mjs +2 -1
  129. package/lib/oracle/read-model.mjs +3 -2
  130. package/lib/performance/generate.mjs +4 -3
  131. package/lib/platforms/capabilities.mjs +1 -1
  132. package/lib/plugin-registry.mjs +2 -1
  133. package/lib/profiles/lifecycle.mjs +3 -3
  134. package/lib/project-profile.mjs +2 -1
  135. package/lib/project-root.mjs +9 -7
  136. package/lib/provider-capabilities.js +4 -3
  137. package/lib/providers/auth-manager.mjs +2 -1
  138. package/lib/providers/copilot-auth.mjs +3 -2
  139. package/lib/providers/creds.mjs +3 -2
  140. package/lib/providers/registry.mjs +3 -3
  141. package/lib/providers/secret-resolver.mjs +3 -2
  142. package/lib/read-tracker-store.mjs +2 -1
  143. package/lib/reconcile/mcp-entry-reconcile.mjs +2 -2
  144. package/lib/reflect.mjs +2 -1
  145. package/lib/registry/generate-docs.mjs +2 -2
  146. package/lib/roles/approval-surface.mjs +5 -4
  147. package/lib/roles/event-bus.mjs +0 -1
  148. package/lib/roles/gateway.mjs +6 -2
  149. package/lib/rules-delivery.mjs +1 -1
  150. package/lib/runtime-env.mjs +1 -1
  151. package/lib/runtime-pressure.mjs +5 -3
  152. package/lib/sandbox.mjs +3 -2
  153. package/lib/scheduler/solo.mjs +6 -4
  154. package/lib/server/auth.mjs +4 -3
  155. package/lib/server/index.mjs +24 -26
  156. package/lib/server/insights.mjs +5 -4
  157. package/lib/server/webhook.mjs +2 -1
  158. package/lib/service-manager.mjs +5 -3
  159. package/lib/setup.mjs +21 -11
  160. package/lib/status.mjs +6 -5
  161. package/lib/storage/embeddings-local.mjs +3 -2
  162. package/lib/storage/sync.mjs +2 -2
  163. package/lib/telemetry/client.mjs +0 -1
  164. package/lib/telemetry/intent-verifications.mjs +6 -6
  165. package/lib/telemetry/model-pricing-catalog.mjs +4 -3
  166. package/lib/telemetry/rule-calls.mjs +3 -3
  167. package/lib/telemetry/skill-calls.mjs +3 -3
  168. package/lib/template-registry.mjs +1 -0
  169. package/lib/templates/visual-requirements.mjs +1 -1
  170. package/lib/test-corpus-inventory.mjs +1 -1
  171. package/lib/uninstall/uninstall.mjs +12 -10
  172. package/package.json +4 -3
  173. package/platforms/claude/settings.template.json +43 -43
  174. package/rules/common/no-fabrication.md +1 -1
  175. package/rules/common/release-gates.md +1 -1
  176. package/rules/common/research.md +1 -1
  177. package/rules/common/review-before-change.md +1 -1
  178. package/scripts/sync-specialists.mjs +11 -8
  179. package/skills/docs/adr-workflow.md +3 -3
  180. package/skills/docs/init-docs.md +9 -9
  181. package/skills/docs/prd-workflow.md +5 -5
  182. package/skills/docs/product-intelligence-review.md +1 -1
  183. package/skills/docs/product-intelligence-workflow.md +2 -2
  184. package/skills/docs/product-signal-workflow.md +1 -1
  185. package/skills/docs/runbook-workflow.md +4 -4
  186. package/skills/exploration/unknown-codebase-onboarding.md +1 -1
  187. package/skills/operating/orchestration-reference.md +1 -1
  188. package/skills/routing.md +3 -3
  189. package/specialists/prompts/cx-architect.md +1 -1
  190. package/specialists/prompts/cx-docs-keeper.md +1 -1
  191. package/specialists/prompts/cx-researcher.md +1 -1
  192. package/specialists/prompts/cx-sre.md +1 -1
  193. package/specialists/role-manifests.json +6 -6
  194. package/templates/docs/README.md +125 -0
  195. package/templates/docs/construct_guide.md +3 -4
  196. package/templates/docs/persona-artifact.md +1 -1
  197. package/templates/docs/prds/README.md +25 -0
  198. package/templates/docs/prds/templates/_template.md +206 -0
  199. package/templates/docs/prds/templates/meta-prd.template.md +177 -0
  200. package/templates/docs/prds/templates/prd-business.template.md +61 -0
  201. package/templates/docs/prds/templates/prd-platform.template.md +81 -0
  202. package/templates/docs/prds/templates/prfaq.template.md +38 -0
  203. package/templates/docs/rfcs/README.md +22 -0
  204. package/templates/docs/rfcs/templates/_template.md +58 -0
  205. package/templates/docs/rfcs/templates/rfc-platform.template.md +72 -0
  206. package/templates/homebrew/construct.rb +1 -1
  207. package/templates/workflows/new-feature.yml +8 -8
  208. package/lib/intake/legacy-paths.mjs +0 -5
@@ -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
@@ -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 path so hook commands survive
1048
- // symlink traversal inside Claude Code's hook runner environment.
1049
- const constructReal = (() => {
1050
- try { return fs.realpathSync(path.join(home, ".construct")); } catch { return path.join(home, ".construct"); }
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, constructReal.replace(/\\/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
@@ -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
- If the user selects the `intake` lane, `construct init` should also create `.cx/inbox/`. Both `.cx/inbox/` and `docs/intake/` act as drop zones for ingestable files, while `docs/intake/` also serves as the durable paper trail lane.
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:**