mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-08-20 11:42:23 +02:00
46 lines
3.4 KiB
Markdown
46 lines
3.4 KiB
Markdown
# Gate audit: is this a real gate or smoke and mirrors?
|
|
|
|
A test only counts if breaking the thing it guards turns it RED. This is the
|
|
red-team of our own gate: for each check, the claim, the fault we injected, the
|
|
result, and an honest note on what it still does NOT cover. Re-run the evidence
|
|
with `node scripts/ci/selftest-gate.js` (pure, mutation tests) plus the live
|
|
fault-injections noted below.
|
|
|
|
## Verdict: it has teeth (with one gap found + fixed)
|
|
|
|
| Check | Claim | Fault injected | Result | Real? |
|
|
| --- | --- | --- | --- | --- |
|
|
| boot: provenance | the running app is the build at HEAD | built at an older sha, ran against HEAD | **RED** ("provenance sha X != git HEAD Y"), seen live | yes |
|
|
| boot: provenance/marks | a good log passes; broken logs don't | missing `[provenance]`, sha mismatch, missing mark, out-of-order, all-zero | **RED on each**, good log green (selftest-gate.js) | yes |
|
|
| boot: health | backend actually serves | port not serving | **RED** (health != 200) | yes |
|
|
| signature: reject | unsigned bits can't ship | `--require-signed` on the unsigned local build | **RED** (exit 1) | yes |
|
|
| signature: recognize | a real signature is seen as valid | `--require-signed` on `node.exe` (OpenJS-signed) | **GREEN, signed=Valid** (not "always unsigned") | yes |
|
|
| resilience: locked-port | survives a taken preferred port | held 8324-8333 | app served on **:8334** (behavior changed vs default :8324) | yes |
|
|
| resilience: multi-instance | 2nd launch exits, 1st keeps serving | launched a 2nd instance | 2nd **exited code 0**, 1st still 200 | yes |
|
|
| network: auth | the bearer is validated, not just present | no-token / **wrong-token** / real-token | **401 / 401 / 200** | yes (after fix) |
|
|
| network: 9router | the bundled router is up | TCP probe :20128 | open when up, RED when down | yes |
|
|
| agent turn | a real model reply on the user's creds | fresh session, tool-free prompt | **completed, tokens.output > 0** (can't be faked: a fresh session starts at 0) | yes |
|
|
| gui hand | a CC instance can drive the real GUI | launched + screenshotted + read log | works; render gate asserts `#root` has children (not a blank window) | yes |
|
|
| verify-all | one failure fails the whole gate | bogus app path | **3 sub-checks RED -> exit 1** (not silently green) | yes |
|
|
|
|
## The gap we found and closed
|
|
|
|
`verify-network` originally tested only no-token (401) vs real-token (200). A
|
|
backend that accepted ANY `Authorization` header would have passed both while auth
|
|
was actually broken. Added a **wrong-token probe** that must also get 401; the 200
|
|
now means "validated", not "a header was present". Proven live: `401 / 401 / 200`.
|
|
|
|
## What this gate still does NOT cover (honest residuals)
|
|
|
|
- **macOS signing path is unverified locally** (no Mac here). The `codesign` +
|
|
`spctl` + staple logic is written but only CI on a Mac runner proves it.
|
|
- **Full port-range exhaustion** isn't exercised; we hold the bottom of the range
|
|
(common real case). All-101-taken relies on get-port's own ephemeral fallback.
|
|
- **Agent-turn content** isn't asserted (models vary); we assert real output
|
|
tokens were produced, not that the words are correct.
|
|
- **Perf marks are emitted by product code**; the gate trusts the app isn't lying
|
|
about its own lifecycle. `first-paint` only exists if the renderer painted, so a
|
|
no-paint boot is still caught.
|
|
- **The gate proves boot/serve/resilience/auth, not feature correctness.** That is
|
|
the CC-instance apex layer's job (drive the GUI, judge "does it actually work").
|