Skip to content

needs-runtime-test open questions don't gate findings: the same run said "source alone cannot determine which" and then shipped one candidate as strong inference / fix before porting #122

Description

@TheAmericanMaker

Summary

A phase can ship a finding as strong inference with action fix before porting while an open
question registered in the same run states that source alone cannot settle that exact point.
Nothing cross-checks the two, so the run contradicts itself and the confident version is the one
that reaches the reader.

Reproduction

Ran pipeline-full-with-deep-audit.yaml over a Windows-only local LLM frontend
(ElodineOfficial/GobboNet at 5524fd4), then verified the findings by executing the product.

  1. defect-scan-mechanical registers q-logit-bias-root-cause, kind: needs-runtime-test,
    description ending: "the breakage is either upstream (llama-server ignoring/not supporting
    logit_bias on the pinned build), a request-shape mismatch, or a tokenizer mismatch. Source
    alone cannot determine which.
    "
  2. The same phase routes the shape hypothesis onward as mech-CF3.
  3. defect-scan-semantic Pass 5 CodeCartographer for [Pi] #2 then closes mech-CF3 by asserting the request-shape
    candidate: the client sends logit_bias as a map where /v1/chat/completions expects an array
    of {id, bias}, labelled strong inference, action fix before porting, with a one-line
    reshape as the recommended fix.
  4. Both artifacts ship. q-logit-bias-root-cause is still listed unresolved in status.yaml
    while the finding that presumes it resolved carries an actionable label.

Expected behavior

If a run registers an open question whose stated reason is that source cannot settle a point, no
finding in that run should assert one of that question's candidates with an action label implying
it is settled. Either the question closes with evidence, or the finding inherits the question's
uncertainty.

Concretely, one of:

  • Block fix before porting on any finding that closes a carry-forward derived from an unresolved
    needs-runtime-test question, and force a weaker action such as needs-runtime-test or
    port differently.
  • Add an evidence level below strong inference for claims about external-system behavior, since
    server-side payload parsing, API contracts and engine-version behavior are not observable from
    client source at any read depth.
  • At minimum, have validation flag the contradiction so the orchestrator sees it before completion.

Actual behavior

Both findings shipped confidently and both were wrong when executed. The confident label survived;
the hedge did not travel with it.

Case 1, and this one was harmful. Runtime testing against the pinned engine (b9294,
temperature 0, three deterministic runs per cell) inverted the finding:

logit_bias shape Result on /v1/chat/completions
{"13753": -20} (what the client sends) suppresses the token, works
[{"id":13753,"bias":-20}] (the recommended fix) silently ignored, HTTP 200, no parse complaint, output byte-identical to no bias

Re-verified on b10509, 1,215 builds later: same result. The recommended one-line reshape would
have converted a working feature into the one shape the engine ignores, with no error surfacing.
The real cause was a tokenizer-level ceiling that the audited code already documented in a comment
the scan had read.

Case 2, same family. defect-scan-mechanical recorded in its coverage limits that
"the encoded search-proxy command (launch.bat:1608) was not fully decoded." defect-scan-semantic
Pass 4 #1 then asserted, as observed fact, that "the search proxy forwards verbatim to
https://ollama.com/api"
and concluded the project's privacy claim was "false as written."
Decoding and running that component showed it builds a fresh header hashtable and drops browser
headers, so the claim was substantially true. An upstream phase's declared coverage gap did not
stop a downstream phase asserting a conclusion inside it.

Environment

  • Surface: MCP server
  • Pipeline: pipeline-full-with-deep-audit.yaml
  • Phase that failed: defect-scan-semantic (both cases); contributing gap in defect-scan-mechanical
  • LLM provider / model: Claude, Opus 5
  • Node version: v22.22.3
  • CodeCartographer version: v0.16.0
  • OS: Fedora Linux 7.1.8 (audited target is Windows-only; runtime verification ran on both)

Additional context

The two findings the run ranked highest in its own summaries were the two that were wrong. What
survived verification was the mechanical material: missing request-body size caps, an over-broad
static file handler, a credential prefix written to a browser console, wildcard CORS. Inventory and
omission-spotting held up well. Every claim about what another process does with a payload did not,
and both were stated in the same register as the verifiable ones.

Three smaller instances of the same habit, from the same run, all plausible-looking specifics
stated flatly and all wrong: the engine zip recorded as ~300 MB when it is 32.8 MB; a
logit_bias example strength of -5 when the product's default is -20; and "the call site" for a
reshape when there are two.

Suggested reading if useful: the runtime write-ups are on a public branch,
TheAmericanMaker/GobboNet @ audit/logit-bias-runtime-result, under
.codecarto/findings/runtime-egress-verification/ (TEST-PLAN-logit-bias.md,
TEST-RESULT-logit-bias.md, egress-verification.md).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions