Skip to content

feat(aggregator): rank blockers by downstream open work #3974

Open

Description

@dezren39

Part of epic #1184; implements the primary ranking recommended by design issue #1257. Design note: doc/2026-11-01T21-05-00Z_design_aggregator_dependency_graph_1257.md (proposed by the linked design PR).

Goal

Rank unresolved blockers per selected epic by the number of distinct open epic items in their transitive blockedBy ancestry. This is downstream reach, not a promise that every counted item becomes immediately unblocked. Preserve the existing longest chain as secondary structural context.

Acceptance criteria

  • The primary list is sorted by descending distinct open downstream item count, descending known effort weight as the tie-break, then canonical ref for deterministic order; unsized items are separately reported.
  • Each candidate exposes the contributing item links and any additional unresolved blockers, so multi-blocked work is not described as immediately freed. Closed/merged items do not count.
  • Shared dependency paths count each downstream item once; out-of-pool blockers stay unresolved and do not disappear from the explanation.
  • The longest dependency chain remains visible as a separate diagnostic and is not conflated with the new primary ranking.
  • Add focused tests for a shared blocker, a multi-blocked descendant, ties, closed nodes, unknown refs, and deterministic ordering.

Activity

  1. added
    kind/featureNew feature or capability request
    priority/normalOrdinary priority (the default)
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    app/pm-stackpm-stack (Pad/Grist) in developing-today/code
    source/agentCreated by an agent worker
    on Nov 1, 2026
  2. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 3, 2026
  3. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: triaged (coverage pass)
    Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
    Found via: coverage pass 2026-11-03

  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 3, 2026
  5. 56 remaining items

  6. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  7. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Picked up as task 8060 by lane code-c (repo-queue worker) and handed off to the opencode execution lane per the execution-lane assignment for task 8060. The laptop claimant launches the bound opencode session for task 8060; this lane does not work issue #3974 directly.

  8. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  9. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  10. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: queue worker (repo-worker-code), lane code-s
    • Session / ID: task 8060
    • Found via: queue claim
    • Task: task 8060 (small_fix for issue feat(aggregator): rank blockers by downstream open work #3974) was re-claimed by lane code-s after a previous handoff cycle's lease expired unlaunched, and is assigned to the opencode execution lane again; handing off to the opencode claimant, which launches the bound session. Revalidated fresh: issue feat(aggregator): rank blockers by downstream open work #3974 is OPEN with no hard-stop labels (labels already claimed-synced: queue/claimed, status/in-progress, work/assigned).
    • Expectation: effort m; done = the claimant's bound session drives task 8060 to a terminal state per the acceptance criteria (blocker ranking by distinct downstream open work, focused tests, CI green).
    • Links: task 8060 attempts 6/8
  11. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: opencode claimant (opencode-claimant)
    • Session / ID: queue task 8060; bound session ses_e5e55c79ba6ffeWWvC6ya12051
    • Found via: queue task handoff on the opencode execution lane
    • Task: Fix feat(aggregator): rank blockers by downstream open work #3974: rank blockers by distinct downstream open work
    • Expectation: the bound worker session handles only task 8060 and records a terminal queue state; it must not claim another task. Queue verbs use --worker repo-worker-code; terminal execution records use lane opencode and this same session ID.
    • Links: task 8060 · feat(aggregator): rank blockers by downstream open work #3974
  12. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: implementation_pr_open
    task: 8060 (repo-health-code-pilot; worker repo-worker-code; opencode session ses_e5e55c79ba6ffeWWvC6ya12051)

    Implementation

    PR #6089 adds blocker-centric per-epic ranking by distinct open downstream items, then known effort weight and canonical ref. Each entry links its contributing items and current additional unresolved blockers; unknown external refs remain unresolved. The existing direct-blocker item summary stays secondary, and the longest-chain diagnostic remains separate.

    Verification

    • Focused: bun test test/epic-graph.test.ts — 33 passed, 181 assertions.
    • Typecheck: bun run typecheck — passed.
    • Full local suite: 1,449 passed, 22 failed in unrelated server/fixture tests (port 4871 in use, fixture/source-gate environment, and pre-existing fixture expectations); focused changed-file tests pass.
    • PR checks did not start automatically. .github/workflows/pm-aggregator-tests.yml currently declares only workflow_dispatch; .github/ci-policy.md has no aggregator PR-tier entry. Manually dispatched Actions run 41979472119 remains queued after the five-minute CI wait budget.

    Resume condition

    Recheck workflow run 41979472119 after its queue delay. If it passes, finalize task 8060; if it fails, fix and update PR #6089. Do not create another implementation PR.

    Links: #6089 · https://github.com/developing-today/code/actions/runs/41979472119

  13. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/pm-stackpm-stack (Pad/Grist) in developing-today/codeeffort/mMedium: expected under 1 day of workkind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)source/agentCreated by an agent workerstatus/parkedDeliberately paused with a recorded resume conditionstatus/triagedTriaged and routed (see agent note)task/triageQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions