What sloprail is made of

Each piece checks what actually happened — the real diff, the real trajectory, the real file — not what the agent claimed.

File-guardlearn more

Bound to a file, not a moment. It keeps failing and feeding the error back until the code actually satisfies it — not a one-shot reject.

Write tests for the charge flow.

Failed To Writepayment.test.ts
file-guard: tests-need-skill — the write-tests skill was not loaded
Let me load it.
Loaded Skillwrite-tests
Createdpayment.test.ts+4
+test('applies tax after the discount', () => {
+ const t = charge(100, { discount: 20 })
+ expect(t).toBe(88) // (100-20)*1.1
+})
Done.
stripe.openapi.yaml
1POST /v1/charges
2 amount: integer
3 currency: string
4 source: string missing
payments.ts
12// sr:conforms stripe#/v1/charges
13await http.post("/v1/charges", {
14 amount, currency
15})

Groundinglearn more

The claim, checked against the artifact. Did the diff really contain the change; does the cited source line actually resolve — not whether a rule merely fired.

Reconciliationlearn more

A move that has to add up to nothing. The before and after cancel out once known-legit differences are set aside — the empty residue is the proof it was mechanical, not regenerated.

$ sed -n '4,6p' config.ts >> loader.ts && sed -i '4,6d' config.ts
# deterministic — lines moved, no model in the loop
config.ts−3+1
-import { z } from "zod"
+import { parseConfig } from "./loader"
class Config {
- parseConfig(src) {
- return normalize(parse(src))
a3f9c1- }
}
loader.ts+4
+import { normalize } from "./util"
+export function parseConfig(src) {
+ return normalize(parse(src))
a3f9c1+}
guardrailtrajectory →
#research
inout
#migrate
inout
cite
no overwrite
in-structure
reconcile

Contextlearn more

A scope the agent enters on its own — detected from what's happening, not a step it has to remember. Enforced only while it's active.

zsh
$ echo "<div />" > dist/index.html
gate: deploy-safety — write to dist/ blocked (build output, do not hand-edit)

$ astro build
→ 12 page(s) built to dist/
gate: deploy-safety — passed

Gatelearn more

A checkpoint on one action. It reads what the action requires and either lets it through or blocks it — once, at the moment it matters.

Structure-gatelearn more

A standing map of where writes are even allowed. Deny by default — a path outside the structure never lands.

memories/
decisions/
20260826_gate-blocks-context/
DECISION.md allowed
scratch/
draft.md denied
routes/charge.ts
1// sr:endpoint POST /charge
2export async function POST(req) {
3 const { amount } = await req.json()
4 return charge(amount)
5}

Shipped the charge route and wired the webhook. #done

Marker & Taglearn more

A durable label pinned on the artifact — a comment in the code that later checks anchor to, surviving renames and moves.