@khoavu882/doflow 2.0.0-beta.3 → 2.0.0-beta.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.
Files changed (236) hide show
  1. package/bin/doflow.js +2 -2
  2. package/core/.antigravity-plugin/plugin.json +0 -1
  3. package/core/.claude-plugin/plugin.json +1 -1
  4. package/core/.codex-plugin/plugin.json +1 -1
  5. package/core/.plugin/plugin.json +1 -1
  6. package/core/harnesses/claude/hooks/mcp-tool-guard.sh +7 -17
  7. package/core/harnesses/claude/hooks/pre-bash-guard.sh +7 -17
  8. package/core/harnesses/claude/hooks/pre-implement-gate.sh +7 -18
  9. package/core/harnesses/claude/hooks/session-start.sh +5 -3
  10. package/core/harnesses/claude/hooks/stop-check.sh +5 -3
  11. package/core/harnesses/claude/hooks/subagent-audit.sh +5 -5
  12. package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -3
  13. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +7 -15
  14. package/core/harnesses/codex/hooks/pre-bash-guard.sh +7 -15
  15. package/core/harnesses/codex/hooks/pre-implement-gate.sh +7 -16
  16. package/core/harnesses/codex/hooks/session-start.sh +5 -3
  17. package/core/harnesses/codex/hooks/stop-check.sh +6 -5
  18. package/core/harnesses/codex/hooks/subagent-audit.sh +17 -6
  19. package/core/harnesses/codex/hooks/user-prompt-submit.sh +5 -4
  20. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +7 -18
  21. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +7 -18
  22. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +7 -19
  23. package/core/harnesses/gemini/hooks/session-start.sh +5 -3
  24. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +20 -5
  25. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +20 -5
  26. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +20 -5
  27. package/core/harnesses/kiro/hooks/session-start.sh +11 -5
  28. package/core/harnesses/kiro/hooks/stop-check.sh +21 -30
  29. package/core/harnesses/pi/extensions/doflow-guard.js +159 -0
  30. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +27 -11
  31. package/core/harnesses/shared/hooks/adapters/antigravity.js +14 -57
  32. package/core/harnesses/shared/hooks/bridge/bridge.sh +184 -0
  33. package/core/harnesses/shared/hooks/bridge/envelope.jq +60 -0
  34. package/core/harnesses/shared/hooks/bridge/respond.sh +62 -0
  35. package/core/harnesses/shared/hooks/policies/capture-failure.sh +4 -2
  36. package/core/harnesses/shared/hooks/policies/contract.sh +75 -0
  37. package/core/harnesses/shared/hooks/policies/deny-json.sh +39 -4
  38. package/core/harnesses/shared/hooks/policies/lib.sh +4 -2
  39. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +46 -34
  40. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +75 -25
  41. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +67 -73
  42. package/core/harnesses/shared/hooks/policies/session-context.sh +37 -7
  43. package/core/harnesses/shared/hooks/policies/stop-check.sh +42 -15
  44. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +35 -5
  45. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +40 -7
  46. package/core/harnesses/shared/hooks/stream-hook-runner.js +69 -181
  47. package/core/registry/assets.json +19 -0
  48. package/core/registry/contracts.json +2 -2
  49. package/core/registry/harnesses.json +196 -10
  50. package/core/registry/lifecycle.json +2626 -7
  51. package/core/registry/storage.json +110 -83
  52. package/core/registry/verification.json +1 -1
  53. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -2
  54. package/core/shared/scripts/doflow/bin/doflow-run +10 -6
  55. package/core/shared/skills/do-design/SKILL.md +6 -6
  56. package/core/shared/skills/do-execute-plan/SKILL.md +11 -10
  57. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +2 -0
  58. package/core/shared/skills/do-execute-plan/references/scaffold.md +2 -2
  59. package/core/shared/skills/do-implement/SKILL.md +3 -2
  60. package/core/shared/skills/do-plan/SKILL.md +7 -8
  61. package/package.json +4 -2
  62. package/src/adapters/antigravity/{index.ts → index.js} +141 -105
  63. package/src/adapters/claude/{index.ts → index.js} +63 -49
  64. package/src/adapters/claude/{mcp.ts → mcp.js} +16 -16
  65. package/src/adapters/codex/{agents.ts → agents.js} +24 -24
  66. package/src/adapters/codex/{config.ts → config.js} +49 -49
  67. package/src/adapters/codex/{hooks.ts → hooks.js} +62 -27
  68. package/src/adapters/codex/{index.ts → index.js} +148 -105
  69. package/src/adapters/codex/{mcp.ts → mcp.js} +38 -38
  70. package/src/adapters/codex/{native-projection.ts → native-projection.js} +5 -5
  71. package/src/adapters/copilot/{index.ts → index.js} +42 -42
  72. package/src/adapters/{copy-tree.ts → copy-tree.js} +74 -74
  73. package/src/adapters/gemini/{hooks.ts → hooks.js} +78 -37
  74. package/src/adapters/gemini/{index.ts → index.js} +96 -57
  75. package/src/adapters/{hook-commands.ts → hook-commands.js} +8 -8
  76. package/src/adapters/{index.ts → index.js} +13 -13
  77. package/src/adapters/kiro/{index.ts → index.js} +49 -35
  78. package/src/adapters/{mcp-entries.ts → mcp-entries.js} +55 -55
  79. package/src/adapters/opencode/{index.ts → index.js} +52 -52
  80. package/src/adapters/pi/hooks.js +119 -0
  81. package/src/adapters/pi/{index.ts → index.js} +64 -39
  82. package/src/adapters/pi/{json-members.ts → json-members.js} +23 -23
  83. package/src/adapters/pi/{mcp.ts → mcp.js} +70 -70
  84. package/src/adapters/{resolve-source.ts → resolve-source.js} +1 -1
  85. package/src/cli/commands/{install.ts → install.js} +25 -25
  86. package/src/cli/commands/{list-backups.ts → list-backups.js} +4 -4
  87. package/src/cli/commands/{reconcile.ts → reconcile.js} +19 -19
  88. package/src/cli/commands/{remove.ts → remove.js} +10 -10
  89. package/src/cli/commands/{rollback.ts → rollback.js} +17 -17
  90. package/src/cli/commands/{self-update.ts → self-update.js} +3 -3
  91. package/src/cli/commands/{status.ts → status.js} +24 -24
  92. package/src/cli/commands/{tools.ts → tools.js} +16 -16
  93. package/src/cli/commands/{update.ts → update.js} +20 -20
  94. package/src/cli/{index.ts → index.js} +43 -31
  95. package/src/cli/{runtime-commands.ts → runtime-commands.js} +97 -58
  96. package/src/cli/{shared.ts → shared.js} +40 -40
  97. package/src/helper/{bash-helper.ts → bash-helper.js} +7 -7
  98. package/src/helper/{git.ts → git.js} +2 -2
  99. package/src/helper/{guardrails.ts → guardrails.js} +10 -10
  100. package/src/helper/{harness-paths.ts → harness-paths.js} +24 -24
  101. package/src/helper/{marker-merge.ts → marker-merge.js} +4 -4
  102. package/src/helper/{prompt.ts → prompt.js} +5 -5
  103. package/src/helper/{repo-root.ts → repo-root.js} +2 -2
  104. package/src/helper/{settings-merge.ts → settings-merge.js} +27 -27
  105. package/src/helper/{settings-scope.ts → settings-scope.js} +3 -3
  106. package/src/helper/{toml.ts → toml.js} +48 -48
  107. package/src/install/{backup-set.ts → backup-set.js} +16 -16
  108. package/src/install/{backup.ts → backup.js} +65 -65
  109. package/src/install/{context.ts → context.js} +15 -15
  110. package/src/install/{manifest.ts → manifest.js} +27 -27
  111. package/src/install/{mcp.ts → mcp.js} +30 -30
  112. package/src/install/{paths.ts → paths.js} +15 -15
  113. package/src/install/{targets.ts → targets.js} +10 -10
  114. package/src/install/{tool-lifecycle.ts → tool-lifecycle.js} +20 -20
  115. package/src/lifecycle/{bash-availability.ts → bash-availability.js} +1 -1
  116. package/src/lifecycle/coverage.js +57 -0
  117. package/src/lifecycle/hook-step.js +61 -0
  118. package/src/lifecycle/{index.ts → index.js} +160 -146
  119. package/src/lifecycle/{mcp-index.ts → mcp-index.js} +1 -1
  120. package/src/lifecycle/{policies.ts → policies.js} +11 -11
  121. package/src/lifecycle/{view.ts → view.js} +28 -28
  122. package/src/registry/{index.ts → index.js} +195 -66
  123. package/src/release/build-package.js +91 -0
  124. package/src/release/changelog-section.js +70 -0
  125. package/src/release/{sync-plugin-versions.ts → sync-plugin-versions.js} +4 -4
  126. package/src/runtime/advice/{cli.ts → cli.js} +31 -31
  127. package/src/runtime/advice/{client.ts → client.js} +44 -44
  128. package/src/runtime/advice/{config.ts → config.js} +16 -16
  129. package/src/runtime/advice/{doctor.ts → doctor.js} +32 -32
  130. package/src/runtime/advice/{endpoint-guard.ts → endpoint-guard.js} +20 -20
  131. package/src/runtime/advice/{kinds.ts → kinds.js} +16 -16
  132. package/src/runtime/advice/providers/{ollama-systemone.ts → ollama-systemone.js} +21 -21
  133. package/src/runtime/advice/{record.ts → record.js} +19 -19
  134. package/src/runtime/advice/{registry.ts → registry.js} +16 -16
  135. package/src/runtime/advice/{strength.ts → strength.js} +7 -7
  136. package/src/runtime/{brief-tools.ts → brief-tools.js} +50 -50
  137. package/src/runtime/{c4-project.ts → c4-project.js} +27 -27
  138. package/src/runtime/candidate.js +505 -0
  139. package/src/runtime/{capability-router.ts → capability-router.js} +39 -39
  140. package/src/runtime/{checkouts.ts → checkouts.js} +21 -21
  141. package/src/runtime/{claims.ts → claims.js} +44 -35
  142. package/src/runtime/{cli-result.ts → cli-result.js} +15 -8
  143. package/src/runtime/{cli.ts → cli.js} +59 -292
  144. package/src/runtime/{command-detect.ts → command-detect.js} +47 -47
  145. package/src/runtime/context/budget.js +203 -0
  146. package/src/runtime/context/compose.js +1367 -0
  147. package/src/runtime/context/delivery-store.js +102 -0
  148. package/src/runtime/context/mandatory.js +594 -0
  149. package/src/runtime/context/pointer.js +142 -0
  150. package/src/runtime/context-pack.js +1277 -0
  151. package/src/runtime/{decision-register.ts → decision-register.js} +67 -67
  152. package/src/runtime/evidence-fields.js +39 -0
  153. package/src/runtime/{evidence-ledger.ts → evidence-ledger.js} +32 -25
  154. package/src/runtime/failure/{capture.ts → capture.js} +29 -29
  155. package/src/runtime/failure/{classifier.ts → classifier.js} +4 -4
  156. package/src/runtime/failure/{cli.ts → cli.js} +30 -30
  157. package/src/runtime/failure/{home.ts → home.js} +6 -6
  158. package/src/runtime/failure/{store.ts → store.js} +32 -32
  159. package/src/runtime/{feature-resolve.ts → feature-resolve.js} +6 -6
  160. package/src/runtime/{freshness.ts → freshness.js} +59 -22
  161. package/src/runtime/{health.ts → health.js} +72 -72
  162. package/src/runtime/{history-compactor.ts → history-compactor.js} +25 -25
  163. package/src/runtime/{implementation-gate.ts → implementation-gate.js} +30 -30
  164. package/src/runtime/inventory/{coverage.ts → coverage.js} +10 -10
  165. package/src/runtime/inventory/{identity.ts → identity.js} +2 -2
  166. package/src/runtime/inventory/{index.ts → index.js} +36 -36
  167. package/src/runtime/inventory/{precedence.ts → precedence.js} +2 -2
  168. package/src/runtime/inventory/{read-scopes.ts → read-scopes.js} +9 -9
  169. package/src/runtime/inventory/{siblings.ts → siblings.js} +15 -15
  170. package/src/runtime/knowledge/{chunker.ts → chunker.js} +12 -12
  171. package/src/runtime/knowledge/{hybrid.ts → hybrid.js} +17 -17
  172. package/src/runtime/knowledge/{index-store.ts → index-store.js} +23 -23
  173. package/src/runtime/knowledge/{retrieval.ts → retrieval.js} +27 -27
  174. package/src/runtime/{leak-scan.ts → leak-scan.js} +12 -12
  175. package/src/runtime/lifecycle/{cli.ts → cli.js} +32 -32
  176. package/src/runtime/lifecycle/{event-store.ts → event-store.js} +48 -48
  177. package/src/runtime/lifecycle/{fold.ts → fold.js} +41 -41
  178. package/src/runtime/lifecycle/{followup.ts → followup.js} +54 -54
  179. package/src/runtime/lifecycle/{goal.ts → goal.js} +50 -50
  180. package/src/runtime/lifecycle/{intent-writer.ts → intent-writer.js} +5 -5
  181. package/src/runtime/lifecycle/{overview.ts → overview.js} +47 -47
  182. package/src/runtime/lifecycle/{release.ts → release.js} +29 -29
  183. package/src/runtime/lifecycle/{report-store.ts → report-store.js} +25 -25
  184. package/src/runtime/lifecycle/{retention.ts → retention.js} +37 -37
  185. package/src/runtime/lifecycle/{root.ts → root.js} +9 -9
  186. package/src/runtime/lifecycle/{status.ts → status.js} +64 -64
  187. package/src/runtime/lifecycle/{store-upkeep.ts → store-upkeep.js} +46 -46
  188. package/src/runtime/{locator-resolve.ts → locator-resolve.js} +7 -7
  189. package/src/runtime/{mask.ts → mask.js} +22 -22
  190. package/src/runtime/{mcp-consultations.ts → mcp-consultations.js} +54 -54
  191. package/src/runtime/{mcp-reach.ts → mcp-reach.js} +24 -24
  192. package/src/runtime/{model-router.ts → model-router.js} +20 -20
  193. package/src/runtime/{outcome.ts → outcome.js} +27 -27
  194. package/src/runtime/{reach.ts → reach.js} +21 -21
  195. package/src/runtime/{readiness-record.ts → readiness-record.js} +12 -12
  196. package/src/runtime/{readiness.ts → readiness.js} +113 -43
  197. package/src/runtime/{recovery.ts → recovery.js} +15 -15
  198. package/src/runtime/{research-request.ts → research-request.js} +34 -34
  199. package/src/runtime/{retrieval-plan.ts → retrieval-plan.js} +453 -104
  200. package/src/runtime/retrieval-record.js +223 -0
  201. package/src/runtime/scaffold/{artifacts.ts → artifacts.js} +22 -19
  202. package/src/runtime/scaffold/{fingerprint.ts → fingerprint.js} +3 -3
  203. package/src/runtime/scaffold/{generate.ts → generate.js} +109 -109
  204. package/src/runtime/scaffold/{languages.ts → languages.js} +34 -34
  205. package/src/runtime/source-version.js +289 -0
  206. package/src/runtime/storage/{cli.ts → cli.js} +9 -9
  207. package/src/runtime/storage/{engine.ts → engine.js} +37 -37
  208. package/src/runtime/storage/{registry.ts → registry.js} +19 -19
  209. package/src/runtime/storage/{roots.ts → roots.js} +8 -8
  210. package/src/runtime/storage/{rules.ts → rules.js} +26 -26
  211. package/src/runtime/storage/{upkeep.ts → upkeep.js} +35 -35
  212. package/src/runtime/storage/{work-status.ts → work-status.js} +39 -39
  213. package/src/runtime/{task-attempts.ts → task-attempts.js} +62 -62
  214. package/src/runtime/{task-classifier.ts → task-classifier.js} +34 -34
  215. package/src/runtime/{task-scope.ts → task-scope.js} +40 -15
  216. package/src/runtime/{task-state.ts → task-state.js} +86 -21
  217. package/src/runtime/trace/{indicators.ts → indicators.js} +22 -22
  218. package/src/runtime/trace/{ledger.ts → ledger.js} +42 -42
  219. package/src/runtime/trace/{render.ts → render.js} +7 -7
  220. package/src/runtime/trace/{views.ts → views.js} +40 -40
  221. package/src/runtime/verification/{contract-runner.ts → contract-runner.js} +23 -23
  222. package/src/runtime/verification/{engine.ts → engine.js} +143 -143
  223. package/src/runtime/verification/{registry.ts → registry.js} +6 -6
  224. package/src/runtime/verification/{scope-bound.ts → scope-bound.js} +50 -50
  225. package/src/runtime/verification/{test-selection.ts → test-selection.js} +28 -28
  226. package/src/runtime/{workflow-engine.ts → workflow-engine.js} +50 -50
  227. package/src/runtime/{workflow-orchestrator.ts → workflow-orchestrator.js} +91 -91
  228. package/src/runtime/{worktree.ts → worktree.js} +31 -31
  229. package/src/state/{index.ts → index.js} +26 -26
  230. package/src/state/{lockfile.ts → lockfile.js} +20 -20
  231. package/src/state/{run-lock.ts → run-lock.js} +44 -44
  232. package/core/.antigravity-plugin/hooks.json +0 -39
  233. package/core/harnesses/shared/hooks/adapters/arg-fields.js +0 -19
  234. package/core/harnesses/shared/hooks/adapters/gemini.js +0 -114
  235. package/core/harnesses/shared/hooks/hooks.json +0 -47
  236. package/src/runtime/context-pack.ts +0 -492
@@ -71,7 +71,7 @@
71
71
  "verb"
72
72
  ],
73
73
  "writers": [
74
- "src/runtime/verification/contract-runner.ts"
74
+ "src/runtime/verification/contract-runner.js"
75
75
  ]
76
76
  },
77
77
  {
@@ -89,7 +89,25 @@
89
89
  "verb"
90
90
  ],
91
91
  "writers": [
92
- "src/runtime/task-state.ts"
92
+ "src/runtime/task-state.js"
93
+ ]
94
+ },
95
+ {
96
+ "id": "task-delivery",
97
+ "root": "project-state",
98
+ "path": "delivery",
99
+ "entry": "record",
100
+ "match": "^[A-Za-z0-9][A-Za-z0-9._-]*\\.json$",
101
+ "rule": "work",
102
+ "bound": {
103
+ "finishedDays": 30
104
+ },
105
+ "protect": null,
106
+ "moments": [
107
+ "verb"
108
+ ],
109
+ "writers": [
110
+ "src/runtime/task-state.js"
93
111
  ]
94
112
  },
95
113
  {
@@ -107,8 +125,8 @@
107
125
  "verb"
108
126
  ],
109
127
  "writers": [
110
- "src/runtime/readiness-record.ts",
111
- "src/runtime/task-state.ts"
128
+ "src/runtime/readiness-record.js",
129
+ "src/runtime/task-state.js"
112
130
  ]
113
131
  },
114
132
  {
@@ -126,7 +144,7 @@
126
144
  "verb"
127
145
  ],
128
146
  "writers": [
129
- "src/runtime/task-state.ts"
147
+ "src/runtime/task-state.js"
130
148
  ]
131
149
  },
132
150
  {
@@ -144,7 +162,7 @@
144
162
  "verb"
145
163
  ],
146
164
  "writers": [
147
- "src/runtime/outcome.ts"
165
+ "src/runtime/outcome.js"
148
166
  ]
149
167
  },
150
168
  {
@@ -162,7 +180,8 @@
162
180
  "verb"
163
181
  ],
164
182
  "writers": [
165
- "src/runtime/retrieval-plan.ts"
183
+ "src/runtime/task-state.js",
184
+ "src/runtime/retrieval-record.js"
166
185
  ]
167
186
  },
168
187
  {
@@ -180,7 +199,7 @@
180
199
  "verb"
181
200
  ],
182
201
  "writers": [
183
- "src/runtime/task-state.ts"
202
+ "src/runtime/task-state.js"
184
203
  ]
185
204
  },
186
205
  {
@@ -198,8 +217,8 @@
198
217
  "verb"
199
218
  ],
200
219
  "writers": [
201
- "src/runtime/task-state.ts",
202
- "src/runtime/workflow-orchestrator.ts"
220
+ "src/runtime/task-state.js",
221
+ "src/runtime/workflow-orchestrator.js"
203
222
  ]
204
223
  },
205
224
  {
@@ -218,7 +237,7 @@
218
237
  ],
219
238
  "writers": [
220
239
  "core/shared/scripts/doflow/bin/doflow-run",
221
- "src/runtime/trace/ledger.ts"
240
+ "src/runtime/trace/ledger.js"
222
241
  ]
223
242
  },
224
243
  {
@@ -237,7 +256,7 @@
237
256
  ],
238
257
  "writers": [
239
258
  "core/shared/scripts/doflow/bin/doflow-run",
240
- "src/runtime/trace/ledger.ts"
259
+ "src/runtime/trace/ledger.js"
241
260
  ]
242
261
  },
243
262
  {
@@ -255,7 +274,7 @@
255
274
  "verb"
256
275
  ],
257
276
  "writers": [
258
- "src/runtime/advice/record.ts"
277
+ "src/runtime/advice/record.js"
259
278
  ]
260
279
  },
261
280
  {
@@ -273,7 +292,7 @@
273
292
  "verb"
274
293
  ],
275
294
  "writers": [
276
- "src/runtime/advice/record.ts"
295
+ "src/runtime/advice/record.js"
277
296
  ]
278
297
  },
279
298
  {
@@ -291,7 +310,7 @@
291
310
  "install"
292
311
  ],
293
312
  "writers": [
294
- "src/state/index.ts"
313
+ "src/state/index.js"
295
314
  ]
296
315
  },
297
316
  {
@@ -309,7 +328,7 @@
309
328
  "install"
310
329
  ],
311
330
  "writers": [
312
- "src/state/index.ts"
331
+ "src/state/index.js"
313
332
  ]
314
333
  },
315
334
  {
@@ -328,7 +347,7 @@
328
347
  "verb"
329
348
  ],
330
349
  "writers": [
331
- "src/runtime/lifecycle/event-store.ts"
350
+ "src/runtime/lifecycle/event-store.js"
332
351
  ]
333
352
  },
334
353
  {
@@ -347,8 +366,8 @@
347
366
  "verb"
348
367
  ],
349
368
  "writers": [
350
- "src/runtime/lifecycle/report-store.ts",
351
- "src/runtime/storage/engine.ts"
369
+ "src/runtime/lifecycle/report-store.js",
370
+ "src/runtime/storage/engine.js"
352
371
  ]
353
372
  },
354
373
  {
@@ -427,10 +446,10 @@
427
446
  "protect": null,
428
447
  "moments": [],
429
448
  "writers": [
430
- "src/install/backup.ts"
449
+ "src/install/backup.js"
431
450
  ],
432
451
  "source": {
433
- "file": "src/install/backup.ts",
452
+ "file": "src/install/backup.js",
434
453
  "pattern": "DEFAULT_BACKUP_RETENTION = {value}"
435
454
  }
436
455
  },
@@ -448,10 +467,10 @@
448
467
  "protect": null,
449
468
  "moments": [],
450
469
  "writers": [
451
- "src/install/backup.ts"
470
+ "src/install/backup.js"
452
471
  ],
453
472
  "source": {
454
- "file": "src/install/backup.ts",
473
+ "file": "src/install/backup.js",
455
474
  "pattern": "DEFAULT_BACKUP_RETENTION = {value}"
456
475
  }
457
476
  },
@@ -522,12 +541,12 @@
522
541
  "core/harnesses/shared/hooks/policies/capture-failure.sh",
523
542
  "core/harnesses/shared/hooks/stream-hook-runner.js",
524
543
  "core/shared/scripts/doflow/bin/doflow-run",
525
- "src/runtime/failure/capture.ts",
526
- "src/runtime/failure/cli.ts",
527
- "src/runtime/failure/store.ts"
544
+ "src/runtime/failure/capture.js",
545
+ "src/runtime/failure/cli.js",
546
+ "src/runtime/failure/store.js"
528
547
  ],
529
548
  "source": {
530
- "file": "src/runtime/failure/capture.ts",
549
+ "file": "src/runtime/failure/capture.js",
531
550
  "pattern": "KEEP_ROTATED = {value}"
532
551
  }
533
552
  },
@@ -544,10 +563,10 @@
544
563
  "protect": null,
545
564
  "moments": [],
546
565
  "writers": [
547
- "src/state/index.ts"
566
+ "src/state/index.js"
548
567
  ],
549
568
  "source": {
550
- "file": "src/state/index.ts",
569
+ "file": "src/state/index.js",
551
570
  "pattern": "LEDGER_FILE"
552
571
  }
553
572
  },
@@ -564,10 +583,10 @@
564
583
  "protect": null,
565
584
  "moments": [],
566
585
  "writers": [
567
- "src/state/index.ts"
586
+ "src/state/index.js"
568
587
  ],
569
588
  "source": {
570
- "file": "src/state/index.ts",
589
+ "file": "src/state/index.js",
571
590
  "pattern": "LEDGER_FILE"
572
591
  }
573
592
  },
@@ -584,10 +603,10 @@
584
603
  "protect": null,
585
604
  "moments": [],
586
605
  "writers": [
587
- "src/runtime/lifecycle/store-upkeep.ts"
606
+ "src/runtime/lifecycle/store-upkeep.js"
588
607
  ],
589
608
  "source": {
590
- "file": "src/runtime/lifecycle/store-upkeep.ts",
609
+ "file": "src/runtime/lifecycle/store-upkeep.js",
591
610
  "pattern": "MIGRATING_PREFIX"
592
611
  }
593
612
  },
@@ -605,11 +624,11 @@
605
624
  "protect": null,
606
625
  "moments": [],
607
626
  "writers": [
608
- "src/runtime/storage/engine.ts",
609
- "src/runtime/task-state.ts"
627
+ "src/runtime/storage/engine.js",
628
+ "src/runtime/task-state.js"
610
629
  ],
611
630
  "source": {
612
- "file": "src/runtime/task-state.ts",
631
+ "file": "src/runtime/task-state.js",
613
632
  "pattern": "LOCK_STALE_MS = 10_000"
614
633
  }
615
634
  },
@@ -626,14 +645,14 @@
626
645
  "protect": null,
627
646
  "moments": [],
628
647
  "writers": [
629
- "src/adapters/antigravity/index.ts",
630
- "src/adapters/copy-tree.ts",
631
- "src/install/manifest.ts",
632
- "src/lifecycle/index.ts",
633
- "src/state/index.ts"
648
+ "src/adapters/antigravity/index.js",
649
+ "src/adapters/copy-tree.js",
650
+ "src/install/manifest.js",
651
+ "src/lifecycle/index.js",
652
+ "src/state/index.js"
634
653
  ],
635
654
  "source": {
636
- "file": "src/lifecycle/index.ts",
655
+ "file": "src/lifecycle/index.js",
637
656
  "pattern": "MCP_INDEX.md"
638
657
  }
639
658
  },
@@ -650,14 +669,14 @@
650
669
  "protect": null,
651
670
  "moments": [],
652
671
  "writers": [
653
- "src/adapters/antigravity/index.ts",
654
- "src/adapters/copy-tree.ts",
655
- "src/install/manifest.ts",
656
- "src/lifecycle/index.ts",
657
- "src/state/index.ts"
672
+ "src/adapters/antigravity/index.js",
673
+ "src/adapters/copy-tree.js",
674
+ "src/install/manifest.js",
675
+ "src/lifecycle/index.js",
676
+ "src/state/index.js"
658
677
  ],
659
678
  "source": {
660
- "file": "src/lifecycle/index.ts",
679
+ "file": "src/lifecycle/index.js",
661
680
  "pattern": "MCP_INDEX.md"
662
681
  }
663
682
  },
@@ -674,10 +693,10 @@
674
693
  "protect": null,
675
694
  "moments": [],
676
695
  "writers": [
677
- "src/runtime/knowledge/index-store.ts"
696
+ "src/runtime/knowledge/index-store.js"
678
697
  ],
679
698
  "source": {
680
- "file": "src/runtime/knowledge/index-store.ts",
699
+ "file": "src/runtime/knowledge/index-store.js",
681
700
  "pattern": "sha256"
682
701
  }
683
702
  },
@@ -694,10 +713,10 @@
694
713
  "protect": null,
695
714
  "moments": [],
696
715
  "writers": [
697
- "src/runtime/knowledge/index-store.ts"
716
+ "src/runtime/knowledge/index-store.js"
698
717
  ],
699
718
  "source": {
700
- "file": "src/runtime/knowledge/index-store.ts",
719
+ "file": "src/runtime/knowledge/index-store.js",
701
720
  "pattern": "sha256"
702
721
  }
703
722
  },
@@ -714,10 +733,10 @@
714
733
  "protect": null,
715
734
  "moments": [],
716
735
  "writers": [
717
- "src/runtime/worktree.ts"
736
+ "src/runtime/worktree.js"
718
737
  ],
719
738
  "source": {
720
- "file": "src/runtime/worktree.ts",
739
+ "file": "src/runtime/worktree.js",
721
740
  "pattern": "worktree"
722
741
  }
723
742
  },
@@ -734,7 +753,7 @@
734
753
  "protect": null,
735
754
  "moments": [],
736
755
  "writers": [
737
- "src/runtime/advice/config.ts"
756
+ "src/runtime/advice/config.js"
738
757
  ],
739
758
  "source": {
740
759
  "file": "core/harnesses/shared/hooks/policies/lib.sh",
@@ -754,7 +773,7 @@
754
773
  "protect": null,
755
774
  "moments": [],
756
775
  "writers": [
757
- "src/runtime/advice/config.ts"
776
+ "src/runtime/advice/config.js"
758
777
  ],
759
778
  "source": {
760
779
  "file": "core/harnesses/shared/hooks/policies/lib.sh",
@@ -776,7 +795,7 @@
776
795
  "uninstall"
777
796
  ],
778
797
  "writers": [
779
- "src/runtime/storage/upkeep.ts"
798
+ "src/runtime/storage/upkeep.js"
780
799
  ]
781
800
  },
782
801
  {
@@ -794,7 +813,7 @@
794
813
  "uninstall"
795
814
  ],
796
815
  "writers": [
797
- "src/runtime/storage/upkeep.ts"
816
+ "src/runtime/storage/upkeep.js"
798
817
  ]
799
818
  },
800
819
  {
@@ -812,7 +831,7 @@
812
831
  "uninstall"
813
832
  ],
814
833
  "writers": [
815
- "src/runtime/storage/upkeep.ts"
834
+ "src/runtime/storage/upkeep.js"
816
835
  ]
817
836
  },
818
837
  {
@@ -830,7 +849,7 @@
830
849
  "uninstall"
831
850
  ],
832
851
  "writers": [
833
- "src/runtime/storage/upkeep.ts"
852
+ "src/runtime/storage/upkeep.js"
834
853
  ]
835
854
  },
836
855
  {
@@ -848,7 +867,7 @@
848
867
  "uninstall"
849
868
  ],
850
869
  "writers": [
851
- "src/runtime/storage/upkeep.ts"
870
+ "src/runtime/storage/upkeep.js"
852
871
  ]
853
872
  },
854
873
  {
@@ -866,7 +885,7 @@
866
885
  "uninstall"
867
886
  ],
868
887
  "writers": [
869
- "src/runtime/storage/upkeep.ts"
888
+ "src/runtime/storage/upkeep.js"
870
889
  ]
871
890
  },
872
891
  {
@@ -884,7 +903,7 @@
884
903
  "uninstall"
885
904
  ],
886
905
  "writers": [
887
- "src/runtime/storage/upkeep.ts"
906
+ "src/runtime/storage/upkeep.js"
888
907
  ]
889
908
  },
890
909
  {
@@ -902,7 +921,7 @@
902
921
  "uninstall"
903
922
  ],
904
923
  "writers": [
905
- "src/runtime/storage/upkeep.ts"
924
+ "src/runtime/storage/upkeep.js"
906
925
  ]
907
926
  },
908
927
  {
@@ -920,7 +939,7 @@
920
939
  "uninstall"
921
940
  ],
922
941
  "writers": [
923
- "src/runtime/storage/upkeep.ts"
942
+ "src/runtime/storage/upkeep.js"
924
943
  ]
925
944
  },
926
945
  {
@@ -938,7 +957,7 @@
938
957
  "uninstall"
939
958
  ],
940
959
  "writers": [
941
- "src/state/run-lock.ts"
960
+ "src/state/run-lock.js"
942
961
  ]
943
962
  },
944
963
  {
@@ -956,7 +975,7 @@
956
975
  "uninstall"
957
976
  ],
958
977
  "writers": [
959
- "src/state/run-lock.ts"
978
+ "src/state/run-lock.js"
960
979
  ]
961
980
  }
962
981
  ],
@@ -990,67 +1009,75 @@
990
1009
  "reason": "agent context file (AGENTS.md or CLAUDE.md) managed block, owned by the install ledger"
991
1010
  },
992
1011
  {
993
- "file": "src/adapters/claude/index.ts",
1012
+ "file": "core/harnesses/shared/hooks/bridge/bridge.sh",
1013
+ "reason": "caller-named trace file, appended only when the caller sets DOFLOW_BRIDGE_TRACE"
1014
+ },
1015
+ {
1016
+ "file": "src/adapters/claude/index.js",
994
1017
  "reason": "harness configuration/projection owned by the install ledger"
995
1018
  },
996
1019
  {
997
- "file": "src/adapters/codex/config.ts",
1020
+ "file": "src/adapters/codex/config.js",
998
1021
  "reason": "harness configuration/projection owned by the install ledger"
999
1022
  },
1000
1023
  {
1001
- "file": "src/adapters/codex/hooks.ts",
1024
+ "file": "src/adapters/codex/hooks.js",
1002
1025
  "reason": "harness configuration/projection owned by the install ledger"
1003
1026
  },
1004
1027
  {
1005
- "file": "src/adapters/copilot/index.ts",
1028
+ "file": "src/adapters/copilot/index.js",
1006
1029
  "reason": "harness configuration/projection owned by the install ledger"
1007
1030
  },
1008
1031
  {
1009
- "file": "src/adapters/gemini/hooks.ts",
1032
+ "file": "src/adapters/gemini/hooks.js",
1010
1033
  "reason": "harness configuration/projection owned by the install ledger"
1011
1034
  },
1012
1035
  {
1013
- "file": "src/adapters/gemini/index.ts",
1036
+ "file": "src/adapters/gemini/index.js",
1014
1037
  "reason": "harness configuration/projection owned by the install ledger"
1015
1038
  },
1016
1039
  {
1017
- "file": "src/adapters/mcp-entries.ts",
1040
+ "file": "src/adapters/mcp-entries.js",
1018
1041
  "reason": "harness configuration/projection owned by the install ledger"
1019
1042
  },
1020
1043
  {
1021
- "file": "src/adapters/opencode/index.ts",
1044
+ "file": "src/adapters/opencode/index.js",
1022
1045
  "reason": "harness configuration/projection owned by the install ledger"
1023
1046
  },
1024
1047
  {
1025
- "file": "src/adapters/pi/index.ts",
1048
+ "file": "src/adapters/pi/index.js",
1026
1049
  "reason": "harness configuration/projection owned by the install ledger"
1027
1050
  },
1028
1051
  {
1029
- "file": "src/adapters/pi/mcp.ts",
1052
+ "file": "src/adapters/pi/mcp.js",
1030
1053
  "reason": "harness configuration/projection owned by the install ledger"
1031
1054
  },
1032
1055
  {
1033
- "file": "src/helper/marker-merge.ts",
1056
+ "file": "src/helper/marker-merge.js",
1034
1057
  "reason": "harness instruction file managed block (CLAUDE.md, AGENTS.md, GEMINI.md), owned by the install ledger"
1035
1058
  },
1036
1059
  {
1037
- "file": "src/release/sync-plugin-versions.ts",
1060
+ "file": "src/release/sync-plugin-versions.js",
1038
1061
  "reason": "maintainer release tool: rewrites the repo plugin manifests (no DoFlow root)"
1039
1062
  },
1040
1063
  {
1041
- "file": "src/runtime/decision-register.ts",
1064
+ "file": "src/release/build-package.js",
1065
+ "reason": "maintainer release tool: writes the staged npm package directory (no DoFlow root)"
1066
+ },
1067
+ {
1068
+ "file": "src/runtime/decision-register.js",
1042
1069
  "reason": "agent-docs deliverable (decisions register of a feature)"
1043
1070
  },
1044
1071
  {
1045
- "file": "src/runtime/history-compactor.ts",
1072
+ "file": "src/runtime/history-compactor.js",
1046
1073
  "reason": "agent-docs deliverable (decisions/history archive and artifact stub)"
1047
1074
  },
1048
1075
  {
1049
- "file": "src/runtime/lifecycle/intent-writer.ts",
1076
+ "file": "src/runtime/lifecycle/intent-writer.js",
1050
1077
  "reason": "agent-docs deliverable (agent-docs/intent/*.md)"
1051
1078
  },
1052
1079
  {
1053
- "file": "src/runtime/scaffold/generate.ts",
1080
+ "file": "src/runtime/scaffold/generate.js",
1054
1081
  "reason": "agent-docs deliverable (scaffold files and manifest)"
1055
1082
  }
1056
1083
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "description": "Verification check tiers, their fixed ordering, and which tiers each risk level requires. Plain JSON, matching capabilities.json and routes.json. Consumed by src/runtime/verification/engine.ts.",
3
+ "description": "Verification check tiers, their fixed ordering, and which tiers each risk level requires. Plain JSON, matching capabilities.json and routes.json. Consumed by src/runtime/verification/engine.js.",
4
4
  "policy": {
5
5
  "defaultRiskLevel": "MEDIUM",
6
6
  "emptyContractStatus": "INCONCLUSIVE",
@@ -72,8 +72,8 @@ feature_dir=$(printf '%s' "$resolved_json" | jq -r '.feature_dir // empty')
72
72
  # The projector lives in the JS runtime, not beside the helpers: G12 keeps this repo to one runtime
73
73
  # implementation, and Python in core/ is how a shadow tree grew the first time, one individually
74
74
  # defensible module at a time. render-audit.sh already shells out to node for the same reason.
75
- PROJECTOR="$repo_root/src/runtime/c4-project.ts"
76
- [ -f "$PROJECTOR" ] || PROJECTOR="${DOFLOW_CONFIG_DIR:-$HOME/.doflow}/runtime/src/runtime/c4-project.ts"
75
+ PROJECTOR="$repo_root/src/runtime/c4-project.js"
76
+ [ -f "$PROJECTOR" ] || PROJECTOR="${DOFLOW_CONFIG_DIR:-$HOME/.doflow}/runtime/src/runtime/c4-project.js"
77
77
  design_rel=$(printf '%s' "$resolved_json" | jq -r '.design // empty')
78
78
  [ -n "$feature_slug" ] || note "no-active-feature"
79
79
  [ -n "$feature_dir" ] || note "resolver-missing-feature-dir"
@@ -13,8 +13,10 @@
13
13
  # PATH pointing at any of them.
14
14
  #
15
15
  # Usage: doflow-run <verb> [args...]
16
+ # enforcement --harness <id> --policy <id> [--profile <id>] [--json]
16
17
  # Every verb accepts --json. Exit 0 = success, 1 = an actionable finding, 2 = usage or
17
- # resolution error. Arguments, stdin and exit status pass through the dispatcher unmodified —
18
+ # resolution error, 3 = context-pack overflow. Arguments, stdin and exit status pass through the
19
+ # dispatcher unmodified —
18
20
  # `sync-context` reads its block body from stdin, so anything that buffered or consumed it here
19
21
  # would break that verb rather than merely inconvenience it.
20
22
 
@@ -112,13 +114,14 @@ capture_failure() {
112
114
 
113
115
  # After a verb ran: a status outside {0, 1, 2} is a crash worth recording (a signal, a runtime that
114
116
  # died), minus what is not DoFlow's fault (DEC-031): 127 (command not found), 130, 141 and 143
115
- # (interrupted, broken pipe, terminated) and the task-not-found status 3 of `task-brief`. A Node
116
- # crash exits 1 and is recorded by the CLI itself, so it is never counted twice.
117
+ # (interrupted, broken pipe, terminated), task-not-found status 3 of `task-brief`, and overflow
118
+ # status 3 of `context-pack`. A Node crash exits 1 and is recorded by the CLI itself, so it is
119
+ # never counted twice.
117
120
  capture_exit_status() {
118
121
  local verb="${1:-}" status="${2:-0}"
119
122
  case "$status" in
120
123
  0|1|2|127|130|141|143) return 0 ;;
121
- 3) [ "$verb" = "task-brief" ] && return 0 ;;
124
+ 3) case "$verb" in task-brief|context-pack) return 0 ;; esac ;;
122
125
  esac
123
126
  capture_failure "$verb" "exit-$status" "$status"
124
127
  return 0
@@ -358,7 +361,7 @@ Workflow and evidence:
358
361
  claim record or update a claim and its support state
359
362
  readiness evaluate readiness; return state and missing items
360
363
  context-pack emit the compiled context pack for a stage
361
- retrieval-plan declare the needs a stage will resolve, then report every declared item
364
+ retrieval-plan declare the needs a stage will resolve, attempt each need, then report every declared item
362
365
  outcome record a task's terminal state with its basis, or show what was recorded
363
366
  scaffold emit the code scaffold the active feature's artifacts imply
364
367
  decision register, list or compact the active feature's decisions
@@ -379,6 +382,7 @@ Observability:
379
382
  discover missed opportunities in recorded runs
380
383
  inventory both scopes at once: shadowed assets, drift, unmanaged contenders
381
384
  capabilities provider resolution
385
+ enforcement verified lifecycle policy coverage
382
386
  doctor installation and provider health
383
387
  storage report stored data and its retention bounds
384
388
  EOF
@@ -478,7 +482,7 @@ shell_helper_for() {
478
482
  is_node_verb() {
479
483
  case "$1" in
480
484
  classify|workflow|route|evidence|claim|readiness|context-pack|retrieval-plan|outcome|scaffold|decision|followup|lifecycle|goal|failure|verify|recover|leak-scan|\
481
- trace|stats|indicators|discover|inventory|capabilities|doctor|orchestrate|research-request|task-attempt|retrieve|model-role|storage|brief-tools|advise) return 0 ;;
485
+ trace|stats|indicators|discover|inventory|capabilities|enforcement|doctor|orchestrate|research-request|task-attempt|retrieve|model-role|storage|brief-tools|advise) return 0 ;;
482
486
  *) return 1 ;;
483
487
  esac
484
488
  }
@@ -64,12 +64,12 @@ a `design.md` for it invents an artifact its workflow never reads.
64
64
  ```bash
65
65
  "$DOFLOW" context-pack --task-id "<task id>" --json
66
66
  ```
67
- **Exit 1 means the pack came back empty.** This early in the chain that is ordinary rather than a
68
- problem — a feature reaching design for the first time has nothing recorded against it yet, and
69
- `do-brainstorm` may not have batched evidence at all. Treat it the same way step 3's precondition
70
- treats a missing `requirement.md`: note the gap in this stage's report and fall through to
71
- reading `requirement.md` directly, which this step always did. When the pack is non-empty, read
72
- it alongside `requirement.md` for the user stories, FRs, and NFRs the design must serve.
67
+ **Exit 1 means the pack came back empty; exit 3 means overflow: the pack is complete, act on
68
+ `overflowAction.message` and report the gap.** Early in the chain an empty pack is ordinary — a
69
+ new feature has nothing recorded yet, and `do-brainstorm` may not have batched evidence. Treat
70
+ it like step 3's precondition treats missing `requirement.md`: note the gap in this stage's report
71
+ and fall through to reading `requirement.md` directly. When non-empty, read it alongside
72
+ `requirement.md` for the user stories, FRs, and NFRs the design must serve.
73
73
 
74
74
  5. **Design** — per `--type` (architecture/api/component/database), produce the system-shape
75
75
  decisions: a C4 System Context diagram (actors + external systems this feature touches) and,
@@ -163,16 +163,17 @@ Branch on the returned `outcome` field, not the exit code.
163
163
  ```bash
164
164
  "$DOFLOW" context-pack --task-id "<task id>" --json
165
165
  ```
166
- **Exit 1 means the pack came back empty.** Unlike design and plan, this call sits right at the
167
- point a subagent is about to be handed the task and told to act — so proceeding as though
168
- nothing happened is exactly the failure this feature exists to remove. An empty pack here can
169
- still be legitimate: step 4 lets a task reach `READY` on `callerAsserted` inputs alone, which
170
- link no evidence. Do not withhold dispatch on this alone — readiness already governs whether the
171
- task may be worked. Instead, carry the empty result into the group's brief itself: state in the
172
- dispatch, next to the task-brief output, that no prior evidence or claims were compiled for this
173
- task, so the subagent works from the plan/design text `task-brief` already supplies without
174
- assuming a grounding evidence base that isn't there. A non-empty pack is included in the brief
175
- as the subagent's prior context, same handoff.
166
+ **Exit 1 means the pack came back empty; exit 3 means overflow: the pack is complete, act on
167
+ `overflowAction.message` and report the gap.**
168
+ This call sits right at subagent dispatch — proceeding as though nothing happened is the defect
169
+ this feature removes. An empty pack here can still be legitimate: step 4 lets a task reach
170
+ `READY` on `callerAsserted` inputs alone, which link no evidence. Do not withhold dispatch on
171
+ this alone — readiness already governs whether the task may be worked. Instead, carry the empty
172
+ result into the group's brief itself: state in the dispatch, next to the task-brief output, that
173
+ no prior evidence or claims were compiled for this task, so the subagent works from the
174
+ plan/design text `task-brief` already supplies without assuming a grounding evidence base that
175
+ isn't there. A non-empty pack is included in the brief as the subagent's prior context, same
176
+ handoff.
176
177
  - Claim each task before dispatch and finish it with evidence: `references/task_attempts.md`.
177
178
  - Dispatch tasks to appropriate specialist archetypes:
178
179
  - Architecture & Schema $\rightarrow$ `system-architect`