Skip to content

Commit 7bffee2

Browse files
authored
Merge pull request #77 from mataeil/feat/v1.10.1-gate-integrity
fix(v1.10.1): gate integrity — module-load + render verify (node --check is insufficient)
2 parents 20bff8b + 082f846 commit 7bffee2

3 files changed

Lines changed: 41 additions & 1 deletion

File tree

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "ooda-loop",
33
"displayName": "OODA-loop",
4-
"version": "1.10.0",
4+
"version": "1.10.1",
55
"description": "An autonomous operations layer for your live side project. It watches, re-orients from which PRs you merge and reject, and opens small revertible PRs — bounded by a HALT file, protected paths, and a hard cost cap. Built on Boyd's OODA loop. You stay in command.",
66
"author": {
77
"name": "Taeil Ma",

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,28 @@ independently. Bump there signals migration work for downstream projects.
88

99
---
1010

11+
## [v1.10.1] — 2026-06-20
12+
13+
### Fixed/clarified — gate integrity (f1 probe, overnight)
14+
15+
The overnight f1 campaign surfaced that the per-cycle gate (`node --check` + smoke)
16+
is necessary but NOT sufficient, and a sub-agent's self-reported "gate passed" is
17+
not trustworthy — both misses were caught only by loading the artifact in its
18+
runtime (the orchestrator's render-verify):
19+
20+
- **`node --check` misses ES-module redeclarations.** A duplicate same-scope
21+
`const` (two cycles each declaring `speedN`) exits 0 under `node --check` but the
22+
browser ES-module parser rejects it — the game wouldn't boot, yet the cycle
23+
reported PASS. dev-cycle Step 4 now requires a **module-load check** (import the
24+
changed modules in their module system) for ES-module/browser artifacts.
25+
- **Visual regressions pass every unit gate.** A cumulative over-exposed-to-white
26+
frame passed `node --check` + smoke; only a rendered critique (evolve 5-G)
27+
caught it. Rule added: for rich-runtime artifacts, verification MUST load the
28+
artifact the way its runtime does (module-load + render/screenshot), and evolve
29+
re-checks the gate from recorded facts — it does not take the build skill's word.
30+
31+
plugin 1.10.0→1.10.1. (Docs/spec only; verify.py unchanged at 63.)
32+
1133
## [v1.10.0] — 2026-06-20
1234

1335
### Added — asset hand-off; restored v1.9.0 engine prose (probe-found gap)

skills/dev-cycle/SKILL.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,24 @@ in_progress.
259259

260260
## Step 4: Verify
261261

262+
> **Gate integrity (v1.10.1 — earned by the f1 probe).** A static check is
263+
> necessary but NOT sufficient, and a sub-agent's *self-reported* gate result is
264+
> not trustworthy — the orchestrator must verify from facts. Two real misses the
265+
> f1 overnight run surfaced, BOTH caught only by loading the artifact in its real
266+
> runtime, never by the unit gate:
267+
> 1. `node --check` exits 0 on a same-scope `const` REDECLARATION that the browser
268+
> ES-module parser rejects — the game wouldn't boot, yet the cycle's
269+
> `node --check + smoke` gate "passed". For an ES-module/browser artifact, also
270+
> do a **module-load check** (import the changed modules in their module system,
271+
> e.g. `node --input-type=module -e 'import("./src/x.js")'`, or load the page)
272+
> — that catches what `node --check` cannot.
273+
> 2. A cumulative **visual regression** (over-exposed-to-white frame) passed every
274+
> unit gate; only a **rendered critique** caught it.
275+
> Rule: for rich-runtime artifacts (browser/UI/graphics/game), the verification
276+
> MUST load the artifact the way its runtime does (module-load + render/screenshot
277+
> critique, i.e. evolve Step 5-G), and evolve re-checks the gate from recorded
278+
> facts — it does NOT take the build skill's word for "tests passed".
279+
262280
**If `config.test_command` is not configured or is empty:**
263281
```
264282
Print "No test_command configured. Skipping tests."

0 commit comments

Comments
 (0)