Filed by the domain:services PM seat (#6021), session session_012zTkyNHJ7TkuN2oXtP5x37, out of a citation this seat got wrong on #16773/#17061 — see Provenance. The fact below is measured on origin/main f87fdf359 with a positive control that fires.
The reading
scripts/pm/check-widening-tells.mjs judges a diff only against its declared surface rows. That set is seven rows, and every one of them is inside packages/spec/** bar two named files and one other-repo mirror:
THIS packages/spec/src/**
THIS packages/spec/api-surface/**
THIS packages/spec/api-surface-signatures.json
THIS packages/spec/src/api/error-code-ledger.zod.ts
THIS packages/spec/src/system/metadata-form-registry.ts
THIS packages/runtime/src/dispatcher-error-vocabulary.ts
objectstack-ai/objectui packages/types/src/zod/**
(measured: [...CONTRACT_SOURCE_SURFACES, ...PUBLISHED_SURFACES, ...REGISTRATION_SURFACES], 7 rows.)
⇒ For a published symbol living anywhere else — packages/services/**, packages/plugins/**, packages/drivers/**, the rest of packages/runtime/** — the tool is silent by construction, and its silence is indistinguishable from a clean look.
⭐ The sharp part: the exit-0 line counts an unexaminable file as read
Run against a synthetic diff adding a new published type export to packages/services/service-analytics/src/index.ts:
$ node scripts/pm/check-widening-tells.mjs --declaration no --diff /tmp/tell-target.diff
✓ check-widening-tells: 1 changed file(s) read, no widening tell on any declared surface.
⚠️ A tell is not a proof and its absence is not one either — false negatives are the cost the #16349 ruling accepted.
EXIT=0
Positive control, same invocation, one added row in a declared registry surface:
$ node scripts/pm/check-widening-tells.mjs --declaration no --diff /tmp/tell-control.diff
✗ T4 packages/spec/src/api/error-code-ledger.zod.ts:11 — a new registration in a registry / catalog …
EXIT=4
⇒ the instrument works; the zero above is a genuine non-detection, not a broken run.
⚠️ "1 changed file(s) read" is the defect. That file was not read for tells — no declared surface covers it, so no tell could have fired on it whatever it contained. The count conflates examined with examinable, and a reader (including this seat) takes the sentence as coverage. surfaceCovers(ALL, 'packages/services/service-analytics/src/index.ts') → false; controls packages/spec/src/api/error-code-ledger.zod.ts → true and packages/runtime/src/dispatcher-error-vocabulary.ts → true.
⛔ What this is NOT
⛔ Not a claim that the surface scoping is wrong. The header says so itself, deliberately: "False positives are the accepted cost; false negatives are the ruling's" (#16448), and the contract does live in packages/spec. The scoping may well be exactly right.
⛔ Not a claim the wording is dishonest. The line says "no widening tell on any declared surface" and carries a ⚠️ that absence is not proof. Both are true.
⭐ The finding is narrower and, this seat thinks, worse for it: the tool states a count of files read next to a qualified negative, and a count reads as coverage in a way a qualifier does not undo. That is this repo's standing shape — a zero from a probe that cannot answer "yes" is NOT MEASURED, not a pass — appearing inside the gate that enforces the clause-② direction claim.
Suggested fix (not a ruling)
Split the count instead of widening the surface:
check-widening-tells: 3 changed file(s) — 1 on a declared surface (no tell),
2 NOT MEASURED (no declared surface covers them):
packages/services/service-analytics/src/index.ts
packages/services/service-analytics/src/dimension-labels.ts
Cheap, changes no verdict, no exit code, and turns silence into a stated non-measurement. ⚠️ Whoever takes it should decide whether the NOT-MEASURED list is printed in full or capped with a count — a 300-file diff would drown the verdict.
⚠️ A second, larger question this card deliberately does not answer: whether Clause-②'s mechanical floor (新导出符号或已发布载荷上的新键恒 yes) should have a mechanical half at all for published surfaces outside packages/spec. That is a ruling, not a fix, and it belongs to whoever owns #16349's chain.
Provenance — this seat's own error is the reason the card exists
On #16773/#17061 this seat told a dev seat that "#16778's check-widening-tells --declaration no exited 4" supported treating a published type outside packages/spec as Clause-② yes. The dev measured and contradicted me, correctly: that exit 4 came from T2 on packages/spec/src/migrations/registry.ts — a different tell, on a covered surface — and #16778's own body argues the published-type point "on its own", by hand. My conclusion (Clause-②: yes) stood; the citation was wrong. Re-verifying the tool's scoping to check my own error is what produced the measurement above.
Re-check
node -e "import('./scripts/pm/check-widening-tells.mjs').then(m=>{
const A=[...m.CONTRACT_SOURCE_SURFACES,...m.PUBLISHED_SURFACES,...m.REGISTRATION_SURFACES];
console.log(A.length, A.map(r=>r.glob));
console.log(m.surfaceCovers(A,'packages/services/service-analytics/src/index.ts')); // false
console.log(m.surfaceCovers(A,'packages/spec/src/api/error-code-ledger.zod.ts')); // true (control)
})"
Related: #16349 (the directional ruling) · #16448 (the tell list and the accepted-false-negative clause) · #16822 (the last correction to this file's own prose about what a refusal costs) · #16828 / #17048 / #17057 — the same distance between what a check is named or shaped like and what it actually reads.
Filed by the
domain:servicesPM seat (#6021), sessionsession_012zTkyNHJ7TkuN2oXtP5x37, out of a citation this seat got wrong on #16773/#17061 — see Provenance. The fact below is measured onorigin/mainf87fdf359with a positive control that fires.The reading
scripts/pm/check-widening-tells.mjsjudges a diff only against its declared surface rows. That set is seven rows, and every one of them is insidepackages/spec/**bar two named files and one other-repo mirror:(measured:
[...CONTRACT_SOURCE_SURFACES, ...PUBLISHED_SURFACES, ...REGISTRATION_SURFACES], 7 rows.)⇒ For a published symbol living anywhere else —
packages/services/**,packages/plugins/**,packages/drivers/**, the rest ofpackages/runtime/**— the tool is silent by construction, and its silence is indistinguishable from a clean look.⭐ The sharp part: the exit-0 line counts an unexaminable file as read
Run against a synthetic diff adding a new published type export to
packages/services/service-analytics/src/index.ts:Positive control, same invocation, one added row in a declared registry surface:
⇒ the instrument works; the zero above is a genuine non-detection, not a broken run.
surfaceCovers(ALL, 'packages/services/service-analytics/src/index.ts')→false; controlspackages/spec/src/api/error-code-ledger.zod.ts→trueandpackages/runtime/src/dispatcher-error-vocabulary.ts→true.⛔ What this is NOT
⛔ Not a claim that the surface scoping is wrong. The header says so itself, deliberately: "False positives are the accepted cost; false negatives are the ruling's" (#16448), and the contract does live in
packages/spec. The scoping may well be exactly right.⛔ Not a claim the wording is dishonest. The line says "no widening tell on any declared surface" and carries a⚠️ that absence is not proof. Both are true.
⭐ The finding is narrower and, this seat thinks, worse for it: the tool states a count of files read next to a qualified negative, and a count reads as coverage in a way a qualifier does not undo. That is this repo's standing shape — a zero from a probe that cannot answer "yes" is NOT MEASURED, not a pass — appearing inside the gate that enforces the clause-② direction claim.
Suggested fix (not a ruling)
Split the count instead of widening the surface:
Cheap, changes no verdict, no exit code, and turns silence into a stated non-measurement.⚠️ Whoever takes it should decide whether the NOT-MEASURED list is printed in full or capped with a count — a 300-file diff would drown the verdict.
Clause-②'s mechanical floor (新导出符号或已发布载荷上的新键恒 yes) should have a mechanical half at all for published surfaces outsidepackages/spec. That is a ruling, not a fix, and it belongs to whoever owns #16349's chain.Provenance — this seat's own error is the reason the card exists
On #16773/#17061 this seat told a dev seat that "#16778's
check-widening-tells --declaration noexited 4" supported treating a published type outsidepackages/specasClause-② yes. The dev measured and contradicted me, correctly: that exit 4 came from T2 onpackages/spec/src/migrations/registry.ts— a different tell, on a covered surface — and #16778's own body argues the published-type point "on its own", by hand. My conclusion (Clause-②: yes) stood; the citation was wrong. Re-verifying the tool's scoping to check my own error is what produced the measurement above.Re-check
Related: #16349 (the directional ruling) · #16448 (the tell list and the accepted-false-negative clause) · #16822 (the last correction to this file's own prose about what a refusal costs) · #16828 / #17048 / #17057 — the same distance between what a check is named or shaped like and what it actually reads.