Repository navigation
docs(coordinator): link a blocked issue's blockers as dependencies so it leaves triage - #21
Merged
Merged
Conversation
Triage re-listed obs-studio#1865 on every tick because its blockers were named in prose (#1864, #1092) and nothing read them: five triage comments in four days, each repeating the same verdict. The work list already hides an issue with an open blocker (issueDependenciesSummary.blockedBy), so the fix is the link, not another comment. Records the command, the id-vs-number trap, and the churn it prevents.
zackees
commented
Oct 27, 2026
zackees
left a comment
Member
Author
There was a problem hiding this comment.
Reviewed — correct, scoped, and verified.
- The change is one bullet in
.claude/skills/obs-org-coordinator/SKILL.md§6 (Triage), which is exactly where the churn originates:issue_task()returnsNoneonly whenitem.open_blockersis set, andGhBackendfills that fromissueDependenciesSummary { blockedBy }, so prose "Blocked by #N" is invisible to the tooling. The bullet states that mechanism, not just the symptom. - The command is right:
POST .../issues/<N>/dependencies/blocked_bywith-F issue_id=<numeric id>.-F(not-f) matters — the field is an integer, and the note aboutid≠ number is the trap that costs a 422 on the first attempt. - The cited instance checks out:
obs-studio#1865carried repeated triage verdicts between 2026-10-23 and 2026-10-27, and after linking both blockersissueDependenciesSummary.blockedByis 2 and the issue no longer appears in a freshworkflow.coordinatorlist. Consistent with the coordinator skill's own warning that tasks with no label state re-list every tick. - Docs only: no code, labels or CI surface touched;
testpasses.
One optional (non-blocking) nit for a later pass: the sentence reads "with one open blocker the issue leaves triage", which could be read as "exactly one". The code path leaves triage for any non-zero blockedBy count, and the issue returns when the last blocker closes. Your wording already says the second half correctly; naming the first half as "any open blocker" would remove the ambiguity.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
obs-studio#1865's body says "Blocked by #1864 (CEF upgrade) and the Linux sandbox part of #1092". Both are open. Nothing in the tooling read that sentence, souv run -m workflow.coordinatorlisted the issue undertriageon every tick and each tick posted the same verdict again — five triage comments between 2026-10-23 and 2026-10-27, the last four within 24 hours and two within 40 minutes.The work list already has the rule for this:
issue_task()returnsNonewhenitem.open_blockersis set, andGhBackendfills it fromissueDependenciesSummary { blockedBy }. The issue simply had no dependency links, so the count was 0.Change
One bullet in the org coordinator skill's §6 (Triage): when the blockers are named in prose, link them in the same tick with the issue-dependency API, before posting the verdict.
POST repos/obs-rust/<repo>/issues/<N>/dependencies/blocked_bywithissue_idset to the blocker's numericid(gh api repos/.../issues/<n> --jq .id), not its number.triageand returns by itself when the last blocker closes, so a blocked issue costs one comment instead of one per tick.Verified
On
obs-studio#1865, after linking both blockers:gh api graphql -f query='{repository(owner:"obs-rust",name:"obs-studio"){issue(number:1865){issueDependenciesSummary{blockedBy}}}}'→{"blockedBy":2}.uv run -m workflow.coordinator --jsonno longer containsobs-studio#1865(it did in the list computed 20 minutes earlier).Docs only: no code, no labels, no CI change.