create-anpunkit 2.0.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 (66) hide show
  1. package/README.md +44 -0
  2. package/bin/cli.js +41 -0
  3. package/package.json +34 -0
  4. package/template/.claude/agents/debugger.md +47 -0
  5. package/template/.claude/agents/e2e-runner.md +63 -0
  6. package/template/.claude/agents/implementer.md +78 -0
  7. package/template/.claude/agents/infra-provisioner.md +159 -0
  8. package/template/.claude/agents/planner.md +78 -0
  9. package/template/.claude/agents/researcher.md +103 -0
  10. package/template/.claude/agents/synthesizer.md +74 -0
  11. package/template/.claude/agents/test-author.md +71 -0
  12. package/template/.claude/anpunkit-manifest.json +256 -0
  13. package/template/.claude/commands/infra.md +62 -0
  14. package/template/.claude/commands/log-decision.md +34 -0
  15. package/template/.claude/commands/log-issue.md +28 -0
  16. package/template/.claude/commands/overview.md +106 -0
  17. package/template/.claude/commands/phase.md +202 -0
  18. package/template/.claude/commands/quick.md +30 -0
  19. package/template/.claude/commands/replan.md +64 -0
  20. package/template/.claude/commands/store-wisdom.md +195 -0
  21. package/template/.claude/commands/synthesize.md +26 -0
  22. package/template/.claude/commands/unstuck.md +40 -0
  23. package/template/.claude/hooks/cursor-session-start.sh +14 -0
  24. package/template/.claude/hooks/pre-compact.sh +25 -0
  25. package/template/.claude/hooks/session-start.sh +135 -0
  26. package/template/.claude/hooks/subagent-stop.sh +11 -0
  27. package/template/.claude/settings.json +16 -0
  28. package/template/.claude/skills/caveman/SKILL.md +39 -0
  29. package/template/.claude/skills/grill-me/SKILL.md +10 -0
  30. package/template/.claude/skills/karpathy-guidelines/SKILL.md +34 -0
  31. package/template/.cursor/commands/infra.md +57 -0
  32. package/template/.cursor/commands/log-decision.md +29 -0
  33. package/template/.cursor/commands/log-issue.md +23 -0
  34. package/template/.cursor/commands/overview.md +102 -0
  35. package/template/.cursor/commands/phase.md +197 -0
  36. package/template/.cursor/commands/quick.md +25 -0
  37. package/template/.cursor/commands/replan.md +59 -0
  38. package/template/.cursor/commands/store-wisdom.md +191 -0
  39. package/template/.cursor/commands/synthesize.md +22 -0
  40. package/template/.cursor/commands/unstuck.md +36 -0
  41. package/template/.cursor/hooks.json +14 -0
  42. package/template/.cursor/rules/anpunkit.md +11 -0
  43. package/template/.gitattributes +12 -0
  44. package/template/AGENTS.md +216 -0
  45. package/template/CLAUDE.md +70 -0
  46. package/template/README.md +283 -0
  47. package/template/commands.src/infra.md +62 -0
  48. package/template/commands.src/log-decision.md +34 -0
  49. package/template/commands.src/log-issue.md +28 -0
  50. package/template/commands.src/overview.md +106 -0
  51. package/template/commands.src/phase.md +202 -0
  52. package/template/commands.src/quick.md +30 -0
  53. package/template/commands.src/replan.md +64 -0
  54. package/template/commands.src/store-wisdom.md +195 -0
  55. package/template/commands.src/synthesize.md +26 -0
  56. package/template/commands.src/unstuck.md +40 -0
  57. package/template/docker-compose.test.yml +34 -0
  58. package/template/docs/DESIGN_LOG.md +578 -0
  59. package/template/e2e/global-setup.ts +57 -0
  60. package/template/playwright.config.ts +28 -0
  61. package/template/scripts/auth-setup.sh +51 -0
  62. package/template/scripts/e2e-stack.sh +65 -0
  63. package/template/scripts/regression.sh +46 -0
  64. package/template/setup.sh +236 -0
  65. package/template/tests/phase-1/README.md +4 -0
  66. package/template/tests/regression/README.md +11 -0
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: synthesizer
3
+ description: Compresses handoff docs at the end of a phase. On the final phase (no further pending phases), runs an extended pass that also updates README.md and OVERVIEW.md to reflect the completed project.
4
+ tools: Read, Write, Edit, Bash
5
+ model: haiku
6
+ ---
7
+
8
+ You are the SYNTHESIZER. Caveman ULTRA mode.
9
+
10
+ Why you exist: STATE.md and ISSUES.md grow with no cleanup. You keep them small.
11
+
12
+ Do NOT touch docs/DESIGN_LOG.md — owned by /log-decision.
13
+ Do NOT touch docs/INFRA.md — owned by infra-provisioner.
14
+ Do NOT touch docs/ENDPOINTS.md — owned by implementer.
15
+
16
+ ---
17
+
18
+ ## Standard tasks (every phase — do all, in order)
19
+
20
+ 1. STATE.md — rewrite, do not append. Keep ONLY:
21
+ - current phase + status
22
+ - what was just completed (1-3 bullets)
23
+ - the immediate next action
24
+ - any open blocker
25
+ Target: under 25 lines.
26
+
27
+ 2. ISSUES.md — dedup + compress:
28
+ - merge duplicate / near-duplicate issues.
29
+ - collapse resolved issues older than last 2 phases into one-line summaries
30
+ under `## Archived`.
31
+ - keep all OPEN issues full-detail at the top.
32
+
33
+ 3. docs/.snapshots/ — delete precompact snapshots older than the newest 3.
34
+
35
+ 4. Append a single dated line to docs/HISTORY.md:
36
+ `YYYY-MM-DD phase <n> done - <one line>`
37
+
38
+ ---
39
+
40
+ ## Final-phase extended pass
41
+
42
+ The orchestrator will tell you when this is the final phase (no further pending
43
+ phases remain in PLAN.md). When told, ALSO do:
44
+
45
+ 5. Update docs/OVERVIEW.md — append a "## Final state" section:
46
+ ```
47
+
48
+ ## Final state
49
+
50
+ Completed: <YYYY-MM-DD>
51
+ Phases: <count> code phases + Phase 0 infra
52
+ Deployed URL: <from docs/INFRA.md “Deployed base URL”>
53
+ All phases: done
54
+
55
+ ```
56
+ 6. Update README.md (the project-level README, not the anpunkit README) — if a
57
+ project README exists at the repo root, update or append:
58
+ - Current status: "Production — deployed at <URL>"
59
+ - Brief description of what was built (from OVERVIEW.md summary)
60
+ - Link to docs/ENDPOINTS.md for the API surface
61
+ If no project README exists, note this in the return and skip.
62
+
63
+ Return format:
64
+ ```
65
+
66
+ SYNTHESIZED
67
+
68
+ - STATE.md: <old line count> -> <new>
69
+ - ISSUES.md: <old> -> <new>, merged <k>, archived <m>
70
+ - snapshots pruned: <count>
71
+ - final pass: <yes — OVERVIEW.md + README.md updated | no>
72
+ - safe to /clear: yes
73
+
74
+ ```
@@ -0,0 +1,71 @@
1
+ ---
2
+ name: test-author
3
+ description: Writes tests for a phase WITHOUT reading the implementation logic. On TDD phases, writes the suite BEFORE logic exists (RED-first). Tests behavior from the plan's acceptance spec only.
4
+ tools: Read, Grep, Glob, Write, Bash
5
+ model: opus
6
+ ---
7
+
8
+ You are the TEST-AUTHOR. Caveman ULTRA mode. You write UNBIASED tests.
9
+
10
+ ## RED-FIRST (TDD phases)
11
+
12
+ On a TDD phase you are dispatched BEFORE any logic exists — only interface stubs
13
+ are present. You read the stub signatures (allowed) and the acceptance spec, and
14
+ write the REAL API suite (+ mock) against them. Because there is no logic body to
15
+ peek at, your blindness is STRUCTURAL, not honor-system.
16
+
17
+ - The suite MUST collect/import cleanly AND FAIL (assertion failure or
18
+ NotImplemented). That is the RED gate.
19
+ - A test that PASSES on bare stubs is wrong — the spec is trivial or the test is
20
+ broken. Fix the test; NEVER ship green-on-stubs.
21
+ - Cannot tell what to assert from the spec? Return UNDERSPEC (do not invent a
22
+ contract).
23
+
24
+ ## Blind constraint (all phases)
25
+
26
+ - You may read: docs/PLAN.md (acceptance + slice), public interface signatures /
27
+ stubs, test framework config.
28
+ - You must NOT read implementation LOGIC bodies. Do not open source files for
29
+ their internals.
30
+ - Cannot tell what to test without reading the logic? Return UNDERSPEC.
31
+
32
+ ## TWO SUITES — write BOTH
33
+
34
+ 1. MOCK suite — fast, no external dependency. Mocks ONLY the external boundary.
35
+ 2. REAL API suite — real HTTP against running backend + real Azure services.
36
+ No mocks on the external boundary. Code/API-level — not browser E2E.
37
+
38
+ ## Test placement (regression layout)
39
+
40
+ - Public-contract / ENDPOINTS-surface tests -> `tests/regression/` (the
41
+ cross-phase corpus). A regression test must NOT depend on phase-local fixtures.
42
+ - Phase-local tests -> `tests/phase-<n>/`.
43
+ - mock vs real is a fixture/env FLAG on the SAME test, not duplicated files.
44
+
45
+ ## Rules
46
+
47
+ - Test observable behavior from `acceptance`. Cover happy path + edge + failure.
48
+ - Run both suites. Report honestly. Never edit a test to make it pass.
49
+ - FAILURE CLASSIFICATION for every real-suite failure:
50
+ - LOGIC FAIL: code's behavior is wrong.
51
+ - SERVICE UNAVAILABLE: outage / rate limit / auth / network — not our code.
52
+
53
+ PHASE GATE: your part = REAL API suite passing AND the accumulated mock regression
54
+ corpus staying green. For frontend phases, e2e-runner adds the browser gate on
55
+ top. Green mock alone CANNOT close a phase.
56
+
57
+ RETURN:
58
+ ```
59
+
60
+ TESTS WRITTEN: phase <n>
61
+
62
+ - red-first: <yes (TDD) | n/a (non-TDD)>
63
+ - files: <mock suite files> | <real suite files> (note regression vs phase-local)
64
+ - RED gate: <COLLECTS+FAILS as required | passed-on-stubs=BAD | n/a>
65
+ - mock result: <X pass / Y fail>
66
+ - real API result: <X pass / Y fail>
67
+ - failures: <behavior, expected vs actual, + LOGIC FAIL or SERVICE UNAVAILABLE>
68
+ - external service hit: <name / none>
69
+ - PHASE GATE: PASS | FAIL | BLOCKED (service unavailable)
70
+
71
+ ```
@@ -0,0 +1,256 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "files": [
4
+ {
5
+ "path": "AGENTS.md",
6
+ "sha256": "638d0c19fbc614e162d83b8b5e315c9f38180eaec8d8a88c825d36d6d9ec416b"
7
+ },
8
+ {
9
+ "path": "CLAUDE.md",
10
+ "sha256": "e9d84381044c68d1b7289708de20bc6d2202eca3f39a2f63e7824a36fa18e299"
11
+ },
12
+ {
13
+ "path": "README.md",
14
+ "sha256": "56a76a3fefacbf5ffc37d5b1f43748a628e0e4a8142ce2d6058957f8a22781a0"
15
+ },
16
+ {
17
+ "path": ".gitattributes",
18
+ "sha256": "51ca20efd556b51644b3fd938cd07ff86a17170edd09f7c9caf718911a56b0a2"
19
+ },
20
+ {
21
+ "path": "setup.sh",
22
+ "sha256": "6e833255c4aeb5f7824db3fe332535f8f0816a0cbf79a0f8f16ee07b606753cf"
23
+ },
24
+ {
25
+ "path": ".claude/agents/debugger.md",
26
+ "sha256": "4ddc97252275db82356489061b87b71ac39bd9e4cc7a47d0501132c7c7024a52"
27
+ },
28
+ {
29
+ "path": ".claude/agents/e2e-runner.md",
30
+ "sha256": "9d1f1134092abc28a23a3e48a2fda3aa74b7644267692edad464498e776445f7"
31
+ },
32
+ {
33
+ "path": ".claude/agents/implementer.md",
34
+ "sha256": "9c2d5e166bac94bfff31a775766094a4275c5a8d1da9bae7823e824f5c307fe6"
35
+ },
36
+ {
37
+ "path": ".claude/agents/infra-provisioner.md",
38
+ "sha256": "56fa8dd1a6bc526a8d73f71b8e0b5980aec71ca6610070f222cbb77d348c66fb"
39
+ },
40
+ {
41
+ "path": ".claude/agents/planner.md",
42
+ "sha256": "3ba23521d9f1190a16402ad900d90932519517711fc3ec783eee21ff920a0042"
43
+ },
44
+ {
45
+ "path": ".claude/agents/researcher.md",
46
+ "sha256": "01b25384b6b6743c60e79e1cc9a2997895c86a6b509375b527a1aa8b70be4306"
47
+ },
48
+ {
49
+ "path": ".claude/agents/synthesizer.md",
50
+ "sha256": "d17de592a3c83f2439ff9be68337d04c9d4933aa2193c68372005a85a2fdec95"
51
+ },
52
+ {
53
+ "path": ".claude/agents/test-author.md",
54
+ "sha256": "9af796a9d8e7302847e57fb61e484d0e3f26325586ebbb7e1a79ba20ead1057b"
55
+ },
56
+ {
57
+ "path": ".claude/hooks/cursor-session-start.sh",
58
+ "sha256": "504aa12b63508c6926cda28da14fa8951234d49d4b4318da83eecd6f115402e3"
59
+ },
60
+ {
61
+ "path": ".claude/hooks/pre-compact.sh",
62
+ "sha256": "6767551a1eddd09efe01cdb09e3e687165ef204588bf01b4a05836f22b5e2527"
63
+ },
64
+ {
65
+ "path": ".claude/hooks/session-start.sh",
66
+ "sha256": "9cfce17a40cebf3bc518f37b33b4fad2c47f43b5913fec03b98e96e1d232bc94"
67
+ },
68
+ {
69
+ "path": ".claude/hooks/subagent-stop.sh",
70
+ "sha256": "fd4b48484db0511e6b78ff659213ebb826e3082e37c98d67dbcb09f159c3e318"
71
+ },
72
+ {
73
+ "path": ".claude/skills/caveman/SKILL.md",
74
+ "sha256": "62c1522b986679f75e574d7f04c939405df6fc200723d67a255b36d960d9880c"
75
+ },
76
+ {
77
+ "path": ".claude/skills/grill-me/SKILL.md",
78
+ "sha256": "1cf60d6ce350314e794033ae0773303b54fd1557c3f7ffecfc64dd788fdd4edc"
79
+ },
80
+ {
81
+ "path": ".claude/skills/karpathy-guidelines/SKILL.md",
82
+ "sha256": "5423139b03a976713348ed4badd5de65e64fbf04d997e7b692917b1d0baddc3b"
83
+ },
84
+ {
85
+ "path": "commands.src/infra.md",
86
+ "sha256": "ca4e826889bd0a1bcf5298d3da5d453c3eecdb514bc50ba0d735b7f024a58dc0"
87
+ },
88
+ {
89
+ "path": "commands.src/log-decision.md",
90
+ "sha256": "90c1bd5d6e625730e0b735eefc521239a8e1f547e8f1a0e8d2b8d96ca95612ed"
91
+ },
92
+ {
93
+ "path": "commands.src/log-issue.md",
94
+ "sha256": "359967180b5dde14f36cfabda0b0a2bc8bbb17580da557805879ab4e50eabeca"
95
+ },
96
+ {
97
+ "path": "commands.src/overview.md",
98
+ "sha256": "522a091e3e0513dbc15d7f856aca77e18ff70304ac3689f312a3f578e9f3e684"
99
+ },
100
+ {
101
+ "path": "commands.src/phase.md",
102
+ "sha256": "6cd48c2bbc87e01175594682d22cd7cf652cee84790b8a5677fd4d774679d6f3"
103
+ },
104
+ {
105
+ "path": "commands.src/quick.md",
106
+ "sha256": "6517eefcc1c6458d441ebea1db736d7070abf6531a7e96c55ae00b90a0763313"
107
+ },
108
+ {
109
+ "path": "commands.src/replan.md",
110
+ "sha256": "0a599f7c223a8c82cf3f3296ed5d60e5feb97396960e959190d5872f51a602a2"
111
+ },
112
+ {
113
+ "path": "commands.src/store-wisdom.md",
114
+ "sha256": "960bf4e281d30a451298b5a34c4052cc65be5bc0e9f4a7a91140c7915a2dd362"
115
+ },
116
+ {
117
+ "path": "commands.src/synthesize.md",
118
+ "sha256": "db4a19ff627eb22fbc1f78d1e8e2c98d73ab05fdd780afe0ca62b7ce9885c21c"
119
+ },
120
+ {
121
+ "path": "commands.src/unstuck.md",
122
+ "sha256": "a675a648af299074240d3b7b4aa7ca39d41fdfc44520352c67f0895d5c5c1102"
123
+ },
124
+ {
125
+ "path": ".claude/commands/infra.md",
126
+ "sha256": "ca4e826889bd0a1bcf5298d3da5d453c3eecdb514bc50ba0d735b7f024a58dc0"
127
+ },
128
+ {
129
+ "path": ".claude/commands/log-decision.md",
130
+ "sha256": "90c1bd5d6e625730e0b735eefc521239a8e1f547e8f1a0e8d2b8d96ca95612ed"
131
+ },
132
+ {
133
+ "path": ".claude/commands/log-issue.md",
134
+ "sha256": "359967180b5dde14f36cfabda0b0a2bc8bbb17580da557805879ab4e50eabeca"
135
+ },
136
+ {
137
+ "path": ".claude/commands/overview.md",
138
+ "sha256": "522a091e3e0513dbc15d7f856aca77e18ff70304ac3689f312a3f578e9f3e684"
139
+ },
140
+ {
141
+ "path": ".claude/commands/phase.md",
142
+ "sha256": "6cd48c2bbc87e01175594682d22cd7cf652cee84790b8a5677fd4d774679d6f3"
143
+ },
144
+ {
145
+ "path": ".claude/commands/quick.md",
146
+ "sha256": "6517eefcc1c6458d441ebea1db736d7070abf6531a7e96c55ae00b90a0763313"
147
+ },
148
+ {
149
+ "path": ".claude/commands/replan.md",
150
+ "sha256": "0a599f7c223a8c82cf3f3296ed5d60e5feb97396960e959190d5872f51a602a2"
151
+ },
152
+ {
153
+ "path": ".claude/commands/store-wisdom.md",
154
+ "sha256": "960bf4e281d30a451298b5a34c4052cc65be5bc0e9f4a7a91140c7915a2dd362"
155
+ },
156
+ {
157
+ "path": ".claude/commands/synthesize.md",
158
+ "sha256": "db4a19ff627eb22fbc1f78d1e8e2c98d73ab05fdd780afe0ca62b7ce9885c21c"
159
+ },
160
+ {
161
+ "path": ".claude/commands/unstuck.md",
162
+ "sha256": "a675a648af299074240d3b7b4aa7ca39d41fdfc44520352c67f0895d5c5c1102"
163
+ },
164
+ {
165
+ "path": ".cursor/commands/infra.md",
166
+ "sha256": "24a6290a0905e744cc3d0adaf6f0d385b859e99eb8326367b6d55c7bcd66d559"
167
+ },
168
+ {
169
+ "path": ".cursor/commands/log-decision.md",
170
+ "sha256": "3a4ea21091306d2cf1d24595318c4a0bb15e9fd4283d5fb96fc26f2749f26f73"
171
+ },
172
+ {
173
+ "path": ".cursor/commands/log-issue.md",
174
+ "sha256": "abf7199d735f7c994c628711e5aabd661a0656f13ac5723f0a8ffc2f048ad027"
175
+ },
176
+ {
177
+ "path": ".cursor/commands/overview.md",
178
+ "sha256": "33710e166d3fb4e9894df709708cd5dec997dfd7fb293931e3f9212567ee06cf"
179
+ },
180
+ {
181
+ "path": ".cursor/commands/phase.md",
182
+ "sha256": "759d2d5946a9c05ade60dd5e8e47d8d94b7ab6b923be214eb5f5a9979ea6e94e"
183
+ },
184
+ {
185
+ "path": ".cursor/commands/quick.md",
186
+ "sha256": "771060033625e721b6a96f774aee4131e65ac2b0c481180004dfa8b8cef5d563"
187
+ },
188
+ {
189
+ "path": ".cursor/commands/replan.md",
190
+ "sha256": "36b47315ba813702f71530402a6ffa7c4c404bbc946c0cda571ead61ddc28874"
191
+ },
192
+ {
193
+ "path": ".cursor/commands/store-wisdom.md",
194
+ "sha256": "95d553ed835888c36b5ff188844e76c3d8c3695654904ab1284766574938c26c"
195
+ },
196
+ {
197
+ "path": ".cursor/commands/synthesize.md",
198
+ "sha256": "128067091a83934b7cc0c071713c7936cb4905cbcdd57831cecaac5301a20950"
199
+ },
200
+ {
201
+ "path": ".cursor/commands/unstuck.md",
202
+ "sha256": "d076cc6307af467f79ea41a934c1e14f2a08b01db93e80e912ab77ebd464f7be"
203
+ },
204
+ {
205
+ "path": ".cursor/rules/anpunkit.md",
206
+ "sha256": "f7ebf7b8a7d8cb6ad7cef55e06f7d36477cf0859b6f974dbb07059e81838a939"
207
+ },
208
+ {
209
+ "path": "playwright.config.ts",
210
+ "sha256": "32091109fa51b085ddf562d2896de9b25b69fb6302461bb06212078892cb994a"
211
+ },
212
+ {
213
+ "path": "e2e/global-setup.ts",
214
+ "sha256": "f9fd377d45bad7925e7645b94f5a839ee5a781f51b5ad9f1b3a8011d527f3317"
215
+ },
216
+ {
217
+ "path": "docker-compose.test.yml",
218
+ "sha256": "03d3d89354769abcfb2abb42540b4fd9d2bfcc382f62815822db9c910c01d9f7"
219
+ },
220
+ {
221
+ "path": "scripts/e2e-stack.sh",
222
+ "sha256": "98a6ab95e19e3b560887f6c7e935a1947fe59d5cf881f0da8286db66580a7ce4"
223
+ },
224
+ {
225
+ "path": "scripts/auth-setup.sh",
226
+ "sha256": "bb30646047a83bf857bf0ffc8cef0560f2ddf012d48a19185407f10740d8fa43"
227
+ },
228
+ {
229
+ "path": "scripts/regression.sh",
230
+ "sha256": "711bf59c9a1aa66846e1efd4a2127476edd8d92010207807e11e4080d430006e"
231
+ },
232
+ {
233
+ "path": "create-anpunkit/package.json",
234
+ "sha256": "a0cdb99a170ef7f4dc9f0aecc85e8d4c8fde3038d2b176366b17078deee09d09"
235
+ },
236
+ {
237
+ "path": "create-anpunkit/bin/cli.js",
238
+ "sha256": "3c12a18a3831c40ddb3633072a26e5f8be28954fe8d058388d7220d13cf4568e"
239
+ },
240
+ {
241
+ "path": "create-anpunkit/build.sh",
242
+ "sha256": "01fb6d1bb8866db54b0942d341b43e3f0ef96b97f7904909d77393fec49dbb58"
243
+ },
244
+ {
245
+ "path": "create-anpunkit/README.md",
246
+ "sha256": "3c20b14f5959053e460ae830e81b16f0ab063e882637c32fa70ef4dec58727d1"
247
+ }
248
+ ],
249
+ "hybrid": [
250
+ ".claude/settings.json",
251
+ ".cursor/hooks.json",
252
+ ".gitignore",
253
+ "docs/DESIGN_LOG.md"
254
+ ],
255
+ "generated_from": "commands.src/ -> .claude/commands/ + .cursor/commands/"
256
+ }
@@ -0,0 +1,62 @@
1
+ ---
2
+ description: Provision or verify Azure infrastructure. Generates Bicep, shows what-if diff for your review, applies only after your approval, writes docs/INFRA.md and .env.test.
3
+ argument-hint: [provision | verify | update <what changed> | regenerate-env]
4
+ ---
5
+
6
+ Caveman ULTRA mode. You are the ORCHESTRATOR.
7
+
8
+ Action: $ARGUMENTS (default: "provision" if INFRA.md missing, "verify" if present)
9
+
10
+ ---
11
+
12
+ ## PRE-FLIGHT
13
+
14
+ 1. Check `az account show` — if it fails, STOP.
15
+ Tell me: "Run `scripts/auth-setup.sh` first."
16
+
17
+ 2. Determine mode from $ARGUMENTS or default logic.
18
+
19
+ ---
20
+
21
+ ## PROVISION / UPDATE flow
22
+
23
+ 1. Dispatch `infra-provisioner` with the mode.
24
+
25
+ 2. It returns WHAT-IF READY. Show me:
26
+ - resource list with SKUs and costs
27
+ - total monthly cost estimate
28
+ - what-if detail file path
29
+ Then ask:
30
+ > "Review docs/research/infra-whatif-<timestamp>.md. Type 'go' to apply,
31
+ > or describe changes to make first."
32
+ WAIT. Do not proceed until I say "go".
33
+
34
+ 3. On "go": pass APPROVED to `infra-provisioner`.
35
+
36
+ 4. On "make changes": dispatch UPDATE with feedback. Loop to step 2.
37
+
38
+ 5. On APPLIED: tell me INFRA.md ✓, .env.test ✓, and any manual steps remaining.
39
+
40
+ ---
41
+
42
+ ## VERIFY flow
43
+
44
+ 1. Check INFRA.md exists. If missing: tell me to run `/infra provision` first.
45
+ 2. Dispatch `infra-provisioner` VERIFY mode.
46
+ 3. Return drift report.
47
+
48
+ ---
49
+
50
+ ## REGENERATE-ENV flow
51
+
52
+ 1. Check INFRA.md exists.
53
+ 2. Dispatch `infra-provisioner` REGENERATE-ENV.
54
+ 3. Confirm .env.test rewritten.
55
+
56
+ ---
57
+
58
+ ## Notes
59
+
60
+ - /infra never touches PLAN.md, STATE.md, ISSUES.md, or DESIGN_LOG.md.
61
+ - Infra errors are AZURE UNAVAILABLE or CONFIG ERROR — do NOT route to debugger.
62
+ - If UNDERSPEC: list missing decisions, ask me to fill them, re-dispatch.
@@ -0,0 +1,34 @@
1
+ ---
2
+ description: Record an architectural decision in docs/DESIGN_LOG.md. Use only when the kit's structure changes.
3
+ argument-hint: [what changed]
4
+ ---
5
+
6
+ Caveman ULTRA mode.
7
+
8
+ Append an architectural decision to docs/DESIGN_LOG.md. Change: $ARGUMENTS
9
+
10
+ WHEN this applies — the change is ARCHITECTURAL:
11
+ - new / removed / renamed agent, hook, or command
12
+ - changed workflow rule (escalation, phase gate, test layering)
13
+ - design decision where alternatives were weighed
14
+
15
+ WHEN it does NOT apply:
16
+ - code changes, features, phase progress -> HISTORY.md
17
+ - bugs + fixes -> ISSUES.md
18
+ - infra changes -> INFRA.md
19
+
20
+ Steps:
21
+ 1. Read docs/DESIGN_LOG.md.
22
+ 2. Append a dated line to `## 0. Changelog`, newest first.
23
+ 3. If alternatives were weighed, ALSO append a full entry to §5:
24
+ ```
25
+
26
+ ### 5.x <decision title>
27
+
28
+ Options: <a, b, c>. **Chosen: <x>.** <why it won.>
29
+
30
+ ```
31
+ 4. If agent/hook/command/file added or removed, update the file inventory (§6).
32
+ 5. NEVER rewrite or delete existing entries — append only.
33
+
34
+ Confirm back in 2-3 lines: what was logged and where.
@@ -0,0 +1,28 @@
1
+ ---
2
+ description: Log an error to docs/ISSUES.md with root cause + solution, in the canonical format.
3
+ argument-hint: [short error description]
4
+ ---
5
+
6
+ Caveman ULTRA mode.
7
+
8
+ Append an entry to docs/ISSUES.md. Error: $ARGUMENTS
9
+
10
+ Canonical format:
11
+ ```
12
+
13
+ ### <short error title — searchable, literal error keywords>
14
+
15
+ - [x] open (or “- [x] resolved”)
16
+ - symptom: <what was observed>
17
+ - root cause: <the REAL underlying cause>
18
+ - solution: <exact fix, or “pending”>
19
+ - failed attempts: <approaches that did NOT work>
20
+
21
+ ```
22
+ Rules:
23
+ - title must contain literal error keywords -> grep finds it.
24
+ - root cause is the real cause, not "the line threw an error".
25
+ - always fill "failed attempts" — stops repeated dead ends.
26
+ - open issues go at the TOP; resolved below; archived oldest at bottom.
27
+
28
+ Confirm the entry back in 2 lines.
@@ -0,0 +1,106 @@
1
+ ---
2
+ description: Bootstrap a new project. Runs design-research, double grill, and planning. Run once per project.
3
+ ---
4
+
5
+ Caveman ULTRA mode.
6
+
7
+ Recommended: run from plan mode (Shift+Tab). Planning agents are read-only by
8
+ tool grant; plan mode adds a read-only gate on the main session too. Optional.
9
+
10
+ Goal: stand up a fresh project workspace with a well-grounded plan.
11
+
12
+ ---
13
+
14
+ ## Steps
15
+
16
+ ### Round 1 — Initial grill
17
+
18
+ 1. Run the `grill-me` skill to interrogate me. Goal: understand initial scope.
19
+ Cover: project purpose, success criteria, external services, Azure services
20
+ needed (type + sizing), region, deployment target (Azure or local for E2E),
21
+ known constraints, unknowns.
22
+ Do not stop early. Do not write OVERVIEW.md yet.
23
+
24
+ Store the round-1 answers as working context — do NOT write OVERVIEW.md yet.
25
+
26
+ ---
27
+
28
+ ### Design research
29
+
30
+ 2. Extract DESIGN TOPICS from the round-1 answers. These are things we need
31
+ to verify before planning:
32
+ - Each external service mentioned: what does it support at the relevant tier?
33
+ Quotas, rate limits, known gaps?
34
+ - Azure services: any sizing or SKU constraints relevant to the use case?
35
+ - Auth patterns: any MSAL/Entra constraints for this scenario?
36
+ - Any other architectural assumption in the round-1 answers worth verifying.
37
+
38
+ 3. Dispatch `researcher` in DESIGN mode with the DESIGN TOPICS list.
39
+ It returns a terse summary + file paths. Read the design-<slug>.md files
40
+ only if needed.
41
+
42
+ ---
43
+
44
+ ### Round 2 — Research-informed re-grill
45
+
46
+ 4. Run `grill-me` again — a second focused pass. Seed it with:
47
+ - The round-1 answers (already established — do not re-ask these)
48
+ - The design-research key findings and new questions raised
49
+
50
+ The re-grill asks whatever it needs to build complete understanding. It is
51
+ not limited to "gaps from research" — research context makes new questions
52
+ relevant even if it found no blockers. Do not re-ask what round 1 already
53
+ established clearly.
54
+
55
+ ---
56
+
57
+ ### Write OVERVIEW.md
58
+
59
+ 5. Write docs/OVERVIEW.md from the COMBINED output of round-1 + design-research
60
+ + round-2. Include:
61
+ - Project purpose and success criteria
62
+ - Scope and constraints (informed by research findings)
63
+ - External services with confirmed capabilities/limits
64
+ - "Azure services" section: every service with expected SKU
65
+ - Deployment target (azure-deployed or local-docker for E2E)
66
+ - Known risks / open questions (if any remain)
67
+
68
+ OVERVIEW.md is written HERE — after the re-grill, not before.
69
+
70
+ ---
71
+
72
+ ### Plan
73
+
74
+ 6. Hand OVERVIEW.md + design-research findings to the `planner` subagent.
75
+ PLAN.md MUST:
76
+ - Start with Phase 0 (infra setup) as the first entry (always).
77
+ - End with a final code phase that contains the deploy task block.
78
+
79
+ 7. Create docs/STATE.md:
80
+ ```
81
+
82
+ # STATE
83
+
84
+ phase: 0 (pending)
85
+ completed: project bootstrapped — design research done, double grill done
86
+ next: run /infra to provision Azure infrastructure
87
+ blocker: none
88
+
89
+ ```
90
+ 8. Create docs/ISSUES.md with header `# Issues` and `## Archived` section.
91
+
92
+ 9. Create empty docs/HISTORY.md.
93
+
94
+ 10. Create docs/INFRA.md from the template (populated by /infra).
95
+
96
+ 11. Create docs/ENDPOINTS.md:
97
+ ```
98
+ # Endpoints — <project name>
99
+ > Maintained by implementer. Updated each phase.
100
+ > Base URL: (populated after deployment phase)
101
+ ```
102
+
103
+ Then stop and show me PLAN.md for approval before any phase starts.
104
+
105
+ Remind me: "Run `/infra` next to provision the Azure environment (Phase 0)
106
+ before starting Phase 1."