Skip to content

🌱 design: forge-neutral enumeration engine (ADR) #6170

Description

@Danathar

Summary

Every hive work cycle starts from enumeration: EnumerateActionable in
pkg/github lists a repo's open issues and PRs and β€” in the same pass β€”
applies the policy that makes hive safe to run: hold and exempt labels,
project.issue_filter, SLA tracking, tracker detection, the standing-meta
skip (#6158), clustering. Because that choke point is GitHub-only, a hive
configured for any other forge enumerates nothing, which is why the forge
adapters sit "wired but unreachable" (forge-app-setup.md). The roadmap names
neutralizing this as the next step for the forge abstraction; this task
designs it before anyone moves code.

Part of #6167 (Gitea forge support series).

What the ADR must decide

  • Where lifted policy lives. Working proposal: a new pkg/actionable
    consuming forge.Forge + policy config and producing ActionableResult;
    alternative is housing it under pkg/forge. Maintainer preference asked in
    🌱 design: Gitea forge support β€” wave plan from adapter-only to working agentsΒ #6167.
  • The exact field gap between forge.Issue/forge.ChangeRequest and
    what fetchIssues/fetchPRs consume (timestamps, author, body, draft
    status, assignees, head ref, …) β€” enumerated exhaustively, since it becomes
    the wave-1 data-type PR's checklist.
  • The bulk-list shape the roadmap asks for, so an N-repo hive does not
    pay NΓ— enumeration, with a pagination budget.
  • The compatibility proof. Golden tests running the old GitHub path and
    the new engine on identical fixtures, requiring byte-identical
    ActionableResult β€” the merge gate for the later extraction PR, designed
    now so the extraction cannot drift.
  • Scope statement: one forge per hive (project.forge stays a single
    global selector); mixed-forge hives explicitly deferred.

Constraints

Deliverable / definition of done

An ADR under src/docs/adr/ (PR): the chosen home, the field-gap table, the
bulk-list interface sketch, the golden-test plan, and the scope statement.
Docs only; no behavior change.

Model / effort

Planned execution: Claude Fable 5 at max effort β€” the field-gap
enumeration sweeps go to low-effort subagents; the design and the ADR text
stay at max.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions