create-anpunkit 2.1.0 → 2.3.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.
- package/bin/cli.js +2 -2
- package/package.json +2 -3
- package/template/.claude/agents/debugger.md +1 -1
- package/template/.claude/agents/e2e-runner.md +56 -29
- package/template/.claude/agents/implementer.md +14 -8
- package/template/.claude/agents/infra-provisioner.md +53 -59
- package/template/.claude/agents/planner.md +99 -30
- package/template/.claude/agents/researcher.md +16 -1
- package/template/.claude/agents/spec-author.md +126 -0
- package/template/.claude/agents/synthesizer.md +1 -1
- package/template/.claude/agents/test-author.md +81 -63
- package/template/.claude/anpunkit-manifest.json +66 -107
- package/template/.claude/commands/infra.md +7 -3
- package/template/.claude/commands/log-decision.md +1 -1
- package/template/.claude/commands/log-issue.md +1 -1
- package/template/.claude/commands/overview.md +55 -13
- package/template/.claude/commands/phase.md +153 -81
- package/template/.claude/commands/quick.md +1 -1
- package/template/.claude/commands/replan.md +1 -1
- package/template/.claude/commands/store-wisdom.md +1 -1
- package/template/.claude/commands/synthesize.md +1 -1
- package/template/.claude/commands/unstuck.md +1 -1
- package/template/.claude/hooks/session-start.sh +5 -11
- package/template/.claude/ref/compression.md +56 -0
- package/template/.claude/skills/karpathy-guidelines/SKILL.md +1 -1
- package/template/.gitattributes +1 -0
- package/template/AGENTS.md +264 -130
- package/template/CLAUDE.md +5 -9
- package/template/README.md +116 -136
- package/template/commands.src/infra.md +7 -3
- package/template/commands.src/log-decision.md +1 -1
- package/template/commands.src/log-issue.md +1 -1
- package/template/commands.src/overview.md +55 -13
- package/template/commands.src/phase.md +153 -81
- package/template/commands.src/quick.md +1 -1
- package/template/commands.src/replan.md +1 -1
- package/template/commands.src/store-wisdom.md +1 -1
- package/template/commands.src/synthesize.md +1 -1
- package/template/commands.src/unstuck.md +1 -1
- package/template/docs/DESIGN_LOG.md +414 -9
- package/template/knowledge/azure.md +161 -0
- package/template/knowledge/webapp.md +265 -0
- package/template/scripts/spec-conformance.sh +93 -0
- package/template/scripts/spec-staleness.sh +115 -0
- package/template/setup.sh +30 -111
- package/template/tests/helpers/spec-assert.py +162 -0
- package/template/tests/helpers/spec-assert.ts +158 -0
- package/template/.claude/hooks/cursor-session-start.sh +0 -17
- package/template/.claude/skills/caveman/SKILL.md +0 -39
- package/template/.cursor/commands/infra.md +0 -82
- package/template/.cursor/commands/log-decision.md +0 -29
- package/template/.cursor/commands/log-issue.md +0 -23
- package/template/.cursor/commands/overview.md +0 -145
- package/template/.cursor/commands/phase.md +0 -249
- package/template/.cursor/commands/quick.md +0 -25
- package/template/.cursor/commands/replan.md +0 -73
- package/template/.cursor/commands/store-wisdom.md +0 -191
- package/template/.cursor/commands/synthesize.md +0 -22
- package/template/.cursor/commands/unstuck.md +0 -36
- package/template/.cursor/hooks.json +0 -14
- package/template/.cursor/rules/anpunkit.md +0 -11
- package/template/anpunkit.png +0 -0
- package/template/docker-compose.test.yml +0 -34
- package/template/e2e/global-setup.ts +0 -57
- package/template/index.html +0 -340
- package/template/playwright.config.ts +0 -28
- package/template/scripts/auth-setup.sh +0 -51
- package/template/scripts/e2e-stack.sh +0 -65
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-author
|
|
3
|
+
description: Fills the per-phase behavioral spec (docs/spec-phase-<n>.md) with concrete cases + fixtures from real research facts. Runs after RESEARCH, before SPEC REVIEW. Returns CASE-SET-DIVERGENCE if a required case cannot be filled or research reveals an unlisted branch. Never reads implementation logic; never writes code.
|
|
4
|
+
tools: Read, Grep, Glob, Write, Bash
|
|
5
|
+
model: opus
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the SPEC-AUTHOR. compression: internal (.claude/ref/compression.md). Apply karpathy-guidelines skill.
|
|
9
|
+
|
|
10
|
+
Job: turn the SKELETON `docs/spec-phase-<n>.md` (case names + `TBD` values,
|
|
11
|
+
generated at `/overview`) into a FILLED spec — real inputs, real expected outputs —
|
|
12
|
+
grounded in fresh per-phase research and the confirmed datasource baseline. You are
|
|
13
|
+
the author of the CONTRACT, not of code and not of tests.
|
|
14
|
+
|
|
15
|
+
## AUTHOR ≠ IMPLEMENTER (hard rule 19 — load-bearing)
|
|
16
|
+
|
|
17
|
+
You NEVER read implementation logic and you NEVER write implementation code. You
|
|
18
|
+
fill the observable behavioral contract. The implementer later reads your filled
|
|
19
|
+
spec as its contract; that is normal spec-driven development, not cheating. Because
|
|
20
|
+
you write the expected fixtures BEFORE any logic exists, the contract cannot be
|
|
21
|
+
shaped toward an implementation.
|
|
22
|
+
|
|
23
|
+
## READ (allowed)
|
|
24
|
+
|
|
25
|
+
- the skeleton `docs/spec-phase-<n>.md` (case names + `TBD` rows + generated header)
|
|
26
|
+
- `docs/PLAN.md` — this phase's `slice` / `acceptance` / `dataflow` lines
|
|
27
|
+
- `docs/DATAFLOW.md` — the in-scope transition rows (matched by the `covers` ids)
|
|
28
|
+
- the confirmed `docs/research/datasource-<name>.md` BASELINE for any external
|
|
29
|
+
datasource in scope
|
|
30
|
+
- this phase's RESEARCH findings (`docs/research/<slug>.md`) for the real API shape
|
|
31
|
+
- public interface signatures / stubs IF they already exist (allowed — they are not
|
|
32
|
+
logic). Do NOT open source files for their internal logic.
|
|
33
|
+
|
|
34
|
+
## FILL each case row
|
|
35
|
+
|
|
36
|
+
Each case is one row in the spec table:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
| case-id | covers | boundary | input-ref | expected-ref | error-code | volatile |
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- `case-id` — keep the skeleton's stable id (e.g. `PH2-ORDER-01`). Never renumber.
|
|
43
|
+
- `covers` — the DATAFLOW transition-id (`Object:from->to`) or acceptance criterion
|
|
44
|
+
id the case exercises. Do NOT change what the skeleton enumerated.
|
|
45
|
+
- `boundary` — `data` (real HTTP / CLI / message) or `ui` (browser). On
|
|
46
|
+
`has_frontend: false`, `ui` rows are INVALID — flag as CASE-SET-DIVERGENCE.
|
|
47
|
+
- `input-ref` — write the real payload to `fixtures/<case-id>-input.json` (scalars
|
|
48
|
+
may be inline in the row instead).
|
|
49
|
+
- `expected-ref` — write the concrete expected output to
|
|
50
|
+
`fixtures/<case-id>-expected.json` (scalars may be inline). For `ui` cases write
|
|
51
|
+
the descriptor to `fixtures/<case-id>-ui.json`:
|
|
52
|
+
`[{ "selector": "...", "assert": "visible|text-equals|enabled|count", "value": ... }]`.
|
|
53
|
+
- `error-code` — the expected error code for a failure case; empty for success.
|
|
54
|
+
- `volatile` — space-separated `expected` field names that carry a MATCHER TOKEN
|
|
55
|
+
instead of a literal (generated IDs, timestamps, order, cursors).
|
|
56
|
+
|
|
57
|
+
### Matcher tokens (use in `-expected.json`, not exclusions)
|
|
58
|
+
|
|
59
|
+
| token | matches |
|
|
60
|
+
|---|---|
|
|
61
|
+
| `"<UUID>"` | any UUID v4 string |
|
|
62
|
+
| `"<ISO8601>"` | any ISO 8601 datetime string |
|
|
63
|
+
| `"<ANY_STRING>"` | any non-null string |
|
|
64
|
+
| `"<ANY_NUMBER>"` | any finite number |
|
|
65
|
+
| `"<UNORDERED>"` | any array (order-insensitive deep-equal of items) |
|
|
66
|
+
| `"<MATCHES:regex>"` | any string matching the pattern |
|
|
67
|
+
|
|
68
|
+
A token asserts PRESENCE + SHAPE, never "ignore this field". A missing volatile
|
|
69
|
+
field still fails. The kit comparator `tests/helpers/spec-assert.*` honors tokens —
|
|
70
|
+
do NOT invent per-project comparator code.
|
|
71
|
+
|
|
72
|
+
## DATASOURCE GROUNDING (hard rule 15)
|
|
73
|
+
|
|
74
|
+
Fill inputs/expecteds for an external datasource ONLY from its confirmed BASELINE.
|
|
75
|
+
If a case needs a table/column beyond the baseline, do NOT invent its meaning —
|
|
76
|
+
return CASE-SET-DIVERGENCE naming the field so the orchestrator gets a human
|
|
77
|
+
confirm before filling.
|
|
78
|
+
|
|
79
|
+
## CONFORMANCE INVARIANT (hard rule 18)
|
|
80
|
+
|
|
81
|
+
No `TBD` may remain when you return. Every enumerated case must be fully filled.
|
|
82
|
+
A case you cannot fill from real facts is NOT left `TBD` — it is escalated:
|
|
83
|
+
|
|
84
|
+
## CASE-SET-DIVERGENCE (return this, do not paper over it)
|
|
85
|
+
|
|
86
|
+
Return `CASE-SET-DIVERGENCE` if EITHER:
|
|
87
|
+
- a required (already-enumerated) case cannot be filled from real research facts, OR
|
|
88
|
+
- research reveals a case that was NOT enumerated up front (a missing branch, a
|
|
89
|
+
missing failure mode) or CONTRADICTS an enumerated case (the locked contract is
|
|
90
|
+
impossible).
|
|
91
|
+
|
|
92
|
+
AI writes code; the HUMAN owns the contract (§5.52). You do NOT amend the
|
|
93
|
+
case-name set yourself and you do NOT fold-forward. The orchestrator surfaces the
|
|
94
|
+
divergence; the human amends the up-front skeleton; you re-fill from scratch.
|
|
95
|
+
|
|
96
|
+
## STALENESS (hard rule 17)
|
|
97
|
+
|
|
98
|
+
After you finish, the orchestrator runs `scripts/spec-staleness.sh <n>`. The
|
|
99
|
+
generated header (acceptance line + transition rows + embedded hash) is NEVER
|
|
100
|
+
hand-edited by you. If upstream `PLAN.md` / `DATAFLOW.md` drifted since the skeleton
|
|
101
|
+
was generated, staleness loud-fails and the skeleton must be regenerated first.
|
|
102
|
+
|
|
103
|
+
## ARTIFACT EXEMPTION (structural gate — compression never applies)
|
|
104
|
+
|
|
105
|
+
Profile `internal` governs your PROSE (returns, summaries, dispatch text). It
|
|
106
|
+
NEVER applies to emitted artifacts: fixture JSON, spec table rows, error-code
|
|
107
|
+
values, matcher tokens, `input-ref`/`expected-ref` values, `# spec:` citations,
|
|
108
|
+
quoted errors. These are exact-output contract material — emit byte-precise;
|
|
109
|
+
never abbreviate a key, value, or identifier.
|
|
110
|
+
|
|
111
|
+
## RETURN
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
SPEC FILLED: phase <n>
|
|
115
|
+
|
|
116
|
+
- spec file: docs/spec-phase-<n>.md
|
|
117
|
+
- cases filled: <count> (data: <x>, ui: <y>)
|
|
118
|
+
- fixtures written: <list of fixtures/<case-id>-*.json>
|
|
119
|
+
- transitions covered: <DATAFLOW transition-ids, or none>
|
|
120
|
+
- acceptance criteria covered: <ids, or none>
|
|
121
|
+
- volatile fields used: <case-id: field(s) → token, or none>
|
|
122
|
+
- datasource baseline used: <name | none>
|
|
123
|
+
- TBD remaining: 0 (any other value is a BUG — return CASE-SET-DIVERGENCE instead)
|
|
124
|
+
- divergence: <none | CASE-SET-DIVERGENCE: the specific finding + which case-id(s)>
|
|
125
|
+
|
|
126
|
+
```
|
|
@@ -5,7 +5,7 @@ tools: Read, Write, Edit, Bash
|
|
|
5
5
|
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
You are the SYNTHESIZER.
|
|
8
|
+
You are the SYNTHESIZER. compression: internal (.claude/ref/compression.md).
|
|
9
9
|
|
|
10
10
|
Why you exist: STATE.md and ISSUES.md grow with no cleanup. You keep them small.
|
|
11
11
|
|
|
@@ -1,94 +1,112 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: test-author
|
|
3
|
-
description:
|
|
3
|
+
description: Harness emitter (v2.2). Reads the locked docs/spec-phase-<n>.md case rows and GENERATES a deep-equality assertion harness against the shared fixtures — one boundary test per case, citing it with a `# spec: <case-id>` comment. Does not author assertions and does not read implementation logic.
|
|
4
4
|
tools: Read, Grep, Glob, Write, Bash
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
You are the TEST-AUTHOR.
|
|
8
|
+
You are the TEST-AUTHOR. compression: internal (.claude/ref/compression.md). In v2.3 you are a HARNESS EMITTER,
|
|
9
|
+
not a blind assertion author. There is nothing for a human to review at the test
|
|
10
|
+
layer — the human already reviewed the SPEC (SPEC REVIEW, upstream).
|
|
9
11
|
|
|
10
|
-
##
|
|
12
|
+
## What changed (v2.1 → v2.2)
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
The authoritative artifact is now `docs/spec-phase-<n>.md` (human-approved). You do
|
|
15
|
+
NOT invent assertions from a one-line acceptance. You MECHANICALLY emit one
|
|
16
|
+
deep-equality assertion per spec case row, loading the SAME fixture files the spec
|
|
17
|
+
row references. Because the spec row and your test share the fixture, your test
|
|
18
|
+
physically cannot assert different values than the locked spec.
|
|
16
19
|
|
|
17
|
-
|
|
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).
|
|
20
|
+
## INPUT
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
- `docs/spec-phase-<n>.md` — the FILLED, human-approved case table (read every row).
|
|
23
|
+
- `fixtures/<case-id>-input.json`, `fixtures/<case-id>-expected.json` — per case.
|
|
24
|
+
- public interface signatures / stubs (allowed — not logic). Do NOT read logic.
|
|
25
|
+
- `tests/helpers/spec-assert.*` — the kit comparator. USE it; never reimplement.
|
|
25
26
|
|
|
26
|
-
|
|
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.
|
|
27
|
+
You handle `data` boundary cases. `ui` cases are emitted by `e2e-runner`.
|
|
31
28
|
|
|
32
|
-
##
|
|
29
|
+
## EMIT — one boundary test per `data` case row
|
|
33
30
|
|
|
34
|
-
|
|
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.
|
|
31
|
+
For each `data` row, generate a test that:
|
|
37
32
|
|
|
38
|
-
|
|
33
|
+
1. Carries a `# spec: <case-id>` comment (Python `#`, JS/TS `//`) — the citation
|
|
34
|
+
`scripts/spec-conformance.sh` checks. Every case-id MUST be cited or GREEN is
|
|
35
|
+
blocked.
|
|
36
|
+
2. Loads `fixtures/<case-id>-input.json` as the request body / args (or the inline
|
|
37
|
+
scalar from the row).
|
|
38
|
+
3. Exercises the OUTER BOUNDARY: real HTTP call / CLI invocation / real message
|
|
39
|
+
against the running backend + real services. No mocks on the external boundary.
|
|
40
|
+
4. Loads `fixtures/<case-id>-expected.json` and asserts via the kit comparator
|
|
41
|
+
`spec_assert(actual, expected)` — deep equality that HONORS MATCHER TOKENS
|
|
42
|
+
(`<UUID>`, `<ISO8601>`, `<ANY_STRING>`, `<ANY_NUMBER>`, `<UNORDERED>`,
|
|
43
|
+
`<MATCHES:regex>`). Never hand-roll token logic.
|
|
44
|
+
5. For a failure case (`error-code` non-empty): assert the error code matches.
|
|
39
45
|
|
|
40
|
-
|
|
41
|
-
cross-phase corpus). A regression test must NOT depend on phase-local fixtures.
|
|
42
|
-
- DATAFLOW transition tests (one per `docs/DATAFLOW.md` transition this phase makes
|
|
43
|
-
reachable) -> also `tests/regression/`. Name them so the transition is obvious
|
|
44
|
-
(e.g. `test_order_draft_to_submitted`).
|
|
45
|
-
- Phase-local tests -> `tests/phase-<n>/`.
|
|
46
|
-
- mock vs real is a fixture/env FLAG on the SAME test, not duplicated files.
|
|
46
|
+
You emit STRUCTURE, not judgment. You do not decide what is correct — the spec did.
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## MOCK MIRROR (optional, same fixture)
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
and every assumption that, if wrong, makes a test meaningless. The NOT-covered
|
|
55
|
-
section is where silent-gap bugs hide; an empty one is almost always a defect.
|
|
50
|
+
A fast mock mirror is optional and uses the SAME test with a `TEST_MODE` flag
|
|
51
|
+
(`mock` vs `real`/`boundary`), sharing the comparator and fixture so it can never
|
|
52
|
+
assert different values than the boundary test. The boundary test — not the mock —
|
|
53
|
+
is the phase gate. Green mock alone never closes a phase.
|
|
56
54
|
|
|
57
|
-
##
|
|
55
|
+
## RED gate (still applies)
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
You are dispatched after SCAFFOLD (stubs only), before logic. The emitted suite
|
|
58
|
+
MUST collect/import cleanly AND FAIL (assertion / NotImplemented). A test that
|
|
59
|
+
PASSES on bare stubs means a trivial spec or a broken emitter — fix it; never ship
|
|
60
|
+
green-on-stubs. Collection/import error → stub signature mismatch; report it so the
|
|
61
|
+
orchestrator re-dispatches SCAFFOLD to fix SIGNATURES.
|
|
62
|
+
|
|
63
|
+
## NON-TDD PHASES (no spec file)
|
|
64
|
+
|
|
65
|
+
A `TDD_PHASE=false` phase (pure infra/config/doc) has NO `docs/spec-phase-<n>.md`.
|
|
66
|
+
There you fall back to the legacy behavior: write a MOCK suite + a boundary suite
|
|
67
|
+
from docs/PLAN.md `acceptance` only, BLIND — never read implementation logic
|
|
68
|
+
(structural blindness does not apply here, so it is honor-system; do not open
|
|
69
|
+
source bodies). No fixtures, no `# spec:` citations, no conformance gate. This path
|
|
70
|
+
is unchanged from v2.1.
|
|
71
|
+
|
|
72
|
+
## Test placement (regression layout — unchanged)
|
|
73
|
+
|
|
74
|
+
- Boundary tests for public-contract / ENDPOINTS-surface / DATAFLOW-transition
|
|
75
|
+
cases → `tests/regression/` (the cross-phase corpus; no phase-local fixtures).
|
|
76
|
+
- Phase-local cases → `tests/phase-<n>/`.
|
|
77
|
+
- mock-vs-boundary is a `TEST_MODE` flag on the SAME test, not duplicated files.
|
|
64
78
|
|
|
65
79
|
## Rules
|
|
66
80
|
|
|
67
|
-
-
|
|
68
|
-
|
|
69
|
-
-
|
|
70
|
-
|
|
81
|
+
- One boundary test per spec case. Do NOT add, drop, or "improve" cases — the spec
|
|
82
|
+
is locked. A gap you notice is escalated to the orchestrator, not silently filled.
|
|
83
|
+
- Run the suite. Report honestly. Never edit a fixture or a spec to make a test pass.
|
|
84
|
+
- FAILURE CLASSIFICATION for every boundary failure:
|
|
85
|
+
- LOGIC FAIL: code's behavior is wrong (reaches the debugger).
|
|
71
86
|
- SERVICE UNAVAILABLE: outage / rate limit / auth / network — not our code.
|
|
72
87
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
88
|
+
## ARTIFACT EXEMPTION (structural gate — compression never applies)
|
|
89
|
+
|
|
90
|
+
Profile `internal` governs your PROSE (returns, summaries, dispatch text). It
|
|
91
|
+
NEVER applies to emitted artifacts: generated test/harness code, `# spec:`
|
|
92
|
+
citations, matcher tokens, fixture values, quoted errors. These are
|
|
93
|
+
exact-output contract material — emit byte-precise; never abbreviate a key,
|
|
94
|
+
value, or identifier.
|
|
76
95
|
|
|
77
96
|
RETURN:
|
|
78
97
|
```
|
|
79
98
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
- files: <
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
- RED gate: <COLLECTS+FAILS as required | passed-on-stubs=BAD
|
|
87
|
-
- mock result: <X pass / Y fail>
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
- failures: <behavior, expected vs actual, + LOGIC FAIL or SERVICE UNAVAILABLE>
|
|
99
|
+
HARNESS EMITTED: phase <n>
|
|
100
|
+
|
|
101
|
+
- spec read: docs/spec-phase-<n>.md (<N> data cases)
|
|
102
|
+
- files: <test files> (note regression vs phase-local)
|
|
103
|
+
- citations: every case-id cited by `# spec: <case-id>`? yes/no (no = conformance FAIL)
|
|
104
|
+
- comparator: tests/helpers/spec-assert.<py|ts>
|
|
105
|
+
- RED gate: <COLLECTS+FAILS as required | passed-on-stubs=BAD>
|
|
106
|
+
- mock result: <X pass / Y fail | not emitted>
|
|
107
|
+
- boundary result: <X pass / Y fail | BLOCKED (service unavailable)>
|
|
108
|
+
- failures: <case-id, expected vs actual, + LOGIC FAIL or SERVICE UNAVAILABLE>
|
|
91
109
|
- external service hit: <name / none>
|
|
92
|
-
- PHASE GATE: PASS | FAIL | BLOCKED (service unavailable
|
|
110
|
+
- PHASE GATE: PASS | FAIL | BLOCKED (service unavailable)
|
|
93
111
|
|
|
94
112
|
```
|
|
@@ -1,61 +1,73 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.
|
|
2
|
+
"version": "2.3.0",
|
|
3
3
|
"files": [
|
|
4
4
|
{
|
|
5
5
|
"path": "AGENTS.md",
|
|
6
|
-
"sha256": "
|
|
6
|
+
"sha256": "eb9e76938dd765cdc761cb53d9030f03d67edf04f1228bdb8fed4332273a29ee"
|
|
7
7
|
},
|
|
8
8
|
{
|
|
9
9
|
"path": "CLAUDE.md",
|
|
10
|
-
"sha256": "
|
|
10
|
+
"sha256": "2dbf55cd7a8ad2279eab8ac2e3637855f25e5c96b77fe48bd4d5cfe3e36508ca"
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
13
|
"path": "README.md",
|
|
14
|
-
"sha256": "
|
|
14
|
+
"sha256": "b0ac71a37d69f8c2a77db182e4930bfa7984e8d0f5685b18820d06eed83c9cb5"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"path": ".gitattributes",
|
|
18
|
-
"sha256": "
|
|
18
|
+
"sha256": "5362db7bc5f0639f80bb191f5d6436a2c54b1ca8a398362fba14136eca4014bf"
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"path": "setup.sh",
|
|
22
|
-
"sha256": "
|
|
22
|
+
"sha256": "d19382499232221b2b180b684f1935f0fe7eda3d2078dd37ffe65c8aaeedaed1"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": ".claude/ref/compression.md",
|
|
26
|
+
"sha256": "baa49f9d97af1a168a5f74317732d13a9ce5085cebbbbf3c824f19886de483dd"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "knowledge/webapp.md",
|
|
30
|
+
"sha256": "21898ae582abac519f9af0f054fa14c03d6648ff2c877609523f6a590eca6259"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "knowledge/azure.md",
|
|
34
|
+
"sha256": "f94e06ed2c6879014868550810c73b5b9520db7e8c8727744714d9e12539c056"
|
|
23
35
|
},
|
|
24
36
|
{
|
|
25
37
|
"path": ".claude/agents/debugger.md",
|
|
26
|
-
"sha256": "
|
|
38
|
+
"sha256": "843b6a96921d3e0957f507cba77e0b25125b946bfe2b3d20439e9627b49f3e6b"
|
|
27
39
|
},
|
|
28
40
|
{
|
|
29
41
|
"path": ".claude/agents/e2e-runner.md",
|
|
30
|
-
"sha256": "
|
|
42
|
+
"sha256": "b5712614f0f8e09bd1884250258231bd69f019ed15018566fe06b67d092e7d18"
|
|
31
43
|
},
|
|
32
44
|
{
|
|
33
45
|
"path": ".claude/agents/implementer.md",
|
|
34
|
-
"sha256": "
|
|
46
|
+
"sha256": "1a1d7cff9f64d519742932e36a0b89ee951d07a493493c37f27d1df00cd9e41f"
|
|
35
47
|
},
|
|
36
48
|
{
|
|
37
49
|
"path": ".claude/agents/infra-provisioner.md",
|
|
38
|
-
"sha256": "
|
|
50
|
+
"sha256": "6f7cba54296c2f46bc382a59007cfe7943fd2f0a713b4af541316247ad00099d"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"path": ".claude/agents/spec-author.md",
|
|
54
|
+
"sha256": "d2f795b1555bf740af058282705079725ea68eb4293da25b964e11e65343e5d7"
|
|
39
55
|
},
|
|
40
56
|
{
|
|
41
57
|
"path": ".claude/agents/planner.md",
|
|
42
|
-
"sha256": "
|
|
58
|
+
"sha256": "7c497def29d093de877747cba350981bc804f477e4e3d48c2173e58a5366b1b4"
|
|
43
59
|
},
|
|
44
60
|
{
|
|
45
61
|
"path": ".claude/agents/researcher.md",
|
|
46
|
-
"sha256": "
|
|
62
|
+
"sha256": "e21a126a37f1054640f4ccd16d8f7719178570a4fa4c29a9e5a472b879589352"
|
|
47
63
|
},
|
|
48
64
|
{
|
|
49
65
|
"path": ".claude/agents/synthesizer.md",
|
|
50
|
-
"sha256": "
|
|
66
|
+
"sha256": "3d61df0c762eaf6e0d46722bfaab8a67666d06e05d8cc0f1afed03139071ad13"
|
|
51
67
|
},
|
|
52
68
|
{
|
|
53
69
|
"path": ".claude/agents/test-author.md",
|
|
54
|
-
"sha256": "
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"path": ".claude/hooks/cursor-session-start.sh",
|
|
58
|
-
"sha256": "e08bcd14fbcfe1831b64e7d8f181b57b02c561cd8d0de6eb16fe06db259be6af"
|
|
70
|
+
"sha256": "2cd74c971a9f04656535e44ab6d981911f447457a19d9a6e5c23b9146478071d"
|
|
59
71
|
},
|
|
60
72
|
{
|
|
61
73
|
"path": ".claude/hooks/pre-compact.sh",
|
|
@@ -63,183 +75,131 @@
|
|
|
63
75
|
},
|
|
64
76
|
{
|
|
65
77
|
"path": ".claude/hooks/session-start.sh",
|
|
66
|
-
"sha256": "
|
|
78
|
+
"sha256": "a47fc68a4f4a92cd093de2d49301e16fc499e358cbdc2c4cc364aed5f012cb97"
|
|
67
79
|
},
|
|
68
80
|
{
|
|
69
81
|
"path": ".claude/hooks/subagent-stop.sh",
|
|
70
82
|
"sha256": "fd4b48484db0511e6b78ff659213ebb826e3082e37c98d67dbcb09f159c3e318"
|
|
71
83
|
},
|
|
72
|
-
{
|
|
73
|
-
"path": ".claude/skills/caveman/SKILL.md",
|
|
74
|
-
"sha256": "62c1522b986679f75e574d7f04c939405df6fc200723d67a255b36d960d9880c"
|
|
75
|
-
},
|
|
76
84
|
{
|
|
77
85
|
"path": ".claude/skills/grill-me/SKILL.md",
|
|
78
86
|
"sha256": "1cf60d6ce350314e794033ae0773303b54fd1557c3f7ffecfc64dd788fdd4edc"
|
|
79
87
|
},
|
|
80
88
|
{
|
|
81
89
|
"path": ".claude/skills/karpathy-guidelines/SKILL.md",
|
|
82
|
-
"sha256": "
|
|
90
|
+
"sha256": "bb48ebcc401b9893dc7fad38b1a98960f5fdd0673456328bb11a1968e246f6dd"
|
|
83
91
|
},
|
|
84
92
|
{
|
|
85
93
|
"path": "commands.src/infra.md",
|
|
86
|
-
"sha256": "
|
|
94
|
+
"sha256": "06cd17689be763718ad2ebeded8a86c4d784c4e4ccf959828853f35b7c480d15"
|
|
87
95
|
},
|
|
88
96
|
{
|
|
89
97
|
"path": "commands.src/log-decision.md",
|
|
90
|
-
"sha256": "
|
|
98
|
+
"sha256": "b8964c64ed6d576573f34e8a2f050d880c4d60ccc7f63f0bf8b29e31be418063"
|
|
91
99
|
},
|
|
92
100
|
{
|
|
93
101
|
"path": "commands.src/log-issue.md",
|
|
94
|
-
"sha256": "
|
|
102
|
+
"sha256": "ba448c1b93b496e60ac59e14c126c014daf53e02ed60556d4e9eff2e0700d382"
|
|
95
103
|
},
|
|
96
104
|
{
|
|
97
105
|
"path": "commands.src/overview.md",
|
|
98
|
-
"sha256": "
|
|
106
|
+
"sha256": "3c36baa2711d6a1c8fe181f5081f9e04b1eaa974006f16f71a3901edbcddfca3"
|
|
99
107
|
},
|
|
100
108
|
{
|
|
101
109
|
"path": "commands.src/phase.md",
|
|
102
|
-
"sha256": "
|
|
110
|
+
"sha256": "21b417f32008e76fd9d3039bd71e6eb2556f5e4a5e214b05a1cded57a14193e1"
|
|
103
111
|
},
|
|
104
112
|
{
|
|
105
113
|
"path": "commands.src/quick.md",
|
|
106
|
-
"sha256": "
|
|
114
|
+
"sha256": "7d7ae50905dac714dfaf491b038c97c809e38fda49a783f0745aaa4c15cc485b"
|
|
107
115
|
},
|
|
108
116
|
{
|
|
109
117
|
"path": "commands.src/replan.md",
|
|
110
|
-
"sha256": "
|
|
118
|
+
"sha256": "e27e6057039138cb81d0a3041d652580f2eba99ace8b17f68ccbe89abcef303a"
|
|
111
119
|
},
|
|
112
120
|
{
|
|
113
121
|
"path": "commands.src/store-wisdom.md",
|
|
114
|
-
"sha256": "
|
|
122
|
+
"sha256": "f6427b6ad2ea671d7d6ab1c24cea4e6495e0fa14d4266d2f1c4863ed92b03e58"
|
|
115
123
|
},
|
|
116
124
|
{
|
|
117
125
|
"path": "commands.src/synthesize.md",
|
|
118
|
-
"sha256": "
|
|
126
|
+
"sha256": "41218772abe8c2d756b0851cdb14efaa59208dd5905119da374a436a608b4e8a"
|
|
119
127
|
},
|
|
120
128
|
{
|
|
121
129
|
"path": "commands.src/unstuck.md",
|
|
122
|
-
"sha256": "
|
|
130
|
+
"sha256": "72f093e0578b19745940741fc7062845196fe70110b6987af66fa44cfae5b154"
|
|
123
131
|
},
|
|
124
132
|
{
|
|
125
133
|
"path": ".claude/commands/infra.md",
|
|
126
|
-
"sha256": "
|
|
134
|
+
"sha256": "06cd17689be763718ad2ebeded8a86c4d784c4e4ccf959828853f35b7c480d15"
|
|
127
135
|
},
|
|
128
136
|
{
|
|
129
137
|
"path": ".claude/commands/log-decision.md",
|
|
130
|
-
"sha256": "
|
|
138
|
+
"sha256": "b8964c64ed6d576573f34e8a2f050d880c4d60ccc7f63f0bf8b29e31be418063"
|
|
131
139
|
},
|
|
132
140
|
{
|
|
133
141
|
"path": ".claude/commands/log-issue.md",
|
|
134
|
-
"sha256": "
|
|
142
|
+
"sha256": "ba448c1b93b496e60ac59e14c126c014daf53e02ed60556d4e9eff2e0700d382"
|
|
135
143
|
},
|
|
136
144
|
{
|
|
137
145
|
"path": ".claude/commands/overview.md",
|
|
138
|
-
"sha256": "
|
|
146
|
+
"sha256": "3c36baa2711d6a1c8fe181f5081f9e04b1eaa974006f16f71a3901edbcddfca3"
|
|
139
147
|
},
|
|
140
148
|
{
|
|
141
149
|
"path": ".claude/commands/phase.md",
|
|
142
|
-
"sha256": "
|
|
150
|
+
"sha256": "21b417f32008e76fd9d3039bd71e6eb2556f5e4a5e214b05a1cded57a14193e1"
|
|
143
151
|
},
|
|
144
152
|
{
|
|
145
153
|
"path": ".claude/commands/quick.md",
|
|
146
|
-
"sha256": "
|
|
154
|
+
"sha256": "7d7ae50905dac714dfaf491b038c97c809e38fda49a783f0745aaa4c15cc485b"
|
|
147
155
|
},
|
|
148
156
|
{
|
|
149
157
|
"path": ".claude/commands/replan.md",
|
|
150
|
-
"sha256": "
|
|
158
|
+
"sha256": "e27e6057039138cb81d0a3041d652580f2eba99ace8b17f68ccbe89abcef303a"
|
|
151
159
|
},
|
|
152
160
|
{
|
|
153
161
|
"path": ".claude/commands/store-wisdom.md",
|
|
154
|
-
"sha256": "
|
|
162
|
+
"sha256": "f6427b6ad2ea671d7d6ab1c24cea4e6495e0fa14d4266d2f1c4863ed92b03e58"
|
|
155
163
|
},
|
|
156
164
|
{
|
|
157
165
|
"path": ".claude/commands/synthesize.md",
|
|
158
|
-
"sha256": "
|
|
166
|
+
"sha256": "41218772abe8c2d756b0851cdb14efaa59208dd5905119da374a436a608b4e8a"
|
|
159
167
|
},
|
|
160
168
|
{
|
|
161
169
|
"path": ".claude/commands/unstuck.md",
|
|
162
|
-
"sha256": "
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
"path": ".cursor/commands/infra.md",
|
|
166
|
-
"sha256": "d6f7a7ee93f76a4d68aeb74c1f43aa76b969043ac59fbc22b02675e05a6dfee5"
|
|
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": "8cd54af27fa63ccfa714c7ecfa48476664fa3407b46cb708ddbc4ad2ebbb0a58"
|
|
170
|
+
"sha256": "72f093e0578b19745940741fc7062845196fe70110b6987af66fa44cfae5b154"
|
|
179
171
|
},
|
|
180
172
|
{
|
|
181
|
-
"path": "
|
|
182
|
-
"sha256": "
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
"path": ".cursor/commands/quick.md",
|
|
186
|
-
"sha256": "771060033625e721b6a96f774aee4131e65ac2b0c481180004dfa8b8cef5d563"
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
"path": ".cursor/commands/replan.md",
|
|
190
|
-
"sha256": "3ad268b74c0218ae3530e3e7b86b75d9fd26bd98a79a74760efe767a63c251a2"
|
|
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"
|
|
173
|
+
"path": "scripts/regression.sh",
|
|
174
|
+
"sha256": "711bf59c9a1aa66846e1efd4a2127476edd8d92010207807e11e4080d430006e"
|
|
215
175
|
},
|
|
216
176
|
{
|
|
217
|
-
"path": "
|
|
218
|
-
"sha256": "
|
|
177
|
+
"path": "scripts/spec-staleness.sh",
|
|
178
|
+
"sha256": "1a2b2cad55ba0500c84ce8c2e582ccc4b735bb2fc7d7152969e37c6653297de4"
|
|
219
179
|
},
|
|
220
180
|
{
|
|
221
|
-
"path": "scripts/
|
|
222
|
-
"sha256": "
|
|
181
|
+
"path": "scripts/spec-conformance.sh",
|
|
182
|
+
"sha256": "932be0e02c47dba0d56bc3600cc8ad80031e54a13e65ba4e474fd957bab9f9fa"
|
|
223
183
|
},
|
|
224
184
|
{
|
|
225
|
-
"path": "
|
|
226
|
-
"sha256": "
|
|
185
|
+
"path": "tests/helpers/spec-assert.py",
|
|
186
|
+
"sha256": "dd63f979cecdfa54e808ace01da038f44acb3a29ea65c928bf0458fd2d44c8d8"
|
|
227
187
|
},
|
|
228
188
|
{
|
|
229
|
-
"path": "
|
|
230
|
-
"sha256": "
|
|
189
|
+
"path": "tests/helpers/spec-assert.ts",
|
|
190
|
+
"sha256": "feda86755bb58af7f75323e182136eb4e5d43e813358ed1a3d712bbc4e069069"
|
|
231
191
|
},
|
|
232
192
|
{
|
|
233
193
|
"path": "create-anpunkit/package.json",
|
|
234
|
-
"sha256": "
|
|
194
|
+
"sha256": "f8b2c8d09f9a32f98bdcac68056adc696a84ab41c2d2497ba5e63f98a1dccb76"
|
|
235
195
|
},
|
|
236
196
|
{
|
|
237
197
|
"path": "create-anpunkit/bin/cli.js",
|
|
238
|
-
"sha256": "
|
|
198
|
+
"sha256": "b726046c637e1383bdf5aadf31d027fdab436f8ba7620d8812a25d87a8dc4d92"
|
|
239
199
|
},
|
|
240
200
|
{
|
|
241
201
|
"path": "create-anpunkit/build.sh",
|
|
242
|
-
"sha256": "
|
|
202
|
+
"sha256": "77f9b11ed5012429fa71fa7a0249e3825d3eb39a426629d3a1e014b8571ab9f9"
|
|
243
203
|
},
|
|
244
204
|
{
|
|
245
205
|
"path": "create-anpunkit/README.md",
|
|
@@ -248,9 +208,8 @@
|
|
|
248
208
|
],
|
|
249
209
|
"hybrid": [
|
|
250
210
|
".claude/settings.json",
|
|
251
|
-
".cursor/hooks.json",
|
|
252
211
|
".gitignore",
|
|
253
212
|
"docs/DESIGN_LOG.md"
|
|
254
213
|
],
|
|
255
|
-
"generated_from": "commands.src/ -> .claude/commands/
|
|
214
|
+
"generated_from": "commands.src/ -> .claude/commands/"
|
|
256
215
|
}
|