You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] clause-② wording lacks its negative boundary: two independent seats read a PERMISSION-GATE behaviour change as "契约接受/拒绝行为" and pre-hung needs:contract-review on a non-contract card #12887
Filed by the director seat (session session_016SG9S6V15MqeAgkehDcTwk, 2026-08-28), after the maintainer caught the mis-hung label live (verbatim: 「我的意思是 12597 还挂着 label:"needs:contract-review"」). Skills-lane finding — the fix, if adopted, is pm-dispatch protocol text, so it is the skills seat's to grade and carry as a skill PR.
What happened (the evidence that this is a TEXT gap, not only one seat's slip)
Two independent seats made the identical conflation on the same card:
The director seat, executing the maintainer's ruling on that card, adopted the card's assertion instead of re-deriving from the boundary test, and attached needs:contract-review at ruling time.
By this board's own standard — applied the same day on the SHRINK-ONLY header question — two independent readers deriving the same wrong reading from one text is evidence the text cannot self-disambiguate.
The distinction the text carries only implicitly
SKILL.md's clause-② sentence: 「凡改变契约接受/拒绝行为或扩大公开面的卡(domain:spec 语义面;…)」 — the restriction to the published contract face lives in a parenthetical, and the claim template's criterion line (「本卡改变契约接受/拒绝行为或扩大公开面吗?」) repeats the phrase without it.
The manual floor meanwhile lists 安全/权限边界 and 协议/公开契约变化 as two separate categories. A permission-gate behaviour change (which deletes succeed, what an elevation bypasses) is the former: it needs the maintainer, but its control is the ruling itself — ⛔ not the contract-review chain, whose carriers, tier fuse and clear-label mechanics all assume a contract increment to review. Mis-hanging the label fails SAFE (over-review, carrier-enumeration noise — never a missed review), but it pollutes the review chain's carrier set every timed round.
Proposed fix (for the skills seat to shape; both halves are one-line-scale)
The negative example, stated where the phrase is read: one line beside the clause-② criterion (SKILL.md and/or the claim template's Clause-② line): a runtime permission/security behaviour change is NOT clause-② — it is the 安全/权限边界 manual-floor category; clause-② is the published contract face only.
Write down the pre-marking rule the board already practices: pre-hanging needs:contract-review on a queue card (the triage seat's "提前挂…免得到合并队列才发现" practice) is legitimate only when the future diff's path face is certainly contract (packages/spec/src/** — the path limb would fire anyway). Content-limb-only suspicions stay with the claim-time Clause-②: yes|no declaration, which is the binding mechanism regardless.
Not proposed
No new label, no new gate, no mechanism change — the enqueue gate's two limbs already work; this is wording plus one recorded convention. The ratchet applies to the skill file; the skills seat prices the lines.
Refs: #12597 (the mis-hung card, corrected) · the 2026-08-28 director-session correction comment there · SKILL.md 条款② / 条款②入队闸门 · references/contract-review.md.
Filed by the director seat (session
session_016SG9S6V15MqeAgkehDcTwk, 2026-08-28), after the maintainer caught the mis-hung label live (verbatim: 「我的意思是 12597 还挂着 label:"needs:contract-review"」). Skills-lane finding — the fix, if adopted, is pm-dispatch protocol text, so it is the skills seat's to grade and carry as a skill PR.What happened (the evidence that this is a TEXT gap, not only one seat's slip)
Two independent seats made the identical conflation on the same card:
set_nullwrite clears ONLY the object-level CRUD check (__referentialFieldClear-scoped) — FLS/RLS guards stay enforced; cascade untouched (RULED 2026-08-28) #12597: 「plugin-securityruntime permission-gate change.needs:contract-reviewat ruling time.set_nullwrite clears ONLY the object-level CRUD check (__referentialFieldClear-scoped) — FLS/RLS guards stay enforced; cascade untouched (RULED 2026-08-28) #12597, 2026-08-28 comment).By this board's own standard — applied the same day on the SHRINK-ONLY header question — two independent readers deriving the same wrong reading from one text is evidence the text cannot self-disambiguate.
The distinction the text carries only implicitly
domain:spec语义面;…)」 — the restriction to the published contract face lives in a parenthetical, and the claim template's criterion line (「本卡改变契约接受/拒绝行为或扩大公开面吗?」) repeats the phrase without it.Proposed fix (for the skills seat to shape; both halves are one-line-scale)
needs:contract-reviewon a queue card (the triage seat's "提前挂…免得到合并队列才发现" practice) is legitimate only when the future diff's path face is certainly contract (packages/spec/src/**— the path limb would fire anyway). Content-limb-only suspicions stay with the claim-timeClause-②: yes|nodeclaration, which is the binding mechanism regardless.Not proposed
No new label, no new gate, no mechanism change — the enqueue gate's two limbs already work; this is wording plus one recorded convention. The ratchet applies to the skill file; the skills seat prices the lines.
Refs: #12597 (the mis-hung card, corrected) · the 2026-08-28 director-session correction comment there · SKILL.md 条款② / 条款②入队闸门 ·
references/contract-review.md.