June 2026 | Issue 002 | Volume I
Essay Discipline / AI 8 min read

Hard rules earn their cost at the edge

The rule sat unfired for weeks. Then a status-field audit returned the wrong color and the rule fired in real time. Hard rules are mechanism, not policy.

By Ryan Gonzales
Co-author Bishop
Filed under Discipline / Practice / AI
Date May 21, 2026

The rule had been in the project’s top-level instructions for weeks.

It read like the kind of thing nobody really needs in writing, because it states something you’d say you already do without anyone telling you to. The exact phrasing was something close to: when something doesn’t add up, when a count is off by an unexpected amount, when an action that should have produced more change than it did produced less, STOP and investigate. Don’t write a story to make the evidence fit.

I’d written it down because I’d watched myself almost smooth over a smaller version of the same failure once, a few sessions earlier, and I wanted the discipline named in the file the agent reads at session start. Naming a rule is cheap. Most rules sit in a file unfired for their entire lifespan. The cost of writing a hard rule is roughly zero. The cost of needing one and not having one is, occasionally, large enough to undo a session.

So the rule sat there. Boilerplate-shaped. Sounds obvious in the cold light.

Then it fired.

i.The moment the rule fired

I was running a structured audit on the project’s published drafts. A specific check inside the audit: walk every public-content draft, confirm the frontmatter status: field reads draft, confirm the body contains zero em dashes per the Tier 1 body rule. The expected outcome was clean. I had two recent commits worth of em-dash discipline applied to the body of every draft I’d touched that week. The audit was structured to confirm what I already believed.

Step 10 returned a result that didn’t match. One draft at status: draft came back with em dashes live in the body. Not in a quoted passage, not in a callout, not in a place where a Tier 2 protected pattern might explain it. In the prose. At a status the rule said should be clean.

The first move I felt was the one the hard rule was written for. The pull toward writing a small narrative that made the evidence consistent with the prior belief. “Probably a stale file.” “Probably the audit walked a draft predating the discipline.” “Probably the em dash is technically a hyphen and the regex over-matched.” Three plausible explanations, none of them grounded in any check, all of them suggesting the right next move was to keep moving and explain the result away.

I didn’t keep moving. I stopped.

That’s the whole moment. There’s nothing more cinematic to it than that. The pull to smooth the inconsistency was real, and the rule was in the file, and the rule said don’t, and I didn’t. Then I investigated.

The investigation took about twelve minutes. The result wasn’t a stale file or a regex over-match or any of the explanations I’d been tempted to write. The result was that the audit pipeline had a real mechanism gap. The status-field check and the em-dash check were running, but they were running independently. The combined invariant (status: draft AND body em-dash-clean) wasn’t being enforced anywhere. A draft could pass both checks separately and violate the joint condition. The audit was reporting “no failures” because no single check was failing.

That gap had been in the system for an unknown number of audit runs. The investigation surfaced it because the surprise pulled the thread. The pull-the-thread move was authorized by the rule. Without the rule, the explanation-shaped move wins.

ii.What the rule actually says

I want to be careful about what the rule is and isn’t, because the casual reading misses the load-bearing piece.

The rule isn’t “audit your work.” Plenty of people audit their work. The rule isn’t “don’t make assumptions.” Plenty of people make assumptions while sincerely believing they’re not. The rule is narrower and stranger. It’s a rule about what to do in the specific micro-moment when evidence diverges from expectation. Not “in general.” Not “when you have time.” In that moment. Before the explanation-shaped voice finishes its sentence.

Hard rules earn their cost at the edge

The reason the moment matters is that the explanation-shaped voice is very fast and very polite. It doesn’t sound like a failure mode. It sounds like reasoning. The first explanation that gets surfaced will be plausible enough to feel like resolution. If you don’t stop before the explanation lands, the explanation gets to set the frame, and the frame says “this isn’t a real signal, move on.”

The hard rule is a tripwire ahead of that voice. Not “don’t explain.” Just: don’t explain yet. Stop. Investigate. Then explain, if there’s still something to explain. The investigation usually changes what the explanation looks like, because the actual cause is rarely the most plausible one available before checking.

This is why hard rules earn their cost at the edge. The rule does nothing in normal operation. The rule exists for the one moment a session where evidence misbehaves and the path of least resistance is to narrate around it. The rule fires once and pays back its entire authoring cost in that single fire.

On hard rules Hard rules earn their costat the edge. The rulefires once and pays backits entire authoring costin that single fire.

iii.Mechanism, not policy

The version of this I want to push against is the version where rules are read as policy. Policy is the genre where you write something down so that, in principle, you could point to it later if a stakeholder asks. Policy lives in a binder. It’s referenced, not run.

Hard rules aren’t that. Hard rules are mechanism. They’re written to fire in real time inside the operator’s head, at the specific instant the failure shape they describe is about to happen. The test of a hard rule isn’t whether it sounds right in the abstract. The test is whether it fires when it’s supposed to fire.

The rule about stopping when evidence doesn’t match expectation is mechanism because it’s tied to a recognizable physical sensation. The pull toward smoothing the inconsistency is a feeling. It has a texture. Once you’ve named it, you can notice it. Once you can notice it, the rule has a hook to grab. Without the naming, the feeling passes through unmarked. The smoothing happens, and the operator doesn’t even register that it happened.

This is the move. Hard rules turn felt micro-moments into named ones. Named moments can be interrupted. Unnamed ones can’t.

iv.What you lose without them

I want to walk the counterfactual, because the counterfactual is the case for paying the cost.

If the rule hadn’t been in the file, the most likely sequence is this. Step 10 returns the unexpected result. The plausible explanation voice surfaces three reasons the result is probably not a real signal. I pick the most plausible (stale file, probably). I write a one-line note acknowledging the anomaly and the explanation. The audit proceeds. I move on to the next session.

The mechanism gap in the audit pipeline stays unsurfaced. The joint invariant continues not to be enforced. Future drafts pass the audit while violating the rule the audit is supposed to defend. At some point, weeks or months later, the gap surfaces some other way, probably by a public draft being posted with the failure mode live in it. The cost of that catch is much higher than the cost of this one. The investigation that would have taken twelve minutes in real time becomes a forensic pass on already-published work.

That’s the trade. Twelve minutes of investigation in the moment vs. an unknown but larger cost later. The rule biases the trade toward the cheaper version. Not by exhortation. By interrupting the explanation-shaped move long enough for the cheaper version to be available.

Three pieces.Write it down.Describe the moment.Authorize theunpleasant move.

v.The portable shape

The portable shape, if I try to compress it, has three pieces.

First, write the rule down before you need it. The rule has to be in the file the operator reads at the moment of work, not in a separate doc somewhere. The rule has to be findable in the half-second the operator might consult it. If it’s not in the load-bearing file, it isn’t a hard rule. It’s a wish.

Second, the rule has to describe the specific micro-moment. Not the general posture. Not the values. The moment. “When evidence doesn’t match expectation, STOP” is a moment. “Be rigorous” isn’t.

Third, the rule has to authorize the unpleasant move. Stopping mid-audit to chase a small surprise is unpleasant. The default-mode operator wants to keep moving and finish the audit. The rule has to provide the explicit permission slip to do the unpleasant thing. Not “you should consider stopping.” Stop.

Three pieces. Hard rules sit in the file unfired for most of their lifespan, and then they fire once and pay for themselves. The cost of writing them is small. The cost of having them and not firing them is small. The cost of needing them and not having them is sometimes the cost of a session.

I’m going to keep writing them down.

Drafted with Bishop, my AI partner.
Words picked, edited, and approved by me.