gm-cc 2.0.720 → 2.0.721

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.720",
7
+ "version": "2.0.721",
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.720",
3
+ "version": "2.0.721",
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.720",
3
+ "version": "2.0.721",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": {
6
6
  "name": "AnEntrypoint",
@@ -21,6 +21,7 @@ Failure triage: broken output → EMIT | wrong logic → EXECUTE | new unknown
21
21
  ## MUTABLES — ALL MUST RESOLVE BEFORE COMPLETE
22
22
 
23
23
  - `witnessed_e2e` — real end-to-end run with witnessed output
24
+ - `browser_validated` — MANDATORY for any change touching client/UI/browser-facing code (anything served to a browser, rendered, or whose output is visible to a user). Must invoke `browser` skill, navigate the live page, and witness the change in `window` / DOM / scene state. test.js + node-side imports DO NOT satisfy this gate. See BROWSER VALIDATION GATE below.
24
25
  - `git_clean` — `git status --porcelain` returns empty
25
26
  - `git_pushed` — `git log origin/main..HEAD --oneline` returns empty
26
27
  - `ci_passed` — all GitHub Actions runs reach `conclusion: success`
@@ -40,6 +41,26 @@ console.log(await fn(realInput));
40
41
 
41
42
  Browser/UI: invoke `browser` skill. After every success: enumerate what remains — never stop at first green.
42
43
 
44
+ ## BROWSER VALIDATION GATE — MANDATORY FOR CLIENT WORK
45
+
46
+ If this session changed any code that runs in a browser — anything under client/, UI components, shaders, page-loaded JS, served HTML, gh-pages assets, dev-server endpoints, or any module imported into the page bundle — `browser_validated` MUST resolve before COMPLETE. Skipping it because "node tests pass" or "test.js is green" is a forced-closure refusal of witnessed verification.
47
+
48
+ Trigger detection (any one suffices):
49
+ - `git diff --name-only origin/main..HEAD` includes paths under `client/`, `apps/*/index.js` with client export, `docs/`, `*.html`, shader files, or any file imported by a browser entry.
50
+ - New/changed export consumed by `window.*` or rendered in DOM/canvas/WebGL.
51
+ - Visual, layout, animation, input, network-on-page, or shader behavior altered.
52
+
53
+ Required protocol:
54
+ 1. Boot the real server (or open the static page) on a known URL — witness HTTP 200.
55
+ 2. `exec:browser` → `page.goto(url)` → wait for app init (poll for the global the change affects, e.g. `window.__app.<system>`).
56
+ 3. Probe via `page.evaluate(() => …)` — assert the specific invariant the change was supposed to establish (instance counts, scene meshes, DOM nodes, render stats, network frames, etc.).
57
+ 4. Capture the witnessed numbers in the response. "Looks fine" is not a witness.
58
+ 5. Failures → regress to `gm-execute` (logic) or `gm-emit` (output) — never paper over.
59
+
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
+
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.
63
+
43
64
  ## INTEGRATION TEST GATE
44
65
 
45
66
  ```
@@ -97,6 +118,6 @@ One per fact, parallel, same turn resolved. End-of-turn self-check mandatory.
97
118
 
98
119
  ## COMPLETION DEFINITION
99
120
 
100
- All: witnessed e2e | failure paths exercised | test.js passes | .prd deleted | git clean+pushed | CI green | hygiene sweep clean | TODO.md gone | CHANGELOG.md updated
121
+ All: witnessed e2e | browser_validated (when client work touched) | failure paths exercised | test.js passes | .prd deleted | git clean+pushed | CI green | hygiene sweep clean | TODO.md gone | CHANGELOG.md updated
101
122
 
102
- **Never**: claim done without witnessed output | stop while .prd has items | skip hygiene | skip test.js | uncommitted/unpushed work | stop at first green
123
+ **Never**: claim done without witnessed output | claim done on a client change without browser-validation witness | stop while .prd has items | skip hygiene | skip test.js | uncommitted/unpushed work | stop at first green
@@ -58,6 +58,7 @@ console.log(await fn(realInput));
58
58
  - Hot reloadable; errors throw with context (no fallbacks, `|| default`, `catch { return null }`)
59
59
  - No mocks/fakes/stubs/scattered test files (delete on discovery)
60
60
  - Behavior change in this emit = a corresponding assertion in test.js (a change no test would catch is a change you cannot prove)
61
+ - If this emit changes any browser-facing code (client/, served HTML/JS, shaders, page-bundle imports, gh-pages assets), the post-emit verify MUST include a live browser witness via `exec:browser` (boot server → page.goto → page.evaluate asserting the invariant the change established). Node-side import + test.js does NOT satisfy this — see `gm-complete` BROWSER VALIDATION GATE.
61
62
  - Files ≤200 lines
62
63
  - No duplicate concern (run exec:codesearch for primary concern after writing; any overlap → `planning`)
63
64
  - No comments; no hardcoded values; no adjectives in identifiers; no unnecessary files