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.
## 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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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 gainsgetIssueDependencies. +11 unit tests (39 in core).scheduleFocus()maps real issues + deps → Now/Next/Later; Focus renders scheduler output, falling back to the demo fixture when no token is configured.Verification
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)
🤖 Generated with Claude Code