Skip to content

aggregator: derive epic ETA bands and explainable stall risk #3982

Closed

Description

@dezren39

Parent chain: #1184 → #1256 → this issue. GitHub currently caps #1184 at 100 direct sub-issues and rejects additional links (REST 422), so implementation slices are nested under #1256, already a native child of #1184; no existing parent links were changed.

Design context: #1256; doc/2026-11-01T21-07-00Z_design_pm-stack_forecasting/2026-11-01T21-07-00Z_design_pm-stack_forecasting.md (§1, §3). Depends on the reusable item-history source in #3981. Coordinate with #1281: reuse its history/throughput seam, but do not duplicate its charts.

Goal

Add pure, deterministic derivations for project/epic ETA distributions and item stall-risk explanations. The current project/coverage inputs do not contain enough item-level history to calculate these values.

Acceptance criteria

  • ETA uses complete observed weekly item-history buckets, including zero-completion weeks, over trailing 4-week and 8-week windows; incomplete windows are excluded and the scope/sample are returned.
  • One direct native child closure is the documented default unit; merged PRs do not double-count. Reopened issues are not counted as currently complete. Existing effort weights and open-ended/unsized work remain explicit and never create invented precision.
  • With fewer than 3 completions or 4 complete weeks, the result is low-confidence/borrowed from a clearly named comparable scope or “not enough history”; with no defensible baseline, no ETA date is returned. Numeric forecasts include P50/P80 ranges, confidence, input coverage, and model version.
  • Stall risk is a versioned, explainable 0–100 rule score with contributing reason codes/timestamps; first-observed blocker age is labelled a lower bound, and unavailable heartbeat/requeue signals stay unknown.
  • Score ≥60 is surfaced as informational “at risk”; score alone does not create a Needs-you escalation. Tests cover missing history, zero pace, reopen, sparse samples, borrowed baseline, and each risk signal.

Activity

  1. added
    kind/featureNew feature or capability request
    source/queue-workerFiled or worked by the queue/worker pilot
    priority/normalOrdinary priority (the default)
    effort/mMedium: expected under 1 day of work
    app/pm-stackpm-stack (Pad/Grist) in developing-today/code
    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
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 2026
  5. 65 remaining items

  6. added
    status/parkedDeliberately paused with a recorded resume condition
    queue/claimedQueue worker lifecycle state
    on Nov 4, 2026
  7. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  8. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked — CI pending

  9. added 2 commits that reference this issue on Nov 4, 2026
  10. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

  11. removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    work/assignedQueue worker lifecycle state
    on Nov 4, 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 requestpriority/normalOrdinary priority (the default)source/queue-workerFiled or worked by the queue/worker pilottask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions