Repository navigation
Description
Parent chain: #1184 → #1256 → this issue. GitHub currently caps #1184 at 100 direct sub-issues and rejects additional links (REST 422), so this implementation slice is nested under #1256, which is already a native sub-issue of #1184. No existing relationships were changed.
Design context: #1256 and doc/2026-11-01T21-07-00Z_design_pm-stack_forecasting/2026-11-01T21-07-00Z_design_pm-stack_forecasting.md (§1, §3, §5). Coordinate with #1281 and provide one reusable history seam rather than a duplicate flow store.
Goal
Capture enough versioned, time-bounded item history to support delivery velocity, time-in-status, and lower-bound blocked-age forecasts. Current coverage snapshots are aggregate census, while the live project projection lacks closure/edge event times.
Acceptance criteria
- A durable, versioned history records the observed item scope and state/status, GitHub closure/reopen transitions, project/epic membership, effort changes, and blocker edges at each complete weekly cutoff; zero-completion weeks are preserved.
- Source unavailable/null is distinct from zero, and each snapshot records its source freshness/coverage so incomplete weeks are excluded rather than treated as zero throughput.
- Blocker age derived from a locally first-seen edge is labelled a lower bound; no exact historical event time is fabricated from current state.
- The history interface is reusable by feat(pm-stack): WIP limits + flow analytics — per-lane WIP caps with violation flags; time-in-status and throughput charts per project/epic #1281 flow analytics and forecasting; document ownership/retention and avoid introducing a second collector/store.
- Tests cover reopen, membership change, missing-source, zero-week, and first-observed-blocker behavior.
Activity
developing-today commentedon Nov 3, 2026
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
13 remaining items
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: picked up (resume)
task 8751 re-claimed by lane code-p (direct), 2026-11-03T21:16Z, resuming the parked prior claim (lane code-h). PR #5133 @ a06bc4a exists with laptop tests passing, but its Codex review completed with 3 undispositioned P2 findings (contentKind double-counting in weeklyCompletions; missing-week interval misattribution; blocker age not resetting after edge removal). This claim fixes those three in the PR, extends tests, and replies on the Codex threads. No competing PR will be created.
aggregator: disposition Codex P2s on item-history (#3981)
Merge pull request #5133 from developing-today/queue/8751-3981-item-h…
dezren39 commentedon Nov 3, 2026
🤖 Agent note · done
src/item-history.ts+ store + derivations (a06bc4a); this claim dispositioned the PR's three Codex P2 findings in 8ea49db — (1)contentKindis now captured askindand only issue items count as completed units (no issue+PR double-count, unmerged PR closures excluded); (2) weekly buckets form only from consecutive complete cutoffs, so transitions spanning a missing week are attributed to no week; (3) blocker age runs from the current episode's first observation, resetting when a complete cutoff observes the edge absent. All three threads replied; Codex re-review of 8ea49db completed with NO findings.bun test test/item-history.test.tson the laptop — 10 pass / 0 fail (reopen, membership, missing-source, zero-week, first-observed-blocker, PR-units, episode-reset). Full aggregator suite: 1387 pass; the single error is the pre-existing fresh-worktree env gap (Cannot find package web-push, no node_modules), unrelated to this change. The pm-aggregator-tests workflow does not trigger on PRs (the repo-wide PR-tier gap is task 8631 / its own issue), so main CI is the remaining signal.Closing aggregator: capture item history for forecasting and flow calculations #3981 as implemented; downstream slices (aggregator: derive epic ETA bands and explainable stall risk #3982 derivation, aggregator: expose and render one forecast contract on Roadmap and Projects #3984 rendering, aggregator: backtest forecasting models and report calibration #3986 backtesting) have their own issues.