Your ruling, made mechanical: no shadow, no taps — writes execute on the proven rail the moment their class’s validation is green, receipted in-thread and in #neo-receipts. The write universe is now a census with a gate, not a guess. One check left: is the class table the whole universe?
Alie’s Cement Creek question ends, today, at a human doing the fix: someone must put the Stripe link on the Salesforce account. Neo can find the gap (the sibling reach spec); he cannot close it.
The graduated version, as your ruling shaped it: Neo makes the write — “add this Stripe link to the Cement Creek account” — it executes on the proven rail the moment its class’s validation is green, a receipt lands in the thread and in #neo-receipts, and where the class allows it, an undo rides the receipt. No tap, no waiting on your hands. The loop closes without anyone opening Salesforce.
Your words, verbatim: “Honestly, I need it working now. Your job is the validation. So figure out exactly what needs to be validated, make sure it’s trustworthy, and then it goes straight to production. We can’t have the luxury of the shadow because right now writes just aren’t being done because I just don’t have time to do them.”
What that ruling makes true:
The tier is validated-autonomous. Writes fire in production without per-write human approval. The trust is carried by the validation harness — not by your tap.
The shadow era is dead. No proposal-purgatory, no manual drain as the default path. The hand-run drain script survives only as break-glass.
“Straight to production” does not mean “skip validation” — it means validation is the gate, and it’s mine. Each write class ships only when its harness is green: the write courts, the conflict-and-verify gates, the live undo drill, the kill-switch drill. That is the “figure out exactly what needs to be validated” half of your ruling, taken literally.
The safety rail is not weakened — it’s extended. Salesforce writes stay classified irreversible; the new rung’s precondition is a green per-class validation record instead of a recorded human tap. No path reaches the executor without one — and we prove that by deliberately revoking a record and watching the drain refuse.
validated_autonomous lands in contract/action.ts + the ladder as a separate, court-gated path whose precondition is a green per-class validation record (durable, versioned artifact). [M] mutation fixture: revoke the class’s record → drain refuses; no path reaches the executor without one. The validation harness per class: (i) write-court [J] with contradicted fixtures (wrong-account write MUST fail; vague receipt MUST fail); (ii) conflict/verify gates [M] with induced conflicts; (iii) live undo drill [M]; (iv) budget + kill-switch fixtures [M]; (v) census-gate coverage [M]. Any leg missing ⇒ class not validated ⇒ cannot fire.You asked: “is this the entire universe of stuff that I would need to do… every single thing… proper investigation and proper schema.” I ran the census against Salesforce itself — your user, last 180 days, field-change history plus record queries. What you actually write:
Accounts (create; status, primary contact, name — plus untracked fields like the Stripe link) · Opportunities (create; stage incl. Closed-Won, products, point of contact, the three pipeline dates) · Contacts (create; email fixes; re-parenting) · Cases (create; ownership routing) · Tasks — the biggest surface: the Closed-Won activation batches (domain, accounting, Call IQ, the Targeted-Ads pre/post-launch sets, blog verification), kickoff and designer-assignment tasks, and the [A-…] agent-staged tasks already flowing through the existing drain today · Leads (create, status, convert — which cascades into account+contact+opportunity) · Projects (onboarding / Spotlight / ads records).
| Write class | Census evidence (you, 180d) | Behavior | Undo |
|---|---|---|---|
| task-ops | activation batches, kickoffs, [A-…] agent tasks (volume cap hit) | autonomous + receipt | status-cancel (delete stays blocked) |
| record-create | accounts, contacts, opportunities, cases, leads, projects created | autonomous + receipt | mark-inactive/close per object |
| record-field | account status/contact/name + untracked (Stripe link); contact email + re-parent; case routing; project fields | autonomous + receipt | write back old value |
| pipeline-field | opportunity stage (incl. Closed-Won), products, POC, pipeline dates | autonomous + receipt | write back old value |
| lead-convert | one conversion (cascades acct+contact+opp) | autonomous + receipt; v1 may stage-with-offer | none — flagged class |
| never | — | DELETE (structurally absent), owner transfer off-team, financial/billing amount fields: refused by construction | — |
Every class autonomous per your ruling — no tap column anymore. The census gate diffs this table against the live 365-day universe on every build.
The risk your ruling consciously accepts, answered in layers: conflict check before every update, verify-after-write, per-class write courts, undo on the receipt, kill switch one command away — and the worst case visible in #neo-receipts in seconds, never silent.
Kill switch (exists), dedupe via the execution log (exists), plus a per-cycle write budget this spec adds.
The current real gap. The durable ledger is the fix AND a gate: no graduation while the ledger forgets.
With no taps, receipts are the human window. Mitigation: glanceable one-liners, a dedicated #neo-receipts channel, and any UNDONE write auto-surfaces to you rather than burying itself.
The class table is now a safety artifact. The census gate plus the never-list keep a new kind from silently inheriting autonomy.
SF_WRITE_ENABLED to “0” kills the rail; per-class revocation stops one class instantly, no deploy.Reference strip — the rail + gates · the resolved rung · census + gate · class table + drain · failure modes. Full build sequence (architectural: safety-rail change); load-bearing verdicts run as the codex+opus pair. Builds start only after the engine bay is cleared. Canonical source: docs/ai/design/sf-write-graduation-2026-07-17.md.