Proposal · v1.1 draft · for red-pen

Fast Lane

One flag turns the existing factory into the team's bridge: URL in, live site + editable repo out in ~20 minutes, 30-second edits — legibility kept, enforcement unplugged, certification impossible by construction.

Draft for Robert’s annotation · every number measured live on nydermvet, 2026-08-18 · not approved · no building yet

The pitch, in one breath

The team gets one command that turns any practice URL into a live site plus an editable repo in about 20 minutes, and a 30-second edit loop inside that repo — by running the existing factory in a mode that records problems instead of stopping on them, with the editing enforcement layer unplugged but every legibility primitive kept.

This was not designed on a whiteboard. Every number on this page happened tonight, on a real practice site (Hudson Valley Veterinary Dermatology), and the receipts exist on disk.

A mode with hard seams, not a fork. The historical wrong-pipeline scars came from two parallel systems coexisting — a fork recreates that topology; seams close it.
Legibility stays, enforcement goes. The labeled map of every fact ships with the site itself — gates were never what made it editable.
No confirm, none (ruled 08-18). Every edit applies the moment it's typed; anyone on the team runs intake. The 26-second loop doubles as the undo.
Uncertified by construction. This mode is structurally incapable of minting a certificate — a fast-lane site can never impersonate a certified one.

The journey — one site, URL to edited-and-live

  1. Intake — one command, ~20 minutes, never a silent death. A team member runs the door with a practice URL. The factory captures every page the practice's own site serves, builds the editable book, creates the repo, and deploys a live preview. If a step goes red, the run keeps moving, deploys whatever exists, and hands back a plain list of what went wrong — the team member always ends with something in hand.
    ↘ go deeper — what the builder wires
    A --fast-lane flag on the assembly line: discovery-mode semantics (collect-through failures, deploy what exists, certification exits hard-disabled) plus a clean stop after the deploy stage reports its URL, emitting URL + repo + the failure census as the run's result. Tonight's proxy for this flag: --sweep --keep-on-fail with an external cutoff at the deploy verdict. nydermvet timings: capture 8.5 min (30 pages), mint-through-deploy ~9 min, total 22 min including one 90s deploy stage.
  2. The book — where the site's editability actually lives. The build mints a truth book: every fact on the site — phone numbers, hours, headlines, images, colors — named, typed, and anchored to every place it appears, including tap-to-call links and the structured data Google reads. nydermvet minted 710 labeled facts. This layer ships with the site whether or not any gate ever runs — which is the whole reason the fast lane can drop gates without losing the agent-editable surface.
    ↘ go deeper — the query surface
    In the produced repo: npm run ask -- phone (plain-language question → facts with provenance down to byte offsets in the capture), npm run facts:list, npm run facts:where -- "555-0142" (every page and slot a value appears). The repo's own house rules already carry the gate-light philosophy: "Information, never gates" and the M/J fork — machine-checkable changes apply directly; judgment changes preview-then-ship.
  3. The edit loop — ~26 seconds of machine time, measured twice. Ask where the fact lives, change it — it applies the moment it's typed (ruled 08-18: no confirm of any kind, even for a phone number; the certified lane's staging machinery is switched off in fast-lane repos) — rebuild, publish. Tonight's phone-number edit landed everywhere the fact appears — visible text, tap-to-call links, Google's structured data — and the same loop ran in reverse as the undo. Under half a minute each way.
    ↘ go deeper — the exact loop + the one missing verb
    npm run edit:fact -- telephone-2 "347-624-5199" → stages an intent for world-consequence facts (auto-applies for machine-checkable ones) → npm run edit:confirm-world-consequence -- telephone-2 --intent <id>npm run edit:preview (full reproject, internal consistency gate green) → publish. The missing piece: edit:promote is local-only today; tonight's deploy rode a hand-written driver around the door's own deploy function. Delta #4 gives the repo a real edit:publish verb. Known nick: one sms: link's hidden href kept the old number while its visible text updated — one carrier type not fully anchored; facts:where is the find-check until that carrier lands.
  4. The peek — 30 seconds of honest eyes after every deploy. A headless browser loads the deployed homepage and reports what a real visitor's browser experienced: files that were blocked, errors in the console, whether the design actually painted. As information, never as a blocker. Tonight is the proof this peek earns its slot: our first deploy served a completely naked site while every single file returned 200 — only a browser could see it, and the check that would have seen it is exactly the one the fast lane cuts.
    ↘ go deeper — what bit us and the class-level cure
    The pages carried 1,018 subresource-integrity fingerprints promising the origin's exact bytes; the pipeline necessarily rewrites CSS bytes, so the browser blocked the master theme stylesheet (console: "Failed to find a valid digest in the 'integrity' attribute… The resource has been blocked"). Hot-fixed tonight by stripping stale fingerprints in the staged output; the durable cure (delta #2) is in the rewrite pass: strip-or-recompute integrity on any byte-changed resource. The peek's assertion set: zero blocked resources, master stylesheet applied (computed styles, not file presence), console error list attached to the run result.

The seams — why this cannot cross-wire

Two doors, never a flag. The team gets its own named command with the mode hard-coded inside; the certified door is untouched. No shared entry point takes a mode argument a human can mis-set — the historical incidents all involved one surface with configurable behavior.
The dangerous direction is closed by code, not discipline. The only cross-wiring that costs real money — a fast-lane site treated as certified — is structurally impossible: this mode cannot mint certificates (proven tonight: every certification stage reported "hard-disabled… can never be emitted"), and the cutover gates fail closed on a missing certificate.
Separate output namespaces. Fast-lane repos and deploy projects get distinct naming plus an UNCERTIFIED marker in the repo itself. No fast-lane output path overlaps any certified path.
The one-way valve. Fast-lane sites never promote in place. Graduation to a real client site re-enters through the certified front door (~20 minutes, clean provenance).
A check that can fail. A standing wiring audit on every merge: certified entries cannot reach fast-lane mode; no namespace overlap. Turns "the seams hold" from a belief into a mechanical verdict.

What trunk needs — five small deltas

1 · Identity-ordering fix (a bug, ships regardless). Fresh sites were failing the mint because the site's identity file was written two stages too late. Found, fixed, and validated red→green tonight; the fix is two commits in the experiment clone ready to PR.
2 · Fingerprint fix (a bug, ships regardless). The rewrite pass must drop or recompute integrity fingerprints on any file whose bytes it changed — otherwise every browser blocks the rewritten stylesheet on any site whose origin emits them.
3 · The mode behind its own door. Record-don't-stop semantics, deploy what exists, certification structurally off, clean stop at URL + repo + failure list — hard-coded inside a separate named team command (seam #1). The certified door untouched.
4 · The publish verb + confirm off. The produced repo gets edit:publish (rebuild + deploy in one step; tonight it took a hand-written driver), and fast-lane repos ship with the confirm machinery off — every edit applies immediately.
5 · The render peek. Post-deploy browser look, report-only in this lane. The certified lane keeps its full blocking walk unchanged.
The labeling law. Fast-lane output is structurally incapable of carrying a certificate — the mode hard-disables certification, so no fast-lane site can ever read as certified. And no fast-lane site goes client-facing without Robert's word. The bridge is for the team's speed, never for quietly lowering the bar on what ships to a practice.

Named risks — accepted with eyes open

Broken renders can reach the preview. The peek reports it in the same breath — the team sees "deployed, but the browser reports X," never silence. Tonight's naked-site hour is what this trades away.
Edits apply instantly — no confirm of any kind (ruled 08-18). A wrong phone number reaches the preview the moment it's typed. Mitigations: the 26-second loop is also the undo; facts:where shows everywhere a value lands; fast-lane previews are never client-facing, so the blast radius is the team's own review surface.
Some edits need a find-check. Anchor coverage has known nicks (the sms-link case). facts:where answers "everywhere this value appears" in one command until coverage closes.
Fast-lane repos drift from certified output. Accepted: bridge artifacts. Graduation re-enters through the certified front door — unless you rule otherwise below.
Ruled in chat, 2026-08-18, folded into this draft: no confirm of any kind — every edit applies immediately · anyone on the team runs intake · cross-wiring with the certified lane is the central design constraint, answered structurally by the seams above.

Open questions — your red pen

1 · Graduation as law

Written above as law: a fast-lane site never promotes in place — a real client site re-enters through the certified front door. Confirm or amend.

2 · Naming

"Fast lane" is a placeholder. What does the team call this so it never gets confused with the certified pipeline?

3 · The pretty URL

Fast-lane deploys land on workers.dev today. Wiring the prettier preview domain touches the shared practices namespace — worth doing now, or after the lane proves itself?