gm-codex 2.0.944 → 2.0.946

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-codex",
3
- "version": "2.0.944",
3
+ "version": "2.0.946",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": {
6
6
  "name": "AnEntrypoint",
package/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.944",
3
+ "version": "2.0.946",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-codex",
3
- "version": "2.0.944",
3
+ "version": "2.0.946",
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.944",
3
+ "version": "2.0.946",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": {
6
6
  "name": "AnEntrypoint",
@@ -26,6 +26,7 @@ Failure triage: broken output to EMIT, wrong logic to EXECUTE, new unknown to PL
26
26
  - `git_clean` — `git status --porcelain` returns empty
27
27
  - `git_pushed` — `git log origin/main..HEAD --oneline` returns empty
28
28
  - `ci_passed` — every GitHub Actions run reaches `conclusion: success`
29
+ - `mutables_resolved` — `.gm/mutables.yml` deleted OR every entry `status: witnessed`. Stop hook hard-blocks turn-stop while any entry is `status: unknown`.
29
30
  - `prd_empty` — `.gm/prd.yml` deleted AFTER residual scan: enumerate every in-spirit reachable residual surfaced this session; any hit re-enters `planning`, appends PRD items, executes. Empty PRD is necessary, not sufficient — done = empty PRD AND zero reachable in-spirit residuals. Out-of-spirit-or-unreachable residuals are named in the response and skipped; everything else is this turn's work.
30
31
  - `stress_suite_clear` — change walked through M1–D1 (governance), none flunked
31
32
  - `hidden_decision_posture` — open → down_weighted → closed only when CI is green AND stress suite is clear
@@ -48,8 +48,13 @@ Import the actual module from disk to witness current behavior as the baseline.
48
48
 
49
49
  Re-import from disk — in-memory state is stale and inadmissible. Run identical inputs as pre-emit; output must match the baseline exactly. Known variance → fix and re-verify (self-loop). Unknown variance → `planning`.
50
50
 
51
+ ## Mutables gate
52
+
53
+ Before pre-emit run, read `.gm/mutables.yml`. Any entry with `status: unknown` → regress to `gm-execute`. The pre-tool-use hook hard-blocks Write/Edit/NotebookEdit while unresolved entries exist; trying to emit anyway returns deny. Zero unresolved is the precondition for every legitimacy question below.
54
+
51
55
  ## Gate (all true at once)
52
56
 
57
+ - `.gm/mutables.yml` empty/absent OR every entry `status: witnessed` with filled `witness_evidence`
53
58
  - Legitimacy gate passed; no refused collapse
54
59
  - Pre-emit passed with real inputs and real error inputs
55
60
  - Post-emit matches pre-emit exactly
@@ -30,6 +30,8 @@ Resolves to KNOWN only when all four pass:
30
30
 
31
31
  Unresolved after 2 passes regresses to `planning`. Never narrate past an unresolved mutable.
32
32
 
33
+ Every witness that resolves a mutable writes back to `.gm/mutables.yml` the same step: set `status: witnessed` and fill `witness_evidence` with concrete proof (file:line, codesearch hit, exec output snippet). No write-back = the mutable stays unknown and the EMIT-gate stays closed. The hook reads this file; the agent's memory of "I resolved it" does not unblock anything.
34
+
33
35
  Route candidates from PLAN are `weak_prior` only. Plausibility is the right to test, not the right to believe. A claim with no witness in the current session is a hypothesis — say so when stating it, and say what would settle it. The next reader (you, next turn) needs to know which lines were earned and which were carried forward.
34
36
 
35
37
  ## Verification budget
@@ -37,6 +37,20 @@ Tag every item with a route family (grounding | reasoning | state | execution |
37
37
 
38
38
  Plan exits when zero new unknowns surfaced last pass AND every item has acceptance criteria AND deps are mapped.
39
39
 
40
+ ## .gm/mutables.yml — co-equal with .gm/prd.yml
41
+
42
+ Every unknown surfaced during PLAN lands as an entry in `.gm/mutables.yml` the same pass. Live during work, deleted when empty. Hook-gated: Write/Edit/NotebookEdit and `git commit`/`git push` are hard-blocked while any entry has `status: unknown`; turn-stop is hard-blocked the same way.
43
+
44
+ ```yaml
45
+ - id: kebab-id
46
+ claim: One-line statement of what is assumed
47
+ witness_method: exec:codesearch <query> | exec:nodejs import | exec:recall <query> | Read <path>
48
+ witness_evidence: ""
49
+ status: unknown
50
+ ```
51
+
52
+ `status: unknown` → `witnessed` only when `witness_evidence` is filled with concrete proof (file:line, codesearch hit, dispatched test output). Resolution lives in gm-execute. PRD items reference mutables via optional `mutables: [id1, id2]` field; an item is blocked while any referenced mutable is unresolved.
53
+
40
54
  ## .prd format
41
55
 
42
56
  Path: `./.gm/prd.yml`. Write via `exec:nodejs` + `fs.writeFileSync`. Delete the file when empty.