Handover for the next domain:ui execution-seat PM — measured traps, open state, and two rulings you may want to overturn #7089

Description

@os-sam

Written at the end of a domain:ui dispatch shift (session session_013hfmP9hoMd3dJwTh85J4yB, 2026-08-31). Ordered by "what will burn you", not by topic. Everything here is measured on this repo today unless marked otherwise.

1. Things that will actively mislead you

The pm:blockedpm:queue unlock scan is not the real instrument. Its own comment says so: check-half-states.mjs (H19's implementation) is not installed in this repo, so the unlock is triage recomputing the same criterion by API. Both cards it unlocked for me this shift had moved substantially since filing:

Read the type and the code, not the card. A card body is a snapshot of a tree that has since moved.

The zero-quota payload channel drops comments. Measured: reading #6521 returned 2 of 3 comments and the one it dropped was the newest — the PM's own dispatch order. It also showed assignees: [] where REST showed the card assigned. Independently reproduced in a second repo (objectstack#13373). ⇒ Do not assume your dispatch order was seen.

The REST issues-list Link: rel="next" cursor silently truncates102 of 287 open issues (objectstack#13900). Use &page=N and cross-check your total against open_issues_count.
⭐ The part that matters: a known-hit control cannot detect this class. A truncated corpus still returns your known hit. Only a count cross-check does. I made exactly this mistake — ran a control, proved the channel discriminates, and wrote it up as though I had proved the corpus complete. Those are different claims.

2. Merge-queue mechanics

  • Confirm enqueue by prefix match on refs/heads/gh-readonly-queue/main/pr-<n>-*, never from the API return (the return is uninformative).
  • But ref-absent is NOT evidence of not-enqueued. Propagation lag measured 29s / 31s / 29s on three occasions — and then 7.5–14 minutes on a fourth. Prefix match confirms positives only. Confirm a negative only by the queue demonstrably moving past the entry, or by reading the PR's merge-queue state via API. I nearly re-armed a PR that was already queued; not doing so was the single most useful restraint of the shift.
  • Ejection vs merge: a front merge moves main; an ejection rebuilds every entry with a new sha. Happened twice today (once freezing main ~80 minutes).
  • Never publish a queue-build sha as a stable prediction handle. I published one for fix(app-shell,plugin-list,plugin-view): no invented calendar field names, so the refusal screen becomes reachable #7062; a rebuild 20 minutes later made it permanently unfalsifiable. Treat every queue sha as rebuild-fragile and say so when you quote it.
  • Prediction judge:git merge-base --is-ancestor <QUEUE-BUILD sha> origin/main — never a branch head. Squash merges mean branch heads never become ancestors.
  • Conflict pre-check before arming:git merge-tree --write-tree --name-only origin/main <head>; exit 0 = clean. This caught a real conflict earlier in the week that would otherwise have landed in the queue.
  • Queue state, main, branch heads, PR diffs and file contents are all readable over git at ZERO API quota. When the API rate-limits (it did, for ~30 minutes today), you can still read everything and only writes are blocked. Use it.

3. Repo rules that are mechanically enforced

4. Open state you inherit

Awaiting a human#7066#6881's ruling prescribes 走复审链 (needs:contract-review). Green and unarmed on purpose.
Awaiting maintainer ruling#6172 · #4795 · #7023 · #6771 · #4895
Genuinely blocked#6709 — waits on a @objectstack/specpublish that does not exist. The source landed on objectstack main (8c6a7fc0b) but packages/spec/package.json there still reads 17.2.0. Restart-when: is keyed to the publish, not the source landing.
Filed this shift, queued, undispatched#7070 · #7071 · #7072 · #7075 · #7077 · #7080 · #7081 · #7082
Check before dispatching#7072#6810 (a catalog sweep) was never checked as a possible absorber. #6902/#6933 are fold-only, awaiting a carrier.

#7081 is not a docs nit.zod-mirror-parity.test.ts asserts one direction only (the mirror accepts everything TS declares), so a mirror wider than the declaration is invisible to it. It is graded priority:p2 for that reason: the docs rows are consequences, the blind gate is the cause.

5. Two rulings of mine you may want to overturn

① A maintainer ruling discharges the human floor — but only the floor its own text names. I extended #6881's 条款② clause (「PR 建立时挂 needs:contract-review 走复审链」) to #5934, whose ruling instead says 「已发布类型成员的 breaking 删除属人工地板,本裁定即该地板动作的记录」 — the floor is discharged by the ruling itself, with no review-chain clause anywhere in it. I held PR #7065 for a gate that was never prescribed. Read each ruling literally; do not generalise a clause across cards.

assignees is PM-written; devs post claim comments only. All agents share one GitHub identity, so the assignee field cannot prove a claim. A claim is assign plus a claim comment carrying a session ID and branch — and you must re-read the comments before writing code, because an earlier claim with a different session ID means it is taken whatever the assignee says.

6. ⭐ The one pattern worth carrying forward

Every substantive defect this shift was the same shape: a one-directional check.

And it applies to the PM seat itself. I was corrected six times this shift — the patch instruction twice, a type I read as boolean that is boolean | string, a fixture count short by 24 occurrences, a hold placed on a card whose ruling forbade it, and a census whose pathspec returned zero for every query including a literal I knew was present (caught only because I ran a control that also returned zero).

The root of all six is the same: treating "I read a result" as "I measured". My dispatch orders required devs to verify the card's premises. They did not require verifying mine. ⇒ Put your own readings in the premise-verification gate, and tell devs that a clean stop on a falsified PM premise is a full success. Four of five orders this shift came back with a premise corrected, and every one of those corrections improved the result.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p1

    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)) { // Add copy buttons to all
       blocks
      (function() {
      function addCopyButtons() {
      document.querySelectorAll('pre code').forEach(function(codeBlock) {
      if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
      codeBlock.parentElement.setAttribute('data-copy-added', 'true');
      var btn = document.createElement('button');
      btn.textContent = 'Copy';
      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;';
      btn.onmouseover = function() { this.style.opacity = '1'; };
      btn.onmouseout = function() { this.style.opacity = '0.7'; };
      btn.onclick = function() {
      navigator.clipboard.writeText(codeBlock.textContent).then(function() {
      btn.textContent = 'Copied!';
      setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
      });
      };
      codeBlock.parentElement.style.position = 'relative';
      codeBlock.parentElement.appendChild(btn);
      });
      }
      addCopyButtons();
      // Re-run on dynamic content
      var observer = new MutationObserver(addCopyButtons);
      observer.observe(document.body, { childList: true, subtree: true });
      })();
      }
      } 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

      Handover for the next domain:ui execution-seat PM — measured traps, open state, and two rulings you may want to overturn #7089

      Description

      @os-sam

      Written at the end of a domain:ui dispatch shift (session session_013hfmP9hoMd3dJwTh85J4yB, 2026-08-31). Ordered by "what will burn you", not by topic. Everything here is measured on this repo today unless marked otherwise.

      1. Things that will actively mislead you

      The pm:blockedpm:queue unlock scan is not the real instrument. Its own comment says so: check-half-states.mjs (H19's implementation) is not installed in this repo, so the unlock is triage recomputing the same criterion by API. Both cards it unlocked for me this shift had moved substantially since filing:

      Read the type and the code, not the card. A card body is a snapshot of a tree that has since moved.

      The zero-quota payload channel drops comments. Measured: reading #6521 returned 2 of 3 comments and the one it dropped was the newest — the PM's own dispatch order. It also showed assignees: [] where REST showed the card assigned. Independently reproduced in a second repo (objectstack#13373). ⇒ Do not assume your dispatch order was seen.

      The REST issues-list Link: rel="next" cursor silently truncates102 of 287 open issues (objectstack#13900). Use &page=N and cross-check your total against open_issues_count.
      ⭐ The part that matters: a known-hit control cannot detect this class. A truncated corpus still returns your known hit. Only a count cross-check does. I made exactly this mistake — ran a control, proved the channel discriminates, and wrote it up as though I had proved the corpus complete. Those are different claims.

      2. Merge-queue mechanics

      • Confirm enqueue by prefix match on refs/heads/gh-readonly-queue/main/pr-<n>-*, never from the API return (the return is uninformative).
      • But ref-absent is NOT evidence of not-enqueued. Propagation lag measured 29s / 31s / 29s on three occasions — and then 7.5–14 minutes on a fourth. Prefix match confirms positives only. Confirm a negative only by the queue demonstrably moving past the entry, or by reading the PR's merge-queue state via API. I nearly re-armed a PR that was already queued; not doing so was the single most useful restraint of the shift.
      • Ejection vs merge: a front merge moves main; an ejection rebuilds every entry with a new sha. Happened twice today (once freezing main ~80 minutes).
      • Never publish a queue-build sha as a stable prediction handle. I published one for fix(app-shell,plugin-list,plugin-view): no invented calendar field names, so the refusal screen becomes reachable #7062; a rebuild 20 minutes later made it permanently unfalsifiable. Treat every queue sha as rebuild-fragile and say so when you quote it.
      • Prediction judge:git merge-base --is-ancestor <QUEUE-BUILD sha> origin/main — never a branch head. Squash merges mean branch heads never become ancestors.
      • Conflict pre-check before arming:git merge-tree --write-tree --name-only origin/main <head>; exit 0 = clean. This caught a real conflict earlier in the week that would otherwise have landed in the queue.
      • Queue state, main, branch heads, PR diffs and file contents are all readable over git at ZERO API quota. When the API rate-limits (it did, for ~30 minutes today), you can still read everything and only writes are blocked. Use it.

      3. Repo rules that are mechanically enforced

      4. Open state you inherit

      Awaiting a human#7066#6881's ruling prescribes 走复审链 (needs:contract-review). Green and unarmed on purpose.
      Awaiting maintainer ruling#6172 · #4795 · #7023 · #6771 · #4895
      Genuinely blocked#6709 — waits on a @objectstack/specpublish that does not exist. The source landed on objectstack main (8c6a7fc0b) but packages/spec/package.json there still reads 17.2.0. Restart-when: is keyed to the publish, not the source landing.
      Filed this shift, queued, undispatched#7070 · #7071 · #7072 · #7075 · #7077 · #7080 · #7081 · #7082
      Check before dispatching#7072#6810 (a catalog sweep) was never checked as a possible absorber. #6902/#6933 are fold-only, awaiting a carrier.

      #7081 is not a docs nit.zod-mirror-parity.test.ts asserts one direction only (the mirror accepts everything TS declares), so a mirror wider than the declaration is invisible to it. It is graded priority:p2 for that reason: the docs rows are consequences, the blind gate is the cause.

      5. Two rulings of mine you may want to overturn

      ① A maintainer ruling discharges the human floor — but only the floor its own text names. I extended #6881's 条款② clause (「PR 建立时挂 needs:contract-review 走复审链」) to #5934, whose ruling instead says 「已发布类型成员的 breaking 删除属人工地板,本裁定即该地板动作的记录」 — the floor is discharged by the ruling itself, with no review-chain clause anywhere in it. I held PR #7065 for a gate that was never prescribed. Read each ruling literally; do not generalise a clause across cards.

      assignees is PM-written; devs post claim comments only. All agents share one GitHub identity, so the assignee field cannot prove a claim. A claim is assign plus a claim comment carrying a session ID and branch — and you must re-read the comments before writing code, because an earlier claim with a different session ID means it is taken whatever the assignee says.

      6. ⭐ The one pattern worth carrying forward

      Every substantive defect this shift was the same shape: a one-directional check.

      And it applies to the PM seat itself. I was corrected six times this shift — the patch instruction twice, a type I read as boolean that is boolean | string, a fixture count short by 24 occurrences, a hold placed on a card whose ruling forbade it, and a census whose pathspec returned zero for every query including a literal I knew was present (caught only because I ran a control that also returned zero).

      The root of all six is the same: treating "I read a result" as "I measured". My dispatch orders required devs to verify the card's premises. They did not require verifying mine. ⇒ Put your own readings in the premise-verification gate, and tell devs that a clean stop on a falsified PM premise is a full success. Four of five orders this shift came back with a premise corrected, and every one of those corrections improved the result.

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p1

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

          Handover for the next domain:ui execution-seat PM — measured traps, open state, and two rulings you may want to overturn #7089

          Description

          @os-sam

          Written at the end of a domain:ui dispatch shift (session session_013hfmP9hoMd3dJwTh85J4yB, 2026-08-31). Ordered by "what will burn you", not by topic. Everything here is measured on this repo today unless marked otherwise.

          1. Things that will actively mislead you

          The pm:blockedpm:queue unlock scan is not the real instrument. Its own comment says so: check-half-states.mjs (H19's implementation) is not installed in this repo, so the unlock is triage recomputing the same criterion by API. Both cards it unlocked for me this shift had moved substantially since filing:

          Read the type and the code, not the card. A card body is a snapshot of a tree that has since moved.

          The zero-quota payload channel drops comments. Measured: reading #6521 returned 2 of 3 comments and the one it dropped was the newest — the PM's own dispatch order. It also showed assignees: [] where REST showed the card assigned. Independently reproduced in a second repo (objectstack#13373). ⇒ Do not assume your dispatch order was seen.

          The REST issues-list Link: rel="next" cursor silently truncates102 of 287 open issues (objectstack#13900). Use &page=N and cross-check your total against open_issues_count.
          ⭐ The part that matters: a known-hit control cannot detect this class. A truncated corpus still returns your known hit. Only a count cross-check does. I made exactly this mistake — ran a control, proved the channel discriminates, and wrote it up as though I had proved the corpus complete. Those are different claims.

          2. Merge-queue mechanics

          • Confirm enqueue by prefix match on refs/heads/gh-readonly-queue/main/pr-<n>-*, never from the API return (the return is uninformative).
          • But ref-absent is NOT evidence of not-enqueued. Propagation lag measured 29s / 31s / 29s on three occasions — and then 7.5–14 minutes on a fourth. Prefix match confirms positives only. Confirm a negative only by the queue demonstrably moving past the entry, or by reading the PR's merge-queue state via API. I nearly re-armed a PR that was already queued; not doing so was the single most useful restraint of the shift.
          • Ejection vs merge: a front merge moves main; an ejection rebuilds every entry with a new sha. Happened twice today (once freezing main ~80 minutes).
          • Never publish a queue-build sha as a stable prediction handle. I published one for fix(app-shell,plugin-list,plugin-view): no invented calendar field names, so the refusal screen becomes reachable #7062; a rebuild 20 minutes later made it permanently unfalsifiable. Treat every queue sha as rebuild-fragile and say so when you quote it.
          • Prediction judge:git merge-base --is-ancestor <QUEUE-BUILD sha> origin/main — never a branch head. Squash merges mean branch heads never become ancestors.
          • Conflict pre-check before arming:git merge-tree --write-tree --name-only origin/main <head>; exit 0 = clean. This caught a real conflict earlier in the week that would otherwise have landed in the queue.
          • Queue state, main, branch heads, PR diffs and file contents are all readable over git at ZERO API quota. When the API rate-limits (it did, for ~30 minutes today), you can still read everything and only writes are blocked. Use it.

          3. Repo rules that are mechanically enforced

          4. Open state you inherit

          Awaiting a human#7066#6881's ruling prescribes 走复审链 (needs:contract-review). Green and unarmed on purpose.
          Awaiting maintainer ruling#6172 · #4795 · #7023 · #6771 · #4895
          Genuinely blocked#6709 — waits on a @objectstack/specpublish that does not exist. The source landed on objectstack main (8c6a7fc0b) but packages/spec/package.json there still reads 17.2.0. Restart-when: is keyed to the publish, not the source landing.
          Filed this shift, queued, undispatched#7070 · #7071 · #7072 · #7075 · #7077 · #7080 · #7081 · #7082
          Check before dispatching#7072#6810 (a catalog sweep) was never checked as a possible absorber. #6902/#6933 are fold-only, awaiting a carrier.

          #7081 is not a docs nit.zod-mirror-parity.test.ts asserts one direction only (the mirror accepts everything TS declares), so a mirror wider than the declaration is invisible to it. It is graded priority:p2 for that reason: the docs rows are consequences, the blind gate is the cause.

          5. Two rulings of mine you may want to overturn

          ① A maintainer ruling discharges the human floor — but only the floor its own text names. I extended #6881's 条款② clause (「PR 建立时挂 needs:contract-review 走复审链」) to #5934, whose ruling instead says 「已发布类型成员的 breaking 删除属人工地板,本裁定即该地板动作的记录」 — the floor is discharged by the ruling itself, with no review-chain clause anywhere in it. I held PR #7065 for a gate that was never prescribed. Read each ruling literally; do not generalise a clause across cards.

          assignees is PM-written; devs post claim comments only. All agents share one GitHub identity, so the assignee field cannot prove a claim. A claim is assign plus a claim comment carrying a session ID and branch — and you must re-read the comments before writing code, because an earlier claim with a different session ID means it is taken whatever the assignee says.

          6. ⭐ The one pattern worth carrying forward

          Every substantive defect this shift was the same shape: a one-directional check.

          And it applies to the PM seat itself. I was corrected six times this shift — the patch instruction twice, a type I read as boolean that is boolean | string, a fixture count short by 24 occurrences, a hold placed on a card whose ruling forbade it, and a census whose pathspec returned zero for every query including a literal I knew was present (caught only because I ran a control that also returned zero).

          The root of all six is the same: treating "I read a result" as "I measured". My dispatch orders required devs to verify the card's premises. They did not require verifying mine. ⇒ Put your own readings in the premise-verification gate, and tell devs that a clean stop on a falsified PM premise is a full success. Four of five orders this shift came back with a premise corrected, and every one of those corrections improved the result.

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p1

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

              Handover for the next domain:ui execution-seat PM — measured traps, open state, and two rulings you may want to overturn #7089

              Description

              @os-sam

              Written at the end of a domain:ui dispatch shift (session session_013hfmP9hoMd3dJwTh85J4yB, 2026-08-31). Ordered by "what will burn you", not by topic. Everything here is measured on this repo today unless marked otherwise.

              1. Things that will actively mislead you

              The pm:blockedpm:queue unlock scan is not the real instrument. Its own comment says so: check-half-states.mjs (H19's implementation) is not installed in this repo, so the unlock is triage recomputing the same criterion by API. Both cards it unlocked for me this shift had moved substantially since filing:

              Read the type and the code, not the card. A card body is a snapshot of a tree that has since moved.

              The zero-quota payload channel drops comments. Measured: reading #6521 returned 2 of 3 comments and the one it dropped was the newest — the PM's own dispatch order. It also showed assignees: [] where REST showed the card assigned. Independently reproduced in a second repo (objectstack#13373). ⇒ Do not assume your dispatch order was seen.

              The REST issues-list Link: rel="next" cursor silently truncates102 of 287 open issues (objectstack#13900). Use &page=N and cross-check your total against open_issues_count.
              ⭐ The part that matters: a known-hit control cannot detect this class. A truncated corpus still returns your known hit. Only a count cross-check does. I made exactly this mistake — ran a control, proved the channel discriminates, and wrote it up as though I had proved the corpus complete. Those are different claims.

              2. Merge-queue mechanics

              • Confirm enqueue by prefix match on refs/heads/gh-readonly-queue/main/pr-<n>-*, never from the API return (the return is uninformative).
              • But ref-absent is NOT evidence of not-enqueued. Propagation lag measured 29s / 31s / 29s on three occasions — and then 7.5–14 minutes on a fourth. Prefix match confirms positives only. Confirm a negative only by the queue demonstrably moving past the entry, or by reading the PR's merge-queue state via API. I nearly re-armed a PR that was already queued; not doing so was the single most useful restraint of the shift.
              • Ejection vs merge: a front merge moves main; an ejection rebuilds every entry with a new sha. Happened twice today (once freezing main ~80 minutes).
              • Never publish a queue-build sha as a stable prediction handle. I published one for fix(app-shell,plugin-list,plugin-view): no invented calendar field names, so the refusal screen becomes reachable #7062; a rebuild 20 minutes later made it permanently unfalsifiable. Treat every queue sha as rebuild-fragile and say so when you quote it.
              • Prediction judge:git merge-base --is-ancestor <QUEUE-BUILD sha> origin/main — never a branch head. Squash merges mean branch heads never become ancestors.
              • Conflict pre-check before arming:git merge-tree --write-tree --name-only origin/main <head>; exit 0 = clean. This caught a real conflict earlier in the week that would otherwise have landed in the queue.
              • Queue state, main, branch heads, PR diffs and file contents are all readable over git at ZERO API quota. When the API rate-limits (it did, for ~30 minutes today), you can still read everything and only writes are blocked. Use it.

              3. Repo rules that are mechanically enforced

              4. Open state you inherit

              Awaiting a human#7066#6881's ruling prescribes 走复审链 (needs:contract-review). Green and unarmed on purpose.
              Awaiting maintainer ruling#6172 · #4795 · #7023 · #6771 · #4895
              Genuinely blocked#6709 — waits on a @objectstack/specpublish that does not exist. The source landed on objectstack main (8c6a7fc0b) but packages/spec/package.json there still reads 17.2.0. Restart-when: is keyed to the publish, not the source landing.
              Filed this shift, queued, undispatched#7070 · #7071 · #7072 · #7075 · #7077 · #7080 · #7081 · #7082
              Check before dispatching#7072#6810 (a catalog sweep) was never checked as a possible absorber. #6902/#6933 are fold-only, awaiting a carrier.

              #7081 is not a docs nit.zod-mirror-parity.test.ts asserts one direction only (the mirror accepts everything TS declares), so a mirror wider than the declaration is invisible to it. It is graded priority:p2 for that reason: the docs rows are consequences, the blind gate is the cause.

              5. Two rulings of mine you may want to overturn

              ① A maintainer ruling discharges the human floor — but only the floor its own text names. I extended #6881's 条款② clause (「PR 建立时挂 needs:contract-review 走复审链」) to #5934, whose ruling instead says 「已发布类型成员的 breaking 删除属人工地板,本裁定即该地板动作的记录」 — the floor is discharged by the ruling itself, with no review-chain clause anywhere in it. I held PR #7065 for a gate that was never prescribed. Read each ruling literally; do not generalise a clause across cards.

              assignees is PM-written; devs post claim comments only. All agents share one GitHub identity, so the assignee field cannot prove a claim. A claim is assign plus a claim comment carrying a session ID and branch — and you must re-read the comments before writing code, because an earlier claim with a different session ID means it is taken whatever the assignee says.

              6. ⭐ The one pattern worth carrying forward

              Every substantive defect this shift was the same shape: a one-directional check.

              And it applies to the PM seat itself. I was corrected six times this shift — the patch instruction twice, a type I read as boolean that is boolean | string, a fixture count short by 24 occurrences, a hold placed on a card whose ruling forbade it, and a census whose pathspec returned zero for every query including a literal I knew was present (caught only because I ran a control that also returned zero).

              The root of all six is the same: treating "I read a result" as "I measured". My dispatch orders required devs to verify the card's premises. They did not require verifying mine. ⇒ Put your own readings in the premise-verification gate, and tell devs that a clean stop on a falsified PM premise is a full success. Four of five orders this shift came back with a premise corrected, and every one of those corrections improved the result.

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p1

                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)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } 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

                  Handover for the next domain:ui execution-seat PM — measured traps, open state, and two rulings you may want to overturn #7089

                  Description

                  @os-sam

                  Written at the end of a domain:ui dispatch shift (session session_013hfmP9hoMd3dJwTh85J4yB, 2026-08-31). Ordered by "what will burn you", not by topic. Everything here is measured on this repo today unless marked otherwise.

                  1. Things that will actively mislead you

                  The pm:blockedpm:queue unlock scan is not the real instrument. Its own comment says so: check-half-states.mjs (H19's implementation) is not installed in this repo, so the unlock is triage recomputing the same criterion by API. Both cards it unlocked for me this shift had moved substantially since filing:

                  Read the type and the code, not the card. A card body is a snapshot of a tree that has since moved.

                  The zero-quota payload channel drops comments. Measured: reading #6521 returned 2 of 3 comments and the one it dropped was the newest — the PM's own dispatch order. It also showed assignees: [] where REST showed the card assigned. Independently reproduced in a second repo (objectstack#13373). ⇒ Do not assume your dispatch order was seen.

                  The REST issues-list Link: rel="next" cursor silently truncates102 of 287 open issues (objectstack#13900). Use &page=N and cross-check your total against open_issues_count.
                  ⭐ The part that matters: a known-hit control cannot detect this class. A truncated corpus still returns your known hit. Only a count cross-check does. I made exactly this mistake — ran a control, proved the channel discriminates, and wrote it up as though I had proved the corpus complete. Those are different claims.

                  2. Merge-queue mechanics

                  • Confirm enqueue by prefix match on refs/heads/gh-readonly-queue/main/pr-<n>-*, never from the API return (the return is uninformative).
                  • But ref-absent is NOT evidence of not-enqueued. Propagation lag measured 29s / 31s / 29s on three occasions — and then 7.5–14 minutes on a fourth. Prefix match confirms positives only. Confirm a negative only by the queue demonstrably moving past the entry, or by reading the PR's merge-queue state via API. I nearly re-armed a PR that was already queued; not doing so was the single most useful restraint of the shift.
                  • Ejection vs merge: a front merge moves main; an ejection rebuilds every entry with a new sha. Happened twice today (once freezing main ~80 minutes).
                  • Never publish a queue-build sha as a stable prediction handle. I published one for fix(app-shell,plugin-list,plugin-view): no invented calendar field names, so the refusal screen becomes reachable #7062; a rebuild 20 minutes later made it permanently unfalsifiable. Treat every queue sha as rebuild-fragile and say so when you quote it.
                  • Prediction judge:git merge-base --is-ancestor <QUEUE-BUILD sha> origin/main — never a branch head. Squash merges mean branch heads never become ancestors.
                  • Conflict pre-check before arming:git merge-tree --write-tree --name-only origin/main <head>; exit 0 = clean. This caught a real conflict earlier in the week that would otherwise have landed in the queue.
                  • Queue state, main, branch heads, PR diffs and file contents are all readable over git at ZERO API quota. When the API rate-limits (it did, for ~30 minutes today), you can still read everything and only writes are blocked. Use it.

                  3. Repo rules that are mechanically enforced

                  4. Open state you inherit

                  Awaiting a human#7066#6881's ruling prescribes 走复审链 (needs:contract-review). Green and unarmed on purpose.
                  Awaiting maintainer ruling#6172 · #4795 · #7023 · #6771 · #4895
                  Genuinely blocked#6709 — waits on a @objectstack/specpublish that does not exist. The source landed on objectstack main (8c6a7fc0b) but packages/spec/package.json there still reads 17.2.0. Restart-when: is keyed to the publish, not the source landing.
                  Filed this shift, queued, undispatched#7070 · #7071 · #7072 · #7075 · #7077 · #7080 · #7081 · #7082
                  Check before dispatching#7072#6810 (a catalog sweep) was never checked as a possible absorber. #6902/#6933 are fold-only, awaiting a carrier.

                  #7081 is not a docs nit.zod-mirror-parity.test.ts asserts one direction only (the mirror accepts everything TS declares), so a mirror wider than the declaration is invisible to it. It is graded priority:p2 for that reason: the docs rows are consequences, the blind gate is the cause.

                  5. Two rulings of mine you may want to overturn

                  ① A maintainer ruling discharges the human floor — but only the floor its own text names. I extended #6881's 条款② clause (「PR 建立时挂 needs:contract-review 走复审链」) to #5934, whose ruling instead says 「已发布类型成员的 breaking 删除属人工地板,本裁定即该地板动作的记录」 — the floor is discharged by the ruling itself, with no review-chain clause anywhere in it. I held PR #7065 for a gate that was never prescribed. Read each ruling literally; do not generalise a clause across cards.

                  assignees is PM-written; devs post claim comments only. All agents share one GitHub identity, so the assignee field cannot prove a claim. A claim is assign plus a claim comment carrying a session ID and branch — and you must re-read the comments before writing code, because an earlier claim with a different session ID means it is taken whatever the assignee says.

                  6. ⭐ The one pattern worth carrying forward

                  Every substantive defect this shift was the same shape: a one-directional check.

                  And it applies to the PM seat itself. I was corrected six times this shift — the patch instruction twice, a type I read as boolean that is boolean | string, a fixture count short by 24 occurrences, a hold placed on a card whose ruling forbade it, and a census whose pathspec returned zero for every query including a literal I knew was present (caught only because I ran a control that also returned zero).

                  The root of all six is the same: treating "I read a result" as "I measured". My dispatch orders required devs to verify the card's premises. They did not require verifying mine. ⇒ Put your own readings in the premise-verification gate, and tell devs that a clean stop on a falsified PM premise is a full success. Four of five orders this shift came back with a premise corrected, and every one of those corrections improved the result.

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p1

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

                      Handover for the next domain:ui execution-seat PM — measured traps, open state, and two rulings you may want to overturn #7089

                      Description

                      @os-sam

                      Written at the end of a domain:ui dispatch shift (session session_013hfmP9hoMd3dJwTh85J4yB, 2026-08-31). Ordered by "what will burn you", not by topic. Everything here is measured on this repo today unless marked otherwise.

                      1. Things that will actively mislead you

                      The pm:blockedpm:queue unlock scan is not the real instrument. Its own comment says so: check-half-states.mjs (H19's implementation) is not installed in this repo, so the unlock is triage recomputing the same criterion by API. Both cards it unlocked for me this shift had moved substantially since filing:

                      Read the type and the code, not the card. A card body is a snapshot of a tree that has since moved.

                      The zero-quota payload channel drops comments. Measured: reading #6521 returned 2 of 3 comments and the one it dropped was the newest — the PM's own dispatch order. It also showed assignees: [] where REST showed the card assigned. Independently reproduced in a second repo (objectstack#13373). ⇒ Do not assume your dispatch order was seen.

                      The REST issues-list Link: rel="next" cursor silently truncates102 of 287 open issues (objectstack#13900). Use &page=N and cross-check your total against open_issues_count.
                      ⭐ The part that matters: a known-hit control cannot detect this class. A truncated corpus still returns your known hit. Only a count cross-check does. I made exactly this mistake — ran a control, proved the channel discriminates, and wrote it up as though I had proved the corpus complete. Those are different claims.

                      2. Merge-queue mechanics

                      • Confirm enqueue by prefix match on refs/heads/gh-readonly-queue/main/pr-<n>-*, never from the API return (the return is uninformative).
                      • But ref-absent is NOT evidence of not-enqueued. Propagation lag measured 29s / 31s / 29s on three occasions — and then 7.5–14 minutes on a fourth. Prefix match confirms positives only. Confirm a negative only by the queue demonstrably moving past the entry, or by reading the PR's merge-queue state via API. I nearly re-armed a PR that was already queued; not doing so was the single most useful restraint of the shift.
                      • Ejection vs merge: a front merge moves main; an ejection rebuilds every entry with a new sha. Happened twice today (once freezing main ~80 minutes).
                      • Never publish a queue-build sha as a stable prediction handle. I published one for fix(app-shell,plugin-list,plugin-view): no invented calendar field names, so the refusal screen becomes reachable #7062; a rebuild 20 minutes later made it permanently unfalsifiable. Treat every queue sha as rebuild-fragile and say so when you quote it.
                      • Prediction judge:git merge-base --is-ancestor <QUEUE-BUILD sha> origin/main — never a branch head. Squash merges mean branch heads never become ancestors.
                      • Conflict pre-check before arming:git merge-tree --write-tree --name-only origin/main <head>; exit 0 = clean. This caught a real conflict earlier in the week that would otherwise have landed in the queue.
                      • Queue state, main, branch heads, PR diffs and file contents are all readable over git at ZERO API quota. When the API rate-limits (it did, for ~30 minutes today), you can still read everything and only writes are blocked. Use it.

                      3. Repo rules that are mechanically enforced

                      4. Open state you inherit

                      Awaiting a human#7066#6881's ruling prescribes 走复审链 (needs:contract-review). Green and unarmed on purpose.
                      Awaiting maintainer ruling#6172 · #4795 · #7023 · #6771 · #4895
                      Genuinely blocked#6709 — waits on a @objectstack/specpublish that does not exist. The source landed on objectstack main (8c6a7fc0b) but packages/spec/package.json there still reads 17.2.0. Restart-when: is keyed to the publish, not the source landing.
                      Filed this shift, queued, undispatched#7070 · #7071 · #7072 · #7075 · #7077 · #7080 · #7081 · #7082
                      Check before dispatching#7072#6810 (a catalog sweep) was never checked as a possible absorber. #6902/#6933 are fold-only, awaiting a carrier.

                      #7081 is not a docs nit.zod-mirror-parity.test.ts asserts one direction only (the mirror accepts everything TS declares), so a mirror wider than the declaration is invisible to it. It is graded priority:p2 for that reason: the docs rows are consequences, the blind gate is the cause.

                      5. Two rulings of mine you may want to overturn

                      ① A maintainer ruling discharges the human floor — but only the floor its own text names. I extended #6881's 条款② clause (「PR 建立时挂 needs:contract-review 走复审链」) to #5934, whose ruling instead says 「已发布类型成员的 breaking 删除属人工地板,本裁定即该地板动作的记录」 — the floor is discharged by the ruling itself, with no review-chain clause anywhere in it. I held PR #7065 for a gate that was never prescribed. Read each ruling literally; do not generalise a clause across cards.

                      assignees is PM-written; devs post claim comments only. All agents share one GitHub identity, so the assignee field cannot prove a claim. A claim is assign plus a claim comment carrying a session ID and branch — and you must re-read the comments before writing code, because an earlier claim with a different session ID means it is taken whatever the assignee says.

                      6. ⭐ The one pattern worth carrying forward

                      Every substantive defect this shift was the same shape: a one-directional check.

                      And it applies to the PM seat itself. I was corrected six times this shift — the patch instruction twice, a type I read as boolean that is boolean | string, a fixture count short by 24 occurrences, a hold placed on a card whose ruling forbade it, and a census whose pathspec returned zero for every query including a literal I knew was present (caught only because I ran a control that also returned zero).

                      The root of all six is the same: treating "I read a result" as "I measured". My dispatch orders required devs to verify the card's premises. They did not require verifying mine. ⇒ Put your own readings in the premise-verification gate, and tell devs that a clean stop on a falsified PM premise is a full success. Four of five orders this shift came back with a premise corrected, and every one of those corrections improved the result.

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p1

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

                          Handover for the next domain:ui execution-seat PM — measured traps, open state, and two rulings you may want to overturn #7089

                          Description

                          @os-sam

                          Written at the end of a domain:ui dispatch shift (session session_013hfmP9hoMd3dJwTh85J4yB, 2026-08-31). Ordered by "what will burn you", not by topic. Everything here is measured on this repo today unless marked otherwise.

                          1. Things that will actively mislead you

                          The pm:blockedpm:queue unlock scan is not the real instrument. Its own comment says so: check-half-states.mjs (H19's implementation) is not installed in this repo, so the unlock is triage recomputing the same criterion by API. Both cards it unlocked for me this shift had moved substantially since filing:

                          Read the type and the code, not the card. A card body is a snapshot of a tree that has since moved.

                          The zero-quota payload channel drops comments. Measured: reading #6521 returned 2 of 3 comments and the one it dropped was the newest — the PM's own dispatch order. It also showed assignees: [] where REST showed the card assigned. Independently reproduced in a second repo (objectstack#13373). ⇒ Do not assume your dispatch order was seen.

                          The REST issues-list Link: rel="next" cursor silently truncates102 of 287 open issues (objectstack#13900). Use &page=N and cross-check your total against open_issues_count.
                          ⭐ The part that matters: a known-hit control cannot detect this class. A truncated corpus still returns your known hit. Only a count cross-check does. I made exactly this mistake — ran a control, proved the channel discriminates, and wrote it up as though I had proved the corpus complete. Those are different claims.

                          2. Merge-queue mechanics

                          • Confirm enqueue by prefix match on refs/heads/gh-readonly-queue/main/pr-<n>-*, never from the API return (the return is uninformative).
                          • But ref-absent is NOT evidence of not-enqueued. Propagation lag measured 29s / 31s / 29s on three occasions — and then 7.5–14 minutes on a fourth. Prefix match confirms positives only. Confirm a negative only by the queue demonstrably moving past the entry, or by reading the PR's merge-queue state via API. I nearly re-armed a PR that was already queued; not doing so was the single most useful restraint of the shift.
                          • Ejection vs merge: a front merge moves main; an ejection rebuilds every entry with a new sha. Happened twice today (once freezing main ~80 minutes).
                          • Never publish a queue-build sha as a stable prediction handle. I published one for fix(app-shell,plugin-list,plugin-view): no invented calendar field names, so the refusal screen becomes reachable #7062; a rebuild 20 minutes later made it permanently unfalsifiable. Treat every queue sha as rebuild-fragile and say so when you quote it.
                          • Prediction judge:git merge-base --is-ancestor <QUEUE-BUILD sha> origin/main — never a branch head. Squash merges mean branch heads never become ancestors.
                          • Conflict pre-check before arming:git merge-tree --write-tree --name-only origin/main <head>; exit 0 = clean. This caught a real conflict earlier in the week that would otherwise have landed in the queue.
                          • Queue state, main, branch heads, PR diffs and file contents are all readable over git at ZERO API quota. When the API rate-limits (it did, for ~30 minutes today), you can still read everything and only writes are blocked. Use it.

                          3. Repo rules that are mechanically enforced

                          4. Open state you inherit

                          Awaiting a human#7066#6881's ruling prescribes 走复审链 (needs:contract-review). Green and unarmed on purpose.
                          Awaiting maintainer ruling#6172 · #4795 · #7023 · #6771 · #4895
                          Genuinely blocked#6709 — waits on a @objectstack/specpublish that does not exist. The source landed on objectstack main (8c6a7fc0b) but packages/spec/package.json there still reads 17.2.0. Restart-when: is keyed to the publish, not the source landing.
                          Filed this shift, queued, undispatched#7070 · #7071 · #7072 · #7075 · #7077 · #7080 · #7081 · #7082
                          Check before dispatching#7072#6810 (a catalog sweep) was never checked as a possible absorber. #6902/#6933 are fold-only, awaiting a carrier.

                          #7081 is not a docs nit.zod-mirror-parity.test.ts asserts one direction only (the mirror accepts everything TS declares), so a mirror wider than the declaration is invisible to it. It is graded priority:p2 for that reason: the docs rows are consequences, the blind gate is the cause.

                          5. Two rulings of mine you may want to overturn

                          ① A maintainer ruling discharges the human floor — but only the floor its own text names. I extended #6881's 条款② clause (「PR 建立时挂 needs:contract-review 走复审链」) to #5934, whose ruling instead says 「已发布类型成员的 breaking 删除属人工地板,本裁定即该地板动作的记录」 — the floor is discharged by the ruling itself, with no review-chain clause anywhere in it. I held PR #7065 for a gate that was never prescribed. Read each ruling literally; do not generalise a clause across cards.

                          assignees is PM-written; devs post claim comments only. All agents share one GitHub identity, so the assignee field cannot prove a claim. A claim is assign plus a claim comment carrying a session ID and branch — and you must re-read the comments before writing code, because an earlier claim with a different session ID means it is taken whatever the assignee says.

                          6. ⭐ The one pattern worth carrying forward

                          Every substantive defect this shift was the same shape: a one-directional check.

                          And it applies to the PM seat itself. I was corrected six times this shift — the patch instruction twice, a type I read as boolean that is boolean | string, a fixture count short by 24 occurrences, a hold placed on a card whose ruling forbade it, and a census whose pathspec returned zero for every query including a literal I knew was present (caught only because I ran a control that also returned zero).

                          The root of all six is the same: treating "I read a result" as "I measured". My dispatch orders required devs to verify the card's premises. They did not require verifying mine. ⇒ Put your own readings in the premise-verification gate, and tell devs that a clean stop on a falsified PM premise is a full success. Four of five orders this shift came back with a premise corrected, and every one of those corrections improved the result.

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p1

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

                              Handover for the next domain:ui execution-seat PM — measured traps, open state, and two rulings you may want to overturn #7089

                              Description

                              @os-sam

                              Written at the end of a domain:ui dispatch shift (session session_013hfmP9hoMd3dJwTh85J4yB, 2026-08-31). Ordered by "what will burn you", not by topic. Everything here is measured on this repo today unless marked otherwise.

                              1. Things that will actively mislead you

                              The pm:blockedpm:queue unlock scan is not the real instrument. Its own comment says so: check-half-states.mjs (H19's implementation) is not installed in this repo, so the unlock is triage recomputing the same criterion by API. Both cards it unlocked for me this shift had moved substantially since filing:

                              Read the type and the code, not the card. A card body is a snapshot of a tree that has since moved.

                              The zero-quota payload channel drops comments. Measured: reading #6521 returned 2 of 3 comments and the one it dropped was the newest — the PM's own dispatch order. It also showed assignees: [] where REST showed the card assigned. Independently reproduced in a second repo (objectstack#13373). ⇒ Do not assume your dispatch order was seen.

                              The REST issues-list Link: rel="next" cursor silently truncates102 of 287 open issues (objectstack#13900). Use &page=N and cross-check your total against open_issues_count.
                              ⭐ The part that matters: a known-hit control cannot detect this class. A truncated corpus still returns your known hit. Only a count cross-check does. I made exactly this mistake — ran a control, proved the channel discriminates, and wrote it up as though I had proved the corpus complete. Those are different claims.

                              2. Merge-queue mechanics

                              • Confirm enqueue by prefix match on refs/heads/gh-readonly-queue/main/pr-<n>-*, never from the API return (the return is uninformative).
                              • But ref-absent is NOT evidence of not-enqueued. Propagation lag measured 29s / 31s / 29s on three occasions — and then 7.5–14 minutes on a fourth. Prefix match confirms positives only. Confirm a negative only by the queue demonstrably moving past the entry, or by reading the PR's merge-queue state via API. I nearly re-armed a PR that was already queued; not doing so was the single most useful restraint of the shift.
                              • Ejection vs merge: a front merge moves main; an ejection rebuilds every entry with a new sha. Happened twice today (once freezing main ~80 minutes).
                              • Never publish a queue-build sha as a stable prediction handle. I published one for fix(app-shell,plugin-list,plugin-view): no invented calendar field names, so the refusal screen becomes reachable #7062; a rebuild 20 minutes later made it permanently unfalsifiable. Treat every queue sha as rebuild-fragile and say so when you quote it.
                              • Prediction judge:git merge-base --is-ancestor <QUEUE-BUILD sha> origin/main — never a branch head. Squash merges mean branch heads never become ancestors.
                              • Conflict pre-check before arming:git merge-tree --write-tree --name-only origin/main <head>; exit 0 = clean. This caught a real conflict earlier in the week that would otherwise have landed in the queue.
                              • Queue state, main, branch heads, PR diffs and file contents are all readable over git at ZERO API quota. When the API rate-limits (it did, for ~30 minutes today), you can still read everything and only writes are blocked. Use it.

                              3. Repo rules that are mechanically enforced

                              4. Open state you inherit

                              Awaiting a human#7066#6881's ruling prescribes 走复审链 (needs:contract-review). Green and unarmed on purpose.
                              Awaiting maintainer ruling#6172 · #4795 · #7023 · #6771 · #4895
                              Genuinely blocked#6709 — waits on a @objectstack/specpublish that does not exist. The source landed on objectstack main (8c6a7fc0b) but packages/spec/package.json there still reads 17.2.0. Restart-when: is keyed to the publish, not the source landing.
                              Filed this shift, queued, undispatched#7070 · #7071 · #7072 · #7075 · #7077 · #7080 · #7081 · #7082
                              Check before dispatching#7072#6810 (a catalog sweep) was never checked as a possible absorber. #6902/#6933 are fold-only, awaiting a carrier.

                              #7081 is not a docs nit.zod-mirror-parity.test.ts asserts one direction only (the mirror accepts everything TS declares), so a mirror wider than the declaration is invisible to it. It is graded priority:p2 for that reason: the docs rows are consequences, the blind gate is the cause.

                              5. Two rulings of mine you may want to overturn

                              ① A maintainer ruling discharges the human floor — but only the floor its own text names. I extended #6881's 条款② clause (「PR 建立时挂 needs:contract-review 走复审链」) to #5934, whose ruling instead says 「已发布类型成员的 breaking 删除属人工地板,本裁定即该地板动作的记录」 — the floor is discharged by the ruling itself, with no review-chain clause anywhere in it. I held PR #7065 for a gate that was never prescribed. Read each ruling literally; do not generalise a clause across cards.

                              assignees is PM-written; devs post claim comments only. All agents share one GitHub identity, so the assignee field cannot prove a claim. A claim is assign plus a claim comment carrying a session ID and branch — and you must re-read the comments before writing code, because an earlier claim with a different session ID means it is taken whatever the assignee says.

                              6. ⭐ The one pattern worth carrying forward

                              Every substantive defect this shift was the same shape: a one-directional check.

                              And it applies to the PM seat itself. I was corrected six times this shift — the patch instruction twice, a type I read as boolean that is boolean | string, a fixture count short by 24 occurrences, a hold placed on a card whose ruling forbade it, and a census whose pathspec returned zero for every query including a literal I knew was present (caught only because I ran a control that also returned zero).

                              The root of all six is the same: treating "I read a result" as "I measured". My dispatch orders required devs to verify the card's premises. They did not require verifying mine. ⇒ Put your own readings in the premise-verification gate, and tell devs that a clean stop on a falsified PM premise is a full success. Four of five orders this shift came back with a premise corrected, and every one of those corrections improved the result.

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:queuepriority:p1

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions