agent-orchestrator/backend/internal/adapters/tracker/github/doc.go

43 lines
2.0 KiB
Go

// Package github implements the ports.Tracker outbound port for GitHub
// Issues. v1 is read-only:
//
// - Get returns a normalized snapshot of one issue (spawn-bootstrap
// reads it to hydrate the agent prompt).
// - List returns a filtered slice of issues in a repo (one page, no
// auto-pagination in v1; PRs are filtered out client-side because
// GitHub's /issues endpoint conflates them).
// - Preflight performs a single GET /user against GitHub to verify the
// token is accepted; success is cached for the lifetime of the
// Tracker, failures are not.
//
// Writing back to the tracker (Comment, Transition) is deferred to issue
// #40. The observer/polling loop is deferred to issue #35.
//
// # Reverse state mapping
//
// GitHub Issues only have two native states (open, closed) plus a
// state_reason on closed issues (completed, not_planned, reopened). Get
// projects them onto the normalized state vocabulary as follows:
//
// - closed + state_reason=not_planned -> cancelled
// - closed + (completed | empty | other) -> done
// - open + "in-review" label -> review (wins when
// both status labels are present; the workflow is progress -> review)
// - open + "in-progress" label -> in_progress
// - otherwise -> open
//
// The "in-progress" and "in-review" labels are recognized because humans
// (and other tooling) commonly apply them. The adapter does NOT write them
// in v1 — see issue #40 for the write-side work.
//
// # Out of scope
//
// - No Comment, no Transition (issue #40).
// - No List pagination beyond a single page (callers requesting more than
// 100 results need to wait for the observer/polling work in issue #35).
// - No webhook receiver, no polling goroutine, no fact projection into
// LCM (issue #35).
// - No richer per-provider metadata on Issue (milestones, project boards,
// reactions); the port only carries fields all v1 providers can fill.
package github