oficina / home Public

Ruling 21: the zero-JS tripwire fired, and it fired correctly

§11 said the day a surface needs script is the day the section is
wrong. Passkeys are that day. Paul ruled one named carve-out for
enrolment and ceremony rather than widening the rule or dropping the
second factor, and this file follows.

The allowlist matters more than the exemption: a rule naming which
screens may load script is checkable, and one with an escape hatch is
not.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Paul Campbell pushed by paul@keymail.dev c7d4b6b9c7653880e6bc7cf4d917e02d16cb2855 parent 23e4dae
1 file changed, +10 −2
  • AGENTS.md +10 −2

CI passed — run details

Intent

Attributed to this commit: 245 g CO₂e (21956905 tokens). This is an attribution, not a measurement — usage counted from this commit's own marker forward to the next one on fix/agents-md-matches-spec, never backward from it. A turn that produced more than one commit books all of its tokens to the last one, and a concurrent session on this branch can add to the same figure. Some of it was priced using the shared default rate, because no model-specific factor row exists yet for at least one model involved. The Carbon view has the repo total, which is never derived from this attribution.

diff --git a/AGENTS.md b/AGENTS.md
index 7767872..94da18a 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -241,8 +241,16 @@ quietly ignored).
copy of that test. There is no vendored `static/` in the
tree today — `internal/home/page.go` links no stylesheet, deliberately —
so this is an instruction with no object until the first asset arrives.
-- Zero JS. **No surface here has any reason to require script**, and the day
- one does is the day the spec is wrong.
+- Zero JS, **with exactly one carve-out** (ruling 21): the passkey
+ enrolment and ceremony screens may load rastrillo's own `webauthn.JS()`.
+ That sentence used to read "no surface here has any reason to require
+ script, and the day one does is the day the spec is wrong" — and the day
+ came, with passkeys. It was a tripwire and it fired correctly. Everything
+ else stays scriptless: magic-link sign-in, recovery-code redemption and
+ the springboard, so script-off keeps a working sign-in and loses only an
+ optional second factor. The no-`<script>` test carries an **explicit
+ allowlist of the carved-out screens** — never a blanket exemption, because
+ a rule with a list is checkable and a rule with an escape hatch is not.
**Deploys**
- One binary, `CGO_ENABLED=0`, cgo-free SQLite.