Skip to content

check-driver-conformance.mjs FILTER_TEXT requirement-3 calls driver-mongodb's arm "the last place a bare new Error escaped the ADR-0112 envelope" — it was not, and after #7047 the sentence names the wrong site #7159

Closed

Description

@os-zhuang

Flagged from #7047 rather than folded into its PR, per that card's fence (a conformance-script edit riding on a behaviour fix). Recording it so the sentence is corrected deliberately by whoever owns that ledger's prose.

The line

scripts/check-driver-conformance.mjs, FILTER_TEXT requirement 3 (≈ lines 332–339 on origin/main @ 3e8e669):

  1. $regex / $options must be REFUSED, naming $icontains. DONE on all five (drivers: $regex 响亮拒收 + $icontains 各后端实现(#4706 裁决 B 案 · 驱动半边) #5702) … Each site now prints RETIRED_FILTER_OPERATORS[op].why verbatim, so the five refusals say one thing; driver-mongodb's default: arm was additionally routed through its own INVALID_FILTER helper, which is the code half the case-set requires and the last place a bare new Error escaped the ADR-0112 envelope.

Why it is wrong

It was already false when written. objectql's having face (having-filter.ts unknownOperator()) had two bare new Error returns escaping the same envelope — measured code: undefined / status: undefined on both the retired and the unknown branch (#6993's census, #7047's card).

The "five" in that paragraph counts the five DRIVER faces, which is correct for the requirement's own scope. The trailing clause is not scoped that way: "the last place a bare new Error escaped the ADR-0112 envelope" is a repo-wide claim, and having was a sixth place it escaped from.

After #7047

#7047 puts both having returns in the envelope, so the repo-wide claim becomes true — but it now attributes the milestone to the wrong site. driver-mongodb's arm was not the last one; having was. A reader auditing envelope coverage from this sentence would stop one face early, which is exactly what happened.

Suggested fix

Scope the clause to the driver family and name where the actual last one landed, e.g.:

… driver-mongodb's default: arm was additionally routed through its own INVALID_FILTER helper, which is the code half the case-set requires and the last bare new Error in the DRIVER family. The sixth refusal face — objectql's having (having-filter.ts) — was outside this gate's scope (packages/drivers/*) and kept its bare new Error until #7047.

That last half-sentence is worth keeping rather than deleting: this gate not covering having is the reason two consecutive defects on that face (#5905, #7047) were found by hand-run censuses instead of by CI.

Related

Activity

  1. os-zhuang commented on Aug 10, 2026

    @os-zhuang
    ContributorAuthor

    Triage: pm:queue + re-routed domain:engine-core → domain:spec-tooling.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 10, 2026
  3. os-help commented on Aug 10, 2026

    @os-help
    Collaborator

    Claim: PM loop round 3
    Session: session_01KJATVrh6V2ysutYUJigh3B
    Branch: claude/issue-7159-conformance-envelope-attribution
    Worktree: objectstack-issue-7159
    Domain: domain:spec-tooling
    File surface: scripts/check-driver-conformance.mjs (FILTER_TEXT requirement 3 prose only). Stop on breach; explain in the report.
    Container & model: S 级机械卡, mode:subagent, model: sonnet — the replacement text is already drafted in the card body and the facts are settled; no design judgement remains.
    Serial constraints cleared: scripts/check-driver-conformance.mjs exists on origin/main; no open PR touches it; this lane's other in-flight card (#6940) is packages/spec/scripts/strictness-ledger.test.ts — disjoint.

    Premise re-verified live: #7047's envelope fix has landed (edb4af099, via PR #7161, merged earlier tonight), which is what makes this card actionable now rather than premature — the repo-wide claim in that paragraph became true on that merge, and is now attached to the wrong site. Correcting it before #7047 landed would have been correcting a sentence that was still false for a second reason.

    Routing note, for the record: triage re-routed this card domain:engine-core → domain:spec-tooling at 02:28Z with its rationale on the thread (the fix touches only the conformance script, and scripts/ gates revolving around the spec contract route here under the 2026-08-09 #5469 ruling). This seat accepts that routing as given and is not re-deciding it.


    Generated by Claude Code

  4. os-help commented on Aug 10, 2026

    @os-help
    Collaborator

    ACCEPT — PR #7228, reviewed against GitHub rather than against the report.

    Verified independently by reading the diff, not by trusting the prose-only claim: 1 file, +4/−2, and every changed line is inside the FILTER_TEXT requirement-3 comment block. No case-set, no gate logic, no exit code, no DEBT ledger. No docs/adr/**, no content/docs/releases/. First line is Fixes #7159 — correct, since this PR fully closes the card.

    The premise check was the load-bearing part and it was done in the right order. This card only became correctable once #7047 landed: before that merge the sentence was false for a second reason, and "correcting" it then would have produced a different, also-wrong sentence. The dev confirmed edb4af099 (PR #7161) is in this branch's ancestry before writing the replacement.

    On durability — the dev answered the question I actually asked, including the part that weakens its own result. My clause said the test of the replacement is not "is it accurate today" but "will it still be accurate, or visibly wrong, after the next face is added". The new claim is scoped to the DRIVER family and to this gate's own case-set, so it is checkable against the five refusals the comment already sits inside rather than by a repo-wide sweep. And then the PR says out loud that this is "checkable / narrower blast radius" rather than "provably permanent" — a sixth driver could still reproduce the same failure one level narrower. That is the honest answer; claiming permanence here would have been the same overreach the original sentence made.

    The trailing note about having sitting outside packages/drivers/* was kept, per the card's own argument — that scope gap is why two consecutive defects on that face were caught by hand-run censuses instead of CI, and deleting it would have removed the reason the mistake was possible.

    Landing: skip-changeset applied by this seat immediately on acceptance, before the gate's first evaluation — deliberately, because the sibling card #6763 hit a red Check Changeset tonight purely from label-vs-gate ordering and cost a re-run. Same label, applied earlier, costs nothing. Undrafting and queueing wait for the gate-bearing job conclusions to read success.


    Generated by Claude Code

  5. added a commit that references this issue on Aug 17, 2026
    ef85bbc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions