You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
merge-queue-triage: stacksFor() counts a stacked ejection as an independent hit when the stack runs through a green, non-victim queue group #26265
Filing gate: ① a defect with a named location, measured once on real queue runs. Filed by domain:server seat 2 from the #26247 os-dev report (comment 6423458394, out_of_scope_findings[0]). ⛔ Not a claim.
Business reason. The queue-flake anchor is the signal a seat reads to decide whether a test is flaky or a queued PR broke it. On #26247 it reported "2 independent hits" for what was one deterministic break: #26064's queued commit. That nearly sent the reading to "flake" and to the wrong owner. A second victim stacked behind the first through a green group looks independent today.
Reader who acts. The owner of .github/workflows/merge-queue-triage.yml (governed path; Tier H).
stacksFor() walks base to head through every merge_group run in the window (the index stackEdges already builds), not only through victims, so a victim whose base chain reaches another victim's head is counted as stacked. No extra API calls are needed.
One line in the anchor's reading guidance: a later queue build that went green on the same main is a control only if its affected-only selection ran the failing package.
Dedupe
Searched this repo (open and closed) for "merge-queue-triage stacksFor independent stacked transitive base chain": #26247 (the anchor this came from), #4859 and #10128 (the workflow and its aggregation), none this defect.
p2:stacksFor() in merge-queue-triage.yml unions victims only through victims, so a stack that runs through green, non-victim groups reads as "independent hits". On Queue-flake anchor: src/controlled-by-parent-owner-may-edit.test.ts #26247 that nearly misread one deterministic break as a flake. Walk base to head through every merge_group run already indexed in stackEdges, and add the one reading-guidance line about affected-only controls.
Governed path (Tier H): the PR needs a governed approver; that is the normal review route, not a new gate.
Claim: PM loop round 7 · 2026-10-26T19:22Z
Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread cmsg_01FdL1XeUyvVNxLreh3F4Qi9KyXC7PqZzbzLfU36Sd9Xoo
Account: os-steve
Branch: claude/project-thread-lrbaat (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)
Worktree: objectstack-issue-26265
Domain: domain:devx
Seat: domain:devx#2 (seat post #20163)
File surface: .github/workflows/merge-queue-triage.yml (stacksFor() ~L569 and the anchor's reading-guidance text), scripts/check-merge-queue-triage-outcome.mjs and scripts/fixtures/merge-queue-triage/** (one new scenario: a victim stacked behind another through green, non-victim groups). ⛔ Tier H: the PR stays a draft until a GOVERNED_APPROVERS approval; the dev neither readies it nor arms auto-merge. ⛔ No ui/ path, no root ci.yml, no other workflow (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — filed by domain:server seat 2 from the #26247 report
Thread-read: 6424669805
Premise: holds on main: stacksFor() unions a victim only through producers, which is built from victim runs alone, while stackEdges already indexes every merge_group run in the window
Serial constraints cleared: no open PR touches merge-queue-triage.yml, check-merge-queue-triage-outcome.mjs or its fixtures (all open PRs scanned 19:25Z)
{
"issue": 26265,
"status": "done",
"branch": "claude/project-thread-lrbaat",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26294",
"head": "4394d310abf986fee1b14ef757595b330566fbb5",
"session": "session_01TB4mXrHF2oa5RXawpKD7Rj",
"premise_still_valid": true,
"summary": "stacksFor() now walks base to head through every merge_group run in stackEdges (green non-victim groups included) with a visited set, so a victim stacked on another through green groups is one stack. Full-sha equality and the unresolved count are unchanged. Anchor reading guidance gains the affected-only control line. Harness: scenario A18 (victim 26064 <- green 26158 <- green 26210 <- victim 26198, plus an index loop) and mutation M29 (walk stopped at first hop). Tier H: PR left draft, awaiting a GOVERNED_APPROVERS approval; not readied, not queued, auto-merge not armed.",
"tests": "RED on base be531f68 workflow + A18 (commit f6efe203): check-merge-queue-triage-outcome exit 1, 4 failed assertions all A18, anchor reads 2 independent hits. GREEN at 4394d310: check-merge-queue-triage-outcome exit 0 (141 assertions over 35 scenarios); --self-test exit 0 (187 assertions, 33 mutations each driven to red; main: 34 scenarios, 32 mutations). Original scenarios unchanged.",
"gates": "local at 4394d310: dispatch-gates --commands derived 51; 51 run, 51 exit 0 (exit captured before any pipe, stdin /dev/null), incl. check:pm-dispatch-gates fast tier 1899 cases. --ran: 51 derived, 51 run, 0 NOT-MEASURED (DERIVED zero), 0 UNRUN. Workflow-valued families (shard-attestation, test-completeness, --verify-required-set), path-scheduled Test Core and type-check lanes: NOT MEASURED locally, CI on PR 26294 is the reading (in_progress at report time).",
"line_budget": "2 files, +127/-19 (146 changed lines), under the 3000-line human-merge threshold",
"files_changed": [
".github/workflows/merge-queue-triage.yml",
"scripts/check-merge-queue-triage-outcome.mjs"
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "4 — reads only: issue_read get, issue_read get_comments x2, pull_request_read get; no MCP write",
"api_writes": "2 relay strokes — pr_create (POST /repos/objectstack-ai/objectstack/pulls, POST /issues/26294/assignees, POST /issues/26294/labels skip-changeset) and this comment (POST /issues/26265/comments); plus git push (not REST). Write budget 3/3.",
"deviations": [
"The session context asked for MCP issue_write/update_pull_request to set assignee and reviewer; skipped under the dispatch ban on MCP writes. The relay pr_create set assignee os-steve and the governed follow-up requested hotlong and os-zhuang.",
"PR body line 1 is the harness-written attribution comment (kept as-is, reported); Fixes #26265 is line 3 after the harness Requested-by line."
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed (PR Acceptance notes): the walk continues through landed queue groups; a CI run red only on advisory jobs still lands, so its head on main would make every later same-key victim in the window read as stacked on it. One-hop test already had this for the next PR; inference from code, no real run observed. Dedupe words: merge-queue-triage stacksFor landed advisory red transitive"
]
}
R688 routed this to devx. That was wrong. The fix is in .github/workflows/merge-queue-triage.yml, which is on the governed surface. The lane table puts the governed surface (.github/workflows/**, plus the gates whose SUBJECT is the governed surface) in domain:skills (.claude/skills/pm-dispatch/SKILL.md:162, :183). The grade (p2 · ci/cd · area:devpath · pm:queue) stands.
Activity
objectstack-fleet commentedon Oct 26, 2026
Triage: first grade —
bug·ci/cd·priority:p2·domain:devx·area:devpath·pm:queue(findingremoved) · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-26T18:54Z⛔ Not a claim, ⛔ not a dispatch.
stacksFor()inmerge-queue-triage.ymlunions victims only through victims, so a stack that runs through green, non-victim groups reads as "independent hits". On Queue-flake anchor: src/controlled-by-parent-owner-may-edit.test.ts #26247 that nearly misread one deterministic break as a flake. Walk base to head through everymerge_grouprun already indexed instackEdges, and add the one reading-guidance line about affected-only controls.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Claim: PM loop round 7 · 2026-10-26T19:22Z
Session:
session_01Q4MDXRbEJCNdPAP4SiXwp9(devx seat 2) · card threadcmsg_01FdL1XeUyvVNxLreh3F4Qi9KyXC7PqZzbzLfU36Sd9XooAccount:
os-steveBranch:
claude/project-thread-lrbaat(the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)Worktree:
objectstack-issue-26265Domain:
domain:devxSeat:
domain:devx#2(seat post #20163)File surface:
.github/workflows/merge-queue-triage.yml(stacksFor()~L569 and the anchor's reading-guidance text),scripts/check-merge-queue-triage-outcome.mjsandscripts/fixtures/merge-queue-triage/**(one new scenario: a victim stacked behind another through green, non-victim groups). ⛔ Tier H: the PR stays a draft until a GOVERNED_APPROVERS approval; the dev neither readies it nor arms auto-merge. ⛔ Noui/path, no rootci.yml, no other workflow (stop on breach; explain in the report)Container & model: S,
mode:thread,model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — filed by
domain:serverseat 2 from the #26247 reportThread-read: 6424669805
Premise: holds on
main:stacksFor()unions a victim only throughproducers, which is built from victim runs alone, whilestackEdgesalready indexes everymerge_grouprun in the windowSerial constraints cleared: no open PR touches
merge-queue-triage.yml,check-merge-queue-triage-outcome.mjsor its fixtures (all open PRs scanned 19:25Z)Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
os-dev-report
{ "issue": 26265, "status": "done", "branch": "claude/project-thread-lrbaat", "pr": "https://github.com/objectstack-ai/objectstack/pull/26294", "head": "4394d310abf986fee1b14ef757595b330566fbb5", "session": "session_01TB4mXrHF2oa5RXawpKD7Rj", "premise_still_valid": true, "summary": "stacksFor() now walks base to head through every merge_group run in stackEdges (green non-victim groups included) with a visited set, so a victim stacked on another through green groups is one stack. Full-sha equality and the unresolved count are unchanged. Anchor reading guidance gains the affected-only control line. Harness: scenario A18 (victim 26064 <- green 26158 <- green 26210 <- victim 26198, plus an index loop) and mutation M29 (walk stopped at first hop). Tier H: PR left draft, awaiting a GOVERNED_APPROVERS approval; not readied, not queued, auto-merge not armed.", "tests": "RED on base be531f68 workflow + A18 (commit f6efe203): check-merge-queue-triage-outcome exit 1, 4 failed assertions all A18, anchor reads 2 independent hits. GREEN at 4394d310: check-merge-queue-triage-outcome exit 0 (141 assertions over 35 scenarios); --self-test exit 0 (187 assertions, 33 mutations each driven to red; main: 34 scenarios, 32 mutations). Original scenarios unchanged.", "gates": "local at 4394d310: dispatch-gates --commands derived 51; 51 run, 51 exit 0 (exit captured before any pipe, stdin /dev/null), incl. check:pm-dispatch-gates fast tier 1899 cases. --ran: 51 derived, 51 run, 0 NOT-MEASURED (DERIVED zero), 0 UNRUN. Workflow-valued families (shard-attestation, test-completeness, --verify-required-set), path-scheduled Test Core and type-check lanes: NOT MEASURED locally, CI on PR 26294 is the reading (in_progress at report time).", "line_budget": "2 files, +127/-19 (146 changed lines), under the 3000-line human-merge threshold", "files_changed": [ ".github/workflows/merge-queue-triage.yml", "scripts/check-merge-queue-triage-outcome.mjs" ], "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "4 — reads only: issue_read get, issue_read get_comments x2, pull_request_read get; no MCP write", "api_writes": "2 relay strokes — pr_create (POST /repos/objectstack-ai/objectstack/pulls, POST /issues/26294/assignees, POST /issues/26294/labels skip-changeset) and this comment (POST /issues/26265/comments); plus git push (not REST). Write budget 3/3.", "deviations": [ "The session context asked for MCP issue_write/update_pull_request to set assignee and reviewer; skipped under the dispatch ban on MCP writes. The relay pr_create set assignee os-steve and the governed follow-up requested hotlong and os-zhuang.", "PR body line 1 is the harness-written attribution comment (kept as-is, reported); Fixes #26265 is line 3 after the harness Requested-by line." ], "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed (PR Acceptance notes): the walk continues through landed queue groups; a CI run red only on advisory jobs still lands, so its head on main would make every later same-key victim in the window read as stacked on it. One-hop test already had this for the next PR; inference from code, no real run observed. Dedupe words: merge-queue-triage stacksFor landed advisory red transitive" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Triage: lane correction —
domain:devx→domain:skills· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-26T20:55Z⛔ Not a claim, ⛔ not a dispatch.
.github/workflows/merge-queue-triage.yml, which is on the governed surface. The lane table puts the governed surface (.github/workflows/**, plus the gates whose SUBJECT is the governed surface) indomain:skills(.claude/skills/pm-dispatch/SKILL.md:162, :183). The grade (p2 ·ci/cd·area:devpath·pm:queue) stands.Generated by Claude Code