create-agent-rig 0.9.1 → 0.10.1

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 (235) hide show
  1. package/CHANGELOG.md +462 -3
  2. package/README.md +267 -305
  3. package/package.json +8 -14
  4. package/packages/cli/dist/commands/create.js +56 -88
  5. package/packages/cli/dist/commands/doctor.js +213 -0
  6. package/packages/cli/dist/commands/init.js +111 -50
  7. package/packages/cli/dist/commands/integrations.js +468 -0
  8. package/packages/cli/dist/commands/setup-wizard.js +61 -0
  9. package/packages/cli/dist/commands/uninstall.js +1223 -0
  10. package/packages/cli/dist/commands/upgrade.js +508 -101
  11. package/packages/cli/dist/index.js +658 -47
  12. package/packages/cli/dist/integrations/declaration.js +158 -0
  13. package/packages/cli/dist/integrations/doctor-guards.js +126 -0
  14. package/packages/cli/dist/integrations/doctor-workflow.js +25 -0
  15. package/packages/cli/dist/integrations/mcp-json.js +107 -0
  16. package/packages/cli/dist/integrations/memory-doctor.js +124 -0
  17. package/packages/cli/dist/integrations/registry.js +22 -0
  18. package/packages/cli/dist/integrations/spawn.js +228 -0
  19. package/packages/cli/dist/integrations/spec-kit.js +280 -0
  20. package/packages/cli/dist/integrations/verify.js +193 -0
  21. package/packages/cli/dist/integrations/windows-job.js +275 -0
  22. package/packages/cli/dist/lib/elevated-paths.js +74 -0
  23. package/packages/cli/dist/lib/install-set.js +1 -44
  24. package/packages/cli/dist/lib/manifest.js +64 -5
  25. package/packages/cli/dist/lib/prompts.js +0 -23
  26. package/packages/cli/dist/lib/safe-path.js +193 -2
  27. package/packages/cli/dist/lib/safe-text.js +78 -0
  28. package/packages/cli/dist/lib/substitute.js +1 -52
  29. package/packages/cli/dist/lib/summary.js +5 -5
  30. package/packages/cli/dist/templates.js +4 -14
  31. package/scripts/prepare.mjs +28 -12
  32. package/templates/agent-os/subagent-routing.json +4 -4
  33. package/templates/agent-os/universal/.agents/skills/check-premises/SKILL.md +45 -12
  34. package/templates/agent-os/universal/.agents/skills/loop/SKILL.md +31 -6
  35. package/templates/agent-os/universal/.agents/skills/new-invariant/SKILL.md +5 -5
  36. package/templates/agent-os/universal/.agents/skills/pr-ship/SKILL.md +1 -1
  37. package/templates/agent-os/universal/.agents/skills/worktree-task/SKILL.md +3 -3
  38. package/templates/agent-os/universal/.claude/agents/code-reviewer.md +8 -6
  39. package/templates/agent-os/universal/.claude/agents/implementation-agent.md +41 -0
  40. package/templates/agent-os/universal/.claude/agents/prose-reviewer.md +8 -4
  41. package/templates/agent-os/universal/.claude/agents/security-scanner.md +4 -2
  42. package/templates/agent-os/universal/.claude/agents/test-writer.md +2 -2
  43. package/templates/agent-os/universal/.claude/hooks/gate-stop-dod.mjs +4 -2
  44. package/templates/agent-os/universal/.claude/hooks/inject-rules.mjs +83 -4
  45. package/templates/agent-os/universal/.claude/rules/autonomy.md +55 -27
  46. package/templates/agent-os/universal/.claude/rules/invariants.md +9 -8
  47. package/templates/agent-os/universal/.claude/rules/workflow.md +59 -22
  48. package/templates/agent-os/universal/.claude/scripts/decision-router.mjs +1 -1
  49. package/templates/agent-os/universal/.claude/scripts/detect-missed-gate.mjs +12 -9
  50. package/templates/agent-os/universal/.claude/scripts/doctor.mjs +100 -2
  51. package/templates/agent-os/universal/.claude/scripts/lib/claim-records.mjs +236 -6
  52. package/templates/agent-os/universal/.claude/scripts/queue/state.mjs +2 -2
  53. package/templates/agent-os/universal/.claude/scripts/reconcile-external-prs.mjs +4 -3
  54. package/templates/agent-os/universal/.claude/scripts/revalidate.mjs +16 -0
  55. package/templates/agent-os/universal/.claude/settings.json +0 -8
  56. package/templates/agent-os/universal/.claude/skills/check-premises/SKILL.md +45 -12
  57. package/templates/agent-os/universal/.claude/skills/loop/SKILL.md +31 -6
  58. package/templates/agent-os/universal/.claude/skills/new-invariant/SKILL.md +5 -5
  59. package/templates/agent-os/universal/.claude/skills/pr-ship/SKILL.md +1 -1
  60. package/templates/agent-os/universal/.claude/skills/worktree-task/SKILL.md +3 -3
  61. package/templates/agent-os/universal/.codex/agents/code-reviewer.toml +2 -2
  62. package/templates/agent-os/universal/.codex/agents/implementation-agent.toml +6 -0
  63. package/templates/agent-os/universal/.codex/agents/prose-reviewer.toml +2 -2
  64. package/templates/agent-os/universal/.codex/agents/security-scanner.toml +1 -1
  65. package/templates/agent-os/universal/.codex/agents/test-writer.toml +1 -1
  66. package/templates/agent-os/universal/.codex/hooks.json +0 -10
  67. package/templates/agent-os/universal/AGENTS.md +208 -107
  68. package/templates/agent-os/universal/CLAUDE.md +15 -162
  69. package/templates/agent-os/universal/PLAN.md +17 -10
  70. package/templates/agent-os/universal/docs/decisions/agents-md-canonical.md +313 -0
  71. package/templates/agent-os/universal/docs/decisions/codex-adapter.md +15 -10
  72. package/templates/agent-os/universal/docs/decisions/review-lanes.md +12 -8
  73. package/templates/agent-os/universal/docs/decisions/session-start-wire-format.md +206 -0
  74. package/templates/agent-os/universal/docs/decisions/subagent-routing.md +6 -3
  75. package/templates/agent-os/universal/docs/decisions/workflow-layer-split.md +235 -0
  76. package/templates/agent-os/universal/layers.json +25 -30
  77. package/templates/hash-history.json +112 -40
  78. package/templates/release-ledger.json +3 -1
  79. package/packages/cli/dist/lib/composition.js +0 -20
  80. package/packages/cli/dist/lib/targets.js +0 -28
  81. package/packages/cli/dist/policy/benchmark/corpus.js +0 -165
  82. package/packages/cli/dist/policy/core/adapter.js +0 -18
  83. package/packages/cli/dist/policy/core/coverage.js +0 -253
  84. package/packages/cli/dist/policy/core/decision-record.js +0 -287
  85. package/packages/cli/dist/policy/core/declaration.js +0 -127
  86. package/packages/cli/dist/policy/core/evidence-matrix.js +0 -94
  87. package/packages/cli/dist/policy/core/probe.js +0 -442
  88. package/packages/cli/dist/policy/core/registry.js +0 -115
  89. package/packages/cli/dist/policy/core/validation.js +0 -275
  90. package/packages/cli/dist/policy/core/vocabulary.js +0 -123
  91. package/packages/cli/dist/policy/harness/claude.js +0 -47
  92. package/packages/cli/dist/policy/harness/codex.js +0 -87
  93. package/packages/cli/dist/policy/harness/index.js +0 -15
  94. package/packages/cli/dist/policy/harness/shared-hooks.js +0 -28
  95. package/packages/cli/dist/policy/index.js +0 -17
  96. package/templates/agent-os/init/AGENTS.md +0 -201
  97. package/templates/agent-os/init/CLAUDE.md +0 -201
  98. package/templates/agent-os/stack/aws-cdk/.agents/skills/post-deploy-verify/SKILL.md +0 -105
  99. package/templates/agent-os/stack/aws-cdk/.agents/skills/ro-debug/SKILL.md +0 -117
  100. package/templates/agent-os/stack/aws-cdk/.claude/agents/cdk-diff-reviewer.md +0 -89
  101. package/templates/agent-os/stack/aws-cdk/.claude/rules/aws-cdk.md +0 -105
  102. package/templates/agent-os/stack/aws-cdk/.claude/skills/post-deploy-verify/SKILL.md +0 -105
  103. package/templates/agent-os/stack/aws-cdk/.claude/skills/ro-debug/SKILL.md +0 -117
  104. package/templates/agent-os/stack/aws-cdk/.codex/agents/cdk-diff-reviewer.toml +0 -6
  105. package/templates/agent-os/stack/node-ts/.claude/hooks/dod-checks.json +0 -1
  106. package/templates/agent-os/stack/node-ts/.claude/rules/node-ts.md +0 -85
  107. package/templates/agent-os/universal/.claude/hooks/guard-core-purity.mjs +0 -89
  108. package/templates/agent-os/universal/.claude/hooks/guard-web-boundary.mjs +0 -68
  109. package/templates/agent-os/universal/.claude/rules/architecture.md +0 -81
  110. package/templates/skeleton/aws-serverless/.github/workflows/ci.yml +0 -28
  111. package/templates/skeleton/aws-serverless/.github/workflows/deploy.yml +0 -90
  112. package/templates/skeleton/aws-serverless/README.md +0 -181
  113. package/templates/skeleton/aws-serverless/apps/web/next.config.mjs +0 -17
  114. package/templates/skeleton/aws-serverless/apps/web/package.json +0 -19
  115. package/templates/skeleton/aws-serverless/apps/web/src/app/layout.tsx +0 -17
  116. package/templates/skeleton/aws-serverless/apps/web/src/app/page.tsx +0 -96
  117. package/templates/skeleton/aws-serverless/apps/web/src/lib/api.ts +0 -36
  118. package/templates/skeleton/aws-serverless/apps/web/src/lib/validate.ts +0 -23
  119. package/templates/skeleton/aws-serverless/apps/web/test/shared-validation.test.ts +0 -38
  120. package/templates/skeleton/aws-serverless/apps/web/tsconfig.json +0 -14
  121. package/templates/skeleton/aws-serverless/eslint.config.mjs +0 -20
  122. package/templates/skeleton/aws-serverless/gitignore +0 -56
  123. package/templates/skeleton/aws-serverless/infra/bin/app.ts +0 -79
  124. package/templates/skeleton/aws-serverless/infra/cdk.json +0 -3
  125. package/templates/skeleton/aws-serverless/infra/lib/app-stack.ts +0 -248
  126. package/templates/skeleton/aws-serverless/infra/lib/web-stack.ts +0 -45
  127. package/templates/skeleton/aws-serverless/infra/package.json +0 -18
  128. package/templates/skeleton/aws-serverless/infra/test/allowed-origins.test.ts +0 -301
  129. package/templates/skeleton/aws-serverless/infra/test/app-composition.test.ts +0 -137
  130. package/templates/skeleton/aws-serverless/infra/test/app-stack.test.ts +0 -120
  131. package/templates/skeleton/aws-serverless/infra/test/web-stack.test.ts +0 -44
  132. package/templates/skeleton/aws-serverless/package.json +0 -30
  133. package/templates/skeleton/aws-serverless/packages/core/package.json +0 -11
  134. package/templates/skeleton/aws-serverless/packages/core/src/events.ts +0 -14
  135. package/templates/skeleton/aws-serverless/packages/core/src/index.ts +0 -15
  136. package/templates/skeleton/aws-serverless/packages/core/src/note.ts +0 -69
  137. package/templates/skeleton/aws-serverless/packages/core/test/events.test.ts +0 -23
  138. package/templates/skeleton/aws-serverless/packages/core/test/note.test.ts +0 -101
  139. package/templates/skeleton/aws-serverless/packages/db/package.json +0 -14
  140. package/templates/skeleton/aws-serverless/packages/db/src/client.ts +0 -17
  141. package/templates/skeleton/aws-serverless/packages/db/src/index.ts +0 -2
  142. package/templates/skeleton/aws-serverless/packages/db/src/note-model.ts +0 -52
  143. package/templates/skeleton/aws-serverless/packages/db/test/note-model.test.ts +0 -91
  144. package/templates/skeleton/aws-serverless/packages/shared/package.json +0 -11
  145. package/templates/skeleton/aws-serverless/packages/shared/src/env.ts +0 -17
  146. package/templates/skeleton/aws-serverless/packages/shared/src/errors.ts +0 -33
  147. package/templates/skeleton/aws-serverless/packages/shared/src/index.ts +0 -3
  148. package/templates/skeleton/aws-serverless/packages/shared/src/logger.ts +0 -20
  149. package/templates/skeleton/aws-serverless/packages/shared/test/env.test.ts +0 -26
  150. package/templates/skeleton/aws-serverless/packages/shared/test/errors.test.ts +0 -28
  151. package/templates/skeleton/aws-serverless/packages/shared/test/logger.test.ts +0 -19
  152. package/templates/skeleton/aws-serverless/pnpm-lock.yaml +0 -2855
  153. package/templates/skeleton/aws-serverless/pnpm-workspace.yaml +0 -14
  154. package/templates/skeleton/aws-serverless/services/api/package.json +0 -15
  155. package/templates/skeleton/aws-serverless/services/api/src/adapters/sqs-publisher.ts +0 -26
  156. package/templates/skeleton/aws-serverless/services/api/src/handlers/create-note.ts +0 -69
  157. package/templates/skeleton/aws-serverless/services/api/src/handlers/list-notes.ts +0 -37
  158. package/templates/skeleton/aws-serverless/services/api/src/list-main.ts +0 -12
  159. package/templates/skeleton/aws-serverless/services/api/src/main.ts +0 -21
  160. package/templates/skeleton/aws-serverless/services/api/src/usecases/create-note.ts +0 -41
  161. package/templates/skeleton/aws-serverless/services/api/src/usecases/list-notes.ts +0 -14
  162. package/templates/skeleton/aws-serverless/services/api/test/create-note.handler.test.ts +0 -211
  163. package/templates/skeleton/aws-serverless/services/api/test/create-note.usecase.test.ts +0 -45
  164. package/templates/skeleton/aws-serverless/services/api/test/list-notes.test.ts +0 -122
  165. package/templates/skeleton/aws-serverless/services/api/test/sqs-publisher.test.ts +0 -22
  166. package/templates/skeleton/aws-serverless/services/worker/package.json +0 -12
  167. package/templates/skeleton/aws-serverless/services/worker/src/handlers/note-created.ts +0 -15
  168. package/templates/skeleton/aws-serverless/services/worker/src/main.ts +0 -7
  169. package/templates/skeleton/aws-serverless/services/worker/src/usecases/process-note-created.ts +0 -37
  170. package/templates/skeleton/aws-serverless/services/worker/test/note-created.test.ts +0 -61
  171. package/templates/skeleton/aws-serverless/tsconfig.base.json +0 -15
  172. package/templates/skeleton/aws-serverless/tsconfig.json +0 -16
  173. package/templates/skeleton/aws-serverless/vitest.config.ts +0 -14
  174. package/templates/skeleton/node-service/.github/workflows/ci.yml +0 -27
  175. package/templates/skeleton/node-service/.github/workflows/deploy.yml +0 -29
  176. package/templates/skeleton/node-service/README.md +0 -104
  177. package/templates/skeleton/node-service/apps/web/next.config.mjs +0 -17
  178. package/templates/skeleton/node-service/apps/web/package.json +0 -19
  179. package/templates/skeleton/node-service/apps/web/src/app/layout.tsx +0 -17
  180. package/templates/skeleton/node-service/apps/web/src/app/page.tsx +0 -96
  181. package/templates/skeleton/node-service/apps/web/src/lib/api.ts +0 -29
  182. package/templates/skeleton/node-service/apps/web/src/lib/validate.ts +0 -23
  183. package/templates/skeleton/node-service/apps/web/test/shared-validation.test.ts +0 -38
  184. package/templates/skeleton/node-service/apps/web/tsconfig.json +0 -14
  185. package/templates/skeleton/node-service/eslint.config.mjs +0 -20
  186. package/templates/skeleton/node-service/gitignore +0 -54
  187. package/templates/skeleton/node-service/package.json +0 -30
  188. package/templates/skeleton/node-service/packages/core/package.json +0 -11
  189. package/templates/skeleton/node-service/packages/core/src/events.ts +0 -14
  190. package/templates/skeleton/node-service/packages/core/src/index.ts +0 -15
  191. package/templates/skeleton/node-service/packages/core/src/note.ts +0 -69
  192. package/templates/skeleton/node-service/packages/core/test/events.test.ts +0 -23
  193. package/templates/skeleton/node-service/packages/core/test/note.test.ts +0 -101
  194. package/templates/skeleton/node-service/packages/db/package.json +0 -12
  195. package/templates/skeleton/node-service/packages/db/src/index.ts +0 -1
  196. package/templates/skeleton/node-service/packages/db/src/note-store.ts +0 -100
  197. package/templates/skeleton/node-service/packages/db/test/note-store.test.ts +0 -100
  198. package/templates/skeleton/node-service/packages/shared/package.json +0 -11
  199. package/templates/skeleton/node-service/packages/shared/src/env.ts +0 -17
  200. package/templates/skeleton/node-service/packages/shared/src/errors.ts +0 -33
  201. package/templates/skeleton/node-service/packages/shared/src/index.ts +0 -3
  202. package/templates/skeleton/node-service/packages/shared/src/logger.ts +0 -20
  203. package/templates/skeleton/node-service/packages/shared/test/env.test.ts +0 -26
  204. package/templates/skeleton/node-service/packages/shared/test/errors.test.ts +0 -28
  205. package/templates/skeleton/node-service/packages/shared/test/logger.test.ts +0 -19
  206. package/templates/skeleton/node-service/pnpm-lock.yaml +0 -2402
  207. package/templates/skeleton/node-service/pnpm-workspace.yaml +0 -13
  208. package/templates/skeleton/node-service/scripts/build-artifact.mjs +0 -34
  209. package/templates/skeleton/node-service/services/api/package.json +0 -17
  210. package/templates/skeleton/node-service/services/api/src/adapters/spool-publisher.ts +0 -23
  211. package/templates/skeleton/node-service/services/api/src/handlers/create-note.ts +0 -40
  212. package/templates/skeleton/node-service/services/api/src/handlers/list-notes.ts +0 -23
  213. package/templates/skeleton/node-service/services/api/src/main.ts +0 -40
  214. package/templates/skeleton/node-service/services/api/src/server.ts +0 -172
  215. package/templates/skeleton/node-service/services/api/src/static-dir.ts +0 -20
  216. package/templates/skeleton/node-service/services/api/src/usecases/create-note.ts +0 -30
  217. package/templates/skeleton/node-service/services/api/src/usecases/list-notes.ts +0 -14
  218. package/templates/skeleton/node-service/services/api/test/artifact.test.ts +0 -92
  219. package/templates/skeleton/node-service/services/api/test/create-note.handler.test.ts +0 -64
  220. package/templates/skeleton/node-service/services/api/test/create-note.usecase.test.ts +0 -43
  221. package/templates/skeleton/node-service/services/api/test/list-notes.test.ts +0 -48
  222. package/templates/skeleton/node-service/services/api/test/package-manager.test.ts +0 -40
  223. package/templates/skeleton/node-service/services/api/test/package-manager.ts +0 -51
  224. package/templates/skeleton/node-service/services/api/test/server.test.ts +0 -208
  225. package/templates/skeleton/node-service/services/api/test/spool-publisher.test.ts +0 -32
  226. package/templates/skeleton/node-service/services/api/test/static-dir.test.ts +0 -29
  227. package/templates/skeleton/node-service/services/worker/package.json +0 -16
  228. package/templates/skeleton/node-service/services/worker/src/main.ts +0 -28
  229. package/templates/skeleton/node-service/services/worker/src/spool.ts +0 -60
  230. package/templates/skeleton/node-service/services/worker/src/usecases/process-note-created.ts +0 -38
  231. package/templates/skeleton/node-service/services/worker/test/process-note-created.test.ts +0 -34
  232. package/templates/skeleton/node-service/services/worker/test/spool.test.ts +0 -76
  233. package/templates/skeleton/node-service/tsconfig.base.json +0 -15
  234. package/templates/skeleton/node-service/tsconfig.json +0 -13
  235. package/templates/skeleton/node-service/vitest.config.ts +0 -12
@@ -12,14 +12,17 @@
12
12
  "0.7.0",
13
13
  "0.7.1",
14
14
  "0.8.0",
15
- "0.9.0"
15
+ "0.9.0",
16
+ "0.9.1",
17
+ "0.10.0"
16
18
  ],
17
19
  "files": {
18
20
  ".agents/skills/check-premises/SKILL.md": {
19
21
  "since": "0.5.0",
20
22
  "hashes": [
21
23
  "e228eaebcd1dfa0e490f8f4260e349040bd742fdb6d2313698fd7925f8a7b058",
22
- "403f26470ec0a9c853aa69fe8a114fbc3dfb3bf6e6094eecb8a836f153aa1a37"
24
+ "403f26470ec0a9c853aa69fe8a114fbc3dfb3bf6e6094eecb8a836f153aa1a37",
25
+ "8295da3644136fbe0b22dcc97e9c2dad154f0a9d87fed374542bb712df24d9f4"
23
26
  ]
24
27
  },
25
28
  ".agents/skills/loop/SKILL.md": {
@@ -31,13 +34,15 @@
31
34
  "18f4300de4c4c7ea380d726fb109fa224da950ef0a4cea5015ab1d408b823be5",
32
35
  "0a1b6575f6df8139766c8e71ba7320e14d2a5a5ed8ab26b6b43f7a006153d37d",
33
36
  "a0d11ca1745095cc5b68777915161f16a6d1602c21f6d273f475d1d07c4b8546",
34
- "b47bdf0d7a2f6c5b2034b8f6d683ad2b3c83bd65d15baf7de9b58cc4689d0ab1"
37
+ "b47bdf0d7a2f6c5b2034b8f6d683ad2b3c83bd65d15baf7de9b58cc4689d0ab1",
38
+ "e48766714f4bceb5113c7036c380dfdbe07229feaf9b57fe4168660c5c90feb2"
35
39
  ]
36
40
  },
37
41
  ".agents/skills/new-invariant/SKILL.md": {
38
42
  "since": "0.5.0",
39
43
  "hashes": [
40
- "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828"
44
+ "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828",
45
+ "641aa59c25a7a15c56eeddc57baa26112289b8917434b2709484c925c64c54a4"
41
46
  ]
42
47
  },
43
48
  ".agents/skills/new-invariant/guard-invariant.example.mjs": {
@@ -65,7 +70,8 @@
65
70
  "a2fb0d03c65701af9d2d69cbcb2582ae573f097b1e1071eb2916e5e4f7832b37",
66
71
  "9616e4767942b2021e34ab7bb76eec9a5c280cc608a0756abb02743741d5fc8a",
67
72
  "a6340b95a03000b89fb27f5357cdd9c7ec12b714054b5334b61a30da600405e8",
68
- "dc1d9c02879e383448f2336ae6433f960f86e8f8efb4ab8ccf9a17a5f7f524c3"
73
+ "dc1d9c02879e383448f2336ae6433f960f86e8f8efb4ab8ccf9a17a5f7f524c3",
74
+ "75a5bc3e1aa3fdef96b59edc90a3cb4b996708710fe16f65038e0e21853df4e8"
69
75
  ]
70
76
  },
71
77
  ".agents/skills/ro-debug/SKILL.md": {
@@ -77,7 +83,8 @@
77
83
  ".agents/skills/worktree-task/SKILL.md": {
78
84
  "since": "0.5.0",
79
85
  "hashes": [
80
- "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c"
86
+ "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c",
87
+ "8fc6dbdd40b81e06d939c4bc2cf3e3c1ac7debd1acf8698e56a087a220404626"
81
88
  ]
82
89
  },
83
90
  ".claude/agents/cdk-diff-reviewer.md": {
@@ -97,7 +104,14 @@
97
104
  "ec403373ef6bc0575d61c6ca11f82792817b272221fad8317ef6c45388b52628",
98
105
  "f125cfbce848cdaa91fd81e961808b4dbde452287959ec2cf10b905ee3ede789",
99
106
  "8ede9297480c889ec6d6caf8d076e7d69111fb472933dcf5a48b9a8425fe50c2",
100
- "f12cb04871578eca3c9c36a1c2d60f5ae15a0e9094ecfc7c704c341756de4e3e"
107
+ "f12cb04871578eca3c9c36a1c2d60f5ae15a0e9094ecfc7c704c341756de4e3e",
108
+ "f260b1f2d60c57b96b2d735dbc7eb29890638ca9dedec467ff4784f6d8d8fab5"
109
+ ]
110
+ },
111
+ ".claude/agents/implementation-agent.md": {
112
+ "since": "0.10.0",
113
+ "hashes": [
114
+ "05ef7c2543d6a9ff177fa8cf514b2c6eaf581141d41b0f41f690d5685c00f56a"
101
115
  ]
102
116
  },
103
117
  ".claude/agents/prose-reviewer.md": {
@@ -107,7 +121,8 @@
107
121
  "0e4307cd9cf8ef723d79e98b1af46a34c6912a6aa925e2179d939cb83c8f2a44",
108
122
  "7e8eaa2b4af9d65e1d10bf50c32c1d138fb2f8b9ba6e6d0880cade0524324d9d",
109
123
  "ed1c05d3938c0b4f277f1bf4af8641460def830569049ff0697c9bda14518b78",
110
- "7aed3bfc955efc94bbeda3f866d25e2b253c88facaa2beed73939182a9f845b2"
124
+ "7aed3bfc955efc94bbeda3f866d25e2b253c88facaa2beed73939182a9f845b2",
125
+ "717160ca5917a4b2c4896214bd393039a364d22759bddb8e7d31c43a68398753"
111
126
  ]
112
127
  },
113
128
  ".claude/agents/security-scanner.md": {
@@ -116,14 +131,16 @@
116
131
  "43e5d59315483e369ad19f3070175f146e88deabd3a12dc09339ac4fac0f2aee",
117
132
  "e01467a38a0183be46ba45b05d44f663fbf4b139ceaecb91b5d096f3286a3fcd",
118
133
  "844e215af7d80bd85f62ca937c79bea59c8d8cd7c97353937ce62f7747eb9df7",
119
- "7c0bc189521955f2d126bac0ff97ab4fa252b05067692a5a3bb6cda232ddfaa3"
134
+ "7c0bc189521955f2d126bac0ff97ab4fa252b05067692a5a3bb6cda232ddfaa3",
135
+ "f456e508033dd7815d26f5e1057a3e85ed062ff31b51e992f4e063a5629b9b87"
120
136
  ]
121
137
  },
122
138
  ".claude/agents/test-writer.md": {
123
139
  "since": "0.2.0",
124
140
  "hashes": [
125
141
  "333feef12383dea51791ae4923c44ba542438de793f0792fb51d96aa15b8b1b8",
126
- "fce976938fdd1154641e405a557b67161daa34cf84de9ad35fa14287d13b7f9c"
142
+ "fce976938fdd1154641e405a557b67161daa34cf84de9ad35fa14287d13b7f9c",
143
+ "97d0550a3fb9fab00901f23c6270f9463eded0afce05a636f91d93e28bbd9d9d"
127
144
  ]
128
145
  },
129
146
  ".claude/hooks/block-no-verify.mjs": {
@@ -207,7 +224,8 @@
207
224
  "hashes": [
208
225
  "c472419f1076ea3707d640cd5246c0e69a94c55455f6648e2cbaf300a382c8df",
209
226
  "17c299ea4c6202745a3f8813aaef7711eb9030bf0a220cca77b58cac98c95940",
210
- "860a5d4ba02b59971f80bf79a9081f48f11022d46fe66b0470f0abc4ed9633e4"
227
+ "860a5d4ba02b59971f80bf79a9081f48f11022d46fe66b0470f0abc4ed9633e4",
228
+ "446d6d7c1914cf879e38c4bb6fcb454bcde95ee07a4cd2b421abd77253e58be8"
211
229
  ]
212
230
  },
213
231
  ".claude/hooks/lib/edit-input.mjs": {
@@ -252,7 +270,8 @@
252
270
  "530f63a4b29a5cc67867fa7b23575db81d42609ae401bfc4089b05194c586c21",
253
271
  "a7359408d56e6bdbf268019ad9193d5fbf4a872385a65ba08564204e6a8f5b5f",
254
272
  "619999500386b3d2867bbd4799f86a800fe7e168083c6e35fb2e629a2c926c5f",
255
- "532dc5cdffb1464fb68889628664b1e7e345272c806cf2ccb7a063c6a3a7f1bf"
273
+ "532dc5cdffb1464fb68889628664b1e7e345272c806cf2ccb7a063c6a3a7f1bf",
274
+ "be3b5b77fb97d883d053b08c1fbe715e300b5a073a3ce7a396e6e4f045a33d8a"
256
275
  ]
257
276
  },
258
277
  ".claude/rules/aws-cdk.md": {
@@ -271,7 +290,8 @@
271
290
  "389484f0846c3dd8207c0f41bd56409103fbcc7f58b94b1bf4bd1d81b5af0e87",
272
291
  "a2e10499a0bcd2cdc32f3986d27b59077c86e524d40323faabb2e5d78afc002c",
273
292
  "c94c33d7ccbd46f191948325dfc7f68ce13b0d3a9470215de1de3f06b1499111",
274
- "ce90c1e697fdd444ca3fe2203d7991645f2c284c413ae187e4d6d6c618af52c9"
293
+ "ce90c1e697fdd444ca3fe2203d7991645f2c284c413ae187e4d6d6c618af52c9",
294
+ "aa0afa471fe7e3d06a42c61e9e2fcb14b2791ecf805cc3638cb13d2ee8aa9827"
275
295
  ]
276
296
  },
277
297
  ".claude/rules/node-ts.md": {
@@ -288,7 +308,8 @@
288
308
  "dbe8025e10583e03fee5056e88aa6b73e4399453711d9156d82528a02d6e0402",
289
309
  "9e60d0300e856a9b3f81ab748bf2c0a9de27233ad0aa58a8c7141413fa0f3cae",
290
310
  "c8e9849a8fccd4e1e60b1ddc82937eb15aceb7f7c2afbd151b05e1bc966bfd2a",
291
- "aa34a1eab572964b328ffa0044e96acb3e1c31491df0183460f06e5e6bba3b76"
311
+ "aa34a1eab572964b328ffa0044e96acb3e1c31491df0183460f06e5e6bba3b76",
312
+ "17330550da4708a7dd58d066a4a4b2614ecfd36a3e73120f8a9edf410f36c9bb"
292
313
  ]
293
314
  },
294
315
  ".claude/scripts/decision-router.mjs": {
@@ -296,7 +317,8 @@
296
317
  "hashes": [
297
318
  "783b5b455a56c6a3e3723f3c6da861e0a945562acb686b86ab9d0e16dbd552a6",
298
319
  "c7a045d3687429c5047f09b4033ffffcecfede2edba736106f5e1048eb3cf27f",
299
- "8e9fe877949955e8f698701f969784b288bc95943c3bcea3bd4368db82e8e43e"
320
+ "8e9fe877949955e8f698701f969784b288bc95943c3bcea3bd4368db82e8e43e",
321
+ "6c1dcd297e1681d9b10ca452230bcad0a520be01e0ca949d82b75b74fb07153f"
300
322
  ]
301
323
  },
302
324
  ".claude/scripts/detect-missed-gate.mjs": {
@@ -304,14 +326,16 @@
304
326
  "hashes": [
305
327
  "bad5ce92a1c1f97ef2c25ebd216e945329e544337aa33e530631ed922ea8c495",
306
328
  "edcebe8ac78cf832a42e3b6fb70fe458a9fec4cb5f8b7b4cf276efc4f9c06a64",
307
- "120ee3b90497b9023528a7f8b4e7f48c30a578fad62d94d55d1d280240e5e3a2"
329
+ "120ee3b90497b9023528a7f8b4e7f48c30a578fad62d94d55d1d280240e5e3a2",
330
+ "7585531f8773e969f3dd14fa36385ebedafed4bba3ab2f9a74fbcb89b1f5612c"
308
331
  ]
309
332
  },
310
333
  ".claude/scripts/doctor.mjs": {
311
334
  "since": "0.6.0",
312
335
  "hashes": [
313
336
  "eb31d2726ab95d6b8fd091b1daf8a21f403a46c801590baf4fecee5c1bec64b9",
314
- "5154ad9abdcb37fea58b0da78fd71842c705774ffe48fd8050c302da17e73913"
337
+ "5154ad9abdcb37fea58b0da78fd71842c705774ffe48fd8050c302da17e73913",
338
+ "3cc6a663d104d6ee702b3131c2b6a18277e74a0f2b2380389c3e4d87f0c74d53"
315
339
  ]
316
340
  },
317
341
  ".claude/scripts/git-env.mjs": {
@@ -324,7 +348,8 @@
324
348
  ".claude/scripts/lib/claim-records.mjs": {
325
349
  "since": "0.7.0",
326
350
  "hashes": [
327
- "acb1d5702a826832977e7eb01b76c50cab19292528901f1b33693e561dbb0a24"
351
+ "acb1d5702a826832977e7eb01b76c50cab19292528901f1b33693e561dbb0a24",
352
+ "17101c99b7341dba7982570ac8b58bae6f97ddf346713c90d90e8ee484ff4c33"
328
353
  ]
329
354
  },
330
355
  ".claude/scripts/lib/gate-coverage.mjs": {
@@ -397,7 +422,8 @@
397
422
  "d8a5916bae71efcc6a21978af713112c9ec33a7554fd07f5978bdf2c3633b560",
398
423
  "1804c2351a4f3042dc6a3fb4203f96e98ae12bec32569b99bda77d002d6ba5f2",
399
424
  "b81ae3181e02b9c1c3f0e954688490ab3db3961381c2dc397c47c651c9d07f88",
400
- "c9902da15d06de3e952352115db0288433520eae2caac1f70ee6e06753d1f444"
425
+ "c9902da15d06de3e952352115db0288433520eae2caac1f70ee6e06753d1f444",
426
+ "e31f9899d6edad127db7a2f43dafdfff2671c5c780209cccd3107e56b09c6042"
401
427
  ]
402
428
  },
403
429
  ".claude/scripts/queue/gate-rounds.mjs": {
@@ -437,7 +463,8 @@
437
463
  "b8be5855809c0d44ece94858456098663296c17c5ad9abb1ea2cf1a8f48ca491",
438
464
  "3fc8ff9a06a2e22355a660a31e2943a97f50869f7e5726f768a7931d17b64b5b",
439
465
  "f44203af187e855b9f738f8dbedfd313abf9d6a5cc29182fb46cd58d70698d7a",
440
- "c2f2af8ac5eadd8d35a15bcdeffe585e32c6f99b4e6ab9ace0f9d7fd9d694943"
466
+ "c2f2af8ac5eadd8d35a15bcdeffe585e32c6f99b4e6ab9ace0f9d7fd9d694943",
467
+ "add45ea2bf2f96fbda0399afc1903bab75c251001f4d05fcbaa0b5958c8c1702"
441
468
  ]
442
469
  },
443
470
  ".claude/scripts/queue/plan-md.mjs": {
@@ -453,13 +480,16 @@
453
480
  ".claude/scripts/queue/state.mjs": {
454
481
  "since": "0.5.0",
455
482
  "hashes": [
456
- "ff7e7a46eb71989c2a7be7bc3f77922b49ad9071b2dec49787d8b7be087edb5b"
483
+ "ff7e7a46eb71989c2a7be7bc3f77922b49ad9071b2dec49787d8b7be087edb5b",
484
+ "ca1cb61ddac9f92a43aa4cc6ebb6d6bc66fa200de7989f785c059728e060d2bc"
457
485
  ]
458
486
  },
459
487
  ".claude/scripts/reconcile-external-prs.mjs": {
460
488
  "since": "0.3.0",
461
489
  "hashes": [
462
- "a326acd64ea19a50d093c91e711ad0234eb05c76d00066db5657c22f4355c190"
490
+ "a326acd64ea19a50d093c91e711ad0234eb05c76d00066db5657c22f4355c190",
491
+ "1b14ee0302932a40611011a57410d7f45d6c2d54799847b94f01f448de7c1827",
492
+ "354c713747e16ce7df51e8230c73f38bf7164ad7abd18ec1caca3f8d8546c224"
463
493
  ]
464
494
  },
465
495
  ".claude/scripts/revalidate.mjs": {
@@ -468,7 +498,8 @@
468
498
  "32f847a2a3a5136cabcb42f6447da9f8cf98e2d20512212ee5201461128d7798",
469
499
  "b62348a27bcaa1d62a0e4ddd53873fab6cb75f9af8e8c69d24f6ce81c592c4e3",
470
500
  "b151045e8083c398e94571b35dc9568dfa0102abcb847cdf764f6f694914d53e",
471
- "f756b7ccc2a4459e58b2125408de1f91372cd6093bf6f4ed14e26dc2eb4190fc"
501
+ "f756b7ccc2a4459e58b2125408de1f91372cd6093bf6f4ed14e26dc2eb4190fc",
502
+ "00bddb533f9639be7da7124f08464ee7b8f78fca5cd1d4514adb608d0f4ae521"
472
503
  ]
473
504
  },
474
505
  ".claude/scripts/revalidation-report.mjs": {
@@ -524,7 +555,8 @@
524
555
  "713718fbb2cda132f05665b29b8f1108a6305729b5e7c789d2053d117c13e08e",
525
556
  "e588ab05bee707a099c80c9ea399008be31488e616f3db3c0598f66f3d1b3a52",
526
557
  "a180578d6e6de6a21900ff2f8a8ade2242170d16d2dd95574e5004435d870b9b",
527
- "44695f83e445c7da3257556a3decc70e79ef46d19da394d4d5dd4c9268c0b429"
558
+ "44695f83e445c7da3257556a3decc70e79ef46d19da394d4d5dd4c9268c0b429",
559
+ "a13952579f1752862133a5746f2c0e8696b9548c2c18eb6ff0bb6a54772cea3c"
528
560
  ]
529
561
  },
530
562
  ".claude/skills/check-premises/SKILL.md": {
@@ -532,7 +564,8 @@
532
564
  "hashes": [
533
565
  "d69396da276f748c89ca0284fcd606ce70da8a791defafe9c9b27ce5f8ffd29e",
534
566
  "e228eaebcd1dfa0e490f8f4260e349040bd742fdb6d2313698fd7925f8a7b058",
535
- "403f26470ec0a9c853aa69fe8a114fbc3dfb3bf6e6094eecb8a836f153aa1a37"
567
+ "403f26470ec0a9c853aa69fe8a114fbc3dfb3bf6e6094eecb8a836f153aa1a37",
568
+ "8295da3644136fbe0b22dcc97e9c2dad154f0a9d87fed374542bb712df24d9f4"
536
569
  ]
537
570
  },
538
571
  ".claude/skills/loop/SKILL.md": {
@@ -548,13 +581,15 @@
548
581
  "18f4300de4c4c7ea380d726fb109fa224da950ef0a4cea5015ab1d408b823be5",
549
582
  "0a1b6575f6df8139766c8e71ba7320e14d2a5a5ed8ab26b6b43f7a006153d37d",
550
583
  "a0d11ca1745095cc5b68777915161f16a6d1602c21f6d273f475d1d07c4b8546",
551
- "b47bdf0d7a2f6c5b2034b8f6d683ad2b3c83bd65d15baf7de9b58cc4689d0ab1"
584
+ "b47bdf0d7a2f6c5b2034b8f6d683ad2b3c83bd65d15baf7de9b58cc4689d0ab1",
585
+ "e48766714f4bceb5113c7036c380dfdbe07229feaf9b57fe4168660c5c90feb2"
552
586
  ]
553
587
  },
554
588
  ".claude/skills/new-invariant/SKILL.md": {
555
589
  "since": "0.3.0",
556
590
  "hashes": [
557
- "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828"
591
+ "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828",
592
+ "641aa59c25a7a15c56eeddc57baa26112289b8917434b2709484c925c64c54a4"
558
593
  ]
559
594
  },
560
595
  ".claude/skills/new-invariant/guard-invariant.example.mjs": {
@@ -585,7 +620,8 @@
585
620
  "a2fb0d03c65701af9d2d69cbcb2582ae573f097b1e1071eb2916e5e4f7832b37",
586
621
  "9616e4767942b2021e34ab7bb76eec9a5c280cc608a0756abb02743741d5fc8a",
587
622
  "a6340b95a03000b89fb27f5357cdd9c7ec12b714054b5334b61a30da600405e8",
588
- "dc1d9c02879e383448f2336ae6433f960f86e8f8efb4ab8ccf9a17a5f7f524c3"
623
+ "dc1d9c02879e383448f2336ae6433f960f86e8f8efb4ab8ccf9a17a5f7f524c3",
624
+ "75a5bc3e1aa3fdef96b59edc90a3cb4b996708710fe16f65038e0e21853df4e8"
589
625
  ]
590
626
  },
591
627
  ".claude/skills/ro-debug/SKILL.md": {
@@ -597,7 +633,8 @@
597
633
  ".claude/skills/worktree-task/SKILL.md": {
598
634
  "since": "0.3.0",
599
635
  "hashes": [
600
- "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c"
636
+ "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c",
637
+ "8fc6dbdd40b81e06d939c4bc2cf3e3c1ac7debd1acf8698e56a087a220404626"
601
638
  ]
602
639
  },
603
640
  ".codex/agents/cdk-diff-reviewer.toml": {
@@ -613,7 +650,14 @@
613
650
  "hashes": [
614
651
  "e0e3475404c95402f33d77ebb14001e289d26bb429205a0a73bdcef99b4a62c7",
615
652
  "9ec92775791907f068d85ba58489236bd2bee69a8d769554ac530e8eadd5e374",
616
- "180c182cc909cc0b6c06cfa286f528f22b77189eee49cac067fdaaf2920f8bae"
653
+ "180c182cc909cc0b6c06cfa286f528f22b77189eee49cac067fdaaf2920f8bae",
654
+ "29b4de4273097fc9e6c1c3e41c650fa20d95fa34b406365aabab62a6ae89b686"
655
+ ]
656
+ },
657
+ ".codex/agents/implementation-agent.toml": {
658
+ "since": "0.10.0",
659
+ "hashes": [
660
+ "9a508a74957cf00345d559f6c5d06a91695938193b50fb55b6231991805c1d7e"
617
661
  ]
618
662
  },
619
663
  ".codex/agents/prose-reviewer.toml": {
@@ -622,7 +666,8 @@
622
666
  "80b4631502d95c619ad060ce02cc8702b12574758ba7df8337ed63efa15d764d",
623
667
  "cfd516f72acdfd197c59ac3cbdd39d7b175976dbd3d9eef52825dfdc4f1e5b60",
624
668
  "8687eacf0ad707a4f887e0714e82fca23fd005fa9ec8824faedfe99ca46333e1",
625
- "7c37e4dbd94980bee16396d0d46d97c5079e295d3eed4b3ed8f98d701e57b10d"
669
+ "7c37e4dbd94980bee16396d0d46d97c5079e295d3eed4b3ed8f98d701e57b10d",
670
+ "ff1fc0f238d34140ef7b2b5ba4ee7971ee9899d55ab46f87263990f1dd820896"
626
671
  ]
627
672
  },
628
673
  ".codex/agents/security-scanner.toml": {
@@ -630,14 +675,16 @@
630
675
  "hashes": [
631
676
  "9ee408789f237a0b55aac6a2472682a08f8696e1d1ff4918ea72766ac8535499",
632
677
  "bc9aacca1ca3ed4ceac485f7cd1c6ff5a5405ac7be83419d6145499cc560ee91",
633
- "b529f02056948ff0ca179c96d9d47962c9c8064feccb68d3c970e7b1a2513fc9"
678
+ "b529f02056948ff0ca179c96d9d47962c9c8064feccb68d3c970e7b1a2513fc9",
679
+ "60f9c2d527bef281c5cf8e905db66199064c9436dbbe7a0e81c6391e189a06b6"
634
680
  ]
635
681
  },
636
682
  ".codex/agents/test-writer.toml": {
637
683
  "since": "0.5.0",
638
684
  "hashes": [
639
685
  "bb89d93f57d70885d98cfbe428caa524e9c00e1ce30da235ed3318c1ba3c9606",
640
- "ec9e61b2c16c97ed26d5bdda2b0f715a41b80c0af549d0f2bbb96d6ca4c4d8d7"
686
+ "ec9e61b2c16c97ed26d5bdda2b0f715a41b80c0af549d0f2bbb96d6ca4c4d8d7",
687
+ "770e0e338620ecff893e044defe0703f4b63281ca26de979f02453e2a0f04e21"
641
688
  ]
642
689
  },
643
690
  ".codex/config.toml": {
@@ -652,7 +699,8 @@
652
699
  "c676647d585ec87427545a391598706ecaa74dfe413a7e05877e336bf8942874",
653
700
  "89d999c068ef5b6e48913c15a165359e66b1f505b9f97c145d8c730cbf42d09a",
654
701
  "1fc2fc35b04fa4ad0859841af72f45695bc346d1a1a9b20ba5d971d48888a910",
655
- "fa9a34eb9f889910e55269b76172608b989d553583de38af34316a31f4ad570b"
702
+ "fa9a34eb9f889910e55269b76172608b989d553583de38af34316a31f4ad570b",
703
+ "f3eaf4a9a2c0af418a6ecf54b6d7d32065033909907ea237d51423c9129f44a7"
656
704
  ]
657
705
  },
658
706
  ".rig/revalidation.json": {
@@ -665,7 +713,8 @@
665
713
  "since": "0.5.0",
666
714
  "hashes": [
667
715
  "616ab573d3cf4b603bb4bfbc5e7631d17ebaa696af16474845fdaf35f41d0a97",
668
- "406c9a0a0e58e78788a10186b9e10b48f4ed215b6d68504a4fbb71e5ee506f85"
716
+ "406c9a0a0e58e78788a10186b9e10b48f4ed215b6d68504a4fbb71e5ee506f85",
717
+ "93f9b4ed7a49df9c83b74fd728fb3e0f83ff7c7e84f71f51d26c89b84cd091bd"
669
718
  ]
670
719
  },
671
720
  "CLAUDE.md": {
@@ -675,7 +724,8 @@
675
724
  "8a4f5fab7cbaf3ba2482035f7ddb3cf6e3a3a3313596d25a856506e970d55db7",
676
725
  "a247fdd1d198777f4963da42ccc10dfd9c372f4bb0488d2c0201a49d6bfd1910",
677
726
  "616ab573d3cf4b603bb4bfbc5e7631d17ebaa696af16474845fdaf35f41d0a97",
678
- "406c9a0a0e58e78788a10186b9e10b48f4ed215b6d68504a4fbb71e5ee506f85"
727
+ "406c9a0a0e58e78788a10186b9e10b48f4ed215b6d68504a4fbb71e5ee506f85",
728
+ "0fcaa12649bec7586fa0d38e1f8c213bf1fb2326f8debc8923f5085dcb4b9284"
679
729
  ]
680
730
  },
681
731
  "PLAN.md": {
@@ -684,7 +734,14 @@
684
734
  "fe7547b40c1ac0d6e2bcba5bf8ae887a03f338c95454a851475cdee1d2b4db31",
685
735
  "1691fba2791d7d893e366e4a18bc120d4e4a96213bebbfb2a28881e13de74389",
686
736
  "e927216c4f179bc42540544f5c70534ce69110dafc3c6fe9a970ac625ebe4678",
687
- "a33d02bcb9e38ac0dd3e689aa8b6637e77044eba5650803db2b6dc0483044d3d"
737
+ "a33d02bcb9e38ac0dd3e689aa8b6637e77044eba5650803db2b6dc0483044d3d",
738
+ "9f88d8d0937be83bf62420267f573ecb3db7c0c39a8469d0e4c6b68c9b8aa56a"
739
+ ]
740
+ },
741
+ "docs/decisions/agents-md-canonical.md": {
742
+ "since": "0.10.0",
743
+ "hashes": [
744
+ "cc5fd1853cb4519767d0fd8915cbcedafff827dccef00d3535b094ce35e67f26"
688
745
  ]
689
746
  },
690
747
  "docs/decisions/closing-a-task.md": {
@@ -698,7 +755,8 @@
698
755
  "hashes": [
699
756
  "30e55d866d9a2c7359e594181070c63b1974d9df36e000caf419229284303a2e",
700
757
  "ebf0ef61407944373c862d37e6a80d4965ece72304b931428c6b3fcc5d9527c4",
701
- "46b68f9130d16a96278e03d0ddb14d99b678c5a239e4667aa79733e632e67505"
758
+ "46b68f9130d16a96278e03d0ddb14d99b678c5a239e4667aa79733e632e67505",
759
+ "5f6bd89f1ad57a080bb717595e0c31eb7fdbec593ea21aceaa4d69daa6647c37"
702
760
  ]
703
761
  },
704
762
  "docs/decisions/content-blind-revalidation.md": {
@@ -722,7 +780,8 @@
722
780
  "docs/decisions/review-lanes.md": {
723
781
  "since": "0.5.0",
724
782
  "hashes": [
725
- "1ba78f5d928db0c288b4c3b818cdc25ae82c2524267d069030f9c71c4b38fd71"
783
+ "1ba78f5d928db0c288b4c3b818cdc25ae82c2524267d069030f9c71c4b38fd71",
784
+ "0935e4bee6a6c3c76cd28d8e924381f1d3fcc941953c70609c00a3461e7be480"
726
785
  ]
727
786
  },
728
787
  "docs/decisions/run-directory.md": {
@@ -731,6 +790,12 @@
731
790
  "6128953b794bb0a3e5b4586d11d9ab8af8d0c37c7e19f556254d0e92a632363b"
732
791
  ]
733
792
  },
793
+ "docs/decisions/session-start-wire-format.md": {
794
+ "since": "0.10.0",
795
+ "hashes": [
796
+ "f7352821e1fbc6a59f815233a038e68c64a01d6803381973bb39c3fcbf72d1c4"
797
+ ]
798
+ },
734
799
  "docs/decisions/spacing-rations-mechanisms.md": {
735
800
  "since": "0.5.0",
736
801
  "hashes": [
@@ -747,7 +812,8 @@
747
812
  "docs/decisions/subagent-routing.md": {
748
813
  "since": "0.9.0",
749
814
  "hashes": [
750
- "97bb882dd066a65a740780a836199ecef8887392c1ece02a92670ecf153988d3"
815
+ "97bb882dd066a65a740780a836199ecef8887392c1ece02a92670ecf153988d3",
816
+ "f4a458a8938f8517b997cd6f0a0036d4eba640cd1ff213683804e7c0e2d02d7a"
751
817
  ]
752
818
  },
753
819
  "docs/decisions/two-empty-endings.md": {
@@ -757,6 +823,12 @@
757
823
  "e771888074498adc2d52e1f50f222056fd95433c4bb9c7e8aa0f3a730da449bd"
758
824
  ]
759
825
  },
826
+ "docs/decisions/workflow-layer-split.md": {
827
+ "since": "0.10.0",
828
+ "hashes": [
829
+ "1006275e907e7083d5cfa331fa4844ac9ed7f738519f788af130e6c82e5d9465"
830
+ ]
831
+ },
760
832
  "journal/README.md": {
761
833
  "since": "0.5.0",
762
834
  "hashes": [
@@ -12,5 +12,7 @@
12
12
  "0.7.0": "6589db36e1daa63a99ec595191db1cccf7373196",
13
13
  "0.7.1": "52e879b6c103f6ba70493007b6a6466c57ea9824",
14
14
  "0.8.0": "870f9a3ecae2881908ece8ec3e2ac13f84f505f5",
15
- "0.9.0": "c27f391e7395accaf09354f255a07e1b9e4710c1"
15
+ "0.9.0": "c27f391e7395accaf09354f255a07e1b9e4710c1",
16
+ "0.9.1": "872f7f67f11761c17aad3cbbe26540862581795b",
17
+ "0.10.0": "279fbf928b811b8ebc7ba2d1c4700ee943b7dab1"
16
18
  }
@@ -1,20 +0,0 @@
1
- /**
2
- * Layer-composition policy (PLAN phase 9): layers must claim disjoint paths.
3
- * A collision is refused, never resolved silently by copy order. Intended
4
- * overwrites — if one ever becomes necessary — are declared here, visibly,
5
- * not implied by ordering.
6
- */
7
- export const ALLOWED_OVERWRITES = new Set([]);
8
- export function detectCollisions(layers, allowed) {
9
- const claims = new Map();
10
- for (const layer of layers) {
11
- for (const file of layer.files) {
12
- const owners = claims.get(file) ?? [];
13
- owners.push(layer.name);
14
- claims.set(file, owners);
15
- }
16
- }
17
- return [...claims]
18
- .filter(([file, owners]) => owners.length > 1 && !allowed.has(file))
19
- .map(([file, owners]) => ({ path: file, layers: owners }));
20
- }
@@ -1,28 +0,0 @@
1
- export const TARGETS = {
2
- 'aws-serverless': {
3
- skeletonDir: 'aws-serverless',
4
- stacks: ['node-ts', 'aws-cdk'],
5
- defaultRegion: 'eu-central-1',
6
- },
7
- 'node-service': {
8
- skeletonDir: 'node-service',
9
- stacks: ['node-ts'],
10
- },
11
- };
12
- export const TARGET_NAMES = Object.keys(TARGETS);
13
- /**
14
- * The pre-selected entry in the interactive menu, and the API-level default.
15
- *
16
- * 🔴 **Not the fallback for a non-interactive run.** A run with no TTY and no
17
- * `--target` is *refused* (`index.ts`) — never prompt into a pipe, and never
18
- * guess a whole project shape for a script that did not say. This constant is
19
- * what `Enter`, an out-of-range number or an unrecognised name resolve to at the
20
- * prompt (`prompts.ts`), plus what `createProject` uses when called as a library
21
- * with no target.
22
- *
23
- * The comment this replaces said "one implicit target", which was stale from
24
- * when there was one. Its first correction claimed the CLI defaults silently in
25
- * CI — the opposite of what it does, in the file a maintainer would open to
26
- * check exactly that.
27
- */
28
- export const DEFAULT_TARGET = 'aws-serverless';
@@ -1,165 +0,0 @@
1
- import { CAPABILITY_STATES } from '../core/vocabulary.js';
2
- export const BENCHMARK_CLASSIFICATIONS = Object.freeze([
3
- 'equivalent',
4
- 'intentional-degradation',
5
- 'unsupported',
6
- ]);
7
- const MEASUREMENT_KINDS = Object.freeze([
8
- 'capability-probe',
9
- 'guard-enforcement',
10
- 'compatibility-rejection',
11
- ]);
12
- const REQUIRED_SCENARIO_IDS = [
13
- 'real-wiring',
14
- 'unwired-enforcement',
15
- 'disabled-enforcement',
16
- 'narrowed-enforcement',
17
- 'bypassed-enforcement',
18
- 'unreadable-input',
19
- 'hook-input',
20
- 'protected-rulebook',
21
- 'widening',
22
- 'foreign-major',
23
- ];
24
- const requiredScenarioIds = new Set(REQUIRED_SCENARIO_IDS);
25
- const scenario = (id, fixture, mutation, action, measurementKind, expectedStates) => Object.freeze({
26
- id,
27
- fixture,
28
- mutation,
29
- action,
30
- measurementKind,
31
- expectedStates: Object.freeze([...expectedStates]),
32
- });
33
- export const BENCHMARK_CORPUS = Object.freeze({
34
- contractMajor: 1,
35
- scenarios: Object.freeze([
36
- scenario('real-wiring', 'universal-rig', 'none', 'exercise protected write', 'capability-probe', ['SUPPORTED']),
37
- scenario('unwired-enforcement', 'universal-rig', 'remove hook registration', 'exercise protected write', 'capability-probe', ['UNSUPPORTED']),
38
- scenario('disabled-enforcement', 'universal-rig', 'disable all hooks', 'exercise protected write', 'capability-probe', ['UNSUPPORTED']),
39
- scenario('narrowed-enforcement', 'universal-rig', 'narrow matcher', 'exercise omitted protected write', 'capability-probe', ['DEGRADED']),
40
- scenario('bypassed-enforcement', 'universal-rig', 'bypass guard command', 'exercise protected write', 'capability-probe', ['INTEGRATION-FAILED']),
41
- scenario('unreadable-input', 'universal-rig', 'make snapshot unreadable', 'exercise protected write', 'capability-probe', ['INTEGRATION-FAILED']),
42
- scenario('hook-input', 'universal-rig', 'make tool_input unreadable', 'exercise protected write', 'guard-enforcement', ['SUPPORTED']),
43
- scenario('protected-rulebook', 'universal-rig', 'none', 'edit protected rulebook', 'guard-enforcement', ['SUPPORTED']),
44
- scenario('widening', 'universal-rig', 'widen authorization allow-list', 'attempt unauthorized widening', 'guard-enforcement', ['SUPPORTED']),
45
- scenario('foreign-major', 'contracts/session-messaging/v1/fixtures/negative/envelope-foreign-major.json', 'foreign schema major', 'check policy compatibility', 'compatibility-rejection', ['UNSUPPORTED']),
46
- ]),
47
- });
48
- const canonicalScenarios = new Map(BENCHMARK_CORPUS.scenarios.map((entry) => [entry.id, entry]));
49
- export const classifyCapability = (state) => {
50
- switch (state) {
51
- case 'SUPPORTED':
52
- return { classification: 'equivalent', integrationFailed: false };
53
- case 'DEGRADED':
54
- return { classification: 'intentional-degradation', integrationFailed: false };
55
- case 'UNSUPPORTED':
56
- return { classification: 'unsupported', integrationFailed: false };
57
- case 'INTEGRATION-FAILED':
58
- return { classification: 'unsupported', integrationFailed: true };
59
- default:
60
- throw new Error(`Unknown capability state: ${String(state)}`);
61
- }
62
- };
63
- const isOwnDataRecord = (value) => {
64
- if (typeof value !== 'object' || value === null || Array.isArray(value))
65
- return false;
66
- const prototype = Object.getPrototypeOf(value);
67
- if (prototype !== Object.prototype && prototype !== null)
68
- return false;
69
- return Object.values(Object.getOwnPropertyDescriptors(value)).every((descriptor) => descriptor.enumerable === true && 'value' in descriptor);
70
- };
71
- const isDataArray = (value) => {
72
- if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype)
73
- return false;
74
- for (let index = 0; index < value.length; index += 1) {
75
- const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
76
- if (descriptor === undefined || descriptor.enumerable !== true || !('value' in descriptor))
77
- return false;
78
- }
79
- return true;
80
- };
81
- const hasOnlyKeys = (value, keys) => {
82
- const actual = Object.keys(value);
83
- return actual.length === keys.length && keys.every((key) => Object.hasOwn(value, key));
84
- };
85
- const nonBlank = (value) => typeof value === 'string' && value.trim() !== '';
86
- const invalidCorpus = (reason) => {
87
- throw new Error(`Invalid benchmark corpus: ${reason}`);
88
- };
89
- export const parseBenchmarkCorpus = (input) => {
90
- if (!isOwnDataRecord(input) || !hasOnlyKeys(input, ['contractMajor', 'scenarios'])) {
91
- return invalidCorpus('must be a plain corpus with contractMajor and scenarios');
92
- }
93
- if (input.contractMajor !== 1)
94
- return invalidCorpus('unsupported contract major; expected 1');
95
- if (!isDataArray(input.scenarios))
96
- return invalidCorpus('scenarios must be a data array');
97
- if (input.scenarios.length !== REQUIRED_SCENARIO_IDS.length) {
98
- return invalidCorpus('must include every required scenario exactly once');
99
- }
100
- const ids = new Set();
101
- const scenarios = [];
102
- for (const value of input.scenarios) {
103
- if (!isOwnDataRecord(value) ||
104
- !hasOnlyKeys(value, [
105
- 'id',
106
- 'fixture',
107
- 'mutation',
108
- 'action',
109
- 'measurementKind',
110
- 'expectedStates',
111
- ])) {
112
- return invalidCorpus('each scenario must have only id, fixture, mutation, action, measurementKind, and expectedStates');
113
- }
114
- const { id, fixture, mutation, action, measurementKind, expectedStates } = value;
115
- if (!nonBlank(id) || !requiredScenarioIds.has(id))
116
- return invalidCorpus(`unknown scenario ${String(id)}`);
117
- if (ids.has(id))
118
- return invalidCorpus(`scenario ${id} is duplicated`);
119
- if (!nonBlank(fixture) || !nonBlank(mutation) || !nonBlank(action)) {
120
- return invalidCorpus(`scenario ${id} has empty metadata`);
121
- }
122
- if (typeof measurementKind !== 'string' ||
123
- !MEASUREMENT_KINDS.includes(measurementKind)) {
124
- return invalidCorpus(`scenario ${id} has an unknown measurement kind`);
125
- }
126
- if (!isDataArray(expectedStates) || expectedStates.length === 0) {
127
- return invalidCorpus(`scenario ${id} must name expected capability states`);
128
- }
129
- const states = new Set();
130
- for (const expectedState of expectedStates) {
131
- if (typeof expectedState !== 'string' ||
132
- !CAPABILITY_STATES.includes(expectedState)) {
133
- return invalidCorpus(`scenario ${id} has an unknown capability state`);
134
- }
135
- if (states.has(expectedState))
136
- return invalidCorpus(`scenario ${id} repeats a capability state`);
137
- states.add(expectedState);
138
- }
139
- const canonical = canonicalScenarios.get(id);
140
- if (fixture !== canonical.fixture ||
141
- mutation !== canonical.mutation ||
142
- action !== canonical.action ||
143
- measurementKind !== canonical.measurementKind) {
144
- return invalidCorpus(`scenario ${id} changes its canonical metadata`);
145
- }
146
- if (expectedStates.length !== canonical.expectedStates.length ||
147
- expectedStates.some((state, index) => state !== canonical.expectedStates[index])) {
148
- return invalidCorpus(`scenario ${id} changes its expected capability states`);
149
- }
150
- ids.add(id);
151
- scenarios.push(Object.freeze({
152
- id,
153
- fixture,
154
- mutation,
155
- action,
156
- measurementKind: measurementKind,
157
- expectedStates: Object.freeze([...states]),
158
- }));
159
- }
160
- for (const id of REQUIRED_SCENARIO_IDS) {
161
- if (!ids.has(id))
162
- return invalidCorpus(`required scenario ${id} is missing`);
163
- }
164
- return Object.freeze({ contractMajor: 1, scenarios: Object.freeze(scenarios) });
165
- };
@@ -1,18 +0,0 @@
1
- /**
2
- * The contract a harness adapter satisfies (RP-76).
3
- *
4
- * The core knows that a harness exists and has a hook-wiring surface; it does
5
- * not know any harness's name, event vocabulary, tool names or paths. Those
6
- * belong to the adapter, one module per harness under `../harness/`, and
7
- * adding a harness means adding one such module and registering it — pinned in
8
- * `test/template/policy-declaration.test.ts` under "adding a harness touches
9
- * adapters only", whose two tests name exactly the files that may mention each
10
- * harness. Their names carry the harness words this file may not, which is why
11
- * the describe is cited here rather than either test.
12
- *
13
- * An adapter is a mapping, not a compiler: given a declaration it names the
14
- * event, matcher and hook path the harness wires for it. The correspondence
15
- * between that answer and the snapshot the rig actually ships is a test, in
16
- * both directions, in the same file.
17
- */
18
- export {};