43 lines
2.0 KiB
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
|