cohorte 2.10.0 → 3.0.0-dev.0

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 (211) hide show
  1. package/README.md +7 -0
  2. package/assets/manifest.json +193 -0
  3. package/assets/migrations/config/README.md +12 -0
  4. package/assets/migrations/state/0001_init.sql +154 -0
  5. package/assets/prompts/README.md +11 -0
  6. package/assets/prompts/agents/fixer.md +7 -0
  7. package/assets/prompts/agents/implementer.md +12 -0
  8. package/assets/prompts/agents/reviewer.md +8 -0
  9. package/assets/prompts/agents/security-reviewer.md +7 -0
  10. package/assets/prompts/phases/build.md +5 -0
  11. package/assets/prompts/phases/review.md +5 -0
  12. package/assets/prompts/phases/test.md +5 -0
  13. package/assets/prompts/system.md +11 -0
  14. package/assets/schemas/agent-output.schema.json +225 -0
  15. package/assets/schemas/auth-status.schema.json +87 -0
  16. package/assets/schemas/command-result.schema.json +192 -0
  17. package/assets/schemas/commands.schema.json +952 -0
  18. package/assets/schemas/config.schema.json +2259 -0
  19. package/assets/schemas/doctor-report.schema.json +104 -0
  20. package/assets/schemas/events.schema.json +8514 -0
  21. package/assets/schemas/fake-script.schema.json +549 -0
  22. package/assets/schemas/inspect.schema.json +3133 -0
  23. package/assets/schemas/manifest.schema.json +79 -0
  24. package/assets/schemas/ownership.schema.json +52 -0
  25. package/assets/schemas/policy-verdict.schema.json +282 -0
  26. package/assets/schemas/project-model.schema.json +783 -0
  27. package/assets/schemas/project-status.schema.json +217 -0
  28. package/assets/schemas/reconcile-plan.schema.json +155 -0
  29. package/assets/schemas/run-diff.schema.json +177 -0
  30. package/assets/schemas/run-snapshot-manifest.schema.json +2104 -0
  31. package/assets/schemas/run-state.schema.json +1755 -0
  32. package/assets/schemas/runtime-capabilities.schema.json +1545 -0
  33. package/assets/schemas/sandbox-capabilities.schema.json +116 -0
  34. package/assets/schemas/skill.schema.json +87 -0
  35. package/assets/schemas/spec.schema.json +202 -0
  36. package/assets/schemas/tool-catalogue.schema.json +655 -0
  37. package/assets/schemas/trust-record.schema.json +38 -0
  38. package/assets/skills/README.md +9 -0
  39. package/assets/skills/inspect-surface.md +4 -0
  40. package/dist/agent-host.mjs +50 -0
  41. package/dist/agent-host.mjs.map +1 -0
  42. package/dist/bundle-manifest.json +102 -0
  43. package/dist/chunks/__host-DgGPyco9.mjs +18 -0
  44. package/dist/chunks/__host-DgGPyco9.mjs.map +1 -0
  45. package/dist/chunks/approve-Cv135UqI.mjs +19 -0
  46. package/dist/chunks/approve-Cv135UqI.mjs.map +1 -0
  47. package/dist/chunks/auth-BT5oVp76.mjs +132 -0
  48. package/dist/chunks/auth-BT5oVp76.mjs.map +1 -0
  49. package/dist/chunks/auth-D8rCVY33.mjs +84 -0
  50. package/dist/chunks/auth-D8rCVY33.mjs.map +1 -0
  51. package/dist/chunks/brainstorm-CU10T1tm.mjs +7 -0
  52. package/dist/chunks/brainstorm-CU10T1tm.mjs.map +1 -0
  53. package/dist/chunks/cancel-KV_cpsqS.mjs +15 -0
  54. package/dist/chunks/cancel-KV_cpsqS.mjs.map +1 -0
  55. package/dist/chunks/canonical-C8UxeEmB.mjs +57 -0
  56. package/dist/chunks/canonical-C8UxeEmB.mjs.map +1 -0
  57. package/dist/chunks/catalogue-BvwSrM_j.mjs +1549 -0
  58. package/dist/chunks/catalogue-BvwSrM_j.mjs.map +1 -0
  59. package/dist/chunks/compose-Cr0hP0qm.mjs +7303 -0
  60. package/dist/chunks/compose-Cr0hP0qm.mjs.map +1 -0
  61. package/dist/chunks/config-DefHA2Lw.mjs +96 -0
  62. package/dist/chunks/config-DefHA2Lw.mjs.map +1 -0
  63. package/dist/chunks/contract-B0ra2-bm.mjs +295 -0
  64. package/dist/chunks/contract-B0ra2-bm.mjs.map +1 -0
  65. package/dist/chunks/contract-vYbwYr0Y.mjs +123 -0
  66. package/dist/chunks/contract-vYbwYr0Y.mjs.map +1 -0
  67. package/dist/chunks/deny-ClTxSvHJ.mjs +15 -0
  68. package/dist/chunks/deny-ClTxSvHJ.mjs.map +1 -0
  69. package/dist/chunks/diff-Qw0II0sj.mjs +101 -0
  70. package/dist/chunks/diff-Qw0II0sj.mjs.map +1 -0
  71. package/dist/chunks/discover-30Ciya_0.mjs +20 -0
  72. package/dist/chunks/discover-30Ciya_0.mjs.map +1 -0
  73. package/dist/chunks/doctor-DfCrKpfT.mjs +222 -0
  74. package/dist/chunks/doctor-DfCrKpfT.mjs.map +1 -0
  75. package/dist/chunks/fix-D4Tj8RVA.mjs +18 -0
  76. package/dist/chunks/fix-D4Tj8RVA.mjs.map +1 -0
  77. package/dist/chunks/gc-BBXlBF5w.mjs +161 -0
  78. package/dist/chunks/gc-BBXlBF5w.mjs.map +1 -0
  79. package/dist/chunks/init-Okz4mlhW.mjs +30 -0
  80. package/dist/chunks/init-Okz4mlhW.mjs.map +1 -0
  81. package/dist/chunks/inspect-Buby4cQD.mjs +22 -0
  82. package/dist/chunks/inspect-Buby4cQD.mjs.map +1 -0
  83. package/dist/chunks/logs-Giq5sUau.mjs +25 -0
  84. package/dist/chunks/logs-Giq5sUau.mjs.map +1 -0
  85. package/dist/chunks/migrate-DRoFUg53.mjs +19 -0
  86. package/dist/chunks/migrate-DRoFUg53.mjs.map +1 -0
  87. package/dist/chunks/models-Btp6X2YZ.mjs +24 -0
  88. package/dist/chunks/models-Btp6X2YZ.mjs.map +1 -0
  89. package/dist/chunks/pause-BASBfKLO.mjs +16 -0
  90. package/dist/chunks/pause-BASBfKLO.mjs.map +1 -0
  91. package/dist/chunks/policy-DUIgzF3W.mjs +139 -0
  92. package/dist/chunks/policy-DUIgzF3W.mjs.map +1 -0
  93. package/dist/chunks/providers-Dx78imKj.mjs +19 -0
  94. package/dist/chunks/providers-Dx78imKj.mjs.map +1 -0
  95. package/dist/chunks/reconcile-BfD785gd.mjs +26 -0
  96. package/dist/chunks/reconcile-BfD785gd.mjs.map +1 -0
  97. package/dist/chunks/render-DyZr5Lgi.mjs +53 -0
  98. package/dist/chunks/render-DyZr5Lgi.mjs.map +1 -0
  99. package/dist/chunks/resume-GJQRb2Eb.mjs +15 -0
  100. package/dist/chunks/resume-GJQRb2Eb.mjs.map +1 -0
  101. package/dist/chunks/retry-CLrUem1H.mjs +15 -0
  102. package/dist/chunks/retry-CLrUem1H.mjs.map +1 -0
  103. package/dist/chunks/review-BDdjb6kB.mjs +17 -0
  104. package/dist/chunks/review-BDdjb6kB.mjs.map +1 -0
  105. package/dist/chunks/run-CgTWYlcd.mjs +82 -0
  106. package/dist/chunks/run-CgTWYlcd.mjs.map +1 -0
  107. package/dist/chunks/run-tool-C3rAv4XF.mjs +26 -0
  108. package/dist/chunks/run-tool-C3rAv4XF.mjs.map +1 -0
  109. package/dist/chunks/schema-C9QbUW4H.mjs +578 -0
  110. package/dist/chunks/schema-C9QbUW4H.mjs.map +1 -0
  111. package/dist/chunks/send-BdnJ85Nz.mjs +19 -0
  112. package/dist/chunks/send-BdnJ85Nz.mjs.map +1 -0
  113. package/dist/chunks/ship-DTuLGoaJ.mjs +19 -0
  114. package/dist/chunks/ship-DTuLGoaJ.mjs.map +1 -0
  115. package/dist/chunks/shutdown-BM92Iyv2.mjs +15 -0
  116. package/dist/chunks/shutdown-BM92Iyv2.mjs.map +1 -0
  117. package/dist/chunks/skip-DZG5kpcH.mjs +18 -0
  118. package/dist/chunks/skip-DZG5kpcH.mjs.map +1 -0
  119. package/dist/chunks/spec-Bq0P3jVh.mjs +20 -0
  120. package/dist/chunks/spec-Bq0P3jVh.mjs.map +1 -0
  121. package/dist/chunks/src-CId6kMsY.mjs +1689 -0
  122. package/dist/chunks/src-CId6kMsY.mjs.map +1 -0
  123. package/dist/chunks/src-CfAOde7C.mjs +5403 -0
  124. package/dist/chunks/src-CfAOde7C.mjs.map +1 -0
  125. package/dist/chunks/src-Cu3TxNob.mjs +783 -0
  126. package/dist/chunks/src-Cu3TxNob.mjs.map +1 -0
  127. package/dist/chunks/src-DcU4IXMe.mjs +117 -0
  128. package/dist/chunks/src-DcU4IXMe.mjs.map +1 -0
  129. package/dist/chunks/src-JxawBQBn.mjs +446 -0
  130. package/dist/chunks/src-JxawBQBn.mjs.map +1 -0
  131. package/dist/chunks/src-s7YRvk0t.mjs +2116 -0
  132. package/dist/chunks/src-s7YRvk0t.mjs.map +1 -0
  133. package/dist/chunks/status-SMjiOMYy.mjs +29 -0
  134. package/dist/chunks/status-SMjiOMYy.mjs.map +1 -0
  135. package/dist/chunks/tail-BuhT-2PH.mjs +25 -0
  136. package/dist/chunks/tail-BuhT-2PH.mjs.map +1 -0
  137. package/dist/chunks/update-BXIppsbi.mjs +16 -0
  138. package/dist/chunks/update-BXIppsbi.mjs.map +1 -0
  139. package/dist/cli.mjs +175 -0
  140. package/dist/cli.mjs.map +1 -0
  141. package/package.json +17 -32
  142. package/CHANGELOG.md +0 -1453
  143. package/bin/cli.js +0 -812
  144. package/bin/report.js +0 -141
  145. package/core/adapter/render.js +0 -389
  146. package/core/agents/implementer.template.md +0 -142
  147. package/core/agents/profile-reader.md +0 -50
  148. package/core/agents/release.md +0 -58
  149. package/core/agents/review.md +0 -179
  150. package/core/commands/cohorte-align-ds.md +0 -33
  151. package/core/commands/cohorte-audit.md +0 -58
  152. package/core/commands/cohorte-brainstorm.md +0 -70
  153. package/core/commands/cohorte-build.md +0 -219
  154. package/core/commands/cohorte-doctor.md +0 -170
  155. package/core/commands/cohorte-fix.md +0 -80
  156. package/core/commands/cohorte-fleet.md +0 -103
  157. package/core/commands/cohorte-init-pipeline.md +0 -31
  158. package/core/commands/cohorte-intake.md +0 -92
  159. package/core/commands/cohorte-patch.md +0 -118
  160. package/core/commands/cohorte-refactor.md +0 -59
  161. package/core/commands/cohorte-retro.md +0 -85
  162. package/core/commands/cohorte-review.md +0 -270
  163. package/core/commands/cohorte-ship.md +0 -122
  164. package/core/commands/cohorte-spec.md +0 -101
  165. package/core/commands/cohorte-update-pipeline.md +0 -134
  166. package/core/hooks/gate.py +0 -580
  167. package/core/runtimes/claude.json +0 -74
  168. package/core/runtimes/codex.json +0 -83
  169. package/core/runtimes/cursor.json +0 -76
  170. package/core/runtimes/gemini.json +0 -76
  171. package/core/runtimes/opencode.json +0 -73
  172. package/core/templates/agent-handoff.md +0 -34
  173. package/core/templates/brainstorm-return.md +0 -36
  174. package/core/templates/decisions.template.md +0 -42
  175. package/core/templates/design-brief.md +0 -44
  176. package/core/templates/patch.template.md +0 -86
  177. package/core/templates/pr-body.md +0 -25
  178. package/core/templates/review-feedback.md +0 -38
  179. package/core/templates/spec.template.md +0 -87
  180. package/core/templates/steps/init-pipeline/01-detect-stack.md +0 -44
  181. package/core/templates/steps/init-pipeline/02-interview-gaps.md +0 -55
  182. package/core/templates/steps/init-pipeline/03-draft-profile.md +0 -10
  183. package/core/templates/steps/init-pipeline/04-write-render.md +0 -115
  184. package/core/templates/steps/init-pipeline/05-report.md +0 -12
  185. package/core/workflows/audit.js +0 -240
  186. package/core/workflows/loop.js +0 -641
  187. package/core/workflows/refactor.js +0 -276
  188. package/core/workflows/review.js +0 -456
  189. package/install.ps1 +0 -103
  190. package/install.sh +0 -114
  191. package/lib/doctor.js +0 -504
  192. package/lib/runtime.js +0 -134
  193. package/lib/versions.js +0 -149
  194. package/lib/yaml.js +0 -129
  195. package/profile/PIPELINE.template.md +0 -251
  196. package/profile/SCHEMA.md +0 -698
  197. package/profile/cohorte.config.template.yaml +0 -43
  198. package/scripts/assert-gate-hook.mjs +0 -75
  199. package/scripts/kanban-move.sh +0 -313
  200. package/scripts/metrics/collect.mjs +0 -531
  201. package/scripts/metrics/prices.json +0 -42
  202. package/scripts/new-feature.sh.template +0 -98
  203. package/scripts/preflight.sh +0 -124
  204. package/scripts/remove-feature.sh.template +0 -56
  205. package/scripts/test-adapter.mjs +0 -368
  206. package/scripts/test-gate.mjs +0 -428
  207. package/scripts/test-kanban.mjs +0 -304
  208. package/scripts/test-lib.mjs +0 -310
  209. package/scripts/test-metrics.mjs +0 -156
  210. package/scripts/test-workflows.mjs +0 -758
  211. package/scripts/validate-core.mjs +0 -320
package/README.md CHANGED
@@ -13,6 +13,13 @@
13
13
 
14
14
  </div>
15
15
 
16
+ > **V3 migration status:** the V3 runtime-independent pipeline is under active migration. V2 sources are retained
17
+ > under [`legacy/v2`](legacy/v2); V3 builds are immutable, snapshot-pinned and can be exercised offline with the
18
+ > fake runtime. See [`docs/v3`](docs/v3/PLAN.md) for the implementation plan and release gates.
19
+
20
+ For maintainers, see the [maintenance and release guide](docs/guide/maintainers.md) for the architecture, test
21
+ matrix, troubleshooting, PR workflow and npm/GitHub release procedure.
22
+
16
23
  A **portable, stack-agnostic multi-agent pipeline** for your coding agent — Claude Code, Codex CLI,
17
24
  Cursor, Gemini CLI or OpenCode. Install it once globally, then one command per project
18
25
  (`/cohorte-init-pipeline`) adapts it to that project's stack.
@@ -0,0 +1,193 @@
1
+ {
2
+ "manifestVersion": 1,
3
+ "cohorteVersion": "3.0.0-dev.0",
4
+ "algorithm": "sha256",
5
+ "treeSha256": "6858783a1463d0926c2c0487c6542ec35a52ee0a6bc2b4e11ffe5614b5b826fc",
6
+ "files": [
7
+ {
8
+ "path": "migrations/config/README.md",
9
+ "size": 800,
10
+ "sha256": "0581614159274a708a345fd274b354bbeb6890cc506c14ee79aebc9ea7bf75dc"
11
+ },
12
+ {
13
+ "path": "migrations/state/0001_init.sql",
14
+ "size": 12500,
15
+ "sha256": "68fc178ae3ab37546f92a198612705c73757294a7ded00f838e1b14364b0885d"
16
+ },
17
+ {
18
+ "path": "prompts/README.md",
19
+ "size": 743,
20
+ "sha256": "f1cd0d36eb65f1a3fdfd86d4b4fbef94d01cb1c64c9b69777d3e3efe5fb0d8bf"
21
+ },
22
+ {
23
+ "path": "prompts/agents/fixer.md",
24
+ "size": 437,
25
+ "sha256": "05bf785d6572519c65510aad3cd6681b80c3b39a601c1f06ad16ac6c69fe1576"
26
+ },
27
+ {
28
+ "path": "prompts/agents/implementer.md",
29
+ "size": 572,
30
+ "sha256": "61818393d6374a269a2855ceef550aa098aa91f2c2f3c7bb240a0907db270c55"
31
+ },
32
+ {
33
+ "path": "prompts/agents/reviewer.md",
34
+ "size": 476,
35
+ "sha256": "8d3bc1626687ac0b57b0e9c0e6fcb417eedfe03483597894c1f807e47877cea1"
36
+ },
37
+ {
38
+ "path": "prompts/agents/security-reviewer.md",
39
+ "size": 376,
40
+ "sha256": "081771595c2fcb4a7dfe61c484849efa30f39e33cb3ebe28120a0dc0d552562c"
41
+ },
42
+ {
43
+ "path": "prompts/phases/build.md",
44
+ "size": 286,
45
+ "sha256": "11eb5fe4c016808d8a2ea51ad0f1aeb25a463bce51efba1b8c517ff817fb905b"
46
+ },
47
+ {
48
+ "path": "prompts/phases/review.md",
49
+ "size": 284,
50
+ "sha256": "42dcd924272996207aa3a6ef94898596f85f7665c6904e4c690b67d7bd978405"
51
+ },
52
+ {
53
+ "path": "prompts/phases/test.md",
54
+ "size": 267,
55
+ "sha256": "7cf4341667ee619a4c7838d449819dc8bb7869058ae68fe9520abad8fc8bdbad"
56
+ },
57
+ {
58
+ "path": "prompts/system.md",
59
+ "size": 692,
60
+ "sha256": "d05b7408e95682125dae33318b0ba806daa244975b971d0bca1bd4bc981c1e92"
61
+ },
62
+ {
63
+ "path": "schemas/agent-output.schema.json",
64
+ "size": 4590,
65
+ "sha256": "3c0b91b2330d497d952bf47c4295367c99b98e5c53d4c3f6a2dbc7ea09395ed9"
66
+ },
67
+ {
68
+ "path": "schemas/auth-status.schema.json",
69
+ "size": 1947,
70
+ "sha256": "828168eba9417877bfd23ecd9060354eb6c12975d7ba43a4af52893f5ca345bd"
71
+ },
72
+ {
73
+ "path": "schemas/command-result.schema.json",
74
+ "size": 3987,
75
+ "sha256": "6948a703d8cfbb827850d756710b3d5c989ed1c87518f5b45c5d56bc6534162f"
76
+ },
77
+ {
78
+ "path": "schemas/commands.schema.json",
79
+ "size": 23292,
80
+ "sha256": "7e573865f4b201d22cea48327881d46e01fd5d7520374acbd3bd957b836706fd"
81
+ },
82
+ {
83
+ "path": "schemas/config.schema.json",
84
+ "size": 63320,
85
+ "sha256": "8f8187f9eadce71291c8221f317d23911542774711023e958871af641867912c"
86
+ },
87
+ {
88
+ "path": "schemas/doctor-report.schema.json",
89
+ "size": 2074,
90
+ "sha256": "7f9e2186b6b43c2398c9f6cc55051be5f46c3685218b0648bc1b447a7feecc12"
91
+ },
92
+ {
93
+ "path": "schemas/events.schema.json",
94
+ "size": 251485,
95
+ "sha256": "95aa94c7378486b73ed9d2d71abe46b757c7c2174759455cbfe927df36fbf9b7"
96
+ },
97
+ {
98
+ "path": "schemas/fake-script.schema.json",
99
+ "size": 14080,
100
+ "sha256": "1a98dd73d99a457ff79ea0648029207a8fb59b15856693c72577abdbf5cbedd7"
101
+ },
102
+ {
103
+ "path": "schemas/inspect.schema.json",
104
+ "size": 99921,
105
+ "sha256": "122d7bc2c60fc24db0bfea6baf658470901138c2a62074aab12dd0cd7f1b80f4"
106
+ },
107
+ {
108
+ "path": "schemas/manifest.schema.json",
109
+ "size": 1651,
110
+ "sha256": "fb18ed78b25079fb120f6002b8eb5b5963f4fea78a231e0d69f62b16262618eb"
111
+ },
112
+ {
113
+ "path": "schemas/ownership.schema.json",
114
+ "size": 1253,
115
+ "sha256": "00110058df20db669cf4f1ad79038b7b91c3b625e0e2469a549b00506694cd4e"
116
+ },
117
+ {
118
+ "path": "schemas/policy-verdict.schema.json",
119
+ "size": 6630,
120
+ "sha256": "1edda749d3dcdecb625730c1e55e9fd31e335d08968040db5e090b31e98b57fd"
121
+ },
122
+ {
123
+ "path": "schemas/project-model.schema.json",
124
+ "size": 17899,
125
+ "sha256": "195f0d0d735dfb1cef324ff5fe46e527bfee799a058ea8e97bf54d94e60c0163"
126
+ },
127
+ {
128
+ "path": "schemas/project-status.schema.json",
129
+ "size": 5545,
130
+ "sha256": "e6abef793f7c29f897e765b34ab79b1d6f3aa48e5cf9686f8c6e78694914811e"
131
+ },
132
+ {
133
+ "path": "schemas/reconcile-plan.schema.json",
134
+ "size": 3649,
135
+ "sha256": "c52999f1813c20ed1acafad261b94e5931c4833c2fea2ce6e8963bb832d7fcaa"
136
+ },
137
+ {
138
+ "path": "schemas/run-diff.schema.json",
139
+ "size": 4051,
140
+ "sha256": "c4eaaade2682f05357d2887f20cc35649692f8db3e272c2388a4d35f8797bbfd"
141
+ },
142
+ {
143
+ "path": "schemas/run-snapshot-manifest.schema.json",
144
+ "size": 57820,
145
+ "sha256": "a3cf53b3b88fefcdacbc15178db8e0d062ee2e0884b4d0fc23c2812ba5c60c6b"
146
+ },
147
+ {
148
+ "path": "schemas/run-state.schema.json",
149
+ "size": 50948,
150
+ "sha256": "1d5a0b2d0eacf4e000475a4e162b7e600478b99f435a0f0b4d87c6b68dbe19f1"
151
+ },
152
+ {
153
+ "path": "schemas/runtime-capabilities.schema.json",
154
+ "size": 33246,
155
+ "sha256": "0c718764ac6b3417017f3a8106b687da408f906240f2d3ee8587738a1d679ebb"
156
+ },
157
+ {
158
+ "path": "schemas/sandbox-capabilities.schema.json",
159
+ "size": 2035,
160
+ "sha256": "e4289a06bb07016d3a7c51cfb97c2a0e7bc2a08c273d038eae1a85231881cb8e"
161
+ },
162
+ {
163
+ "path": "schemas/skill.schema.json",
164
+ "size": 1751,
165
+ "sha256": "f3af598c0fe93e658888f8e9834bee7ffdd550abc34fcb71e7799accf75d6040"
166
+ },
167
+ {
168
+ "path": "schemas/spec.schema.json",
169
+ "size": 4528,
170
+ "sha256": "1953464cd0b6cbf079715aa9d9608d727d9a4c1192840e21bdf53a8aca989cf2"
171
+ },
172
+ {
173
+ "path": "schemas/tool-catalogue.schema.json",
174
+ "size": 16580,
175
+ "sha256": "89a2a4486786126a8dbff3955aa8d4849e9c49e2da7bdc623fd07518a379388f"
176
+ },
177
+ {
178
+ "path": "schemas/trust-record.schema.json",
179
+ "size": 843,
180
+ "sha256": "7a0a2bf557d8fec22a7b8acbe5af932e5c96432a76915f6e1a136e47b6a2208d"
181
+ },
182
+ {
183
+ "path": "skills/README.md",
184
+ "size": 465,
185
+ "sha256": "2523ecede1932d3175d197f7fb19dc0d1fd7b2d0719d4520e627d5c201a27492"
186
+ },
187
+ {
188
+ "path": "skills/inspect-surface.md",
189
+ "size": 234,
190
+ "sha256": "a4bea5894563c243e561bebcf610021756318ff888a524e108c8af5f991a9b87"
191
+ }
192
+ ]
193
+ }
@@ -0,0 +1,12 @@
1
+ # migrations/config/
2
+
3
+ Configuration migrations (DESIGN §14 ".cohorte/", spec §14): numbered scripts that upgrade an older
4
+ `.cohorte/config.yaml` (or the state schema it points at) forward, never in place without a backup. State-store
5
+ migrations live beside the store contract (`@cohorte/persistence`); this directory is for the PROJECT
6
+ CONFIGURATION file itself, run by `cohorte migrate`.
7
+
8
+ `scripts/embed-assets.ts` copies this whole directory (and its sibling `migrations/` roots, if any are added
9
+ later) into `apps/cli/assets/migrations/**` and records it in `assets/manifest.json` (DESIGN 1.4 step 2).
10
+
11
+ This directory is empty at G0 on purpose: the config schema has not moved yet, so there is nothing to migrate
12
+ from. The first entry lands with the unit that first breaks config compatibility.
@@ -0,0 +1,154 @@
1
+ -- Cohorte state store, schema 1 (DESIGN 2.4). FROZEN in Wave 0: a change is a NEW numbered migration.
2
+ -- Every table is STRICT, every JSON column carries CHECK (json_valid(...)), and every table is column-for-column
3
+ -- equal to its record type (packages/persistence/src/records.ts, TABLE_COLUMNS; proved by the DDL parity test).
4
+ -- The migrator runs this file inside one transaction and records it in `migrations` itself.
5
+
6
+ CREATE TABLE migrations ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, sha256 TEXT NOT NULL, applied_at TEXT NOT NULL,
7
+ cohorte_version TEXT NOT NULL ) STRICT;
8
+
9
+ CREATE TABLE meta ( key TEXT PRIMARY KEY, value TEXT NOT NULL ) STRICT, WITHOUT ROWID;
10
+
11
+ -- profile: NO SQL CHECK. ADR-0018 is provisional: the known profiles are validated in TypeScript (table registry), so a
12
+ -- fourth profile is not a state migration.
13
+ -- The six columns marked (*) are NULL while the run is IDLE: only the HOST can compute them, behind the T04 guards
14
+ -- snapshot.captured, runtime.pin-valid and repo.base-resolved, and it fills them in the T04 transaction together with
15
+ -- pipeline.started. The CLI writes what it knows when it creates the row: profile, table_version, spec, title,
16
+ -- base_branch (the requested one) and pinned_install_dir (NOT NULL: a run belongs to its install from its first byte).
17
+ CREATE TABLE runs ( run_id TEXT PRIMARY KEY, profile TEXT NOT NULL, table_version INTEGER NOT NULL,
18
+ spec_id TEXT NOT NULL, spec_sha256 TEXT NOT NULL, title TEXT NOT NULL, state TEXT NOT NULL, resume_to TEXT,
19
+ stop_json TEXT CHECK (stop_json IS NULL OR json_valid(stop_json)),
20
+ last_error_json TEXT CHECK (last_error_json IS NULL OR json_valid(last_error_json)),
21
+ last_sequence INTEGER NOT NULL DEFAULT 0, last_hash TEXT NOT NULL DEFAULT '', version INTEGER NOT NULL DEFAULT 0,
22
+ snapshot_digest TEXT /* (*) */,
23
+ runtime_pin_json TEXT /* (*) */ CHECK (runtime_pin_json IS NULL OR json_valid(runtime_pin_json)),
24
+ plan_json TEXT /* (*) */ CHECK (plan_json IS NULL OR json_valid(plan_json)),
25
+ pinned_install_dir TEXT NOT NULL,
26
+ base_branch TEXT NOT NULL, base_sha TEXT /* (*) */, integration_branch TEXT /* (*) */, integration_head TEXT,
27
+ approved_tree_digest TEXT,
28
+ skip_waivers_json TEXT CHECK (skip_waivers_json IS NULL OR json_valid(skip_waivers_json)),
29
+ zones_json TEXT /* (*) */ CHECK (zones_json IS NULL OR json_valid(zones_json)),
30
+ host_id TEXT, host_pid INTEGER, host_start_token TEXT, host_heartbeat_at TEXT,
31
+ cancel_requested INTEGER NOT NULL DEFAULT 0 CHECK (cancel_requested IN (0, 1)),
32
+ pause_requested INTEGER NOT NULL DEFAULT 0 CHECK (pause_requested IN (0, 1)),
33
+ schema_version INTEGER NOT NULL, cohorte_version TEXT NOT NULL,
34
+ purgeable INTEGER NOT NULL DEFAULT 0 CHECK (purgeable IN (0, 1)),
35
+ started_at TEXT NOT NULL, updated_at TEXT NOT NULL, ended_at TEXT,
36
+ CHECK (state IN ('IDLE','CANCELLED','FAILED') OR (snapshot_digest IS NOT NULL AND runtime_pin_json IS NOT NULL
37
+ AND plan_json IS NOT NULL AND base_sha IS NOT NULL AND integration_branch IS NOT NULL AND zones_json IS NOT NULL))
38
+ ) STRICT;
39
+ CREATE INDEX runs_by_state ON runs(state, started_at);
40
+
41
+ CREATE TABLE events ( run_id TEXT NOT NULL REFERENCES runs(run_id), sequence INTEGER NOT NULL CHECK (sequence >= 1),
42
+ event_id TEXT NOT NULL UNIQUE, type TEXT NOT NULL, timestamp TEXT NOT NULL, source TEXT NOT NULL,
43
+ phase_run_id TEXT, agent_id TEXT, causation_id TEXT, severity TEXT NOT NULL, summary TEXT NOT NULL,
44
+ envelope TEXT NOT NULL CHECK (json_valid(envelope)), -- the full SEALED envelope, canonical JSON: the hashed unit
45
+ prev_hash TEXT NOT NULL, hash TEXT NOT NULL, -- hash = sha256(prev_hash || '\n' || envelope): local append-only journal (spec 23)
46
+ PRIMARY KEY (run_id, sequence) ) STRICT, WITHOUT ROWID;
47
+ CREATE INDEX events_by_type ON events(run_id, type, sequence);
48
+ CREATE TRIGGER events_no_update BEFORE UPDATE ON events BEGIN SELECT RAISE(ABORT, 'events are append-only'); END;
49
+ CREATE TRIGGER events_no_delete BEFORE DELETE ON events WHEN (SELECT purgeable FROM runs WHERE run_id = OLD.run_id) = 0
50
+ BEGIN SELECT RAISE(ABORT, 'events are append-only'); END;
51
+
52
+ CREATE TABLE transitions ( transition_id TEXT PRIMARY KEY, run_id TEXT NOT NULL REFERENCES runs(run_id),
53
+ def_id TEXT NOT NULL, table_version INTEGER NOT NULL, from_state TEXT NOT NULL, to_state TEXT NOT NULL,
54
+ reason TEXT NOT NULL, actor_json TEXT NOT NULL CHECK (json_valid(actor_json)),
55
+ guards_json TEXT NOT NULL CHECK (json_valid(guards_json)), effects_json TEXT NOT NULL CHECK (json_valid(effects_json)),
56
+ idempotency_key TEXT NOT NULL, event_id TEXT NOT NULL,
57
+ UNIQUE (run_id, idempotency_key) ) STRICT;
58
+
59
+ CREATE TABLE phases ( run_id TEXT NOT NULL REFERENCES runs(run_id), phase_run_id TEXT NOT NULL, state TEXT NOT NULL,
60
+ iteration INTEGER NOT NULL, status TEXT NOT NULL, outcome TEXT,
61
+ checks_json TEXT NOT NULL CHECK (json_valid(checks_json)), started_at TEXT, ended_at TEXT,
62
+ PRIMARY KEY (run_id, phase_run_id) ) STRICT, WITHOUT ROWID;
63
+
64
+ CREATE TABLE agents ( run_id TEXT NOT NULL REFERENCES runs(run_id), agent_id TEXT NOT NULL, phase_run_id TEXT NOT NULL,
65
+ role TEXT NOT NULL, surface TEXT, label TEXT NOT NULL, state TEXT NOT NULL,
66
+ attempt INTEGER NOT NULL, incarnation INTEGER NOT NULL, max_attempts INTEGER NOT NULL, max_incarnations INTEGER NOT NULL,
67
+ model_json TEXT NOT NULL CHECK (json_valid(model_json)),
68
+ effective_model_json TEXT CHECK (effective_model_json IS NULL OR json_valid(effective_model_json)),
69
+ auth_mode TEXT, slot TEXT, context_sha256 TEXT, grants_digest TEXT,
70
+ usage_json TEXT NOT NULL CHECK (json_valid(usage_json)), summary TEXT,
71
+ last_error_json TEXT CHECK (last_error_json IS NULL OR json_valid(last_error_json)),
72
+ pending_approval TEXT, runtime_ref_json TEXT CHECK (runtime_ref_json IS NULL OR json_valid(runtime_ref_json)),
73
+ created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
74
+ PRIMARY KEY (run_id, agent_id) ) STRICT, WITHOUT ROWID;
75
+
76
+ CREATE TABLE agent_incarnations ( run_id TEXT NOT NULL, agent_id TEXT NOT NULL, incarnation INTEGER NOT NULL,
77
+ attempt INTEGER NOT NULL, state TEXT NOT NULL, cause TEXT, pid INTEGER, start_token TEXT, host_nonce TEXT,
78
+ runtime_ref_json TEXT CHECK (runtime_ref_json IS NULL OR json_valid(runtime_ref_json)), stop TEXT, reason TEXT,
79
+ usage_json TEXT CHECK (usage_json IS NULL OR json_valid(usage_json)), started_at TEXT, ended_at TEXT,
80
+ PRIMARY KEY (run_id, agent_id, incarnation),
81
+ FOREIGN KEY (run_id, agent_id) REFERENCES agents(run_id, agent_id) ) STRICT, WITHOUT ROWID;
82
+
83
+ CREATE TABLE worktrees ( run_id TEXT NOT NULL REFERENCES runs(run_id), slot TEXT NOT NULL, path TEXT NOT NULL, branch TEXT,
84
+ base_sha TEXT NOT NULL, checkpoint_sha TEXT NOT NULL, last_tree_digest TEXT, lockfile_sha256 TEXT, provision_key TEXT,
85
+ deps_manifest_sha256 TEXT /* 5.7: digest of the provisioned dependency tree */, holder_agent_id TEXT,
86
+ state TEXT NOT NULL CHECK (state IN ('intent','ready','held','in-doubt','quarantined','removed')),
87
+ PRIMARY KEY (run_id, slot) ) STRICT, WITHOUT ROWID;
88
+
89
+ -- dirty paths since the last Cohorte commit, each with the content hash Cohorte expects (4.4); sha256 NULL = deleted
90
+ CREATE TABLE worktree_ledger ( run_id TEXT NOT NULL, slot TEXT NOT NULL, path TEXT NOT NULL, sha256 TEXT,
91
+ effect_id TEXT NOT NULL, effect_seq INTEGER NOT NULL,
92
+ PRIMARY KEY (run_id, slot, path) ) STRICT, WITHOUT ROWID;
93
+
94
+ CREATE TABLE effects ( effect_id TEXT PRIMARY KEY, run_id TEXT NOT NULL REFERENCES runs(run_id), idempotency_key TEXT NOT NULL,
95
+ kind TEXT NOT NULL, replay_class TEXT NOT NULL CHECK (replay_class IN ('idempotent','verifiable','at-most-once')),
96
+ state TEXT NOT NULL CHECK (state IN ('intent','done','failed','in-doubt','compensated')),
97
+ agent_id TEXT, tool_call_id TEXT, slot TEXT,
98
+ request_json TEXT NOT NULL CHECK (json_valid(request_json)), verify_json TEXT NOT NULL CHECK (json_valid(verify_json)),
99
+ pre_state_json TEXT CHECK (pre_state_json IS NULL OR json_valid(pre_state_json)),
100
+ result_json TEXT CHECK (result_json IS NULL OR json_valid(result_json)),
101
+ error_json TEXT CHECK (error_json IS NULL OR json_valid(error_json)),
102
+ consumes_grant TEXT, compensated_by TEXT, fencing_token INTEGER NOT NULL,
103
+ intent_seq INTEGER NOT NULL, done_seq INTEGER, created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
104
+ UNIQUE (run_id, idempotency_key) ) STRICT;
105
+ CREATE INDEX effects_open ON effects(run_id, state) WHERE state IN ('intent','in-doubt');
106
+
107
+ CREATE TABLE approvals ( approval_id TEXT PRIMARY KEY, run_id TEXT NOT NULL REFERENCES runs(run_id), idempotency_key TEXT NOT NULL,
108
+ kind TEXT NOT NULL, agent_id TEXT, incarnation INTEGER, tool_call_id TEXT,
109
+ status TEXT NOT NULL CHECK (status IN ('pending','allow-once','allow-for-run','deny','expired','superseded')),
110
+ request_json TEXT NOT NULL CHECK (json_valid(request_json)), -- ApprovalRequest incl. the NORMALISED pending call
111
+ grant_key TEXT NOT NULL, -- sha256(tool | normalised call | pre-state binding): what a decision is valid for (4.5).
112
+ -- binding = target beforeSha256 (write/patch) | the slot's content-addressed treeDigest (command): NEVER a commit sha
113
+ decision_json TEXT CHECK (decision_json IS NULL OR json_valid(decision_json)),
114
+ command_auth_json TEXT CHECK (command_auth_json IS NULL OR json_valid(command_auth_json)),
115
+ -- actor, commandId, answer, note, decidedAt + {scheme,value} of the resolving command (spec 23 "signées/loggées")
116
+ consumed_by_effect TEXT, -- allow-once: set in the intent transaction of the consuming effect (live call OR host-side replay, 4.5)
117
+ requested_seq INTEGER NOT NULL, resolved_seq INTEGER, expires_at TEXT, created_at TEXT NOT NULL, resolved_at TEXT,
118
+ UNIQUE (run_id, idempotency_key) ) STRICT;
119
+ CREATE INDEX approvals_by_grant ON approvals(run_id, grant_key);
120
+ CREATE INDEX approvals_pending ON approvals(run_id, created_at) WHERE status = 'pending';
121
+
122
+ CREATE TABLE budgets ( run_id TEXT NOT NULL REFERENCES runs(run_id), level TEXT NOT NULL, scope_id TEXT NOT NULL,
123
+ consumed_json TEXT NOT NULL CHECK (json_valid(consumed_json)), limit_json TEXT NOT NULL CHECK (json_valid(limit_json)),
124
+ updated_at TEXT NOT NULL,
125
+ PRIMARY KEY (run_id, level, scope_id) ) STRICT, WITHOUT ROWID;
126
+
127
+ CREATE TABLE artifacts ( artifact_id TEXT NOT NULL, run_id TEXT NOT NULL REFERENCES runs(run_id), kind TEXT NOT NULL,
128
+ path TEXT NOT NULL, sha256 TEXT NOT NULL, bytes INTEGER NOT NULL CHECK (bytes >= 0), media_type TEXT, agent_id TEXT,
129
+ phase_run_id TEXT, created_at TEXT NOT NULL,
130
+ PRIMARY KEY (run_id, artifact_id) ) STRICT, WITHOUT ROWID;
131
+
132
+ CREATE TABLE findings ( run_id TEXT NOT NULL REFERENCES runs(run_id), finding_id TEXT NOT NULL, phase_run_id TEXT NOT NULL,
133
+ agent_id TEXT, severity TEXT NOT NULL, status TEXT NOT NULL,
134
+ finding_json TEXT NOT NULL CHECK (json_valid(finding_json)), created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
135
+ PRIMARY KEY (run_id, finding_id) ) STRICT, WITHOUT ROWID;
136
+
137
+ -- run_id has no foreign key: a project-scoped command names no run, and the inbox is written by non-owner processes.
138
+ CREATE TABLE commands ( command_id TEXT PRIMARY KEY, run_id TEXT, type TEXT NOT NULL, body_sha256 TEXT NOT NULL,
139
+ envelope_json TEXT NOT NULL CHECK (json_valid(envelope_json)), auth_scheme TEXT, auth_value TEXT,
140
+ status TEXT NOT NULL CHECK (status IN ('pending','claimed','completed','rejected')), claimed_by TEXT, result_event_id TEXT,
141
+ created_at TEXT NOT NULL, updated_at TEXT NOT NULL ) STRICT;
142
+ CREATE INDEX commands_pending ON commands(run_id, created_at, command_id) WHERE status = 'pending';
143
+
144
+ -- overlap decided inside BEGIN IMMEDIATE
145
+ CREATE TABLE locks ( lock_id TEXT PRIMARY KEY, scope TEXT NOT NULL, key TEXT NOT NULL, mode TEXT NOT NULL CHECK (mode IN ('shared','exclusive')),
146
+ owner_run_id TEXT, owner_host_id TEXT NOT NULL, owner_pid INTEGER NOT NULL, owner_start_token TEXT NOT NULL,
147
+ fencing_token INTEGER NOT NULL, zones_json TEXT CHECK (zones_json IS NULL OR json_valid(zones_json)),
148
+ lease_expires_at TEXT NOT NULL, acquired_at TEXT NOT NULL ) STRICT;
149
+ CREATE INDEX locks_by_key ON locks(scope, key);
150
+
151
+ CREATE TABLE snapshots ( run_id TEXT NOT NULL REFERENCES runs(run_id), at_sequence INTEGER NOT NULL,
152
+ schema_version INTEGER NOT NULL, cohorte_version TEXT NOT NULL, state_sha256 TEXT NOT NULL,
153
+ state_json TEXT NOT NULL CHECK (json_valid(state_json)),
154
+ PRIMARY KEY (run_id, at_sequence) ) STRICT, WITHOUT ROWID;
@@ -0,0 +1,11 @@
1
+ # prompts/
2
+
3
+ Embedded agent prompts (spec §8 "inline skills", DESIGN §9 role scope cut: `implementer`, `fixer`, `reviewer`,
4
+ `security-reviewer` in V3.0; `architect`, `verifier`, `brainstormer`, `spec-author`, `tester`, `release-manager`,
5
+ `discoverer`, `reconciler` have their role ids reserved but no prompt yet).
6
+
7
+ `scripts/embed-assets.ts` copies this whole directory into `apps/cli/assets/prompts/**` and records it in
8
+ `assets/manifest.json` (DESIGN 1.4 step 2). Files here are content, not code: `scripts/check-prompts.ts` (`U4.09`)
9
+ checks them for transition/verdict vocabulary (spec 4.1); nothing under `prompts/**` is executed.
10
+
11
+ This directory is empty at G0 on purpose — the role prompts land with the units that use them (Wave 2+).
@@ -0,0 +1,7 @@
1
+ # Fixer
2
+
3
+ Resolve the supplied finding without weakening its reproduction or changing unrelated behavior.
4
+
5
+ Reproduce the issue first when possible. Trace the smallest cause, implement a focused correction, and add a
6
+ regression test that would fail without it. Re-run the original check and inspect the final diff for accidental scope
7
+ growth. Report if the finding cannot be reproduced or if another dependency prevents a safe correction.
@@ -0,0 +1,12 @@
1
+ # Implementer
2
+
3
+ Deliver the assigned change for your surface only.
4
+
5
+ 1. Read the task and inspect the relevant code before writing.
6
+ 2. Make the smallest coherent implementation that follows local patterns.
7
+ 3. Add or update focused tests for observable behavior.
8
+ 4. Run the narrow checks first, then the broader checks requested by the task.
9
+ 5. Summarize the change with paths, evidence, and known limitations.
10
+
11
+ Do not edit another surface for convenience. If an interface is missing, record the exact interface needed instead of
12
+ silently inventing a cross-surface contract.
@@ -0,0 +1,8 @@
1
+ # Reviewer
2
+
3
+ Inspect the assigned surface against the frozen task and the repository conventions.
4
+
5
+ Look for functional gaps, unsafe paths, missing validation, data loss, concurrency hazards, and absent regression
6
+ coverage. Every finding must include severity, file and location, observed behavior, why it matters, and a concrete
7
+ reproduction or check. Do not propose cosmetic changes as blockers. If no material issue remains, describe the checks
8
+ that support that conclusion.
@@ -0,0 +1,7 @@
1
+ # Security reviewer
2
+
3
+ Review only the assigned security surface and its boundary assumptions.
4
+
5
+ Check path confinement, command arguments, credential handling, process identity, sandbox policy, redaction, and
6
+ fail-closed behavior. Never request or display secrets. Findings must name the attacker-controlled input, the reached
7
+ boundary, the impact, and a safe regression check.
@@ -0,0 +1,5 @@
1
+ # Build phase guidance
2
+
3
+ Implement the frozen specification in the owned surface. Inspect the base tree and the surface contract before
4
+ editing. Keep the change isolated to the assigned work area, preserve public protocol shapes, and leave a concise
5
+ result that another host can verify.
@@ -0,0 +1,5 @@
1
+ # Review phase guidance
2
+
3
+ Compare the implementation and its evidence with the frozen specification. Inspect every owned surface and record
4
+ findings with reproducible locations. Check that prior findings are addressed and that the integration tree still
5
+ matches the recorded evidence.
@@ -0,0 +1,5 @@
1
+ # Test phase guidance
2
+
3
+ Run the exact repository checks recorded for the current task. Preserve command arguments and captured outcomes.
4
+ Separate a product failure from an unavailable environment, and include the relevant output without credentials or
5
+ unbounded logs.
@@ -0,0 +1,11 @@
1
+ # Cohorte agent context
2
+
3
+ You work inside one isolated Cohorte work area. The host supplies the current task, allowed paths, available tools,
4
+ and the durable context. Treat those values as authoritative.
5
+
6
+ Keep changes small, inspect before editing, and preserve unrelated work. Use the repository's existing conventions and
7
+ run the checks named by the task when they are available. Do not read credential stores, private keys, or files
8
+ outside the paths granted to you.
9
+
10
+ Communicate concrete observations. When a requirement is unclear, report the missing evidence and leave the worktree
11
+ in a recoverable state. A result must describe files changed, checks run, and any remaining uncertainty.