Skip to content

GitHub issue/milestone reader and dependency-order wave assembly #26

Description

@Ryan-Atkinson87

Implement reading the wave's issues from GitHub and ordering them by dependency (Spec §4.2 steps 1, 3–4). A wave = all GitHub milestones sharing a name across the project's repos (Spec §16.1); this issue reads those issues and produces the algorithmic work order the loop consumes.

Spec §4.2 (steps 1, 3, 4 — sync, plan-check, order), §16.1 (GitHub authoritative for waves), §16.3 (waves derivation), §8 (GitHub is source of truth for what is done).

Acceptance criteria

  • A read-only GitHub issues/milestones reader, built on the authenticated client from GitHub API client for hand-off (PAT-scoped: push agent branch + PRs only) #13 (same PAT; read access only) — lists the open issues for a wave (milestones sharing a name across the project's repos, per project.yaml waves.source: milestone-name default, project.yaml Pydantic schema and fail-fast loader #4).
  • Parses each issue's Depends on: #N declarations and produces a dependency-ordered work list (algorithmic, no AI — Spec Principle 1).
  • Cross-repo ordering within a wave is derived from issue dependency declarations, not from config (§16.3 waves).
  • Detects an unplanned wave (milestone exists but has no issues) so the driver (Wave-loop driver: end-to-end orchestration of the deterministic wave loop #29) can trigger the planner session (§4.2 step 3).
  • Cycle detection: a dependency cycle is reported as an error/blocker rather than looping.
  • Idempotent and re-readable each session (Spec Principle 2 — state re-read from GitHub at session start, nothing cached across sessions).
  • Explicit failure path for GitHub API errors (rate limit, network) — no silent empty list.
  • Tests: linear chain ordered correctly; independent issues across repos both selectable; a cycle errors; an unplanned milestone is flagged.

Notes

This complements #13 (push/PR-only hand-off client) by adding the read side the wave loop needs. Notion mirroring of this state is Phase 5 — not in scope here.

Depends on: #13, #4

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions