P2: deterministic scheduler → real Now/Next/Later #37

Merged
christian merged 2 commits from p2/scheduler-focus into main 2026-07-08 23:22:41 +00:00
Owner

Summary

CommiTea now answers "what should I do next?" from its own real backlog. A deterministic scheduler orders the open issues by dependency topology + priority + estimate and drives Focus's Now/Next/Later — running live over gitea data.

What's here

  • @commitea/coreschedule(issues, edges): Kahn topo-sort with priority(1-first) → larger-estimate → number tie-breaks, single serial capacity layout, cycle detection (reports the cycle instead of looping), and longest-chain critical-path marking. selectFocus() takes the top three. All pure and deterministic — the LLM does none of the arithmetic (decisions.md). Client gains getIssueDependencies. +11 unit tests (39 in core).
  • main — reconcile also fetches gitea's native issue dependencies for the open scope and returns the edges.
  • rendererscheduleFocus() maps real issues + deps → Now/Next/Later; Focus renders scheduler output, falling back to the demo fixture when no token is configured.

Verification

  • typecheck clean; 14 e2e green in fixture mode
  • gated live spec (GITEA_LIVE=1): the board shows the real 25 open + 9 closed, and Focus picks #2 ChangeSource (critical-path p/1 root) as Now with the rationale "on the critical path · unblocks #33, #4". Screenshots confirmed.

v0 scope (each a named later slice)

  • single serial worker — per-person capacity is #8
  • point durations — Monte Carlo forecast cones are #10 (the Focus cone is still fixture)
  • estimate-only durations — team calibration is #5 (needs lifecycle actuals)

🤖 Generated with Claude Code

## Summary **CommiTea now answers "what should I do next?" from its own real backlog.** A deterministic scheduler orders the open issues by dependency topology + priority + estimate and drives Focus's Now/Next/Later — running live over gitea data. ## What's here - **`@commitea/core`** — `schedule(issues, edges)`: Kahn topo-sort with priority(1-first) → larger-estimate → number tie-breaks, single serial capacity layout, cycle detection (reports the cycle instead of looping), and longest-chain critical-path marking. `selectFocus()` takes the top three. All pure and deterministic — the LLM does none of the arithmetic (decisions.md). Client gains `getIssueDependencies`. **+11 unit tests (39 in core).** - **main** — reconcile also fetches gitea's native issue dependencies for the open scope and returns the edges. - **renderer** — `scheduleFocus()` maps real issues + deps → Now/Next/Later; Focus renders scheduler output, falling back to the demo fixture when no token is configured. ## Verification - typecheck clean; **14 e2e green** in fixture mode - gated live spec (`GITEA_LIVE=1`): the board shows the real **25 open + 9 closed**, and Focus picks **#2 ChangeSource** (critical-path p/1 root) as Now with the rationale *"on the critical path · unblocks #33, #4"*. Screenshots confirmed. ## v0 scope (each a named later slice) - single serial worker — per-person capacity is **#8** - point durations — Monte Carlo forecast cones are **#10** (the Focus cone is still fixture) - estimate-only durations — team calibration is **#5** (needs lifecycle actuals) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
christian added 1 commit 2026-07-08 21:12:42 +00:00
CommiTea now recommends its own next unit of work from the live backlog.

- @commitea/core: `schedule()` — dependency topo-sort with priority +
  estimate tie-breaks, single serial capacity, cycle detection, and
  critical-path marking; `selectFocus()` takes the top three. Pure,
  deterministic; the LLM does none of this. +11 tests (39 in core).
  Client gains `getIssueDependencies`.
- main: reconcile also fetches native issue dependencies for the open
  scope and returns edges.
- renderer: `scheduleFocus()` maps real issues+deps→Now/Next/Later;
  Focus renders scheduler output (fixture fallback when unconfigured).

v0 scope (each a later slice): single serial worker (per-person
capacity #8), point durations (Monte Carlo cone #10), estimate-only
(calibration #5). Verified: 14 e2e green (fixtures) + gated live spec —
the board shows the real 25 open + 9 closed, and Focus picks #2
ChangeSource (critical path) as Now. Screenshots confirmed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
christian added 1 commit 2026-07-08 23:22:36 +00:00
christian merged commit ca45f1e97c into main 2026-07-08 23:22:41 +00:00
Sign in to join this conversation.
No description provided.