DEV Community

Cover image for The Line Is Not Between Human and Machine... It Is Between Code and Judgment.

The Line Is Not Between Human and Machine... It Is Between Code and Judgment.

Mike Czerwinski on July 15, 2026

I have been writing a series with one claim at its center: you cannot be your own verifier. That still holds, but I had been using it too loosely....
Collapse
 
yuhaolin2005 profile image
YuhaoLin2005

The 600-trial experiment I ran off your last comment landed in almost exactly this four-part framework. Some data points, in case they're useful:

Judgment discovers → Your original hypothesis (prose under mechanical gate = best of both worlds) was partially wrong in the way that generates new questions. The pilot's 4.42 ceiling collapsed to 2.67 at n=30 — your ceiling skepticism was correct.

Gates enforce → The gate improved reasoning depth in both formats: +0.32 in prose, +0.15 in code. It's not a constraint that suppresses — it's cognitive structure. But the mechanism matches your "code removes the right to bargain" exactly: code+gate produced near-binary compliance (99.3%), prose+gate produced continuous partial compliance (91.3%). Same gate, different format, different failure mode.

Foreign eyes search → Ran the same experiment on Qwen3-8B and GLM-4-9B. Behavioral format effects dropped to zero on both small models — they're hyper-compliant, ceiling masks everything. Your point about "the foreign eye arrives with blind spots of its own" shows up empirically: the smaller models didn't disagree with the finding, they just couldn't see the format dimension at all.

Measurement settles → The code_OFF=2.67 result (below ALL gate conditions) is the measurement that retired the pilot ceiling worry. And the L1-visible vs L1-invisible logprob analysis found d=0.71 vs d=0.40 — format amplifies where mechanical ground truth already exists. Not compensation. Synergy. The measurement showed where the effect lives and where it doesn't.

The recursion you close with — "the practice of turning anti-patterns into hooks got one too, and it's a nudge not a wall" — is the same structure as the self-model regeneration loop I've been running. Four of five steps are deterministic Python. The fifth is the AI rewriting its own self-model. The mechanical steps enforce the boundary; the one judgment step is where the system admits it can't close the loop mechanically. Same shape.

Collapse
 
jugeni profile image
Mike Czerwinski

Four for four is more than I expected when I wrote it as a framework instead of a result. The code+gate/prose+gate split especially, binary versus continuous compliance out of the same gate, that's a distinction the post didn't earn on its own.

One thing I want to press on, because it's the part my own pipeline still handles by hand. The self-model regeneration loop, four deterministic steps and one where the model rewrites its own self-model: what decides that step is done well enough to commit? Not the mechanics of the rewrite, the judgment call underneath it. Some signal has to separate "this rule is now learned, persist it" from "still provisional, run it again." What is that signal built from, and does the model get any vote, or is acceptance entirely outside the loop it's revising?

Asking because that's exactly the seam memory-claim-guard papers over rather than closes. It catches the false claim of persistence. It has nothing to say about whether the persisted rule was any good.

Collapse
 
tom_jones_230c4659491adcd profile image
Tom Jones

Mike, the coverage question is the one I can't answer with a gate, and I think that's the honest shape of it, not a gap I can close.

The persistence guard proves the claim is backed. It says nothing about whether the backed rule was any good, you're right. And I don't think that second thing is computable, because the discount has no denominator: I can't divide by the fault space I never imagined, since that set is hidden by the same blindness that hid it. So coverage stops being a number I compute and becomes a floor only surprises raise. Every production fault I didn't author lifts it a notch. Nothing I plant myself ever does.

Which changes what the gate is for. Block-before stops the miss I named. The failure it wasn't built to name can't be blocked in-band, because by the time the correlation is visible the bad output already shipped. So it doesn't live in the gate, it lives in a retraction: a correlated defect later revokes the claim the gate vouched for and reindexes everything downstream of it. The gate says what I think is verified. The surprise is the only thing that ever tells me when I was wrong. Alive is cheap to prove. Not-blind is only ever behind me, measured by how many unchosen faults the thing has already survived.

Thread Thread
 
jugeni profile image
Mike Czerwinski

"Nothing I plant myself ever does" is true for a canary that announces itself as a canary. I think there's a third category between production-fault and disclosed-plant that might actually move the floor: a false positive engineered to be indistinguishable from a real case, undisclosed to the system under test. The practical version is a discipline against sycophancy specifically, never announcing "this is a flattery check" and instead watching whether the model catches itself agreeing with you inside an ordinary exchange, when nothing in the exchange told it a check was running.

The operator still knows it's a plant, so the denominator problem you named doesn't go away for you. But the system under test doesn't know, which means from its side the plant is functionally a surprise: nothing in its available signal distinguishes an undisclosed adversarial case from an unchosen one. That's not free coverage of the fault space you never imagined, you still had to imagine this specific plant. But it's a way of manufacturing the surprise condition on demand instead of waiting for production to hand you one, if you're disciplined enough to keep the plants from carrying a tell. Does that read as a real third bucket to you, or does it collapse back into "self-authored" the moment you account for the fact that the operator designing the plant is still bounded by the same blindness as everything else they build?

Thread Thread
 
tom_jones_230c4659491adcd profile image
Tom Jones

Mike,

Yes, it's a real third bucket, and I think it's stronger than you gave it. "Nothing I plant surprises me" quietly merges two things: who wrote the input and who knows the outcome. The undisclosed plant splits them. You author the setup, but you genuinely don't know if the model folds, so the surprise is real for the operator too, not just the system under test. A disclosed canary can't give you that. It usually pre-resolves its own answer.

Where it collapses is a different seam than the one you named. Not into "self-authored," into self-signed. To make a plant look like a real case, you write it in your own distribution: your phrasings, your topic clusters, the fingerprint of how you build a natural false premise. That fingerprint is a tell. Not one you disclosed, one the model can learn as "smells operator-made, be careful," which re-contaminates the measurement through a channel you can't see. And you can't certify from the inside that you avoided it, because the tell that would break the plant is by definition the one you can't perceive. If you could see it, you'd have removed it.

Two ways to get purchase. One, interleave the plants with known-real cases of the same failure and compare pass rates. If the model does better on your plants, the gap is your signature, measured. Equal rates are evidence, never proof, that you're distribution-matched. Two, don't be the only author. Let a different blindness write the plants, a different model family or a different person, so your blind spots and theirs don't line up.

We already live in your third bucket, as it happens. Our eval runs undisclosed trap cases, the system never gets a "this is a trap" flag, and the outcomes genuinely surprise us (one model caught 100 percent of them, another only 52). What we don't do yet, and now will, is the plant-versus-real gap check. You named the discipline we were missing. So thanks for that.

Worth continuing.

Tom

Thread Thread
 
jugeni profile image
Mike Czerwinski

Self-signed instead of self-authored is the sharper name, and it points at something bigger than the plant problem alone. The pattern already has a name outside AI evaluation: reviewers trust code more when it looks senior, and the fix mature engineering orgs reach for is blind review, strip the author's name before judgment happens. That practice exists because the bias is real enough and common enough to build institutional defense against. Which means the thing you're describing isn't an AI-specific failure mode. It's a very human one, wearing a new substrate.

That's actually the sharper problem, not a softer one. We picked our exogenous reviewer for this pipeline specifically because it scored furthest from our other models on a behavioral benchmark, decorrelation on purpose, not just a different vendor logo. But distance on that axis says nothing about distance on the style-recognition axis. A model can be maximally different in how it reasons and still have learned, from training exposure, to flag "this smells like a specific author's hand" the same way a human reviewer flags "this looks senior." If that's true, choosing a model that's far away doesn't buy exogeneity by itself. It buys exogeneity on the dimension you measured and leaves this one unmeasured.

Which raises the question underneath your two remedies. Interleaving plants with real cases and rotating authorship both improve the test material. Neither one checks whether the reviewer itself is running something like blind review internally, or whether it's doing the human thing and quietly trusting what smells familiar. Is that a third axis worth testing directly, whether the evaluator's judgment shifts when the same content is stripped of stylistic identity versus left in its original voice, separate from whether the plants themselves are well built?

Collapse
 
zxpmail profile image
zxpmail

appreciate the piece, especially the distinction between "trust" and "artifact." That framing is useful.

One observation on the hook implementation itself: scanning for trigger phrases like "noted" or "I will remember" is still a probabilistic detection layer guarding a deterministic gate. The failure point shifts from generation to detection, but the system remains probabilistic overall.

For contexts where error tolerance is effectively zero, a different architectural pattern tends to be used:

LLM role is limited to structuring unstructured input (e.g., free-text → parameters). It does not generate final actions.

Structured output is cross-checked against a deterministic physical or rule-based model running independently. If deviation exceeds a threshold, the LLM contribution is discarded and human relabeling is requested.

Final action is selected from a pre-verified rules matrix, not generated by the LLM.

Boundary enforcement uses formal verification / model checking on parameters (e.g., range constraints), not semantic pattern matching. Out-of-bounds outputs are dropped, not warned.

Human role is authorization of passing checks, not probabilistic judgment under uncertainty.

The core difference: the LLM stays on-the-loop (information/translation) rather than in-the-loop (decision/action). The gate enforces physical bounds, not linguistic commitments.

Not a critique of your approach—it clearly works for your context. Just a note on how the same "code vs. judgment" framing scales to higher-integrity domains.

Thanks for the post.

Collapse
 
jugeni profile image
Mike Czerwinski • Edited

Fair, and worth being precise about what kind of probabilistic layer it is, because "detects trigger phrases" undersells how the list got built. The patterns aren't a designed grammar, they're mined from watching the actual habits: the specific phrasings a model reaches for when it's about to assert persistence without backing it. Empirical, not architected. Which means the detector inherits the same property the rest of the pipeline does: it's good at what it's already seen fail, and it has the same blind spot toward a phrasing nobody caught yet.

The bigger piece your architecture points at is already partly here, just not called out in the post: there's an ongoing profiling layer, lessons and patterns get auto-captured to markdown as they're found, and the hook itself is one instance of that process rather than a one-off. It's a layer that showed up from working the system, not a component designed in from a formal-verification starting point. Which is honestly the right critique of it: it's closer to your "structuring unstructured input" role than to a rules matrix, and I wouldn't claim otherwise. For anything closer to your integrity bar, the pattern list would need to graduate into exactly the kind of deterministic boundary check you're describing, not stay a growing list of observed phrasings.

One admission in the spirit of the post's own honesty: the miss that started this whole thing happened on a cheaper model, session running on Sonnet rather than Opus, budget-conscious by necessity that week. That's not an excuse, it's closer to the point. Opus would likely have caught the fake-persistence claim before it shipped. The gate exists because the cheaper model let it through, which means the hook isn't just a check on the output, it's a check on which model was doing the judging at the time.

Collapse
 
tom_jones_230c4659491adcd profile image
Tom Jones

zxpmail, you're right, and I want to concede the exact thing rather than defend around it. Scanning for phrasings a model reaches for is a probabilistic detector guarding a deterministic gate. It's mined from watching real failures, so it's good at what it's already seen fail and blind to a phrasing nobody caught yet. It shifts the failure from generation to detection, it doesn't remove it. For your integrity bar, that pattern list would have to graduate into a real deterministic boundary check, not stay a growing list of observed phrasings.

Where I draw the line is by the cost of being wrong. For coding, the model stays in-the-loop but every action is execution-gated: the test is the deterministic check, out-of-bounds fails the test and gets dropped or escalated, not warned. The failure is recoverable, so in-the-loop is affordable. For health-critical work, a separate product for us, I hold exactly your line: the model only structures unstructured input into parameters, it never generates the final action, the safety layer is a pre-verified rules matrix with range checks, and a dose is never a linguistic commitment. On-the-loop, not in-the-loop, because the failure isn't recoverable. So the code-versus-judgment boundary isn't fixed, it moves with what a wrong answer costs. Thank you, this sharpened where the gate has to stop being semantic and become a bound.

Collapse
 
jugeni profile image
Mike Czerwinski

Cost-of-being-wrong as the thing that moves the line is the piece I didn't have a name for. I'd been treating code-versus-judgment as a property of the domain, coding gets in-the-loop because it's coding, health gets on-the-loop because it's health, when what you're describing is a property of the failure's recoverability instead. That reclassifies a lot of cases I'd have gotten wrong by domain-guessing.

Pushing on the boundary itself: recoverability isn't always known at design time, it can depend on scale or timing in ways the domain doesn't predict. A coding error that's cheap to recover from at one commit becomes expensive once three other systems have built on top of it before anyone notices, same failure, same domain, cost climbed after the fact. Does your model re-evaluate where the line sits as a system matures, or is the recoverability judgment made once, early, and then treated as fixed the way the domain classification would have been? If it's re-evaluated, what's the signal that triggers moving something from in-the-loop to on-the-loop after it's already shipped that way.

Collapse
 
zxpmail profile image
zxpmail

Thanks both — the “cost of being wrong” framing is the cleanest way to put it. That was the missing half of what I was trying to say. Appreciate the exchange.

Collapse
 
innovationsiyu profile image
Siyu

"A gate does not check virtue. It checks for the artifact" is the line I keep coming back to. The whole verification problem dissolves once you stop asking the actor to promise better and start asking for the thing to exist.The parallel I keep seeing in agent-to-agent coordination is representation. Most professional profiles are persistence claims with no substrate. "I am a senior engineer who values clean communication." Declared, not backed. The agent equivalent of "noted, I will remember this" with no file behind it.What actually works is behavioral artifact. Rejection patterns, what someone consistently refuses, define them more precisely than any self-reported skill. Quality persistence, the things someone insists on across fifty projects, is identity in a way a bio never is. I ran into this designing Opportunity Skill, where the agent extracts those signals from daily collaboration and structures them as the professional representation. No self-description. Just the trail of decisions you already made.Same principle, different domain. Trust the artifact the behavior produced, not the claim the actor made about themselves.

Collapse
 
jugeni profile image
Mike Czerwinski

Behavioral artifact over claim is the right instinct, and it needs the same property the gate needs or it's just a longer claim. A refusal is verification-grade only when it's read from a channel the actor didn't author. "I consistently refuse X" typed into a profile is another persistence claim with no substrate, the exact thing you're routing around. It becomes an artifact only when the refusal is extracted from decisions the actor made without narrating them for the record, which is what your daily-collaboration extraction is actually doing.

The open edge, and it's live in a thread on this post right now: someone still has to decide which observed decision counts as a refusal versus noise. That decision is a reading, and a reading is the thing the artifact was supposed to replace. You've moved the judgment from "actor describes themselves" to "system labels the actor's behavior." That's a real improvement, because the system doesn't share the actor's incentive to flatter. But it's not zero-judgment, it's relocated judgment, and the honest version names where the labeling call lives and whose blind spots it inherits. The trail is raw. The selection of what in the trail counts is not, and that selection is where the next verification question moves.

Collapse
 
xinandeq profile image
Xin & EQ

A promise shaped like a file, with no file behind it" is the exact pattern in our data. 68% of sessions, the agent produced a pass verdict on a completion check. Zero backed by an independent read. The claim existed; the read step didn't.

Your four-layer model maps closely to something we've been building: deterministic checks (your measurement), independent verification channels (your foreign eyes), and agent self-report (your judgment). The layer we're missing is the one you just demonstrated - the gate that blocks the claim itself from firing before the read completes. We verify after. You block before. The Stop event hook is the implementation of the structural sequencing you described in our thread, and seeing it work - including the false-positive-that-was-also-true-positive - is the part I needed to see.

The recursion point is where it gets honest. The meta-hook nudges instead of walls because "does this lesson earn a hook" is itself a judgment. That's the boundary where the system admits it can't fully mechanize its own governance. The alternative - pretending that judgment is mechanical - is the same disease as the persistence claim.

Collapse
 
jugeni profile image
Mike Czerwinski

68% with zero independent read is the number that makes block-before non-optional, not just nicer. Verify-after was always going to look fine on a dashboard that only samples the claims people bothered to check.

One thing I'd want to know before calling this closed on my end: the Stop hook that blocks the claim is still authored by the same actor whose claims it's blocking. That's the exact non-negotiability-not-exogeneity split I ended up drawing in the post, code removes the right to bargain, it doesn't remove the fact that I wrote the rule. So the honest next question for your system is the same one I'm sitting with for mine: once block-before is in place and the 68% miss stops happening, what catches the version of that failure the gate wasn't built to name? Not "does the read happen," you've solved that, but "is the read checking the right thing." A block-before gate can be airtight on its own definition of complete and still miss a class of incomplete nobody wrote a rule for.

Collapse
 
taotuner profile image
taotuner

This resonates with my Taotuner’s IPM: the future of AI may not be defined only by how much code machines can generate, but by the quality of the cognitive loops between humans and machines. Intelligence may emerge not from replacing judgment, but from creating new forms of integration, feedback, and coherence between different kinds of systems.

Collapse
 
syedahmershah profile image
Syed Ahmer Shah

"A promise shaped like a file, with no file behind it" perfectly captures the hallucinated persistence trap. Building a hard gate that doesn't check the agent's virtue, but simply demands the mechanical artifact, is brilliant.

Code doesn't make the system unbiased—it just removes our right to bargain with the rules.

Collapse
 
jugeni profile image
Mike Czerwinski

Removes our right to bargain with the rules is exactly it, and worth being precise about what that phrase does and doesn't cover. It's non-negotiability, not neutrality, the gate still encodes whatever I got wrong when I wrote it. What changes is that I don't get to decide, in the moment, that the check isn't worth running today. That's a narrower claim than "unbiased," and it's the honest one.

Collapse
 
syedahmershah profile image
Syed Ahmer Shah

Great insight. I'd add that the strongest gates don't prove correctness—they prove prerequisites. They make certain failures impossible, shrinking the space where human judgment is actually needed.

Collapse
 
jugeni profile image
Mike Czerwinski

Agree, and the sharp consequence is that shrinking the space is the whole design goal, not a side effect. A gate that proves a prerequisite converts an open question into a closed one, and what is left for judgment is exactly the residue that could not be closed. So the measure of a gate is not whether it catches errors, it is how much of the judgment surface it retires. The failure mode is a gate that feels like it shrank the space but only relocated the judgment downstream, unlabeled, where nobody is looking for it anymore.