gm-cc 2.0.673 → 2.0.674

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.
@@ -4,7 +4,7 @@
4
4
  "name": "AnEntrypoint"
5
5
  },
6
6
  "description": "State machine agent with hooks, skills, and automated git enforcement",
7
- "version": "2.0.673",
7
+ "version": "2.0.674",
8
8
  "metadata": {
9
9
  "description": "State machine agent with hooks, skills, and automated git enforcement"
10
10
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-cc",
3
- "version": "2.0.673",
3
+ "version": "2.0.674",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.673",
3
+ "version": "2.0.674",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": {
6
6
  "name": "AnEntrypoint",
@@ -5,61 +5,64 @@ description: EXECUTE phase AND the foundational execution contract for every ski
5
5
 
6
6
  # GM EXECUTE — Resolve Every Unknown
7
7
 
8
- GRAPH: `PLAN → [EXECUTE] → EMIT → VERIFY → COMPLETE`
9
- Entry: .prd with named unknowns. From `planning` or re-entered from EMIT/VERIFY.
8
+ GRAPH: `PLAN → [EXECUTE] → EMIT → VERIFY → COMPLETE`. Entry: .prd with named unknowns.
10
9
 
11
- This skill = execution contract for ALL phases. Other phases reference it because protocols must be fresh. About to run anything → load this skill first.
10
+ This skill = execution contract for ALL phases. About to run anything → load this first.
12
11
 
13
12
  ## TRANSITIONS
14
13
 
15
- **EXIT → EMIT**: all mutables KNOWN → invoke `gm-emit` immediately.
16
- **SELF-LOOP**: still UNKNOWN → re-run different angle (max 2 passes, then regress to PLAN).
17
- **REGRESS → PLAN**: new unknown discovered | mutable unresolvable after 2 passes.
14
+ - **EXIT → EMIT**: all mutables KNOWN → invoke `gm-emit`.
15
+ - **SELF-LOOP**: still UNKNOWN → re-run different angle (max 2 passes).
16
+ - **REGRESS → PLAN**: new unknown | unresolvable after 2 passes.
18
17
 
19
18
  ## MUTABLE DISCIPLINE
20
19
 
21
- Each mutable: name | expected | current | resolution method. Zero variance = resolved. Unresolved after 2 passes = snake to `planning`. Never narrate past an unresolved mutable.
20
+ Each mutable: name | expected | current | resolution method.
22
21
 
23
- Mutables resolve to KNOWN only when ALL four pass:
22
+ Resolves to KNOWN only when ALL four pass:
24
23
  - **ΔS=0** — witnessed output equals expected
25
24
  - **λ≥2** — two independent paths agree
26
- - **ε intact** — adjacent invariants hold (types, test.js, neighboring callers)
27
- - **Coverage≥0.70** — enough corpus inspected for retrieval mutables
25
+ - **ε intact** — adjacent invariants hold
26
+ - **Coverage≥0.70** — enough corpus inspected
27
+
28
+ Unresolved after 2 passes = regress to `planning`. Never narrate past an unresolved mutable.
28
29
 
29
30
  ## PRIORS DON'T AUTHORIZE
30
31
 
31
- Route candidates from PLAN arrive as `weak_prior` only. Plausibility = right to TEST, not right to BELIEVE.
32
- `weak_prior` → witnessed probe → `witnessed` → feed to EMIT.
33
- "The plan says" / "we agreed" / "obviously X" = prior-statements, not witnessed facts.
32
+ Route candidates from PLAN = `weak_prior` only. Plausibility = right to TEST, not BELIEVE.
33
+ weak_prior → witnessed probe → witnessed → feed to EMIT. "The plan says" / "obviously X" = prior, not fact.
34
34
 
35
- ## CODE EXECUTION
35
+ ## LOAD-WEIGHTED VERIFICATION
36
36
 
37
- `exec:<lang>` only via Bash tool body: `exec:<lang>\n<code>`
37
+ Budget: spend on `.prd` items in descending order of `load × (1 − tier_confidence)`. Items with `load>0.75` MUST reach `confirmed` tier before EMIT. Items with `load>0.50` need a downgrade plan recorded.
38
38
 
39
- Langs: `exec:nodejs` (default) | `exec:bash` | `exec:python` | `exec:typescript` | `exec:go` | `exec:rust` | `exec:c` | `exec:cpp` | `exec:java` | `exec:deno` | `exec:cmd`
39
+ ## CODE EXECUTION
40
40
 
41
- File I/O: exec:nodejs + require('fs'). Git directly in Bash. Never Bash(node/npm/npx/bun).
41
+ `exec:<lang>` only via Bash: `exec:<lang>\n<code>`
42
42
 
43
- Pack runs: Promise.allSettled for parallel, each idea own try/catch, under 12s per call.
43
+ Langs: `nodejs` (default) | `bash` | `python` | `typescript` | `go` | `rust` | `c` | `cpp` | `java` | `deno` | `cmd`
44
44
 
45
+ File I/O: exec:nodejs + require('fs'). Git directly in Bash. **Never** Bash(node/npm/npx/bun).
46
+
47
+ Pack runs: Promise.allSettled parallel, each idea own try/catch, under 12s per call.
45
48
  Runner: `exec:runner\nstart|stop|status`
46
49
 
47
50
  ## CODEBASE SEARCH
48
51
 
49
- `exec:codesearch` only. Grep/Glob/Find/Explore/WebSearch/grep/rg/find inside exec:bash = ALL hook-blocked.
52
+ `exec:codesearch` only. Grep/Glob/Find/Explore/grep/rg/find = hook-blocked.
50
53
 
51
- Known absolute path → `Read`. Known dir → exec:nodejs + fs.readdirSync. No third option.
54
+ Known absolute path → `Read`. Known dir → exec:nodejs + fs.readdirSync.
52
55
 
53
56
  ```
54
57
  exec:codesearch
55
58
  <two-word query>
56
59
  ```
57
60
 
58
- Iterate: change one word or add one word per pass. Minimum 4 attempts before concluding absent.
61
+ Iterate: change/add one word per pass. Min 4 attempts before concluding absent.
59
62
 
60
63
  ## IMPORT-BASED EXECUTION
61
64
 
62
- Always import actual modules. Never rewrite logic inline — reimplemented output = UNKNOWN.
65
+ Always import actual modules. Reimplemented = UNKNOWN.
63
66
 
64
67
  ```
65
68
  exec:nodejs
@@ -67,67 +70,54 @@ const { fn } = await import('/abs/path/to/module.js');
67
70
  console.log(await fn(realInput));
68
71
  ```
69
72
 
70
- Differential diagnosis: isolate smallest reproduction, compare actual vs expected, name the delta. Delta = the mutable.
73
+ Differential diagnosis: smallest reproduction compare actual vs expected name the delta = mutable.
71
74
 
72
75
  ## CI — AUTOMATED
73
76
 
74
- git push → Stop hook auto-watches GitHub Actions for pushed HEAD. No manual `gh run watch`.
75
- - All-green → Stop approves with CI summary
76
- - Failure → Stop blocks with run names+IDs → `gh run view <id> --log-failed` for diagnosis
77
+ `git push` → Stop hook auto-watches Actions for pushed HEAD. Same-repo only downstream cascades not auto-watched.
78
+ - Green → Stop approves with summary
79
+ - Failure → run names+IDs → `gh run view <id> --log-failed`
77
80
  - Deadline 180s (override `GM_CI_WATCH_SECS`)
78
- - Downstream-repo cascades NOT auto-watched — same-repo only
79
81
 
80
82
  ## GROUND TRUTH
81
83
 
82
- Real services, real data, real timing. Mocks/stubs/simulations = delete. Scattered test files (.test.js, .spec.js, __tests__/) = delete. All coverage in root test.js. Fallback/demo modes = remove, fail loud.
83
-
84
- **Scan before edit**: exec:codesearch for existing implementation before creating/modifying. Duplicate concern = regress to `planning`.
84
+ Real services, real data, real timing. Mocks/stubs/scattered tests/fallbacks = delete.
85
85
 
86
+ **Scan before edit**: exec:codesearch before creating/modifying. Duplicate concern = regress to `planning`.
86
87
  **Hypothesize via execution**: hypothesis → run → witness → edit. Never edit on unwitnessed assumption.
87
-
88
- **Code quality** (stop at first that resolves need): native → library → structure (map/pipeline) → write.
88
+ **Code quality**: native → library → structure (map/pipeline) → write.
89
89
 
90
90
  ## PARALLEL SUBAGENTS
91
91
 
92
- ≤3 `gm:gm` subagents for independent items simultaneously: `Agent(subagent_type="gm:gm", ...)`
93
-
94
- Browser escalation: exec:browser → browser skill → navigate/click → screenshot (last resort).
92
+ ≤3 `gm:gm` subagents for independent items in ONE message. Browser escalation: exec:browser → browser skill → screenshot last resort.
95
93
 
96
94
  ## RECALL — HARD RULE
97
95
 
98
- Before resolving any new unknown via fresh execution, check whether past sessions already answered it. Memorized facts are useless if not recalled.
99
-
100
- Triggers (any = run recall NOW, before exec/codesearch):
101
- - About to investigate a "did we hit this before" question
102
- - About to ask the user something likely already discussed
103
- - About to design an approach where a prior decision exists
104
- - Encountered an error/quirk that "feels familiar"
105
- - Starting a new sub-task on a project worked on before
106
- - About to write a comment explaining a non-obvious choice
96
+ Before resolving any new unknown via fresh execution, recall first.
107
97
 
108
98
  ```
109
99
  exec:recall
110
100
  <2-6 word query>
111
101
  ```
112
102
 
113
- Recall hits are weak_prior still witness via execution before acting. Empty result = no prior memory; proceed normally. Never block on recall capped at 6s timeout, ~5ms when rs-learn serve is running.
103
+ Triggers: "did we hit this" | feels familiar | new sub-task in known project | about to comment a non-obvious choice | about to ask user something likely discussed.
114
104
 
115
- Recall costs ~200 tokens for 5 hits. Cheaper than re-investigating the same problem.
105
+ Hits = weak_prior; still witness. Empty = proceed. Capped 6s, ~5ms when serve running. ~200 tokens / 5 hits.
116
106
 
117
107
  ## MEMORIZE — HARD RULE
118
108
 
119
- Unknown→known = memorize same turn it resolves.
120
-
121
- Triggers: exec: output answers prior unknown | CI log reveals root cause | code read confirms/refutes | env quirk observed | user states preference/constraint.
109
+ Unknown→known = same-turn memorize.
122
110
 
123
111
  ```
124
112
  Agent(subagent_type='gm:memorize', model='haiku', run_in_background=true, prompt='## CONTEXT TO MEMORIZE\n<fact>')
125
113
  ```
126
114
 
115
+ Triggers: exec output answers prior unknown | CI log reveals root cause | code read confirms/refutes | env quirk | user states preference/constraint.
116
+
127
117
  N facts → N parallel Agent calls in ONE message. End-of-turn self-check mandatory.
128
118
 
129
- **Recall + memorize together = the learning loop.** Recall before investigating; memorize after resolving. Skipping either breaks the loop.
119
+ ## CONSTRAINTS
130
120
 
131
- **Never**: Bash(node/npm/npx/bun) | fake data | mocks | scattered tests | fallbacks | Grep/Glob/Find/Explore | sequential independent items | respond to user mid-phase | edit before witnessing | duplicate code | if/else where dispatch table suffices | one-liners that obscure | reinvent what native/library provides
121
+ **Never**: Bash(node/npm/npx/bun) | fake data | mocks | scattered tests | fallbacks | Grep/Glob/Find/Explore | sequential independent items | respond mid-phase | edit before witnessing | duplicate code | if/else where dispatch suffices | one-liners that obscure | reinvent native/library
132
122
 
133
- **Always**: witness every hypothesis | import real modules | scan before edit | regress on new unknown | delete mocks/comments/scattered tests on discovery | test.js for every behavior change | invoke next skill immediately when done
123
+ **Always**: witness every hypothesis | import real modules | scan before edit | regress on new unknown | delete mocks/comments/scattered tests on discovery | update test.js for behavior changes | invoke next skill immediately when done | weight verification by load
@@ -6,112 +6,77 @@ allowed-tools: Write
6
6
 
7
7
  # Planning — State Machine Orchestrator
8
8
 
9
- Runs `PLAN → EXECUTE → EMIT → VERIFY → UPDATE-DOCS → COMPLETE`.
10
-
11
- Entry: prompt-submit hook → `gm` → here. Re-enter on any new unknown in any phase.
12
-
13
- ## UNKNOWNS = PRODUCT
14
-
15
- Output = every fault surface work could fail on. Unknown named+resolved = cheaper downstream. Unknown skipped = EMIT/VERIFY surprise = snake back at higher cost.
16
-
17
- Later-phase unknown → return here. Not failure — machine working. Patch-around-in-place = compounding debt.
9
+ Runs `PLAN → EXECUTE → EMIT → VERIFY → UPDATE-DOCS → COMPLETE`. Re-enter on any new unknown in any phase.
18
10
 
19
11
  ## RECALL — HARD RULE
20
12
 
21
- Before naming any unknown, check past sessions. Cross-session memory is the cheapest mutable resolver.
22
-
23
- Triggers (any = run `plugkit recall` BEFORE adding the .prd item):
24
- - Unknown matches a previously-discussed topic in this project
25
- - About to investigate a "have we seen this" question
26
- - About to design an approach where a prior decision likely exists
27
- - Quirk/error feels familiar
28
- - Sub-task in a project worked on before
13
+ Before naming any unknown, run recall.
29
14
 
30
15
  ```
31
16
  exec:recall
32
17
  <2-6 word query>
33
18
  ```
34
19
 
35
- Hits are weak_prior feed the proposed approach into PLAN, but witness via EXECUTE before adopting. Empty hits = proceed normally; no signal lost.
20
+ Triggers: matches prior topic | "have we seen this" | designing where prior decision likely exists | quirk feels familiar | sub-task in known project.
36
21
 
37
- Skip recall only when: brand-new project (no DB) | trivially-bounded edit with zero unknowns | user gave surgical instructions.
22
+ Hits = weak_prior; witness via EXECUTE before adopting. Skip recall only on brand-new project / trivially-bounded edit / surgical user instruction.
38
23
 
39
24
  ## MEMORIZE — HARD RULE
40
25
 
41
- Every unknown resolved memorize same turn. Not batched, not deferred.
42
-
43
- Triggers: exec: output answers prior unknown | code read confirms/refutes | CI log reveals root cause | user states preference/constraint | fix worked non-obviously | env quirk observed.
26
+ Every unknown→known = same-turn memorize. Background, parallel, never batched.
44
27
 
45
28
  ```
46
29
  Agent(subagent_type='gm:memorize', model='haiku', run_in_background=true, prompt='## CONTEXT TO MEMORIZE\n<fact>')
47
30
  ```
48
31
 
49
- Multiple facts in one turn parallel Agent calls in ONE message. End-of-turn: scan for missed spawn now.
32
+ Triggers: exec output answers prior unknown | code read confirms/refutes | CI log reveals root cause | user states preference/constraint | fix worked non-obviously | env quirk observed.
50
33
 
51
- **Recall + memorize together = the learning loop.** Recall before investigating; memorize after resolving.
34
+ N facts N parallel Agent calls in ONE message.
52
35
 
53
36
  ## STATE MACHINE
54
37
 
55
38
  **FORWARD**: PLAN → `gm-execute` | EXECUTE → `gm-emit` | EMIT → `gm-complete` | VERIFY .prd remains → `gm-execute` | VERIFY .prd empty+pushed → `update-docs`
56
39
 
57
- **REGRESSIONS**: new unknown at any state re-invoke `planning` | EXECUTE unresolvable 2 passes → `planning` | EMIT logic error → `gm-execute` | EMIT new unknown → `planning` | VERIFY broken output → `gm-emit` | VERIFY logic wrong → `gm-execute` | VERIFY new unknown → `planning`
40
+ **REGRESSIONS**: new unknown anywhere → `planning` | EXECUTE unresolvable 2 passes → `planning` | EMIT logic error → `gm-execute` | VERIFY broken output → `gm-emit` | VERIFY logic wrong → `gm-execute`
58
41
 
59
42
  Runs until: .gm/prd.yml empty AND git clean AND all pushes confirmed AND CI green.
60
43
 
61
44
  ## AUTONOMY — HARD RULE
62
45
 
63
- After PRD is written, EXECUTE through to COMPLETE without asking the user. No mid-task confirmation. No "should I continue". No "want me to do X next". The PRD is the contract; execute it.
46
+ PRD written execute to COMPLETE without asking the user. No "should I continue", no "want me to do X next", no offering to split work.
64
47
 
65
- Asking is permitted ONLY when absolutely necessary: destructive-irreversible decision with no prior context, OR user intent ambiguous and unrecoverable from PRD/memory/code. Use `exec:pause` (renames prd.yml → prd.paused.yml; question lives in header) as the channel — in-conversation asking is last-resort.
48
+ Asking permitted only as last resort: destructive-irreversible with no PRD coverage, OR user intent unrecoverable from PRD/memory/code. Channel: `exec:pause` (renames prd.yml → prd.paused.yml; question in header). In-conversation asking last-resort.
66
49
 
67
- Long task reason to ask. Cross-repo work ≠ reason to ask. CI wait time reason to ask. Emit PRD, execute, push.
68
-
69
- **Cannot stop while**: .gm/prd.yml has items | git has uncommitted changes | git has unpushed commits.
50
+ **Cannot stop while**: .gm/prd.yml has items | git uncommitted | git unpushed.
70
51
 
71
52
  ## SKIP PLANNING (DEFAULT for small work)
72
53
 
73
- Skip if ANY apply:
74
- - Single-file, single-concern edit
75
- - Task trivially bounded, under ~5 min
76
- - User gave explicit surgical instructions
77
- - Bug fix with identified root cause
78
- - Zero unknowns
79
-
80
- Heavy ceremony (PRD + parallel subagents) for multi-file architectural work or genuinely unknown fault surfaces. If new unknown surfaces mid-work, THAT is when to regress — not preemptively.
54
+ Skip if ANY: single-file single-concern edit | trivially bounded <5min | surgical user instructions | bug fix with identified root cause | zero unknowns. Heavy ceremony only for multi-file architectural work.
81
55
 
82
56
  ## PLAN PHASE — MUTABLE DISCOVERY
83
57
 
84
- For every aspect of the task:
85
- - What do I not know? → mutable (UNKNOWN)
86
- - What could go wrong? → edge case item with failure mode
87
- - What depends on what? → blocking/blockedBy mapped
88
- - What assumptions am I making? → each = unwitnessed hypothesis = mutable
58
+ For every aspect: what do I not know (UNKNOWN) | what could go wrong (failure mode) | what depends on what (blocking/blockedBy) | what assumptions am I making (unwitnessed hypothesis = mutable).
89
59
 
90
- Fault surfaces: file existence | API shape | data format | dependency versions | runtime behavior | environment differences | error conditions | concurrency hazards | integration seams | backwards compatibility | rollback paths | CI/CD correctness
60
+ Fault surfaces: file existence | API shape | data format | dep versions | runtime behavior | env differences | error conditions | concurrency | integration seams | backwards compat | rollback paths | CI correctness.
91
61
 
92
- **Route family** (`governance`): tag every `.prd` item with family — grounding|reasoning|state|execution|observability|boundary|representation. Mis-routed repair = wasted EXECUTE pass.
62
+ **Route family** (governance): tag every item — grounding|reasoning|state|execution|observability|boundary|representation.
93
63
 
94
- **Failure-mode mapping**: cross-reference 16-failure taxonomy. No mapping = unexamined surface = silent bug.
64
+ **Failure-mode mapping**: cross-reference 16-failure taxonomy.
95
65
 
96
- **Competing routes stay live** until witnessed execution makes one dominant. Pre-witness collapse = route-into-authorization leak.
66
+ **MANDATORY CODEBASE SCAN**: `existingImpl=UNKNOWN` for every item. Resolve via exec:codesearch before adding. Existing concern consolidation, not addition.
97
67
 
98
- **MANDATORY CODEBASE SCAN**: For every item, `existingImpl=UNKNOWN`. Resolve via exec:codesearch. Existing code serving same concernconsolidation, not addition. PDFs indexed page-by-page — search specs same way you search source.
99
-
100
- **EXIT PLAN**: zero new unknowns last pass AND all .prd items have acceptance criteria AND dependencies mapped → launch subagents or invoke `gm-execute`.
68
+ **EXIT PLAN**: zero new unknowns last pass AND every item has acceptance criteria AND deps mapped launch subagents or invoke `gm-execute`.
101
69
 
102
70
  ## OBSERVABILITY — MANDATORY EVERY PASS
103
71
 
104
- Enumerate every runtime observability gap:
105
-
106
- **Server**: every subsystem exposes `/debug/<subsystem>`. State readable/filterable without restart. Structured logs with subsystem+severity+timestamp.
72
+ Server: every subsystem exposes `/debug/<subsystem>`. Structured logs `{subsystem, severity, ts}`.
73
+ Client: `window.__debug` live registry; modules register on mount.
107
74
 
108
- **Client**: `window.__debug` is live structured registry. Every component/request/queue/connection addressable by key. Modules register on mount, deregister on unmount.
109
-
110
- `console.log` = ad-hoc = not observability. `window.__debug.module.state` = permanent. Discovery of gap → add .prd item immediately. Observability = highest priority, never deferred.
75
+ `console.log` observability. Discovery of gap add .prd item immediately, never deferred.
111
76
 
112
77
  ## .PRD FORMAT
113
78
 
114
- Path: `./.gm/prd.yml`. Write via `exec:nodejs` + `fs.writeFileSync`. Delete when empty; delete `.gm/` when completely empty.
79
+ Path: `./.gm/prd.yml`. Write via `exec:nodejs` + `fs.writeFileSync`. Delete when empty.
115
80
 
116
81
  ```yaml
117
82
  - id: kebab-id
@@ -121,6 +86,7 @@ Path: `./.gm/prd.yml`. Write via `exec:nodejs` + `fs.writeFileSync`. Delete when
121
86
  effort: small|medium|large
122
87
  category: feature|bug|refactor|infra
123
88
  route_family: grounding|reasoning|state|execution|observability|boundary|representation
89
+ load: 0.0-1.0
124
90
  failure_modes: []
125
91
  route_fit: unexamined|examined|dominant
126
92
  authorization: none|weak_prior|witnessed
@@ -132,51 +98,42 @@ Path: `./.gm/prd.yml`. Write via `exec:nodejs` + `fs.writeFileSync`. Delete when
132
98
  - failure mode
133
99
  ```
134
100
 
135
- Status: pending in_progress completed (remove completed). Effort: small <15min | medium <45min | large >1h.
101
+ **load** axis (consequence — convergence 3.3.0): 0.9 = headline collapses if wrong. 0.7 = sub-argument rebuilt. 0.4 = local patch. 0.1 = nothing breaks. **Verification budget = load × (1 − tier_confidence)**. High-load + low-tier item = top priority. λ>0.75 must be witnessed before EMIT.
102
+
103
+ Status: pending → in_progress → completed (remove). Effort: small <15min | medium <45min | large >1h.
136
104
 
137
105
  ## PARALLEL SUBAGENT LAUNCH
138
106
 
139
- After .prd written, launch ≤3 parallel `gm:gm` subagents for all independent items simultaneously. Never sequential.
107
+ After .prd written, ≤3 parallel `gm:gm` subagents for independent items in ONE message. Browser tasks serialize.
140
108
 
141
109
  `Agent(subagent_type="gm:gm", prompt="Work on .prd item: <id>. .prd path: <path>. Item: <full YAML>.")`
142
110
 
143
- After each wave: read .prd, find newly unblocked, launch next. Browser tasks serialize.
111
+ Not parallelizable invoke `gm-execute` directly.
144
112
 
145
- When parallelism not applicable: invoke `gm-execute` directly.
113
+ ## EXECUTION RULES
146
114
 
147
- ## CODE EXECUTION
115
+ `exec:<lang>` only via Bash. File I/O via exec:nodejs + fs. Git directly in Bash. Never Bash(node/npm/npx/bun).
148
116
 
149
- `exec:<lang>` only via Bash tool. File I/O: exec:nodejs + require('fs'). Git only in Bash directly. Never Bash(node/npm/npx/bun).
117
+ `exec:codesearch` only Glob/Grep/Find/Explore hook-blocked. Start 2 words → change/add one per pass minimum 4 attempts before concluding absent.
150
118
 
151
- Pack runs: `Promise.allSettled` for parallel. Each idea its own try/catch. Under 12s per call.
119
+ Pack runs: Promise.allSettled for parallel. Each idea own try/catch. Under 12s per call.
152
120
 
153
- ## CODEBASE EXPLORATION
121
+ ## DEV WORKFLOW
154
122
 
155
- `exec:codesearch` only. Glob/Grep/Read/Explore = hook-blocked. Start 2 words change one add third minimum 4 attempts before concluding absent.
123
+ No comments. No scattered test files. 200-line limit per file. Fail loud. No duplication. Scan before edit. AGENTS.md via memorize agent only. CHANGELOG.md append per commit.
156
124
 
157
- ## MANDATORY DEV WORKFLOW
158
-
159
- No comments. No scattered test files. 200-line limit. Fail loud. No duplication. Scan before edit. AGENTS.md via memorize only. CHANGELOG.md: append per commit.
160
-
161
- **Minimal code process** (stop at first that resolves need):
162
- 1. Native — does language/runtime do this? Use it.
163
- 2. Library — existing dep solve this? Use its API.
164
- 3. Structure — encode as data (map/table/pipeline)? Make structure enforce correctness.
165
- 4. Write — only when 1-3 exhausted.
125
+ **Minimal code process** (stop at first that resolves): native → library → structure (map/pipeline) → write.
166
126
 
167
127
  ## SINGLE INTEGRATION TEST POLICY
168
128
 
169
- One `test.js` at project root. 200-line max. No .test.js, .spec.js, __tests__/, fixtures/, mocks/. No frameworks, no mocks, no stubs plain assertions, real data, real system.
170
-
171
- `gm-complete` runs test.js before completion. Failure = regression to EXECUTE. Every behavior change updates test.js. Every bug fix adds regression case.
129
+ One `test.js` at project root. 200-line max. No `.test.js` / `.spec.js` / `__tests__/` / fixtures / mocks. Plain assertions, real data, real system. `gm-complete` runs it. Failure = regression to EXECUTE.
172
130
 
173
131
  ## RESPONSE POLICY
174
132
 
175
- Terse. Drop filler. Fragments OK. Pattern: `[thing] [action] [reason]. [next step].`
176
- Code/commits/PRs = normal prose.
133
+ Terse. Drop filler. Fragments OK. Pattern: `[thing] [action] [reason]. [next step].` Code/commits/PRs = normal prose.
177
134
 
178
135
  ## CONSTRAINTS
179
136
 
180
- **Never**: Bash(node/npm/npx/bun) | skip planning | partial execution | stop while .prd has items | stop while git dirty | sequential independent items | screenshot before JS exhausted | fallback/demo modes | swallow errors | duplicate concern | leave comments | scattered test files | if/else chains where map suffices | one-liners that require decoding | leave resolved unknown un-memorized | batch memorize | serialize memorize spawns
137
+ **Never**: Bash(node/npm/npx/bun) | skip planning | partial execution | stop while .prd has items | stop while git dirty | sequential independent items | screenshot before JS exhausted | fallback/demo modes | swallow errors | duplicate concern | leave comments | scattered tests | if/else where map suffices | one-liners that obscure | leave resolved unknown un-memorized | batch memorize | serialize memorize spawns
181
138
 
182
- **Always**: invoke Skill at every transition | regress to planning on new unknown | witnessed execution only | scan before edits | enumerate observability gaps every pass | follow chain end-to-end | prefer dispatch tables | prefer pipelines | make wrong states unrepresentable | spawn memorize same turn unknown resolves | end-of-turn self-check
139
+ **Always**: invoke Skill at every transition | regress to planning on new unknown | witnessed execution only | scan before edits | enumerate observability gaps every pass | follow chain end-to-end | prefer dispatch tables and pipelines | make wrong states unrepresentable | spawn memorize same turn unknown resolves | end-of-turn self-check