Skip to content

Auto-remove the blocked label once its named dependency issue closes - #6235

Merged
atomantic merged 1 commit into
mainfrom
cos/task-mtn28vcy/agent-2c1be57e
Sep 4, 2026
Merged

Auto-remove the blocked label once its named dependency issue closes#6235
atomantic merged 1 commit into
mainfrom
cos/task-mtn28vcy/agent-2c1be57e

Conversation

@atomantic

Copy link
Copy Markdown
Owner

Summary

  • Sometimes an issue is labeled blocked on a dependency ("waiting on issue #N"), but nothing ever removes the label once #N ships — the claim queue skips every blocked issue forever, whether the block is a human/hardware case or a shipped dependency.
  • Adds a Blocked by #N convention (documented in the portos-file-issue skill) and a deterministic check, folded into the existing issue-reconcile scheduled task's daily pre-step: for every open blocked issue naming its blocker(s) that way, if all of them are now closed, the label is removed and a comment posted. No coordinator agent, no LLM call — mirrors the existing releaseAbandonedClaims step in the same pre-step.
  • An issue with no Blocked by line is left untouched (the human/hardware block case is unaffected).
  • Forge-agnostic: GitHub via gh, GitLab via glab.
  • Lifts the shared open/closed state normalizer out of layeredIntelligence/forgeFiler.js into server/lib/forgeIssueState.js so the new module doesn't need a cross-subsystem import.

Test plan

  • New unit suite server/services/blockedIssueReconcile.test.js (26 tests): Blocked by #N parsing (including non-matches like Refs #N/Related: #N), the absent-blocker-state-must-not-read-as-closed classifier discipline, gather over mocked gh/glab on both forges, and the unblock write path (comment-then-unlabel ordering, failure isolation) on both forges.
  • Full server suite (npm test in server/) passes: 1942 files, 39176 tests.
  • Ran /simplify (4 parallel reviewers: reuse, simplification, efficiency, altitude) against the diff and applied its findings — extracted the shared normalizeIssueState helper, replaced a nested ternary with if/else if, simplified the Blocked by regex, dropped a redundant forge guard, and added a missing GitLab comment-failure log.

issue-reconcile's daily deterministic pre-step now also unblocks issues:
one whose body names its dependency as "Blocked by #N" (documented in the
portos-file-issue skill) has the blocked label stripped, with a comment,
once every named issue is closed. No coordinator agent or LLM call — the
decision is mechanical, mirroring the existing releaseAbandonedClaims step.

Forge-agnostic (GitHub via gh, GitLab via glab). Also lifts the shared
open/closed state normalizer out of layeredIntelligence/forgeFiler.js into
server/lib/forgeIssueState.js so the new module doesn't need a
cross-subsystem import.
@atomantic
atomantic enabled auto-merge (rebase) September 4, 2026 15:06
@atomantic
atomantic merged commit 1d7422a into main Sep 4, 2026
7 checks passed
@atomantic
atomantic deleted the cos/task-mtn28vcy/agent-2c1be57e branch September 4, 2026 15:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant