gm-qwen 2.0.750 → 2.0.751

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/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.750",
3
+ "version": "2.0.751",
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-qwen",
3
- "version": "2.0.750",
3
+ "version": "2.0.751",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
@@ -82,6 +82,22 @@ Required: surface → diagnose → fix at root cause → re-witness → continue
82
82
 
83
83
  A skill chain that shipped while ignoring a known-bad signal is a forced-closure failure (see LAWFUL DOWNGRADE).
84
84
 
85
+ ## BROWSER WITNESS — HARD RULE
86
+
87
+ Any edit to code that runs in a browser (under `client/`, `docs/`, `*.html`, shaders, page-bundle imports, served JS/CSS, gh-pages assets, anything imported by a browser entry, anything visible in the DOM/canvas/WebGL) requires a live `exec:browser` witness in the SAME session — never deferred to "next session" or "follow-up".
88
+
89
+ Mandatory protocol (every client edit):
90
+ 1. Boot the real server / open the static page → witness HTTP 200
91
+ 2. `exec:browser` → `page.goto(url)` → poll for the global the change affects (`window.__app.<system>`, `window.__debug.<module>`)
92
+ 3. `page.evaluate(() => …)` asserting the specific invariant the change established — instance counts, scene meshes, DOM nodes, render stats, network frames
93
+ 4. Capture witnessed numbers in the response. "Looks fine" / "should work" / "node test passes" = NOT a witness
94
+
95
+ Forbidden: shipping a client change with only `node test.js` green | screenshot-without-evaluate | "browser validation deferred to VERIFY" then skipping VERIFY | "exempt because the change is small" | committing client diff without an `exec:browser` block in the same turn.
96
+
97
+ Exempt only when: change is server-only with zero browser-facing surface, OR repo has no browser surface at all. Tag the exemption explicitly in the response with the reason; silent skip = forced-closure failure.
98
+
99
+ This rule fires in EXECUTE (witness on edit), EMIT (post-emit verify), and VERIFY (final gate). All three. Skipping any layer counts as the failure.
100
+
85
101
  ## EXECUTION ORDER
86
102
 
87
103
  1. Recall — `plugkit recall` for any familiar-feeling unknown (cheapest, 200 tokens)
@@ -59,7 +59,9 @@ Required protocol:
59
59
 
60
60
  Long-running probes: split into navigate-call → `exec:wait N` → probe-call to stay under the per-call budget. Do not stack multi-second `setTimeout` inside one `exec:browser` invocation.
61
61
 
62
- Exempt only when: change is server-only with zero browser-facing surface, OR repository has no browser surface at all (pure CLI/library). Tag the exemption in the response with the reason; do not silently skip.
62
+ Exempt only when: change is server-only with zero browser-facing surface, OR repository has no browser surface at all (pure CLI/library). Exemption requires explicit tag in the response: `BROWSER EXEMPT: <reason must reference diff paths showing zero browser-facing surface>`. Silent skip = forced-closure failure. Default posture is NOT exempt — burden is on the agent to prove exemption with diff evidence, not to assume it.
63
+
64
+ **Pre-flight check before declaring complete**: run `git diff --name-only origin/main..HEAD` and grep for `client/|docs/|\.html$|\.glsl$|\.frag$|\.vert$`. Any hit AND no `exec:browser` block in this session = mandatory regression to `gm-execute` to witness the change live. No exceptions for "small CSS tweak" or "obvious string change".
63
65
 
64
66
  ## INTEGRATION TEST GATE
65
67
 
@@ -122,6 +122,18 @@ N facts → N parallel Agent calls in ONE message. End-of-turn self-check mandat
122
122
 
123
123
  Issue surfaced mid-execution (failing test, exec stderr, broken import, runtime exception, lint/type error, deprecation warning, unexpected output) is fixed THIS turn, at root cause, in-band. Never `// TODO`, never `try/catch`-to-swallow, never `2>/dev/null`, never `.skip`, never "out of scope" inside the same file. Re-witness after fix. New unknown surfaced by the fix → regress to `planning`. Genuine out-of-scope → write a `.gm/prd.yml` item before continuing.
124
124
 
125
+ ## BROWSER WITNESS — HARD RULE
126
+
127
+ Editing browser-facing code (under `client/`, `docs/`, `*.html`, shaders, page-bundle imports, served JS/CSS, gh-pages assets, anything imported by a browser entry, anything visible in DOM/canvas/WebGL) → live `exec:browser` witness in THIS phase, same turn as the edit. Not deferred to EMIT, not deferred to VERIFY — those layers re-witness on top, they don't replace this one.
128
+
129
+ Protocol on every client edit:
130
+ 1. Boot server / open page → HTTP 200 witnessed
131
+ 2. `exec:browser` → `page.goto(url)` → poll the affected global (`window.__app.<system>`, `window.__debug.<module>`)
132
+ 3. `page.evaluate` asserting the specific invariant the change establishes — capture numbers
133
+ 4. Variance → fix at root cause, re-witness (FIX ON SIGHT). Never advance to EMIT on unwitnessed client behavior.
134
+
135
+ Forbidden: `node test.js` green as a substitute | screenshot without evaluate | "I'll check it in VERIFY" then skipping | committing a client diff without an `exec:browser` block this turn. Exempt only for server-only / no-browser repos; tag the exemption explicitly.
136
+
125
137
  ## CONSTRAINTS
126
138
 
127
139
  **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
@@ -63,6 +63,16 @@ Every issue surfaced during planning, execution, or verification — failing tes
63
63
 
64
64
  Surface → diagnose root cause → fix → re-witness → continue. New unknown discovered while fixing → regress here (planning). Genuinely out-of-scope → add a `.gm/prd.yml` item BEFORE moving on, never just mention it. Ignoring a known-bad signal = forced-closure failure.
65
65
 
66
+ ## BROWSER WITNESS — HARD RULE
67
+
68
+ Every `.prd` item that touches browser-facing code (under `client/`, `docs/`, `*.html`, shaders, page-bundle imports, served JS/CSS, gh-pages assets, anything imported by a browser entry, anything visible in DOM/canvas/WebGL) MUST list `browser_validated` as an acceptance criterion AND list `exec:browser witness with page.evaluate assertion` as an explicit edge_case probe. Without that line the item is not plan-complete.
69
+
70
+ Forbidden: client `.prd` item with only `test.js passes` as acceptance | "browser test optional" | deferring browser witness to "follow-up" | acceptance lines that say "verified manually". Manual = unwitnessed = not acceptable.
71
+
72
+ Detection (any → mandatory): paths under `client/`, `docs/`, `*.html`, shader files, files imported into a page bundle; new export consumed by `window.*`; any visual/layout/animation/input/network-on-page/shader behavior.
73
+
74
+ This propagates: EXECUTE witnesses on edit, EMIT re-witnesses post-write, VERIFY runs the final gate. Plan must encode it so all three layers fire.
75
+
66
76
  ## SKIP PLANNING (DEFAULT for small work)
67
77
 
68
78
  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.