The clause-② gate has three limbs and all three were silent on PR #13910 at once — the dual-carrier label rule has no enforcement, and 4 of 6 measured pairs are out of sync #13922

Description

@os-warren

Filed by the triage seat while running the contract-review round of 2026-08-31. Measured across every open needs:contract-review pair in the repo, not sampled. Sibling of #13914, and strictly worse: #13914 records one limb failing; this records all three failing on the same PR simultaneously, which is a complete gate bypass rather than a redundancy loss.

The gate has three limbs

Per scripts/pm/ensure-pm-labels.sh, in its own words:

a PR whose ACTUAL diff touches the contract surface — or whose card's claim comment declares Clause-②: yes (the content limb, judged from the card, path-independent) — but was dispatched below the contract-review tier waits outside the queue under this label until the review sub-round clears it. Named consumers: the enqueue gate and the triage sub-round's label query.

So: ① path limb (diff under packages/spec/src/**) · ② declaration limb (Clause-②: yes in the card's claim comment) · ③ the label itself, on both carriers.

PR #13910 — all three silent, on a PR whose own author declared Clause-②: yes

limbreading on #13910 / card #13476
① pathsilent — 4 changed files, all packages/rest; nothing under packages/spec/src/**
② declarationsilent — the claim comment (5480774192) contains no Clause-②: line at all
③ labelsilent on the PR — labels were documentation, size/m, tests, tooling; the card had it, the PR did not

And the PR body declares, verbatim:

Clause ②: yes

… the declared ADR-0112 code on a public door changes for a real deployment condition, so it is declared yes rather than talked down.

⇒ An author correctly identified their own change as clause-②, wrote it down, and not one of the three mechanisms that exist to catch that was in a state to fire. The PR is draft and unarmed and a human is in the loop, which is why nothing has gone wrong yet — but nothing in the gate was holding it.

⚠️ Sharper still: the card's PM review comment (5481513968) states, verbatim, "needs:contract-review on both carriers." The label was on one. The record asserts a sync that did not happen — so a reader auditing this by reading the thread would conclude the mechanism ran.

The dual-carrier rule has no enforcement at all

references/contract-review.md states it:

PR 与卡双载体同笔挂(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧

ensure-pm-labels.shcreates the label object (colour, description) and does nothing else. There is no check anywhere that a needs:contract-review on one carrier implies it on the other. The rule is prose, executed by hand.

Measured compliance: 2 of 6

Every open pair, 2026-08-31:

PRcardPR sidecard side
#13870#13576in sync
#13834#13651in sync
#13829#13578card missing
#13857#13608card missing
#13864#13657card missing
#13910#13476PR missing, record claims both

All four gaps were repaired by hand in the same round. That repair is the point: a rule whose compliance is 33% and whose only remedy is someone noticing is not a mechanism.

Why this is p1 and #13914 is p2

The two failure directions are not symmetric.

  • Card side missing (3 cases) is a visibility failure. The named consumer "the triage sub-round's label query" reads the card; a card without the label is invisible to the review round and simply never gets reviewed. The PR still carries the label, so nothing enqueues.
  • PR side missing (1 case) is a fail-open. It is the carrier the enqueue gate reads, and on fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 it was the only limb left — the other two were independently silent. Nothing was holding the door.

⇒ The direction that actually admits an unreviewed contract change was measured live, in the one case it occurred.

Another rule already depends on this label being truthful

references/contract-review.md:

重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂

This recovery procedure reads "label absent" as probably cleared. At a 33% sync rate that inference is wrong more often than right: absent means "never synced" four times as often as it means "cleared". The recovery rule is sound; its premise has been falsified by measurement.

Remedies — not chosen here, ⛔ this card does not rule

  1. Make the sync mechanical. The pairing is already machine-derivable: a PR body's Fixes #NNNN / Closes #NNNN, or GitHub's own closed_by_pull_requests, which answered correctly for every one of the six pairs above. A gate that reads one carrier's label and asserts the other's is a small script and has no judgement in it.
  2. Collapse to one carrier. The maintainer's 2026-08-22 exchange shows this was already asked — 「简化一点是否可以直接挂 PR 侧」 — and answered 「两边都挂好」. ⚠️ Re-opening that is a maintainer call, not this card's; recorded only because it is the alternative that removes the sync problem instead of policing it.
  3. Close the ② limb too.The Clause-②: yes | no machine spelling is missing from the claim comment on 2 of 3 measured cards — the enqueue gate's predicate reads it there, and it is not there #13914 is that half. ⚠️ Fixing ② alone would not have caught fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 — its claim comment has no clause-② line in any spelling — and fixing ③ alone would. They are independent; neither subsumes the other.

⛔ What this card should not become: a one-off repair of the four gaps. Those are already repaired. The defect is that they happened and that nothing would have reported them.

Refs

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

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      The clause-② gate has three limbs and all three were silent on PR #13910 at once — the dual-carrier label rule has no enforcement, and 4 of 6 measured pairs are out of sync #13922

      Description

      @os-warren

      Filed by the triage seat while running the contract-review round of 2026-08-31. Measured across every open needs:contract-review pair in the repo, not sampled. Sibling of #13914, and strictly worse: #13914 records one limb failing; this records all three failing on the same PR simultaneously, which is a complete gate bypass rather than a redundancy loss.

      The gate has three limbs

      Per scripts/pm/ensure-pm-labels.sh, in its own words:

      a PR whose ACTUAL diff touches the contract surface — or whose card's claim comment declares Clause-②: yes (the content limb, judged from the card, path-independent) — but was dispatched below the contract-review tier waits outside the queue under this label until the review sub-round clears it. Named consumers: the enqueue gate and the triage sub-round's label query.

      So: ① path limb (diff under packages/spec/src/**) · ② declaration limb (Clause-②: yes in the card's claim comment) · ③ the label itself, on both carriers.

      PR #13910 — all three silent, on a PR whose own author declared Clause-②: yes

      limbreading on #13910 / card #13476
      ① pathsilent — 4 changed files, all packages/rest; nothing under packages/spec/src/**
      ② declarationsilent — the claim comment (5480774192) contains no Clause-②: line at all
      ③ labelsilent on the PR — labels were documentation, size/m, tests, tooling; the card had it, the PR did not

      And the PR body declares, verbatim:

      Clause ②: yes

      … the declared ADR-0112 code on a public door changes for a real deployment condition, so it is declared yes rather than talked down.

      ⇒ An author correctly identified their own change as clause-②, wrote it down, and not one of the three mechanisms that exist to catch that was in a state to fire. The PR is draft and unarmed and a human is in the loop, which is why nothing has gone wrong yet — but nothing in the gate was holding it.

      ⚠️ Sharper still: the card's PM review comment (5481513968) states, verbatim, "needs:contract-review on both carriers." The label was on one. The record asserts a sync that did not happen — so a reader auditing this by reading the thread would conclude the mechanism ran.

      The dual-carrier rule has no enforcement at all

      references/contract-review.md states it:

      PR 与卡双载体同笔挂(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧

      ensure-pm-labels.shcreates the label object (colour, description) and does nothing else. There is no check anywhere that a needs:contract-review on one carrier implies it on the other. The rule is prose, executed by hand.

      Measured compliance: 2 of 6

      Every open pair, 2026-08-31:

      PRcardPR sidecard side
      #13870#13576in sync
      #13834#13651in sync
      #13829#13578card missing
      #13857#13608card missing
      #13864#13657card missing
      #13910#13476PR missing, record claims both

      All four gaps were repaired by hand in the same round. That repair is the point: a rule whose compliance is 33% and whose only remedy is someone noticing is not a mechanism.

      Why this is p1 and #13914 is p2

      The two failure directions are not symmetric.

      • Card side missing (3 cases) is a visibility failure. The named consumer "the triage sub-round's label query" reads the card; a card without the label is invisible to the review round and simply never gets reviewed. The PR still carries the label, so nothing enqueues.
      • PR side missing (1 case) is a fail-open. It is the carrier the enqueue gate reads, and on fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 it was the only limb left — the other two were independently silent. Nothing was holding the door.

      ⇒ The direction that actually admits an unreviewed contract change was measured live, in the one case it occurred.

      Another rule already depends on this label being truthful

      references/contract-review.md:

      重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂

      This recovery procedure reads "label absent" as probably cleared. At a 33% sync rate that inference is wrong more often than right: absent means "never synced" four times as often as it means "cleared". The recovery rule is sound; its premise has been falsified by measurement.

      Remedies — not chosen here, ⛔ this card does not rule

      1. Make the sync mechanical. The pairing is already machine-derivable: a PR body's Fixes #NNNN / Closes #NNNN, or GitHub's own closed_by_pull_requests, which answered correctly for every one of the six pairs above. A gate that reads one carrier's label and asserts the other's is a small script and has no judgement in it.
      2. Collapse to one carrier. The maintainer's 2026-08-22 exchange shows this was already asked — 「简化一点是否可以直接挂 PR 侧」 — and answered 「两边都挂好」. ⚠️ Re-opening that is a maintainer call, not this card's; recorded only because it is the alternative that removes the sync problem instead of policing it.
      3. Close the ② limb too.The Clause-②: yes | no machine spelling is missing from the claim comment on 2 of 3 measured cards — the enqueue gate's predicate reads it there, and it is not there #13914 is that half. ⚠️ Fixing ② alone would not have caught fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 — its claim comment has no clause-② line in any spelling — and fixing ③ alone would. They are independent; neither subsumes the other.

      ⛔ What this card should not become: a one-off repair of the four gaps. Those are already repaired. The defect is that they happened and that nothing would have reported them.

      Refs

      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

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          The clause-② gate has three limbs and all three were silent on PR #13910 at once — the dual-carrier label rule has no enforcement, and 4 of 6 measured pairs are out of sync #13922

          Description

          @os-warren

          Filed by the triage seat while running the contract-review round of 2026-08-31. Measured across every open needs:contract-review pair in the repo, not sampled. Sibling of #13914, and strictly worse: #13914 records one limb failing; this records all three failing on the same PR simultaneously, which is a complete gate bypass rather than a redundancy loss.

          The gate has three limbs

          Per scripts/pm/ensure-pm-labels.sh, in its own words:

          a PR whose ACTUAL diff touches the contract surface — or whose card's claim comment declares Clause-②: yes (the content limb, judged from the card, path-independent) — but was dispatched below the contract-review tier waits outside the queue under this label until the review sub-round clears it. Named consumers: the enqueue gate and the triage sub-round's label query.

          So: ① path limb (diff under packages/spec/src/**) · ② declaration limb (Clause-②: yes in the card's claim comment) · ③ the label itself, on both carriers.

          PR #13910 — all three silent, on a PR whose own author declared Clause-②: yes

          limbreading on #13910 / card #13476
          ① pathsilent — 4 changed files, all packages/rest; nothing under packages/spec/src/**
          ② declarationsilent — the claim comment (5480774192) contains no Clause-②: line at all
          ③ labelsilent on the PR — labels were documentation, size/m, tests, tooling; the card had it, the PR did not

          And the PR body declares, verbatim:

          Clause ②: yes

          … the declared ADR-0112 code on a public door changes for a real deployment condition, so it is declared yes rather than talked down.

          ⇒ An author correctly identified their own change as clause-②, wrote it down, and not one of the three mechanisms that exist to catch that was in a state to fire. The PR is draft and unarmed and a human is in the loop, which is why nothing has gone wrong yet — but nothing in the gate was holding it.

          ⚠️ Sharper still: the card's PM review comment (5481513968) states, verbatim, "needs:contract-review on both carriers." The label was on one. The record asserts a sync that did not happen — so a reader auditing this by reading the thread would conclude the mechanism ran.

          The dual-carrier rule has no enforcement at all

          references/contract-review.md states it:

          PR 与卡双载体同笔挂(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧

          ensure-pm-labels.shcreates the label object (colour, description) and does nothing else. There is no check anywhere that a needs:contract-review on one carrier implies it on the other. The rule is prose, executed by hand.

          Measured compliance: 2 of 6

          Every open pair, 2026-08-31:

          PRcardPR sidecard side
          #13870#13576in sync
          #13834#13651in sync
          #13829#13578card missing
          #13857#13608card missing
          #13864#13657card missing
          #13910#13476PR missing, record claims both

          All four gaps were repaired by hand in the same round. That repair is the point: a rule whose compliance is 33% and whose only remedy is someone noticing is not a mechanism.

          Why this is p1 and #13914 is p2

          The two failure directions are not symmetric.

          • Card side missing (3 cases) is a visibility failure. The named consumer "the triage sub-round's label query" reads the card; a card without the label is invisible to the review round and simply never gets reviewed. The PR still carries the label, so nothing enqueues.
          • PR side missing (1 case) is a fail-open. It is the carrier the enqueue gate reads, and on fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 it was the only limb left — the other two were independently silent. Nothing was holding the door.

          ⇒ The direction that actually admits an unreviewed contract change was measured live, in the one case it occurred.

          Another rule already depends on this label being truthful

          references/contract-review.md:

          重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂

          This recovery procedure reads "label absent" as probably cleared. At a 33% sync rate that inference is wrong more often than right: absent means "never synced" four times as often as it means "cleared". The recovery rule is sound; its premise has been falsified by measurement.

          Remedies — not chosen here, ⛔ this card does not rule

          1. Make the sync mechanical. The pairing is already machine-derivable: a PR body's Fixes #NNNN / Closes #NNNN, or GitHub's own closed_by_pull_requests, which answered correctly for every one of the six pairs above. A gate that reads one carrier's label and asserts the other's is a small script and has no judgement in it.
          2. Collapse to one carrier. The maintainer's 2026-08-22 exchange shows this was already asked — 「简化一点是否可以直接挂 PR 侧」 — and answered 「两边都挂好」. ⚠️ Re-opening that is a maintainer call, not this card's; recorded only because it is the alternative that removes the sync problem instead of policing it.
          3. Close the ② limb too.The Clause-②: yes | no machine spelling is missing from the claim comment on 2 of 3 measured cards — the enqueue gate's predicate reads it there, and it is not there #13914 is that half. ⚠️ Fixing ② alone would not have caught fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 — its claim comment has no clause-② line in any spelling — and fixing ③ alone would. They are independent; neither subsumes the other.

          ⛔ What this card should not become: a one-off repair of the four gaps. Those are already repaired. The defect is that they happened and that nothing would have reported them.

          Refs

          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

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              The clause-② gate has three limbs and all three were silent on PR #13910 at once — the dual-carrier label rule has no enforcement, and 4 of 6 measured pairs are out of sync #13922

              Description

              @os-warren

              Filed by the triage seat while running the contract-review round of 2026-08-31. Measured across every open needs:contract-review pair in the repo, not sampled. Sibling of #13914, and strictly worse: #13914 records one limb failing; this records all three failing on the same PR simultaneously, which is a complete gate bypass rather than a redundancy loss.

              The gate has three limbs

              Per scripts/pm/ensure-pm-labels.sh, in its own words:

              a PR whose ACTUAL diff touches the contract surface — or whose card's claim comment declares Clause-②: yes (the content limb, judged from the card, path-independent) — but was dispatched below the contract-review tier waits outside the queue under this label until the review sub-round clears it. Named consumers: the enqueue gate and the triage sub-round's label query.

              So: ① path limb (diff under packages/spec/src/**) · ② declaration limb (Clause-②: yes in the card's claim comment) · ③ the label itself, on both carriers.

              PR #13910 — all three silent, on a PR whose own author declared Clause-②: yes

              limbreading on #13910 / card #13476
              ① pathsilent — 4 changed files, all packages/rest; nothing under packages/spec/src/**
              ② declarationsilent — the claim comment (5480774192) contains no Clause-②: line at all
              ③ labelsilent on the PR — labels were documentation, size/m, tests, tooling; the card had it, the PR did not

              And the PR body declares, verbatim:

              Clause ②: yes

              … the declared ADR-0112 code on a public door changes for a real deployment condition, so it is declared yes rather than talked down.

              ⇒ An author correctly identified their own change as clause-②, wrote it down, and not one of the three mechanisms that exist to catch that was in a state to fire. The PR is draft and unarmed and a human is in the loop, which is why nothing has gone wrong yet — but nothing in the gate was holding it.

              ⚠️ Sharper still: the card's PM review comment (5481513968) states, verbatim, "needs:contract-review on both carriers." The label was on one. The record asserts a sync that did not happen — so a reader auditing this by reading the thread would conclude the mechanism ran.

              The dual-carrier rule has no enforcement at all

              references/contract-review.md states it:

              PR 与卡双载体同笔挂(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧

              ensure-pm-labels.shcreates the label object (colour, description) and does nothing else. There is no check anywhere that a needs:contract-review on one carrier implies it on the other. The rule is prose, executed by hand.

              Measured compliance: 2 of 6

              Every open pair, 2026-08-31:

              PRcardPR sidecard side
              #13870#13576in sync
              #13834#13651in sync
              #13829#13578card missing
              #13857#13608card missing
              #13864#13657card missing
              #13910#13476PR missing, record claims both

              All four gaps were repaired by hand in the same round. That repair is the point: a rule whose compliance is 33% and whose only remedy is someone noticing is not a mechanism.

              Why this is p1 and #13914 is p2

              The two failure directions are not symmetric.

              • Card side missing (3 cases) is a visibility failure. The named consumer "the triage sub-round's label query" reads the card; a card without the label is invisible to the review round and simply never gets reviewed. The PR still carries the label, so nothing enqueues.
              • PR side missing (1 case) is a fail-open. It is the carrier the enqueue gate reads, and on fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 it was the only limb left — the other two were independently silent. Nothing was holding the door.

              ⇒ The direction that actually admits an unreviewed contract change was measured live, in the one case it occurred.

              Another rule already depends on this label being truthful

              references/contract-review.md:

              重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂

              This recovery procedure reads "label absent" as probably cleared. At a 33% sync rate that inference is wrong more often than right: absent means "never synced" four times as often as it means "cleared". The recovery rule is sound; its premise has been falsified by measurement.

              Remedies — not chosen here, ⛔ this card does not rule

              1. Make the sync mechanical. The pairing is already machine-derivable: a PR body's Fixes #NNNN / Closes #NNNN, or GitHub's own closed_by_pull_requests, which answered correctly for every one of the six pairs above. A gate that reads one carrier's label and asserts the other's is a small script and has no judgement in it.
              2. Collapse to one carrier. The maintainer's 2026-08-22 exchange shows this was already asked — 「简化一点是否可以直接挂 PR 侧」 — and answered 「两边都挂好」. ⚠️ Re-opening that is a maintainer call, not this card's; recorded only because it is the alternative that removes the sync problem instead of policing it.
              3. Close the ② limb too.The Clause-②: yes | no machine spelling is missing from the claim comment on 2 of 3 measured cards — the enqueue gate's predicate reads it there, and it is not there #13914 is that half. ⚠️ Fixing ② alone would not have caught fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 — its claim comment has no clause-② line in any spelling — and fixing ③ alone would. They are independent; neither subsumes the other.

              ⛔ What this card should not become: a one-off repair of the four gaps. Those are already repaired. The defect is that they happened and that nothing would have reported them.

              Refs

              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

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  The clause-② gate has three limbs and all three were silent on PR #13910 at once — the dual-carrier label rule has no enforcement, and 4 of 6 measured pairs are out of sync #13922

                  Description

                  @os-warren

                  Filed by the triage seat while running the contract-review round of 2026-08-31. Measured across every open needs:contract-review pair in the repo, not sampled. Sibling of #13914, and strictly worse: #13914 records one limb failing; this records all three failing on the same PR simultaneously, which is a complete gate bypass rather than a redundancy loss.

                  The gate has three limbs

                  Per scripts/pm/ensure-pm-labels.sh, in its own words:

                  a PR whose ACTUAL diff touches the contract surface — or whose card's claim comment declares Clause-②: yes (the content limb, judged from the card, path-independent) — but was dispatched below the contract-review tier waits outside the queue under this label until the review sub-round clears it. Named consumers: the enqueue gate and the triage sub-round's label query.

                  So: ① path limb (diff under packages/spec/src/**) · ② declaration limb (Clause-②: yes in the card's claim comment) · ③ the label itself, on both carriers.

                  PR #13910 — all three silent, on a PR whose own author declared Clause-②: yes

                  limbreading on #13910 / card #13476
                  ① pathsilent — 4 changed files, all packages/rest; nothing under packages/spec/src/**
                  ② declarationsilent — the claim comment (5480774192) contains no Clause-②: line at all
                  ③ labelsilent on the PR — labels were documentation, size/m, tests, tooling; the card had it, the PR did not

                  And the PR body declares, verbatim:

                  Clause ②: yes

                  … the declared ADR-0112 code on a public door changes for a real deployment condition, so it is declared yes rather than talked down.

                  ⇒ An author correctly identified their own change as clause-②, wrote it down, and not one of the three mechanisms that exist to catch that was in a state to fire. The PR is draft and unarmed and a human is in the loop, which is why nothing has gone wrong yet — but nothing in the gate was holding it.

                  ⚠️ Sharper still: the card's PM review comment (5481513968) states, verbatim, "needs:contract-review on both carriers." The label was on one. The record asserts a sync that did not happen — so a reader auditing this by reading the thread would conclude the mechanism ran.

                  The dual-carrier rule has no enforcement at all

                  references/contract-review.md states it:

                  PR 与卡双载体同笔挂(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧

                  ensure-pm-labels.shcreates the label object (colour, description) and does nothing else. There is no check anywhere that a needs:contract-review on one carrier implies it on the other. The rule is prose, executed by hand.

                  Measured compliance: 2 of 6

                  Every open pair, 2026-08-31:

                  PRcardPR sidecard side
                  #13870#13576in sync
                  #13834#13651in sync
                  #13829#13578card missing
                  #13857#13608card missing
                  #13864#13657card missing
                  #13910#13476PR missing, record claims both

                  All four gaps were repaired by hand in the same round. That repair is the point: a rule whose compliance is 33% and whose only remedy is someone noticing is not a mechanism.

                  Why this is p1 and #13914 is p2

                  The two failure directions are not symmetric.

                  • Card side missing (3 cases) is a visibility failure. The named consumer "the triage sub-round's label query" reads the card; a card without the label is invisible to the review round and simply never gets reviewed. The PR still carries the label, so nothing enqueues.
                  • PR side missing (1 case) is a fail-open. It is the carrier the enqueue gate reads, and on fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 it was the only limb left — the other two were independently silent. Nothing was holding the door.

                  ⇒ The direction that actually admits an unreviewed contract change was measured live, in the one case it occurred.

                  Another rule already depends on this label being truthful

                  references/contract-review.md:

                  重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂

                  This recovery procedure reads "label absent" as probably cleared. At a 33% sync rate that inference is wrong more often than right: absent means "never synced" four times as often as it means "cleared". The recovery rule is sound; its premise has been falsified by measurement.

                  Remedies — not chosen here, ⛔ this card does not rule

                  1. Make the sync mechanical. The pairing is already machine-derivable: a PR body's Fixes #NNNN / Closes #NNNN, or GitHub's own closed_by_pull_requests, which answered correctly for every one of the six pairs above. A gate that reads one carrier's label and asserts the other's is a small script and has no judgement in it.
                  2. Collapse to one carrier. The maintainer's 2026-08-22 exchange shows this was already asked — 「简化一点是否可以直接挂 PR 侧」 — and answered 「两边都挂好」. ⚠️ Re-opening that is a maintainer call, not this card's; recorded only because it is the alternative that removes the sync problem instead of policing it.
                  3. Close the ② limb too.The Clause-②: yes | no machine spelling is missing from the claim comment on 2 of 3 measured cards — the enqueue gate's predicate reads it there, and it is not there #13914 is that half. ⚠️ Fixing ② alone would not have caught fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 — its claim comment has no clause-② line in any spelling — and fixing ③ alone would. They are independent; neither subsumes the other.

                  ⛔ What this card should not become: a one-off repair of the four gaps. Those are already repaired. The defect is that they happened and that nothing would have reported them.

                  Refs

                  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

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      The clause-② gate has three limbs and all three were silent on PR #13910 at once — the dual-carrier label rule has no enforcement, and 4 of 6 measured pairs are out of sync #13922

                      Description

                      @os-warren

                      Filed by the triage seat while running the contract-review round of 2026-08-31. Measured across every open needs:contract-review pair in the repo, not sampled. Sibling of #13914, and strictly worse: #13914 records one limb failing; this records all three failing on the same PR simultaneously, which is a complete gate bypass rather than a redundancy loss.

                      The gate has three limbs

                      Per scripts/pm/ensure-pm-labels.sh, in its own words:

                      a PR whose ACTUAL diff touches the contract surface — or whose card's claim comment declares Clause-②: yes (the content limb, judged from the card, path-independent) — but was dispatched below the contract-review tier waits outside the queue under this label until the review sub-round clears it. Named consumers: the enqueue gate and the triage sub-round's label query.

                      So: ① path limb (diff under packages/spec/src/**) · ② declaration limb (Clause-②: yes in the card's claim comment) · ③ the label itself, on both carriers.

                      PR #13910 — all three silent, on a PR whose own author declared Clause-②: yes

                      limbreading on #13910 / card #13476
                      ① pathsilent — 4 changed files, all packages/rest; nothing under packages/spec/src/**
                      ② declarationsilent — the claim comment (5480774192) contains no Clause-②: line at all
                      ③ labelsilent on the PR — labels were documentation, size/m, tests, tooling; the card had it, the PR did not

                      And the PR body declares, verbatim:

                      Clause ②: yes

                      … the declared ADR-0112 code on a public door changes for a real deployment condition, so it is declared yes rather than talked down.

                      ⇒ An author correctly identified their own change as clause-②, wrote it down, and not one of the three mechanisms that exist to catch that was in a state to fire. The PR is draft and unarmed and a human is in the loop, which is why nothing has gone wrong yet — but nothing in the gate was holding it.

                      ⚠️ Sharper still: the card's PM review comment (5481513968) states, verbatim, "needs:contract-review on both carriers." The label was on one. The record asserts a sync that did not happen — so a reader auditing this by reading the thread would conclude the mechanism ran.

                      The dual-carrier rule has no enforcement at all

                      references/contract-review.md states it:

                      PR 与卡双载体同笔挂(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧

                      ensure-pm-labels.shcreates the label object (colour, description) and does nothing else. There is no check anywhere that a needs:contract-review on one carrier implies it on the other. The rule is prose, executed by hand.

                      Measured compliance: 2 of 6

                      Every open pair, 2026-08-31:

                      PRcardPR sidecard side
                      #13870#13576in sync
                      #13834#13651in sync
                      #13829#13578card missing
                      #13857#13608card missing
                      #13864#13657card missing
                      #13910#13476PR missing, record claims both

                      All four gaps were repaired by hand in the same round. That repair is the point: a rule whose compliance is 33% and whose only remedy is someone noticing is not a mechanism.

                      Why this is p1 and #13914 is p2

                      The two failure directions are not symmetric.

                      • Card side missing (3 cases) is a visibility failure. The named consumer "the triage sub-round's label query" reads the card; a card without the label is invisible to the review round and simply never gets reviewed. The PR still carries the label, so nothing enqueues.
                      • PR side missing (1 case) is a fail-open. It is the carrier the enqueue gate reads, and on fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 it was the only limb left — the other two were independently silent. Nothing was holding the door.

                      ⇒ The direction that actually admits an unreviewed contract change was measured live, in the one case it occurred.

                      Another rule already depends on this label being truthful

                      references/contract-review.md:

                      重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂

                      This recovery procedure reads "label absent" as probably cleared. At a 33% sync rate that inference is wrong more often than right: absent means "never synced" four times as often as it means "cleared". The recovery rule is sound; its premise has been falsified by measurement.

                      Remedies — not chosen here, ⛔ this card does not rule

                      1. Make the sync mechanical. The pairing is already machine-derivable: a PR body's Fixes #NNNN / Closes #NNNN, or GitHub's own closed_by_pull_requests, which answered correctly for every one of the six pairs above. A gate that reads one carrier's label and asserts the other's is a small script and has no judgement in it.
                      2. Collapse to one carrier. The maintainer's 2026-08-22 exchange shows this was already asked — 「简化一点是否可以直接挂 PR 侧」 — and answered 「两边都挂好」. ⚠️ Re-opening that is a maintainer call, not this card's; recorded only because it is the alternative that removes the sync problem instead of policing it.
                      3. Close the ② limb too.The Clause-②: yes | no machine spelling is missing from the claim comment on 2 of 3 measured cards — the enqueue gate's predicate reads it there, and it is not there #13914 is that half. ⚠️ Fixing ② alone would not have caught fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 — its claim comment has no clause-② line in any spelling — and fixing ③ alone would. They are independent; neither subsumes the other.

                      ⛔ What this card should not become: a one-off repair of the four gaps. Those are already repaired. The defect is that they happened and that nothing would have reported them.

                      Refs

                      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

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          The clause-② gate has three limbs and all three were silent on PR #13910 at once — the dual-carrier label rule has no enforcement, and 4 of 6 measured pairs are out of sync #13922

                          Description

                          @os-warren

                          Filed by the triage seat while running the contract-review round of 2026-08-31. Measured across every open needs:contract-review pair in the repo, not sampled. Sibling of #13914, and strictly worse: #13914 records one limb failing; this records all three failing on the same PR simultaneously, which is a complete gate bypass rather than a redundancy loss.

                          The gate has three limbs

                          Per scripts/pm/ensure-pm-labels.sh, in its own words:

                          a PR whose ACTUAL diff touches the contract surface — or whose card's claim comment declares Clause-②: yes (the content limb, judged from the card, path-independent) — but was dispatched below the contract-review tier waits outside the queue under this label until the review sub-round clears it. Named consumers: the enqueue gate and the triage sub-round's label query.

                          So: ① path limb (diff under packages/spec/src/**) · ② declaration limb (Clause-②: yes in the card's claim comment) · ③ the label itself, on both carriers.

                          PR #13910 — all three silent, on a PR whose own author declared Clause-②: yes

                          limbreading on #13910 / card #13476
                          ① pathsilent — 4 changed files, all packages/rest; nothing under packages/spec/src/**
                          ② declarationsilent — the claim comment (5480774192) contains no Clause-②: line at all
                          ③ labelsilent on the PR — labels were documentation, size/m, tests, tooling; the card had it, the PR did not

                          And the PR body declares, verbatim:

                          Clause ②: yes

                          … the declared ADR-0112 code on a public door changes for a real deployment condition, so it is declared yes rather than talked down.

                          ⇒ An author correctly identified their own change as clause-②, wrote it down, and not one of the three mechanisms that exist to catch that was in a state to fire. The PR is draft and unarmed and a human is in the loop, which is why nothing has gone wrong yet — but nothing in the gate was holding it.

                          ⚠️ Sharper still: the card's PM review comment (5481513968) states, verbatim, "needs:contract-review on both carriers." The label was on one. The record asserts a sync that did not happen — so a reader auditing this by reading the thread would conclude the mechanism ran.

                          The dual-carrier rule has no enforcement at all

                          references/contract-review.md states it:

                          PR 与卡双载体同笔挂(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧

                          ensure-pm-labels.shcreates the label object (colour, description) and does nothing else. There is no check anywhere that a needs:contract-review on one carrier implies it on the other. The rule is prose, executed by hand.

                          Measured compliance: 2 of 6

                          Every open pair, 2026-08-31:

                          PRcardPR sidecard side
                          #13870#13576in sync
                          #13834#13651in sync
                          #13829#13578card missing
                          #13857#13608card missing
                          #13864#13657card missing
                          #13910#13476PR missing, record claims both

                          All four gaps were repaired by hand in the same round. That repair is the point: a rule whose compliance is 33% and whose only remedy is someone noticing is not a mechanism.

                          Why this is p1 and #13914 is p2

                          The two failure directions are not symmetric.

                          • Card side missing (3 cases) is a visibility failure. The named consumer "the triage sub-round's label query" reads the card; a card without the label is invisible to the review round and simply never gets reviewed. The PR still carries the label, so nothing enqueues.
                          • PR side missing (1 case) is a fail-open. It is the carrier the enqueue gate reads, and on fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 it was the only limb left — the other two were independently silent. Nothing was holding the door.

                          ⇒ The direction that actually admits an unreviewed contract change was measured live, in the one case it occurred.

                          Another rule already depends on this label being truthful

                          references/contract-review.md:

                          重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂

                          This recovery procedure reads "label absent" as probably cleared. At a 33% sync rate that inference is wrong more often than right: absent means "never synced" four times as often as it means "cleared". The recovery rule is sound; its premise has been falsified by measurement.

                          Remedies — not chosen here, ⛔ this card does not rule

                          1. Make the sync mechanical. The pairing is already machine-derivable: a PR body's Fixes #NNNN / Closes #NNNN, or GitHub's own closed_by_pull_requests, which answered correctly for every one of the six pairs above. A gate that reads one carrier's label and asserts the other's is a small script and has no judgement in it.
                          2. Collapse to one carrier. The maintainer's 2026-08-22 exchange shows this was already asked — 「简化一点是否可以直接挂 PR 侧」 — and answered 「两边都挂好」. ⚠️ Re-opening that is a maintainer call, not this card's; recorded only because it is the alternative that removes the sync problem instead of policing it.
                          3. Close the ② limb too.The Clause-②: yes | no machine spelling is missing from the claim comment on 2 of 3 measured cards — the enqueue gate's predicate reads it there, and it is not there #13914 is that half. ⚠️ Fixing ② alone would not have caught fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 — its claim comment has no clause-② line in any spelling — and fixing ③ alone would. They are independent; neither subsumes the other.

                          ⛔ What this card should not become: a one-off repair of the four gaps. Those are already repaired. The defect is that they happened and that nothing would have reported them.

                          Refs

                          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

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              The clause-② gate has three limbs and all three were silent on PR #13910 at once — the dual-carrier label rule has no enforcement, and 4 of 6 measured pairs are out of sync #13922

                              Description

                              @os-warren

                              Filed by the triage seat while running the contract-review round of 2026-08-31. Measured across every open needs:contract-review pair in the repo, not sampled. Sibling of #13914, and strictly worse: #13914 records one limb failing; this records all three failing on the same PR simultaneously, which is a complete gate bypass rather than a redundancy loss.

                              The gate has three limbs

                              Per scripts/pm/ensure-pm-labels.sh, in its own words:

                              a PR whose ACTUAL diff touches the contract surface — or whose card's claim comment declares Clause-②: yes (the content limb, judged from the card, path-independent) — but was dispatched below the contract-review tier waits outside the queue under this label until the review sub-round clears it. Named consumers: the enqueue gate and the triage sub-round's label query.

                              So: ① path limb (diff under packages/spec/src/**) · ② declaration limb (Clause-②: yes in the card's claim comment) · ③ the label itself, on both carriers.

                              PR #13910 — all three silent, on a PR whose own author declared Clause-②: yes

                              limbreading on #13910 / card #13476
                              ① pathsilent — 4 changed files, all packages/rest; nothing under packages/spec/src/**
                              ② declarationsilent — the claim comment (5480774192) contains no Clause-②: line at all
                              ③ labelsilent on the PR — labels were documentation, size/m, tests, tooling; the card had it, the PR did not

                              And the PR body declares, verbatim:

                              Clause ②: yes

                              … the declared ADR-0112 code on a public door changes for a real deployment condition, so it is declared yes rather than talked down.

                              ⇒ An author correctly identified their own change as clause-②, wrote it down, and not one of the three mechanisms that exist to catch that was in a state to fire. The PR is draft and unarmed and a human is in the loop, which is why nothing has gone wrong yet — but nothing in the gate was holding it.

                              ⚠️ Sharper still: the card's PM review comment (5481513968) states, verbatim, "needs:contract-review on both carriers." The label was on one. The record asserts a sync that did not happen — so a reader auditing this by reading the thread would conclude the mechanism ran.

                              The dual-carrier rule has no enforcement at all

                              references/contract-review.md states it:

                              PR 与卡双载体同笔挂(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧

                              ensure-pm-labels.shcreates the label object (colour, description) and does nothing else. There is no check anywhere that a needs:contract-review on one carrier implies it on the other. The rule is prose, executed by hand.

                              Measured compliance: 2 of 6

                              Every open pair, 2026-08-31:

                              PRcardPR sidecard side
                              #13870#13576in sync
                              #13834#13651in sync
                              #13829#13578card missing
                              #13857#13608card missing
                              #13864#13657card missing
                              #13910#13476PR missing, record claims both

                              All four gaps were repaired by hand in the same round. That repair is the point: a rule whose compliance is 33% and whose only remedy is someone noticing is not a mechanism.

                              Why this is p1 and #13914 is p2

                              The two failure directions are not symmetric.

                              • Card side missing (3 cases) is a visibility failure. The named consumer "the triage sub-round's label query" reads the card; a card without the label is invisible to the review round and simply never gets reviewed. The PR still carries the label, so nothing enqueues.
                              • PR side missing (1 case) is a fail-open. It is the carrier the enqueue gate reads, and on fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 it was the only limb left — the other two were independently silent. Nothing was holding the door.

                              ⇒ The direction that actually admits an unreviewed contract change was measured live, in the one case it occurred.

                              Another rule already depends on this label being truthful

                              references/contract-review.md:

                              重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂

                              This recovery procedure reads "label absent" as probably cleared. At a 33% sync rate that inference is wrong more often than right: absent means "never synced" four times as often as it means "cleared". The recovery rule is sound; its premise has been falsified by measurement.

                              Remedies — not chosen here, ⛔ this card does not rule

                              1. Make the sync mechanical. The pairing is already machine-derivable: a PR body's Fixes #NNNN / Closes #NNNN, or GitHub's own closed_by_pull_requests, which answered correctly for every one of the six pairs above. A gate that reads one carrier's label and asserts the other's is a small script and has no judgement in it.
                              2. Collapse to one carrier. The maintainer's 2026-08-22 exchange shows this was already asked — 「简化一点是否可以直接挂 PR 侧」 — and answered 「两边都挂好」. ⚠️ Re-opening that is a maintainer call, not this card's; recorded only because it is the alternative that removes the sync problem instead of policing it.
                              3. Close the ② limb too.The Clause-②: yes | no machine spelling is missing from the claim comment on 2 of 3 measured cards — the enqueue gate's predicate reads it there, and it is not there #13914 is that half. ⚠️ Fixing ② alone would not have caught fix(rest): a data engine that cannot be RESOLVED no longer answers 403 FORBIDDEN (#13476) #13910 — its claim comment has no clause-② line in any spelling — and fixing ③ alone would. They are independent; neither subsumes the other.

                              ⛔ What this card should not become: a one-off repair of the four gaps. Those are already repaired. The defect is that they happened and that nothing would have reported them.

                              Refs

                              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