create-agent-rig 0.4.0 → 0.6.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 (118) hide show
  1. package/CHANGELOG.md +316 -11
  2. package/README.md +58 -19
  3. package/package.json +2 -1
  4. package/packages/cli/dist/commands/create.js +8 -3
  5. package/packages/cli/dist/commands/init.js +85 -34
  6. package/packages/cli/dist/commands/upgrade.js +112 -30
  7. package/packages/cli/dist/index.js +81 -19
  8. package/packages/cli/dist/lib/copy-tree.js +35 -6
  9. package/packages/cli/dist/lib/init-settings.js +12 -0
  10. package/packages/cli/dist/lib/install-set.js +6 -8
  11. package/packages/cli/dist/lib/manifest.js +31 -9
  12. package/packages/cli/dist/lib/safe-path.js +30 -0
  13. package/scripts/prepare.mjs +1 -1
  14. package/templates/agent-os/init/AGENTS.md +199 -0
  15. package/templates/agent-os/init/CLAUDE.md +69 -9
  16. package/templates/agent-os/stack/aws-cdk/.agents/skills/post-deploy-verify/SKILL.md +105 -0
  17. package/templates/agent-os/stack/aws-cdk/.agents/skills/ro-debug/SKILL.md +117 -0
  18. package/templates/agent-os/stack/aws-cdk/.claude/agents/cdk-diff-reviewer.md +41 -3
  19. package/templates/agent-os/stack/aws-cdk/.claude/rules/aws-cdk.md +1 -1
  20. package/templates/agent-os/stack/aws-cdk/.claude/skills/post-deploy-verify/SKILL.md +41 -0
  21. package/templates/agent-os/stack/aws-cdk/.codex/agents/cdk-diff-reviewer.toml +4 -0
  22. package/templates/agent-os/stack/node-ts/.claude/rules/node-ts.md +29 -0
  23. package/templates/agent-os/universal/.agents/skills/check-premises/SKILL.md +236 -0
  24. package/templates/agent-os/universal/.agents/skills/loop/SKILL.md +958 -0
  25. package/templates/agent-os/universal/.agents/skills/new-invariant/SKILL.md +102 -0
  26. package/templates/agent-os/universal/.agents/skills/new-invariant/guard-invariant.example.mjs +78 -0
  27. package/templates/agent-os/universal/.agents/skills/new-invariant/guard-invariant.example.test.mjs +89 -0
  28. package/templates/agent-os/universal/.agents/skills/pr-ship/SKILL.md +396 -0
  29. package/templates/agent-os/universal/.agents/skills/worktree-task/SKILL.md +73 -0
  30. package/templates/agent-os/universal/.claude/agents/code-reviewer.md +40 -1
  31. package/templates/agent-os/universal/.claude/agents/prose-reviewer.md +71 -1
  32. package/templates/agent-os/universal/.claude/agents/security-scanner.md +40 -0
  33. package/templates/agent-os/universal/.claude/hooks/gate-stop-dod.mjs +301 -26
  34. package/templates/agent-os/universal/.claude/hooks/guard-bash.mjs +43 -5
  35. package/templates/agent-os/universal/.claude/hooks/guard-core-purity.mjs +25 -11
  36. package/templates/agent-os/universal/.claude/hooks/guard-rulebook.mjs +127 -0
  37. package/templates/agent-os/universal/.claude/hooks/guard-secret-file.mjs +180 -0
  38. package/templates/agent-os/universal/.claude/hooks/guard-web-boundary.mjs +32 -13
  39. package/templates/agent-os/universal/.claude/hooks/inject-rules.mjs +175 -7
  40. package/templates/agent-os/universal/.claude/hooks/lib/edit-input.mjs +503 -0
  41. package/templates/agent-os/universal/.claude/rules/autonomy.md +69 -1
  42. package/templates/agent-os/universal/.claude/rules/invariants.md +104 -19
  43. package/templates/agent-os/universal/.claude/rules/workflow.md +55 -5
  44. package/templates/agent-os/universal/.claude/scripts/decision-router.mjs +1260 -0
  45. package/templates/agent-os/universal/.claude/scripts/detect-missed-gate.mjs +65 -2
  46. package/templates/agent-os/universal/.claude/scripts/doctor.mjs +351 -0
  47. package/templates/agent-os/universal/.claude/scripts/git-env.mjs +49 -0
  48. package/templates/agent-os/universal/.claude/scripts/lib/gate-coverage.mjs +306 -0
  49. package/templates/agent-os/universal/.claude/scripts/lib/revalidation-points.mjs +28 -0
  50. package/templates/agent-os/universal/.claude/scripts/lib/secrets.mjs +490 -0
  51. package/templates/agent-os/universal/.claude/scripts/lib/verdict.mjs +462 -0
  52. package/templates/agent-os/universal/.claude/scripts/preflight.mjs +33 -17
  53. package/templates/agent-os/universal/.claude/scripts/queue/as-of.mjs +51 -0
  54. package/templates/agent-os/universal/.claude/scripts/queue/checkout.mjs +149 -0
  55. package/templates/agent-os/universal/.claude/scripts/queue/core.mjs +809 -28
  56. package/templates/agent-os/universal/.claude/scripts/queue/gate-rounds.mjs +160 -0
  57. package/templates/agent-os/universal/.claude/scripts/queue/github-issues.mjs +95 -16
  58. package/templates/agent-os/universal/.claude/scripts/queue/index.mjs +543 -15
  59. package/templates/agent-os/universal/.claude/scripts/queue/jira.mjs +457 -47
  60. package/templates/agent-os/universal/.claude/scripts/queue/plan-md.mjs +289 -25
  61. package/templates/agent-os/universal/.claude/scripts/queue/state.mjs +197 -0
  62. package/templates/agent-os/universal/.claude/scripts/revalidate.mjs +316 -0
  63. package/templates/agent-os/universal/.claude/scripts/revalidation-report.mjs +180 -0
  64. package/templates/agent-os/universal/.claude/scripts/run-journal.mjs +435 -0
  65. package/templates/agent-os/universal/.claude/scripts/run-state.mjs +539 -0
  66. package/templates/agent-os/universal/.claude/scripts/stop-flag.mjs +15 -8
  67. package/templates/agent-os/universal/.claude/scripts/unattended-flag.mjs +239 -0
  68. package/templates/agent-os/universal/.claude/scripts/verdict.mjs +198 -0
  69. package/templates/agent-os/universal/.claude/settings.json +11 -2
  70. package/templates/agent-os/universal/.claude/skills/check-premises/SKILL.md +118 -7
  71. package/templates/agent-os/universal/.claude/skills/loop/SKILL.md +667 -38
  72. package/templates/agent-os/universal/.claude/skills/pr-ship/SKILL.md +359 -26
  73. package/templates/agent-os/universal/.codex/agents/code-reviewer.toml +4 -0
  74. package/templates/agent-os/universal/.codex/agents/prose-reviewer.toml +4 -0
  75. package/templates/agent-os/universal/.codex/agents/security-scanner.toml +4 -0
  76. package/templates/agent-os/universal/.codex/agents/test-writer.toml +4 -0
  77. package/templates/agent-os/universal/.codex/hooks.json +70 -0
  78. package/templates/agent-os/universal/AGENTS.md +166 -0
  79. package/templates/agent-os/universal/CLAUDE.md +49 -14
  80. package/templates/agent-os/universal/PLAN.md +7 -40
  81. package/templates/agent-os/universal/docs/decisions/closing-a-task.md +98 -0
  82. package/templates/agent-os/universal/docs/decisions/codex-adapter.md +108 -0
  83. package/templates/agent-os/universal/docs/decisions/fail-open-guards.md +43 -0
  84. package/templates/agent-os/universal/docs/decisions/gate-coverage.md +83 -0
  85. package/templates/agent-os/universal/docs/decisions/review-lanes.md +72 -0
  86. package/templates/agent-os/universal/docs/decisions/run-directory.md +44 -0
  87. package/templates/agent-os/universal/docs/decisions/spacing-rations-mechanisms.md +125 -0
  88. package/templates/agent-os/universal/docs/decisions/stop-conditions-in-a-file.md +46 -0
  89. package/templates/agent-os/universal/docs/decisions/two-empty-endings.md +74 -0
  90. package/templates/agent-os/universal/journal/README.md +101 -0
  91. package/templates/agent-os/universal/layers.json +45 -2
  92. package/templates/hash-history.json +310 -49
  93. package/templates/release-ledger.json +9 -0
  94. package/templates/skeleton/aws-serverless/.github/workflows/deploy.yml +34 -1
  95. package/templates/skeleton/aws-serverless/README.md +91 -9
  96. package/templates/skeleton/aws-serverless/apps/web/src/lib/api.ts +9 -2
  97. package/templates/skeleton/aws-serverless/gitignore +37 -0
  98. package/templates/skeleton/aws-serverless/infra/bin/app.ts +73 -13
  99. package/templates/skeleton/aws-serverless/infra/lib/app-stack.ts +136 -4
  100. package/templates/skeleton/aws-serverless/infra/lib/web-stack.ts +14 -1
  101. package/templates/skeleton/aws-serverless/infra/test/allowed-origins.test.ts +301 -0
  102. package/templates/skeleton/aws-serverless/infra/test/app-composition.test.ts +137 -0
  103. package/templates/skeleton/aws-serverless/infra/test/app-stack.test.ts +36 -20
  104. package/templates/skeleton/aws-serverless/infra/test/web-stack.test.ts +15 -12
  105. package/templates/skeleton/aws-serverless/services/api/src/handlers/create-note.ts +33 -6
  106. package/templates/skeleton/aws-serverless/services/api/src/handlers/list-notes.ts +18 -5
  107. package/templates/skeleton/aws-serverless/services/api/src/usecases/create-note.ts +11 -0
  108. package/templates/skeleton/aws-serverless/services/api/test/create-note.handler.test.ts +120 -1
  109. package/templates/skeleton/aws-serverless/services/api/test/list-notes.test.ts +72 -1
  110. package/templates/skeleton/node-service/README.md +11 -1
  111. package/templates/skeleton/node-service/gitignore +34 -0
  112. package/templates/skeleton/node-service/packages/db/src/note-store.ts +47 -10
  113. package/templates/skeleton/node-service/packages/db/test/note-store.test.ts +20 -0
  114. package/templates/skeleton/node-service/services/api/src/main.ts +2 -9
  115. package/templates/skeleton/node-service/services/api/src/server.ts +93 -10
  116. package/templates/skeleton/node-service/services/api/src/static-dir.ts +20 -0
  117. package/templates/skeleton/node-service/services/api/test/server.test.ts +98 -13
  118. package/templates/skeleton/node-service/services/api/test/static-dir.test.ts +28 -0
@@ -1,83 +1,162 @@
1
1
  {
2
2
  "versions": [
3
+ "0.2.0",
3
4
  "0.3.0",
4
5
  "0.3.1",
5
- "0.3.2"
6
+ "0.3.2",
7
+ "0.4.0",
8
+ "0.5.0"
6
9
  ],
7
10
  "files": {
11
+ ".agents/skills/check-premises/SKILL.md": {
12
+ "since": "0.5.0",
13
+ "hashes": [
14
+ "e228eaebcd1dfa0e490f8f4260e349040bd742fdb6d2313698fd7925f8a7b058"
15
+ ]
16
+ },
17
+ ".agents/skills/loop/SKILL.md": {
18
+ "since": "0.5.0",
19
+ "hashes": [
20
+ "eb52ef41269018107534d8dc2f552c57698e1677a1e76b5e666b5d09c007cac0"
21
+ ]
22
+ },
23
+ ".agents/skills/new-invariant/SKILL.md": {
24
+ "since": "0.5.0",
25
+ "hashes": [
26
+ "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828"
27
+ ]
28
+ },
29
+ ".agents/skills/new-invariant/guard-invariant.example.mjs": {
30
+ "since": "0.5.0",
31
+ "hashes": [
32
+ "0fec41841de1fc07f4da08d023fdda2906c62e3c71b22827c874f2809719b955"
33
+ ]
34
+ },
35
+ ".agents/skills/new-invariant/guard-invariant.example.test.mjs": {
36
+ "since": "0.5.0",
37
+ "hashes": [
38
+ "7bef9179c5b56d280d462cf21fb2c38dc4cb759b671b114b3995aac93720caf8"
39
+ ]
40
+ },
41
+ ".agents/skills/post-deploy-verify/SKILL.md": {
42
+ "since": "0.5.0",
43
+ "hashes": [
44
+ "20c919cefc0b2c351c6e03d18f465b0f99f8a192c8ef0a0f78eeceb0499f2fbc"
45
+ ]
46
+ },
47
+ ".agents/skills/pr-ship/SKILL.md": {
48
+ "since": "0.5.0",
49
+ "hashes": [
50
+ "a2fb0d03c65701af9d2d69cbcb2582ae573f097b1e1071eb2916e5e4f7832b37"
51
+ ]
52
+ },
53
+ ".agents/skills/ro-debug/SKILL.md": {
54
+ "since": "0.5.0",
55
+ "hashes": [
56
+ "4a391a0a42b613683d897e2b4fa46db4eb0e778cbfc1e4d4340bb855073de528"
57
+ ]
58
+ },
59
+ ".agents/skills/worktree-task/SKILL.md": {
60
+ "since": "0.5.0",
61
+ "hashes": [
62
+ "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c"
63
+ ]
64
+ },
8
65
  ".claude/agents/cdk-diff-reviewer.md": {
9
- "since": "0.3.0",
66
+ "since": "0.2.0",
10
67
  "hashes": [
11
- "2286fbc01c0342b9bac9909890876c079615db5b398e3499a0f2fddb1a334098"
68
+ "2286fbc01c0342b9bac9909890876c079615db5b398e3499a0f2fddb1a334098",
69
+ "4c6241da56060b44e77f9b5f7a8cde7d2923bd605b8b9bae70d00329784c35be"
12
70
  ]
13
71
  },
14
72
  ".claude/agents/code-reviewer.md": {
15
- "since": "0.3.0",
73
+ "since": "0.2.0",
16
74
  "hashes": [
17
75
  "58969edc0820463298002c618b6ec49913e1cb3aa90dec4aed2aec14c7bcfd3b",
18
76
  "be3d2992d1f278dde46b555df1840b02f91403db1ec2fd4d489fb5efa940f019",
19
- "ec403373ef6bc0575d61c6ca11f82792817b272221fad8317ef6c45388b52628"
77
+ "ec403373ef6bc0575d61c6ca11f82792817b272221fad8317ef6c45388b52628",
78
+ "f125cfbce848cdaa91fd81e961808b4dbde452287959ec2cf10b905ee3ede789"
20
79
  ]
21
80
  },
22
81
  ".claude/agents/prose-reviewer.md": {
23
82
  "since": "0.3.2",
24
83
  "hashes": [
25
- "8d5762849afd328fdc1aabf053ad207f2e306e013665e3ff934b06cbb1bbda38"
84
+ "8d5762849afd328fdc1aabf053ad207f2e306e013665e3ff934b06cbb1bbda38",
85
+ "0e4307cd9cf8ef723d79e98b1af46a34c6912a6aa925e2179d939cb83c8f2a44"
26
86
  ]
27
87
  },
28
88
  ".claude/agents/security-scanner.md": {
29
- "since": "0.3.0",
89
+ "since": "0.2.0",
30
90
  "hashes": [
31
- "43e5d59315483e369ad19f3070175f146e88deabd3a12dc09339ac4fac0f2aee"
91
+ "43e5d59315483e369ad19f3070175f146e88deabd3a12dc09339ac4fac0f2aee",
92
+ "e01467a38a0183be46ba45b05d44f663fbf4b139ceaecb91b5d096f3286a3fcd"
32
93
  ]
33
94
  },
34
95
  ".claude/agents/test-writer.md": {
35
- "since": "0.3.0",
96
+ "since": "0.2.0",
36
97
  "hashes": [
37
98
  "333feef12383dea51791ae4923c44ba542438de793f0792fb51d96aa15b8b1b8"
38
99
  ]
39
100
  },
40
101
  ".claude/hooks/block-no-verify.mjs": {
41
- "since": "0.3.0",
102
+ "since": "0.2.0",
42
103
  "hashes": [
104
+ "c7c86de47b601dcb594ba8d8e23b5624ef8d47dafeddbc1aadd351c72e051d83",
43
105
  "ece5a81db41bd48695a1a009239837b682d247baf6d19214eaa859a7519ab246"
44
106
  ]
45
107
  },
46
108
  ".claude/hooks/dod-checks.json": {
47
- "since": "0.3.0",
109
+ "since": "0.2.0",
48
110
  "hashes": [
49
111
  "413e59fecca1453e54369b1e302925b4f6843273767ebc33ac311fe825cfc4b2"
50
112
  ]
51
113
  },
52
114
  ".claude/hooks/gate-stop-dod.mjs": {
53
- "since": "0.3.0",
115
+ "since": "0.2.0",
54
116
  "hashes": [
55
117
  "de1f331eaf93bad6ef0e1734789fd3c4ab07550a85ed2d8ff8888bc6f0bcfb0f",
56
- "9fb8fad4d95756fb2424a97550aa85dfab0ca8dbcf91e6d0385263ba3b929135"
118
+ "9fb8fad4d95756fb2424a97550aa85dfab0ca8dbcf91e6d0385263ba3b929135",
119
+ "7852205961cb1647b49de5f7e79820c1735b4be897adcf8f5bc3eeb49318ff78"
57
120
  ]
58
121
  },
59
122
  ".claude/hooks/guard-bash.mjs": {
60
123
  "since": "0.3.0",
61
124
  "hashes": [
62
- "4d396f412fc53094188b14348c5af4e79c7542a182630c20c4687d79899c5b0e"
125
+ "4d396f412fc53094188b14348c5af4e79c7542a182630c20c4687d79899c5b0e",
126
+ "e7a513216ebbceaa7f11ec8fb611de8bb5d5925dfdfd75b779dcb7c0ee6e83cc"
63
127
  ]
64
128
  },
65
129
  ".claude/hooks/guard-core-purity.mjs": {
66
- "since": "0.3.0",
130
+ "since": "0.2.0",
67
131
  "hashes": [
68
- "e36fbb92ee8395c6686fef582f29f2701747074b3b781bed42fe068f5c000bd7"
132
+ "e36fbb92ee8395c6686fef582f29f2701747074b3b781bed42fe068f5c000bd7",
133
+ "282faa364c2d152808cd92ff7e39da26fd0549a5b2d0af9711d3453be2c666eb"
134
+ ]
135
+ },
136
+ ".claude/hooks/guard-secret-file.mjs": {
137
+ "since": "0.5.0",
138
+ "hashes": [
139
+ "f6b81cb7640924d2e56aced58e6b48f65df6638fb5a9099985fe5d673245c3ad"
69
140
  ]
70
141
  },
71
142
  ".claude/hooks/guard-web-boundary.mjs": {
72
- "since": "0.3.0",
143
+ "since": "0.2.0",
73
144
  "hashes": [
74
- "93d4fa0fd1c18261cc8ef2b1ae2abe3a0200cc4b5a7b1d1d4ae433ca92c514b1"
145
+ "93d4fa0fd1c18261cc8ef2b1ae2abe3a0200cc4b5a7b1d1d4ae433ca92c514b1",
146
+ "8deda7061122b69d72e708222ef2d38a971bb713269ec7fd1ca3440fe0a1150f"
75
147
  ]
76
148
  },
77
149
  ".claude/hooks/inject-rules.mjs": {
78
- "since": "0.3.0",
150
+ "since": "0.2.0",
151
+ "hashes": [
152
+ "c472419f1076ea3707d640cd5246c0e69a94c55455f6648e2cbaf300a382c8df",
153
+ "17c299ea4c6202745a3f8813aaef7711eb9030bf0a220cca77b58cac98c95940"
154
+ ]
155
+ },
156
+ ".claude/hooks/lib/edit-input.mjs": {
157
+ "since": "0.5.0",
79
158
  "hashes": [
80
- "c472419f1076ea3707d640cd5246c0e69a94c55455f6648e2cbaf300a382c8df"
159
+ "4f836bc3ff75a868ffe035b179ac9e7dc1ad7715d520677ff9f6aa5bfdb200eb"
81
160
  ]
82
161
  },
83
162
  ".claude/queue.json": {
@@ -87,89 +166,144 @@
87
166
  ]
88
167
  },
89
168
  ".claude/rules/architecture.md": {
90
- "since": "0.3.0",
169
+ "since": "0.2.0",
91
170
  "hashes": [
92
171
  "c63ee846180efcf4bacb4a13ca19bdc043c0885103fcea11f702e0685921facf"
93
172
  ]
94
173
  },
95
174
  ".claude/rules/autonomy.md": {
96
- "since": "0.3.0",
175
+ "since": "0.2.0",
97
176
  "hashes": [
98
- "ce2104ce697d3e5ed9210e85fe0daeb66b432a36868493f06fec54073a5fff31"
177
+ "c3aa6ea4487adf6d542174f491bf469d8f8563ec7c8c4de63fcd82d6a5ca4fba",
178
+ "ce2104ce697d3e5ed9210e85fe0daeb66b432a36868493f06fec54073a5fff31",
179
+ "530f63a4b29a5cc67867fa7b23575db81d42609ae401bfc4089b05194c586c21"
99
180
  ]
100
181
  },
101
182
  ".claude/rules/aws-cdk.md": {
102
- "since": "0.3.0",
183
+ "since": "0.2.0",
103
184
  "hashes": [
104
- "e0a283559710d15035668d8b04e47228fce442ac4e37458caca24b429a65b25e"
185
+ "2fab2b4031bda98f0412fd767615abc8035d142888530756130dd7ef8e94da71",
186
+ "e0a283559710d15035668d8b04e47228fce442ac4e37458caca24b429a65b25e",
187
+ "5d552d60c4ca7b6ab63cc6196fc91b9530e27806a042cac9523ca16e3210eb02"
105
188
  ]
106
189
  },
107
190
  ".claude/rules/invariants.md": {
108
191
  "since": "0.3.0",
109
192
  "hashes": [
110
193
  "b24bbf3e596033719eff463d317ba1e933d0661e48bfa8eafba8d6dca1453a59",
111
- "518d9b3d7cbae50f30c86d33b2b4bbea11ab3ba6cfef270876e92604b2af5f50"
194
+ "518d9b3d7cbae50f30c86d33b2b4bbea11ab3ba6cfef270876e92604b2af5f50",
195
+ "389484f0846c3dd8207c0f41bd56409103fbcc7f58b94b1bf4bd1d81b5af0e87"
112
196
  ]
113
197
  },
114
198
  ".claude/rules/node-ts.md": {
115
- "since": "0.3.0",
199
+ "since": "0.2.0",
116
200
  "hashes": [
117
201
  "3db68a4280cc30655be56fed9385179c378f560f3df55e21952a24066427e845"
118
202
  ]
119
203
  },
120
204
  ".claude/rules/workflow.md": {
121
- "since": "0.3.0",
205
+ "since": "0.2.0",
122
206
  "hashes": [
123
207
  "dbe8025e10583e03fee5056e88aa6b73e4399453711d9156d82528a02d6e0402",
124
- "9e60d0300e856a9b3f81ab748bf2c0a9de27233ad0aa58a8c7141413fa0f3cae"
208
+ "9e60d0300e856a9b3f81ab748bf2c0a9de27233ad0aa58a8c7141413fa0f3cae",
209
+ "c8e9849a8fccd4e1e60b1ddc82937eb15aceb7f7c2afbd151b05e1bc966bfd2a"
210
+ ]
211
+ },
212
+ ".claude/scripts/decision-router.mjs": {
213
+ "since": "0.5.0",
214
+ "hashes": [
215
+ "783b5b455a56c6a3e3723f3c6da861e0a945562acb686b86ab9d0e16dbd552a6"
125
216
  ]
126
217
  },
127
218
  ".claude/scripts/detect-missed-gate.mjs": {
128
219
  "since": "0.3.0",
129
220
  "hashes": [
130
221
  "bad5ce92a1c1f97ef2c25ebd216e945329e544337aa33e530631ed922ea8c495",
131
- "edcebe8ac78cf832a42e3b6fb70fe458a9fec4cb5f8b7b4cf276efc4f9c06a64"
222
+ "edcebe8ac78cf832a42e3b6fb70fe458a9fec4cb5f8b7b4cf276efc4f9c06a64",
223
+ "120ee3b90497b9023528a7f8b4e7f48c30a578fad62d94d55d1d280240e5e3a2"
224
+ ]
225
+ },
226
+ ".claude/scripts/git-env.mjs": {
227
+ "since": "0.5.0",
228
+ "hashes": [
229
+ "ff9f3c848a3881b67a8f795a4d172f407d896447e21dd3a9c4903365977d4519"
230
+ ]
231
+ },
232
+ ".claude/scripts/lib/secrets.mjs": {
233
+ "since": "0.5.0",
234
+ "hashes": [
235
+ "dc4a300646f12459c0c37e380b325451474e1ec113482381e0fad80aceb88049"
236
+ ]
237
+ },
238
+ ".claude/scripts/lib/verdict.mjs": {
239
+ "since": "0.5.0",
240
+ "hashes": [
241
+ "4d33a07a53a502277fcc6e5d7f9a89738b75e1d672dd1e6985c058bb4c35c0de"
132
242
  ]
133
243
  },
134
244
  ".claude/scripts/preflight.mjs": {
135
245
  "since": "0.3.0",
136
246
  "hashes": [
137
247
  "21083ff7baeebf8aedbdf85679a353f671276a9e0201a58a8235ae63f55f081c",
138
- "ceb6d35fa028f9c5e5e2d5965c627095d5ba80c37191a584627b4bc645b6be15"
248
+ "ceb6d35fa028f9c5e5e2d5965c627095d5ba80c37191a584627b4bc645b6be15",
249
+ "efa193dc543237d82dcb371fa1df6483ccd43c1db88d0e218f5d89769564974c"
250
+ ]
251
+ },
252
+ ".claude/scripts/queue/checkout.mjs": {
253
+ "since": "0.5.0",
254
+ "hashes": [
255
+ "635db278182c7a2a4edcf8effadbfb0837cfceb8dc78bae4cc15d5d101e07fa6"
139
256
  ]
140
257
  },
141
258
  ".claude/scripts/queue/core.mjs": {
142
259
  "since": "0.3.0",
143
260
  "hashes": [
144
261
  "214f36e39f3809da5a121f404005d16a694280ca672ed10150b1b07d47912f6a",
145
- "d8a5916bae71efcc6a21978af713112c9ec33a7554fd07f5978bdf2c3633b560"
262
+ "d8a5916bae71efcc6a21978af713112c9ec33a7554fd07f5978bdf2c3633b560",
263
+ "1804c2351a4f3042dc6a3fb4203f96e98ae12bec32569b99bda77d002d6ba5f2"
264
+ ]
265
+ },
266
+ ".claude/scripts/queue/gate-rounds.mjs": {
267
+ "since": "0.5.0",
268
+ "hashes": [
269
+ "7577674d5477cfc388594e4c301601e329d60741dfa0b2844be2cc94a3ab6283"
146
270
  ]
147
271
  },
148
272
  ".claude/scripts/queue/github-issues.mjs": {
149
273
  "since": "0.3.0",
150
274
  "hashes": [
151
275
  "f473f0ee5fc469f47b2b21ee601310944faa1abed21942e97ed251aba826cd5d",
152
- "86489ac7fcd06e43e31fb3d0ac9ab23174ef9c95196b08f127f1ae74da620c0c"
276
+ "86489ac7fcd06e43e31fb3d0ac9ab23174ef9c95196b08f127f1ae74da620c0c",
277
+ "f84148fee47109a388a248c51d3eb40919ce341785b561dd4135b69c6fedabf3"
153
278
  ]
154
279
  },
155
280
  ".claude/scripts/queue/index.mjs": {
156
281
  "since": "0.3.0",
157
282
  "hashes": [
158
- "cd149245dc29ef7489ae0e5394fa5a063dea2cc017bd3cbbface1ace6f8d7b46"
283
+ "cd149245dc29ef7489ae0e5394fa5a063dea2cc017bd3cbbface1ace6f8d7b46",
284
+ "7db3c17b781e6876b4822afd09e6affa97e46607b63d443975d987daf1f14464"
159
285
  ]
160
286
  },
161
287
  ".claude/scripts/queue/jira.mjs": {
162
288
  "since": "0.3.0",
163
289
  "hashes": [
164
290
  "13e187a4005136a9a1fae5fb5a3d2a61c3cf5dc097b467c12622ad82a0fd5d52",
165
- "86591a48b9264d641c2530238ea3720705f12e17af2ec8dccecabfa3a742a2e7"
291
+ "86591a48b9264d641c2530238ea3720705f12e17af2ec8dccecabfa3a742a2e7",
292
+ "13c301f828d4402fcf81e7e0b2b1d22472cbdb50f6fd606770056af4ec215e51"
166
293
  ]
167
294
  },
168
295
  ".claude/scripts/queue/plan-md.mjs": {
169
296
  "since": "0.3.0",
170
297
  "hashes": [
171
298
  "d137dad23f263b1a12b04b46625247fea648ded36d0fea7c5b4e4f2211a142eb",
172
- "07eab69bd86b19b7a1f01eb14efe4f8c007481806cbe029d4014fe9bf0703000"
299
+ "07eab69bd86b19b7a1f01eb14efe4f8c007481806cbe029d4014fe9bf0703000",
300
+ "27d7ae3832a32219d5c0ab136bc542388eb686e9f34053c3058104cdeea1574d"
301
+ ]
302
+ },
303
+ ".claude/scripts/queue/state.mjs": {
304
+ "since": "0.5.0",
305
+ "hashes": [
306
+ "ff7e7a46eb71989c2a7be7bc3f77922b49ad9071b2dec49787d8b7be087edb5b"
173
307
  ]
174
308
  },
175
309
  ".claude/scripts/reconcile-external-prs.mjs": {
@@ -178,29 +312,53 @@
178
312
  "a326acd64ea19a50d093c91e711ad0234eb05c76d00066db5657c22f4355c190"
179
313
  ]
180
314
  },
315
+ ".claude/scripts/run-journal.mjs": {
316
+ "since": "0.5.0",
317
+ "hashes": [
318
+ "4511ff2c982750e20b576fd9eca8ec6c3b4ab81874a3109392418793b82cd5c4"
319
+ ]
320
+ },
321
+ ".claude/scripts/run-state.mjs": {
322
+ "since": "0.5.0",
323
+ "hashes": [
324
+ "5682b4ef1e63b83e1398da4959d8b34f52aede38f896557c041687d101df015f"
325
+ ]
326
+ },
181
327
  ".claude/scripts/stop-flag.mjs": {
182
328
  "since": "0.3.0",
183
329
  "hashes": [
184
330
  "ff4c8edbb715e7b552e8b5a5299e151871e85416568ce20ff8d8a0b4300a78a8"
185
331
  ]
186
332
  },
333
+ ".claude/scripts/verdict.mjs": {
334
+ "since": "0.5.0",
335
+ "hashes": [
336
+ "a85ab47b6ab9a67e79ba77b47bd6bdfba4c03b66709dcb9784d4f244bed8f76a"
337
+ ]
338
+ },
187
339
  ".claude/settings.json": {
188
- "since": "0.3.0",
340
+ "since": "0.2.0",
189
341
  "hashes": [
190
- "55a6938b4d9967291a26e93301e34e5ffdef74a88f8c773a4d11b5d87d864fff"
342
+ "48212660b2823725c2c9ee785ad739701e4c0e4733b275201a544df1abba28d0",
343
+ "55a6938b4d9967291a26e93301e34e5ffdef74a88f8c773a4d11b5d87d864fff",
344
+ "713718fbb2cda132f05665b29b8f1108a6305729b5e7c789d2053d117c13e08e"
191
345
  ]
192
346
  },
193
347
  ".claude/skills/check-premises/SKILL.md": {
194
348
  "since": "0.3.2",
195
349
  "hashes": [
196
- "d69396da276f748c89ca0284fcd606ce70da8a791defafe9c9b27ce5f8ffd29e"
350
+ "d69396da276f748c89ca0284fcd606ce70da8a791defafe9c9b27ce5f8ffd29e",
351
+ "e228eaebcd1dfa0e490f8f4260e349040bd742fdb6d2313698fd7925f8a7b058"
197
352
  ]
198
353
  },
199
354
  ".claude/skills/loop/SKILL.md": {
200
- "since": "0.3.0",
355
+ "since": "0.2.0",
201
356
  "hashes": [
357
+ "0b028dcdbdbb4802fcb6c7f944decf68175dbde870ae3cecc9d2e4de5c3678bf",
202
358
  "e14318a1bf4cbb19edaaabadcf14482bc70bcdcfdc2057231b15685d149db550",
203
- "8f687f92fa60d4cc679fa13bff997cec92227f6bc0b90c1dc5b8a5400f2abef0"
359
+ "8f687f92fa60d4cc679fa13bff997cec92227f6bc0b90c1dc5b8a5400f2abef0",
360
+ "e442ca58c4249ac10d5759bba2d8360544642e03b2b158e6253e71f5be3767fb",
361
+ "eb52ef41269018107534d8dc2f552c57698e1677a1e76b5e666b5d09c007cac0"
204
362
  ]
205
363
  },
206
364
  ".claude/skills/new-invariant/SKILL.md": {
@@ -222,16 +380,18 @@
222
380
  ]
223
381
  },
224
382
  ".claude/skills/post-deploy-verify/SKILL.md": {
225
- "since": "0.3.0",
383
+ "since": "0.2.0",
226
384
  "hashes": [
227
- "321ae18feff82f1f8a64e19a6170056dc9b18a71e6f2a80d46293510b9748a46"
385
+ "321ae18feff82f1f8a64e19a6170056dc9b18a71e6f2a80d46293510b9748a46",
386
+ "20c919cefc0b2c351c6e03d18f465b0f99f8a192c8ef0a0f78eeceb0499f2fbc"
228
387
  ]
229
388
  },
230
389
  ".claude/skills/pr-ship/SKILL.md": {
231
- "since": "0.3.0",
390
+ "since": "0.2.0",
232
391
  "hashes": [
233
392
  "368a50be809f7be865d6d29ab3e54b9d69acd2ea3ba7929c0edeef161c2521b7",
234
- "75adb84414a330db621ff4f1363b3926f537133199236a9e25bb9880b935e02e"
393
+ "75adb84414a330db621ff4f1363b3926f537133199236a9e25bb9880b935e02e",
394
+ "a2fb0d03c65701af9d2d69cbcb2582ae573f097b1e1071eb2916e5e4f7832b37"
235
395
  ]
236
396
  },
237
397
  ".claude/skills/ro-debug/SKILL.md": {
@@ -246,17 +406,118 @@
246
406
  "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c"
247
407
  ]
248
408
  },
409
+ ".codex/agents/cdk-diff-reviewer.toml": {
410
+ "since": "0.5.0",
411
+ "hashes": [
412
+ "902dbace9532ec8e7a3c0cfd6ea0934227f087e345c0619923ec03512b26ba3e"
413
+ ]
414
+ },
415
+ ".codex/agents/code-reviewer.toml": {
416
+ "since": "0.5.0",
417
+ "hashes": [
418
+ "e0e3475404c95402f33d77ebb14001e289d26bb429205a0a73bdcef99b4a62c7"
419
+ ]
420
+ },
421
+ ".codex/agents/prose-reviewer.toml": {
422
+ "since": "0.5.0",
423
+ "hashes": [
424
+ "80b4631502d95c619ad060ce02cc8702b12574758ba7df8337ed63efa15d764d"
425
+ ]
426
+ },
427
+ ".codex/agents/security-scanner.toml": {
428
+ "since": "0.5.0",
429
+ "hashes": [
430
+ "9ee408789f237a0b55aac6a2472682a08f8696e1d1ff4918ea72766ac8535499"
431
+ ]
432
+ },
433
+ ".codex/agents/test-writer.toml": {
434
+ "since": "0.5.0",
435
+ "hashes": [
436
+ "bb89d93f57d70885d98cfbe428caa524e9c00e1ce30da235ed3318c1ba3c9606"
437
+ ]
438
+ },
439
+ ".codex/hooks.json": {
440
+ "since": "0.5.0",
441
+ "hashes": [
442
+ "c676647d585ec87427545a391598706ecaa74dfe413a7e05877e336bf8942874"
443
+ ]
444
+ },
445
+ "AGENTS.md": {
446
+ "since": "0.5.0",
447
+ "hashes": [
448
+ "616ab573d3cf4b603bb4bfbc5e7631d17ebaa696af16474845fdaf35f41d0a97"
449
+ ]
450
+ },
249
451
  "CLAUDE.md": {
250
- "since": "0.3.0",
452
+ "since": "0.2.0",
251
453
  "hashes": [
454
+ "955c7f7952ba63429eaebc58c7d6d0559f56c279ce32076b4ff19bd36389a839",
252
455
  "8a4f5fab7cbaf3ba2482035f7ddb3cf6e3a3a3313596d25a856506e970d55db7",
253
- "a247fdd1d198777f4963da42ccc10dfd9c372f4bb0488d2c0201a49d6bfd1910"
456
+ "a247fdd1d198777f4963da42ccc10dfd9c372f4bb0488d2c0201a49d6bfd1910",
457
+ "616ab573d3cf4b603bb4bfbc5e7631d17ebaa696af16474845fdaf35f41d0a97"
254
458
  ]
255
459
  },
256
460
  "PLAN.md": {
257
- "since": "0.3.0",
461
+ "since": "0.2.0",
462
+ "hashes": [
463
+ "fe7547b40c1ac0d6e2bcba5bf8ae887a03f338c95454a851475cdee1d2b4db31",
464
+ "1691fba2791d7d893e366e4a18bc120d4e4a96213bebbfb2a28881e13de74389",
465
+ "e927216c4f179bc42540544f5c70534ce69110dafc3c6fe9a970ac625ebe4678",
466
+ "a33d02bcb9e38ac0dd3e689aa8b6637e77044eba5650803db2b6dc0483044d3d"
467
+ ]
468
+ },
469
+ "docs/decisions/closing-a-task.md": {
470
+ "since": "0.5.0",
471
+ "hashes": [
472
+ "650b379d2fc9e16dbb4113395ff08b8f96625069e21721133364191293fe3eea"
473
+ ]
474
+ },
475
+ "docs/decisions/codex-adapter.md": {
476
+ "since": "0.5.0",
477
+ "hashes": [
478
+ "30e55d866d9a2c7359e594181070c63b1974d9df36e000caf419229284303a2e"
479
+ ]
480
+ },
481
+ "docs/decisions/fail-open-guards.md": {
482
+ "since": "0.5.0",
483
+ "hashes": [
484
+ "9408b59fdb7a0e93d8e6762bf5d76f1afd6d4b0942d9395155dab4cb42c1bf80"
485
+ ]
486
+ },
487
+ "docs/decisions/review-lanes.md": {
488
+ "since": "0.5.0",
489
+ "hashes": [
490
+ "1ba78f5d928db0c288b4c3b818cdc25ae82c2524267d069030f9c71c4b38fd71"
491
+ ]
492
+ },
493
+ "docs/decisions/run-directory.md": {
494
+ "since": "0.5.0",
495
+ "hashes": [
496
+ "6128953b794bb0a3e5b4586d11d9ab8af8d0c37c7e19f556254d0e92a632363b"
497
+ ]
498
+ },
499
+ "docs/decisions/spacing-rations-mechanisms.md": {
500
+ "since": "0.5.0",
501
+ "hashes": [
502
+ "883852ffc14b9f0b6101f67b7045567056d2c5630e79391a6e542d6d3854095a"
503
+ ]
504
+ },
505
+ "docs/decisions/stop-conditions-in-a-file.md": {
506
+ "since": "0.5.0",
507
+ "hashes": [
508
+ "dc0c9f5988fc983eb5100a085e274691b1e88a3b54ab2797e00972c4d69d61c4"
509
+ ]
510
+ },
511
+ "docs/decisions/two-empty-endings.md": {
512
+ "since": "0.5.0",
513
+ "hashes": [
514
+ "312cfccb609f35f4ba42f8aabc9ac939cfc01f5c109a123d3087fce5d248b636"
515
+ ]
516
+ },
517
+ "journal/README.md": {
518
+ "since": "0.5.0",
258
519
  "hashes": [
259
- "1691fba2791d7d893e366e4a18bc120d4e4a96213bebbfb2a28881e13de74389"
520
+ "6f9b3692bec078a875efad7afd5a80418b8e930f3dad0708e53a567baab888b8"
260
521
  ]
261
522
  }
262
523
  }
@@ -0,0 +1,9 @@
1
+ {
2
+ "0.1.0": null,
3
+ "0.2.0": "db1d67b191cfa5b7393fd977d28071815f34b641",
4
+ "0.3.0": "2135db86380679ff6b0faebae32fd02b6060d20b",
5
+ "0.3.1": "ce9437de8a734d04d65292b37356f47214238bde",
6
+ "0.3.2": "bbcb24fd8ff5290826ee3b152b5130f6bd4697da",
7
+ "0.4.0": "c77c6c3e5d991a55b733a05a3b5ae01e2a55e578",
8
+ "0.5.0": "d78d0e77307a2be128de46ff4f64e3c146b5df2b"
9
+ }
@@ -53,5 +53,38 @@ jobs:
53
53
  role-to-assume: ${{ secrets.AWS_DEPLOY_ROLE_ARN }}
54
54
  aws-region: ${{ vars.AWS_REGION || '__REGION__' }}
55
55
 
56
+ # `--require-approval never` is deliberate and dev-only: this workflow has
57
+ # no production path at all (see the header), so the approval prompt would
58
+ # only ever block an unattended dev deploy on a change nobody is watching.
56
59
  - if: steps.guard.outputs.skip != 'true'
57
- run: pnpm --filter @app/infra exec cdk deploy AppStack WebStack --require-approval never
60
+ run: >
61
+ pnpm --filter @app/infra exec cdk deploy AppStack WebStack
62
+ --require-approval never --outputs-file cdk-outputs.json
63
+
64
+ # The bundle is built above and the bucket is created by the deploy — but
65
+ # nothing puts one into the other, so without this step CloudFront keeps
66
+ # serving whatever was uploaded by hand, last time somebody remembered.
67
+ # `web-stack.ts` deliberately does not use BucketDeployment (synth must
68
+ # never depend on `next build` having run), which is why the upload lives
69
+ # here rather than in the stack.
70
+ - if: steps.guard.outputs.skip != 'true'
71
+ name: Upload the web bundle and invalidate the edge cache
72
+ run: |
73
+ # `jq -r` prints the string "null" and exits 0 for a missing key, and
74
+ # GitHub's shell is `bash -e` with no `-u` and no pipefail — so a
75
+ # renamed stack or a half-finished deploy would sync the bundle into
76
+ # `s3://null`, a real bucket in a global namespace someone else owns,
77
+ # and issue --delete against it. `-e` makes jq exit non-zero instead.
78
+ set -euo pipefail
79
+ BUCKET=$(jq -er '.WebStack.WebBucketName' infra/cdk-outputs.json)
80
+ DISTRIBUTION=$(jq -er '.WebStack.WebDistributionId' infra/cdk-outputs.json)
81
+ # An existing-but-empty bundle syncs zero objects, and --delete then
82
+ # empties the live site with a green checkmark.
83
+ [ -n "$(ls -A apps/web/out 2>/dev/null)" ] || {
84
+ echo "apps/web/out is empty — refusing to sync"; exit 1;
85
+ }
86
+ # --delete makes the bucket the bundle's territory alone: anything not
87
+ # in this build is removed from it.
88
+ aws s3 sync apps/web/out "s3://$BUCKET" --delete
89
+ aws cloudfront create-invalidation \
90
+ --distribution-id "$DISTRIBUTION" --paths '/*'