Skip to content

[RSI Baseline] Close the GitHub Issue-to-Release automation loop #789

Open

Description

@zy95-12

Parent Epic: #784

Why

The baseline must demonstrate a real, end-to-end software delivery loop rather than stop after generating a PR.

Scope

  • Connect GitHub Issues, branches/PRs, review verdicts, required checks, merge queue, tags and Releases.
  • Bind verification/review evidence to the current head SHA; invalidate a verdict when the PR head changes.
  • Reuse GitHub Actions, branch protection and merge queue; never bypass repository rules.
  • Enforce risk-tier-specific merge/release policy and explicit human approval for configured sensitive actions.
  • Generate/validate changelog fragments and release notes; verify published artifacts and report release status.
  • Handle failed CI, review changes, merge conflicts, missing workflow runs and partial release failures.
  • Keep actions idempotent and reconcile against GitHub live state before retrying.

Acceptance criteria

  • A low-risk pilot progresses from Issue through PR, current-SHA verification, required CI, merge queue and a test release.
  • Release artifacts and tag/commit association are verified.
  • Failures have actionable reasons; retries do not create duplicate PRs/releases.
  • No admin merge, gate bypass or implicit production deployment.

Related

Bot identity and review separation

The pilot must use a dedicated, least-privilege GitHub automation identity rather than a maintainer's personal token for routine writes.

  • Create/update the PR and post automation status using the configured GitHub App or dedicated bot identity.
  • Keep the Developer and Reviewer execution contexts separate. A Developer must not be able to manufacture or edit a valid Reviewer verdict merely by writing PR text.
  • Bind the review verdict to the exact head SHA and verify it against GitHub's current PR state before enqueueing.
  • Continue to rely on required CI checks, repository rules and the merge queue; never bypass them. Verify whether the chosen App identity and repository rules can perform each required operation before enabling live automation.
  • Record the actor, operation, target SHA and outcome for each automated write. Keep maintainer-only operations (App installation, permission changes, policy changes and explicitly sensitive releases) behind human authorization.

Acceptance criteria additions

  • A low-risk pilot can create and update its PR without a maintainer's personal GitHub credential.
  • Reviewer evidence is produced by a separately controlled execution path and cannot be forged by the Developer role.
  • App permissions and any operation that still requires a human are documented; no unsupported GitHub permission is assumed.

Activity

  1. added
    area:automationScheduled tasks and automation
    enhancementNew feature or request
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Oct 22, 2026
  2. Birfy commented on Oct 22, 2026

    @Birfy
    Collaborator

    Written-by: Triage

    enhancement|area:automation|area:release|needs-human. This loop is not greenfield — it ran end to end today without Grok Bot: #779 was triaged and made agent-ready, Dev claimed it and opened #783, Reviewer judged it, and v0.2.4 shipped (177d0ffa, tag v0.2.4, release 21:37Z, 39 changelog entries). The pieces are already named and deterministic: .github/workflows/controller.yml, merge-gate.yml, enqueue-guard.mjs, review-gate.mjs, risk-gate.mjs, pass-label.yml, changelog.mjs, release.yml, and .github/agent/.

    So the honest scope is the gaps the loop still has, not a second pipeline. The three I can name from the live record:

    1. Verdicts do not expire on their own. A PASS is bound to a tip by convention (at <sha>) and by review-gate/merge-gate refusing a stale one; nothing invalidates the comment when the head moves, so a person reading the PR sees a green verdict next to a newer commit.
    2. The queue can be entered and silently dropped. #765 was enqueued at 11:24:48 and dropped at 11:24:58 with the guard's reason swallowed; it then sat for 20 minutes. Today's #793 did it right (re-read isInMergeQueue within 60 s) because a person did it by hand. That is a rule in the group notice, not a check.
    3. A merge into main can be green on the PR and red in merge_group (#759: 9/9 on the head, red in follow-through.test.js:264). The rerun is the truth and nothing currently reconciles it back onto the issue.

    To become agent-ready, pick one of those three and write the check that fails without the fix. The rest of the loop is already there and should be linked, not rebuilt.

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

    area:automationScheduled tasks and automationarea:releaseRelease, tags, updatesenhancementNew feature or requestneeds-humanThe agent loop stopped; a person must decide (reason in the last comment)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions