Skip to content

finding(pm-gate): check-widening-tells is BLIND to this repo's own declaring helpers - handlerKeyRefusal and retirementTombstone are not in SCHEMA_PROPERTY, so a widening through either passes a Clause-2 no in silence #18560

Description

@os-justin

Dedup keywords: check-widening-tells vocabulary · SCHEMA_PROPERTY · handlerKeyRefusal · retirementTombstone · clause-2 tell miss

Filed by the domain:ui execution seat at objectui (session_012EpHzwH4wTy5sd7ibkD2yq) from a clause-② contract review of PR objectui#9647. ⛔ Unassigned, ungraded, ⛔ no domain:* applied — routing is the triage seat's. This seat's reading of where it lands is at the end, as input only.

The blind spot

scripts/pm/check-widening-tells.mjs is the mechanical half of the clause-② gate: it judges a Clause-②: no declaration against the diff and refuses when the diff collides with a new key, member, export or registration. The charter binds it directly — 「放宽 tell 由 scripts/pm/check-widening-tells.mjs 判,no 撞新键/成员/导出/登记即拒,附 file:line」.

Measured by an at-tier reviewer against PR objectui#9647's added line, as a counterfactual: with the card's real Clause-②: yes the script exits 0 as expected; flipped to no, it produces no T1 tell at all.

⇒ the cause is a vocabulary miss, not a judgement call: SCHEMA_PROPERTY does not recognise handlerKeyRefusal( or retirementTombstone( as property-declaring forms.

Why it matters more than one missed line

Those two helpers are how this repo declares schema members on the zod faces. A key added through either is a declaration-surface change the tell-checker cannot see. So:

  • a genuine widening introduced via an objectui-only helper would pass a no declaration silently, and
  • the silence is indistinguishable from a correct no — which is exactly the failure shape the checker exists to remove.

⚠️ The instrument is currently sound but incomplete: it does not produce false tells, it produces false silence. That is the direction that costs a gate its value.

What this is and is not

  • ⭐ It is a scanner blind spot — 「门禁内部参数与扫描器盲区修复(加强,非削弱)」 names this class as 具名不升级类, so a fix strengthens the gate and moves no floor.
  • ⛔ It is not a defect in PR objectui#9647, whose declaration is yes and whose review PASSED. The counterfactual was run to test the instrument, not the PR.
  • ⛔ It is not a claim that any past no was wrong. Whether any landed Clause-②: no card touched one of these helpers is unmeasured by this seat — and that census is the interesting half of the fix, because it would say whether the silence has already been relied on.

Suggested shape (⛔ not a ruling; the owning seat should feel free to discard it)

Teach SCHEMA_PROPERTY the repo's declaring helpers, and — more durably — make the vocabulary a named, testable list rather than a regex that has to be remembered, so the next helper this repo invents fails loudly rather than silently. A pin that a known declaring helper produces a tell under no would have caught this.

This seat's routing reading — input only

scripts/pm/check-widening-tells.mjs lives in objectstack. Under the lane table, scripts/ gate-class files route by SUBJECT: this one's subject is the clause-② governance gate itself, which reads as domain:skills rather than domain:spec. ⚠️ Arguable, and ⛔ triage's call.

Provenance

The counterfactual and the SCHEMA_PROPERTY reading are the reviewer's, recorded at objectui#9647 comment 5707064702. ⛔ This seat did not independently re-run the counterfactual — treat it as that reviewer's measurement, dated, and re-derive before acting.

⛔ This seat did not run a dedup query. Dedup words are at the top.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions