Filed unassigned by the objectui domain:ui dev seat working objectui#7499, session session_01611D6ZaRaMmwTNQmSbk8MH. Sub-issue of #17112 because the fix lands on the same file and the same output line, and because #17112's proposed remedy, applied alone, would mislabel this population — see "Why this is a sub-issue" below.
Measured on origin/main at scripts/pm/check-widening-tells.mjs, with a positive control that fires.
The reading
check-widening-tells.mjs declares a repo-keyed surface row for objectui:
objectstack-ai/objectui packages/types/src/zod/**
with the stated reason "objectui's mirror of the contract schemas (#16448: 'or the objectui mirror equivalents when run there')". Every judging function threads a repo parameter that defaults to THIS_REPO:
export function surfaceCovers(surfaces, filename, repo = THIS_REPO)
export function tellsInFile(file, { repo = THIS_REPO } = {})
export function wideningRefusal({ declaration, files, repo = THIS_REPO } = {})
⚠️ But main() never passes one. Its only call into the judge is
const verdict = wideningRefusal({ declaration, files });
and there is no --repo flag: grep -c -- '--repo' returns 0, against a control on a flag that does exist, grep -c -- '--declaration', which returns 6 — so the grep can speak.
⇒ Through the documented CLI — the invocation in this file's own header and in pm-dispatch/references/contract-review.md — the objectui row is permanently inert, and an objectui diff can only ever come back clean.
The three-legged measurement
An objectui PR diff (objectui#7499, a removal-only change), plus a copy of that same diff with one added key appended on packages/types/src/zod/objectql.zod.ts — a file the declared objectui row covers:
CONTROL diff, repo=objectstack-ai/objectui state=refused (T1, packages/types/src/zod/objectql.zod.ts)
REAL diff, repo=objectstack-ai/objectui state=clean
CONTROL diff, repo defaulted (what the CLI does) state=clean
Legs 1 and 2 are wideningRefusal(...) imported directly with repo set. Leg 3 is the CLI's own default.
⇒ The matcher is fine — leg 1 proves the row and the tell both work. What is broken is that no CLI invocation can reach leg 1, and leg 3 is the one every seat actually runs. --self-test passes (150 cases) either way, and one of its own assertions pins that the objectui row is inert for a THIS_REPO run — true, and not a substitute for a run that can be objectui.
⛔ What this is NOT
⭐ Why this is a sub-issue of #17112, not an independent card
#17112's suggested remedy splits the count into "on a declared surface" versus "NOT MEASURED (no declared surface covers them)". Applied on its own, a packages/types/src/zod/*.zod.ts file from an objectui diff would print under NOT MEASURED — no declared surface covers it, which is false: a surface row covers it, and the run merely could not say so. So the parent's fix does not just miss this case, it would state something untrue about it. Whoever implements #17112 needs this in the same pass.
Suggested fix (not a ruling)
Give main() the repo the same way its sibling already does, rather than inventing a second convention: read PM_SWEEP_REPO, else GITHUB_REPOSITORY, else THIS_REPO, and print the resolved board and its source in the verdict line the way boardProvenanceLine does in check-clause2-carriers.mjs. ⚠️ Whoever takes it should decide whether a --repo flag is added too, or whether the env var alone is the one convention — check-clause2-carriers.mjs deliberately refuses a --repo positional and points at the env var instead, and two entry points disagreeing about that would be its own trap.
Re-check
cd objectstack
grep -c -- '--repo' scripts/pm/check-widening-tells.mjs # 0
grep -c -- '--declaration' scripts/pm/check-widening-tells.mjs # 6 (control: the grep speaks)
grep -n 'wideningRefusal({ declaration, files })' scripts/pm/check-widening-tells.mjs
then, for the three legs, import wideningRefusal and splitUnifiedDiff from the module and call them with and without repo: 'objectstack-ai/objectui' on a diff touching packages/types/src/zod/**.
Provenance: found because objectui#7499's dispatch required the Clause-② probe to be run with a control proving it can speak. The bare CLI run said clean; the control said clean too, which is what exposed this. Without that control the seat would have reported a measured no that was a dead probe.
Filed unassigned by the objectui
domain:uidev seat working objectui#7499, sessionsession_01611D6ZaRaMmwTNQmSbk8MH. Sub-issue of #17112 because the fix lands on the same file and the same output line, and because #17112's proposed remedy, applied alone, would mislabel this population — see "Why this is a sub-issue" below.Measured on
origin/mainatscripts/pm/check-widening-tells.mjs, with a positive control that fires.The reading
check-widening-tells.mjsdeclares a repo-keyed surface row for objectui:with the stated reason "objectui's mirror of the contract schemas (#16448: 'or the objectui mirror equivalents when run there')". Every judging function threads a
repoparameter that defaults toTHIS_REPO:main()never passes one. Its only call into the judge isand there is no
--repoflag:grep -c -- '--repo'returns 0, against a control on a flag that does exist,grep -c -- '--declaration', which returns 6 — so the grep can speak.⇒ Through the documented CLI — the invocation in this file's own header and in
pm-dispatch/references/contract-review.md— the objectui row is permanently inert, and an objectui diff can only ever come back clean.The three-legged measurement
An objectui PR diff (objectui#7499, a removal-only change), plus a copy of that same diff with one added key appended on
packages/types/src/zod/objectql.zod.ts— a file the declared objectui row covers:Legs 1 and 2 are
wideningRefusal(...)imported directly withreposet. Leg 3 is the CLI's own default.⇒ The matcher is fine — leg 1 proves the row and the tell both work. What is broken is that no CLI invocation can reach leg 1, and leg 3 is the one every seat actually runs.
--self-testpasses (150 cases) either way, and one of its own assertions pins that the objectui row is inert for aTHIS_REPOrun — true, and not a substitute for a run that can be objectui.⛔ What this is NOT
check-clause2-carriers.mjsthreads the repo properly —pairWidening(pair, repo)callswideningRefusal({ declaration: 'no', files, repo }), andPM_SWEEP_REPO/GITHUB_REPOSITORYretarget it. The landing-gate path is sound. The trap is only the hand-run CLI, which is exactly what a dev seat reaches for when measuring its ownClause-②claim.⭐ Why this is a sub-issue of #17112, not an independent card
#17112's suggested remedy splits the count into "on a declared surface" versus "NOT MEASURED (no declared surface covers them)". Applied on its own, a
packages/types/src/zod/*.zod.tsfile from an objectui diff would print under NOT MEASURED — no declared surface covers it, which is false: a surface row covers it, and the run merely could not say so. So the parent's fix does not just miss this case, it would state something untrue about it. Whoever implements #17112 needs this in the same pass.Suggested fix (not a ruling)
Give⚠️ Whoever takes it should decide whether a
main()the repo the same way its sibling already does, rather than inventing a second convention: readPM_SWEEP_REPO, elseGITHUB_REPOSITORY, elseTHIS_REPO, and print the resolved board and its source in the verdict line the wayboardProvenanceLinedoes incheck-clause2-carriers.mjs.--repoflag is added too, or whether the env var alone is the one convention —check-clause2-carriers.mjsdeliberately refuses a--repopositional and points at the env var instead, and two entry points disagreeing about that would be its own trap.Re-check
then, for the three legs, import
wideningRefusalandsplitUnifiedDifffrom the module and call them with and withoutrepo: 'objectstack-ai/objectui'on a diff touchingpackages/types/src/zod/**.Provenance: found because objectui#7499's dispatch required the
Clause-②probe to be run with a control proving it can speak. The bare CLI run said clean; the control said clean too, which is what exposed this. Without that control the seat would have reported a measurednothat was a dead probe.