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
Two open issues can carry the same sk: label at once, and nothing notices. The sweep's zombie check (π§) only fires for a claim with no open PR, so when both claimants have an open PR β which is the normal state for a built issue awaiting acceptance β the collision is invisible.
Steps to reproduce
Currently live on the Feature/Bug boards:
sk:sk3: 370
sk:sk6: 943
sk:sk7: 819, 665 <-- both open, both with an open PR
sk:sk9: 758
gh issue list --state open --json number,labels and group the open issues by their sk: label.
A box can hold exactly one issue. Two open issues claiming one sidekick means at least one claim is stale, and the sweep is the component whose job is to notice that the recorded state and the real state have diverged.
β What actually happened?
Nothing is reported, and the consequence is silent. dor-acceptance loop E resolves the sidekick from the issue's sk: label and dispatches the run to that box, where the job asks "Am I the holder of issue #N?" against the box's own reservation. For the stale claimant that answers no, the job sets holder=false and exits β no comment, no board move, no error. The requestor asked for a change and gets silence, which is the exact failure mode the flow's own comments say it was built to avoid.
Root cause
.github/scripts/dor_reconcile.sh, the π§ arm of the per-issue walk:
if [ -n"$sk_label" ] && [ "$status"!="Building" ];thenif open_pr="$(gh pr list β¦ --head "dor/issue-${num}" --state open β¦)";then
[ -z"$open_pr" ] && add_ex "π§ #${num} still claims \`${sk_label}\` with no open PR β β¦"fifi
The check tests one issue at a time and treats "has an open PR" as proof the claim is legitimate. It has no notion of a claim being exclusive, so it cannot compare claims against each other.
There is a structural obstacle: the walk is now per-board, and a collision can span both pipelines β which is exactly the live case, #819 on the Bug board and #665 on the Feature board. A per-board walk can never see it.
Suggested direction
Collect the sk: claims repo-wide, once per sweep, independently of the per-board walk, and flag any box claimed by more than one open issue. That is a single gh issue list --state open plus a group-by, and it is the only formulation that catches a cross-board collision.
Worth considering alongside it: have the build side drop the previous holder's sk: label when it reserves a box, so the collision cannot persist in the first place. The sweep would then be a backstop rather than the only detector.
Also adjacent, and cheaper to fix at the same time: Β§3b (closed issues still claiming a sidekick) queries --label "$LABEL", so a closed issue without the gate label is missed there for the same class of reason.
Does it reproduce on the demo data?
Not applicable β pipeline automation, not product code. It reproduces against this repo's own boards, shown above.
Where does it happen? (optional)
.github/scripts/dor_reconcile.sh β the π§ checks in the per-issue walk and in Β§3b.
Did it work before? (optional)
No indication it ever did. The π§ check was written to catch an abandoned reservation, and a collision is a different shape of the same problem that it was never asked about.
What's wrong? (one or two sentences)
Two open issues can carry the same
sk:label at once, and nothing notices. The sweep's zombie check (π§) only fires for a claim with no open PR, so when both claimants have an open PR β which is the normal state for a built issue awaiting acceptance β the collision is invisible.Steps to reproduce
Currently live on the Feature/Bug boards:
gh issue list --state open --json number,labelsand group the open issues by theirsk:label.sk7is claimed by both [BUG]Excel powerqueries only works while ignoring privacy labelsΒ #819 (PR [BUG]Excel powerqueries only works while ignoring privacy labelsΒ #1000 open) and [Refactor] Dedup the test-file db-mock boilerplate (~20 jscpd clone pairs) via a __mocks__ manual mockΒ #665 (PR [Refactor] Dedup the test-file db-mock boilerplate (~20 jscpd clone pairs) via a __mocks__ manual mockΒ #1007 open).β What did you expect to happen?
A box can hold exactly one issue. Two open issues claiming one sidekick means at least one claim is stale, and the sweep is the component whose job is to notice that the recorded state and the real state have diverged.
β What actually happened?
Nothing is reported, and the consequence is silent.
dor-acceptanceloop E resolves the sidekick from the issue'ssk:label and dispatches the run to that box, where the job asks "Am I the holder of issue #N?" against the box's own reservation. For the stale claimant that answers no, the job setsholder=falseand exits β no comment, no board move, no error. The requestor asked for a change and gets silence, which is the exact failure mode the flow's own comments say it was built to avoid.Root cause
.github/scripts/dor_reconcile.sh, the π§ arm of the per-issue walk:The check tests one issue at a time and treats "has an open PR" as proof the claim is legitimate. It has no notion of a claim being exclusive, so it cannot compare claims against each other.
There is a structural obstacle: the walk is now per-board, and a collision can span both pipelines β which is exactly the live case, #819 on the Bug board and #665 on the Feature board. A per-board walk can never see it.
Suggested direction
Collect the
sk:claims repo-wide, once per sweep, independently of the per-board walk, and flag any box claimed by more than one open issue. That is a singlegh issue list --state openplus a group-by, and it is the only formulation that catches a cross-board collision.Worth considering alongside it: have the build side drop the previous holder's
sk:label when it reserves a box, so the collision cannot persist in the first place. The sweep would then be a backstop rather than the only detector.Also adjacent, and cheaper to fix at the same time: Β§3b (closed issues still claiming a sidekick) queries
--label "$LABEL", so a closed issue without the gate label is missed there for the same class of reason.Does it reproduce on the demo data?
Not applicable β pipeline automation, not product code. It reproduces against this repo's own boards, shown above.
Where does it happen? (optional)
.github/scripts/dor_reconcile.shβ the π§ checks in the per-issue walk and in Β§3b.Did it work before? (optional)
No indication it ever did. The π§ check was written to catch an abandoned reservation, and a collision is a different shape of the same problem that it was never asked about.