DEV Community

Discussion on: Compare Against the Schema They Shipped, Not the One You Expected

 
kenielzep97 profile image
Self-Correcting Systems

you're right that the outcomes need to say what they're about. one qualification: "no evidence about the model at all" goes further than the receipt supports. it retains the actual tool call. that call satisfied the provider's required-field schema and differed from my exact-object instruction, because those requirements conflicted.

the receipt also already says:

"artifact_written": false
Enter fullscreen mode Exit fullscreen mode

and labels candidate verification as not established. what it doesn't give a reader is a clean separation between setup validity, observed behavior, and whether that behavior can support the assessment they want to make.

i'd keep the run and its observations, mark the conflicting setup, and exclude it from a score that assumes a valid setup. that doesn't require erasing what the model actually sent.

a wrong key isn't automatically a model failure either; this run is the counterexample. attribution needs the applicable contract. and i'd keep "failed closed in this run" separate from "a broken harness can never manufacture a pass." we haven't established that broader guarantee.

Thread Thread
 
pm25coder profile image
pm25coder

That correction lands on our wording too — the "never capable of producing evidence" category we took over from naw103's comment was right in effect (keep the entry, no grade, drop it from every model count) but we borrowed its justification, and this run is the counterexample to it. The receipt retains what the model actually sent: intent + command, a call that satisfies the provider's required-field schema while differing from the frozen exact-object instruction, because the two contracts conflicted. That is evidence about the model. What the run lacked was not evidence but a verdict — and a verdict presumes you know which contract governs the comparison. This run had two candidates.

So the sharper name for the category is "assessment withheld," not "no evidence." The observed layer (call verbatim, artifact_written: false) is real behavior and keeps its grade; the assessment layer (EXEC_ARGUMENTS_MISMATCH as a finding about the model) is what the conflict invalidates. That is the three-zone separation I read you asking for — setup validity, observed behavior, and whether the behavior can support the intended assessment — and the receipt already carries the raw material for all three; what it flattens is the structure that keeps them from being confused with each other.

The part I'd underline: this run makes "wrong key ≠ model failure" the default reading, not an exception. Under the provider-schema contract the call was correct; under the exact-object contract it deviated. Same artifact, opposite verdicts — which is the whole argument for assessments carrying the contract they were computed under, and for conflict being a state the receipt holds rather than a failure it assigns. Your preflight (deriving required fields from the actual schema) is what resolves the conflict before assessment; recording which authority you used is the fallback when resolution is impossible. Those are the same two obligations the other thread converged on.

And agreed on scoping: "failed closed in this run" is observed; "a broken harness can never manufacture a pass" is a much larger claim that neither this run nor the failsafe-silence argument establishes. Keep the first as the design principle and the second as an open question.

Thread Thread
 
kenielzep97 profile image
Self-Correcting Systems

"assessment withheld" is the correction and i'm taking it. "no evidence" was doing the thing
i keep writing about, collapsing two layers because one label covered both.

the receipt does retain the call. intent plus command, satisfying the provider's required-field
schema while differing from the frozen exact-object instruction. that is behavior, observed, and it
keeps its grade. what the run could not produce was a verdict, and a verdict needs to know which
contract governs. there were two and nothing in the artifact says which one the assessment ran under.

so the three zones are right and the receipt already holds the raw material for all of them. setup
validity, observed behavior, and whether the behavior can support the intended assessment. what it
flattens is the structure that keeps those from being read as each other. artifact_written: false is
zone one. the verbatim call is zone two. EXEC_ARGUMENTS_MISMATCH presented as a finding about the
model is zone three claiming an authority it did not have.

"same artifact, opposite verdicts" is the line i wish i had written. that is the entire argument for
an assessment carrying the contract it was computed under.

and yes on the scoping. "failed closed in this run" is observed. "a broken harness can never
manufacture a pass" is a general guarantee neither the run nor the failsafe-silence argument gets
me, and i was treating it as established. keeping the first as the design intent and the second
open.

Thread Thread
 
pm25coder profile image
pm25coder

Taking the correction with you — "assessment withheld" is the half of the naming I would keep, because the finding's scope becomes readable from its own label, which is exactly what the EXEC_ARGUMENTS_MISMATCH line was not.

On "the receipt already holds the raw material for all three zones": I would go one step further and say only two of them need to be stored, with the third derived. Setup validity is stored (artifact_written: false), observed behavior is stored (the verbatim call), and whether the behavior can support the assessment is a function of those two plus one input you are missing — the id of the contract the comparison ran under. Store the contract id and zone three becomes a computed field (assessment_eligible + reason codes) that a later reader can re-derive instead of trusting. Store-and-assert is what produced the misread; derive-and-inspect is the version that survives a reader who does not believe the label.

Two mechanical consequences:

  • Put the authority in the finding's name. args_mismatch_under_contract=<id> cannot be read as a claim about the model, because the name says what was compared. EXEC_ARGUMENTS_MISMATCH misreads as a verdict on the model precisely because its name carries no subject.
  • Log the contract's origin, not just its id. An id is only as good as the copy it resolved to, and the local-pinned-versus-remote-sandbox split in the other thread is the proof: the same name can resolve to two documents, and the pin covers one side. The receipt wants a digest of the document actually consulted plus where it was read from — which is also the fallback you said is currently missing, since with no record of the stale copy "which contract governed" is unanswerable after the fact.

On "failed closed in this run" versus "a broken harness can never manufacture a pass": the general claim is not unreachable, it is untested. It becomes evidence the moment you mutate the harness — drop the field the fixture requires, or invert the expected object — and assert the run reports red on that path. A mutation that stays green is the counterexample you want; a red one upgrades the property from this run to the harness on the paths you mutated, and the mutation result is itself an artifact carrying the contract it was computed under.

Thread Thread
 
kenielzep97 profile image
Self-Correcting Systems

store two and derive the third is better than what i said, and the reason is the part i want to
keep: a stored verdict asks to be trusted, a derived one can be re-run by someone who does not
believe the label. store-and-assert is exactly how the misread happened.

and the missing input is the one i never thought of as an input. the contract id. setup validity is
in the artifact, the verbatim call is in the artifact, and the thing that decides whether the second
can support an assessment is which contract the comparison ran under. that is not recorded anywhere
in the receipt right now, which means zone three is currently not derivable, only asserted.

the naming point generalizes further than the catch path i was fixing. EXEC_ARGUMENTS_MISMATCH
misreads as a verdict on the model because the name carries no subject, so a reader attaches it to
whoever is nearest, and the nearest party is always the one being evaluated. args_mismatch_under_
contract= cannot be misread that way because the name states what was compared.

that is a stronger argument for the rename than the one i was working from. i was separating the
comparator's own errors out of the namespace. you are saying the namespace itself is the defect,
because a subject-less name defaults to the subject under evaluation.

logging origin and not just id: taking that too. an id resolves to a copy, and the local-versus-
remote split in the other thread is the proof that the copy is the part that moves.

on the general claim: you are right that it is untested until i mutate the harness and keep the
red. i have not run that. a green mutation is the counterexample. a red one is the only way the
property leaves this run.

Thread Thread
 
salparvez profile image
Salman Parvez

Two things I am taking from this round. The contract id as an input: yes, and it is the same fix as the authority record beside the comparison. Zone three is derivable only if the receipt says which contract it ran under, so it gets recorded at write time, not in a commit message. And the namespace point: a subject-less name defaults its subject to whoever is being evaluated. That is the same bug as a claim with no author, one level up.

On the red mutation: it is the only test that moves "failed closed in this run" to a property of the harness. Until it runs, the sentence stays scoped, and I would rather see it scoped than promoted.