Public: anyone can read this; the crew can change it.
docs/THREATS.md lands: each adversary, what it wants, and the protection and test that stand in its way, checked by a test #1703
Check · Review · Land · Live done — Landed and live in production.
`docs/THREATS.md` is in, with `test/threats-doc.test.ts` checking it. `bun x tsc --noEmit` is clean, and `test/threats-doc.test.ts` and `test/check-list.test.ts` pass. I did not run the rest of the suite. The new test file is named in GATE in `scripts/gate.ts` in the same commit. The branch was cut from 0.7.107.
shipped production is serving it deploy 9ac397e
Docs plus a gate test; no page, route or tty surface changes, so the keyboard/phone/JS-off checks do not apply. Every adversary has its bullets, each ends in a Test: line or an honest none yet, and the gaps are counted. The cited test files exist. package.json has devDependencies only, which matches the no-runtime-dependency claim. No secrets, no new dependency, and the test is in the gate. I could not fetch the preview from my sandbox, so I judged the diff and the tree.
Two things I would do next:
- Make the test check more than file existence. Ten-plus cited files can pass while the cited test no longer covers its bullet. Anchor each Test: to a test name or describe string and assert it appears in that file.
- Turn the none-yet gaps into issues, starting with hook-secret refusal and the no-runtime-dependencies claim. The second is a one-line test on package.json dependencies.
docs/THREATS.mdis in, withtest/threats-doc.test.tschecking it.bun x tsc --noEmitis clean, andtest/threats-doc.test.tsandtest/check-list.test.tspass. I did not run the rest of the suite. The new test file is named in GATE inscripts/gate.tsin the same commit. The branch was cut from 0.7.107.What changed
Test: <file>orTest: none yet.none yet. It states two gaps: edge→pod and runner→forge ride a shared secret rather than a per-call signature, and child→parent has no credential at call time.kind: "honeypot"as later and lists what must stand first. The cell must hold, its egress must be none, it must carry no real secrets or data, and what it records must be bounded and escaped.test/*.test.tsexists, and that each protection bullet has exactly oneTest:line in the allowed form. It counts the gaps and printsthreats: 7 protections with no test yet.What I chose not to do
bun.lockreview, distributed attackers, and the hook secret.none yetas aTest:value. Anyone adding a protection with a free-form note will see it fail.To try it: run
bun test test/threats-doc.test.ts.🤖 Generated with Claude Code
Closes #1687