Skip to content

feat(aidd-vcs): ci-watch skill with compact GitHub status script #586

Description

@MickaelV0

Problem

Ship / open-PR paths do not wait on CI deterministically. Free-form agent polling is verbose and inconsistent. Sessions can treat work as done while checks are still red. The async orchestrator path (#149) does not give interactive sessions a compact exit-code contract.

Not a duplicate of #149

#149 This issue
Caller Async bot / orchestrator Interactive session skill
Mechanism React to checks/comments in bot loop Local script + skill mapping exit codes
Integration Auto finalize rules Opt-in via features.ci_watch_before_ship

Scope

  • Skill ci-watch: resolve PR | branch | run id → run script → map exit code.
  • Bundled script (GitHub-first), e.g. plugin scripts/ci-watch:
    • deps: gh, jq;
    • flags: --repo, --pr | --run | --branch, optional --workflow, --interval;
    • compact stdout (state-change lines; failed job logs only on red);
    • stable exit codes documented in script header + skill (pass / fail / cancelled / other / pass-but-not-merged if merge watch);
    • pure classifiers unit-testable without network.
  • Integration contract (non-vacuous):
    • Feature flag features.ci_watch_before_ship in .aidd/config.yml (default false = non-breaking).
    • When true, ship/finalize path must run ci-watch and must not claim success on non-zero failure exit.
    • When false, skill remains manually invocable (standalone value).
  • Skill does not re-implement polling in prose as the primary path.

Standalone value: Any session can wait on CI with stable exit codes without an async bot.

Acceptance criteria

  • Green PR: exit 0; short summary.
  • Red PR: non-zero failure; failed check names (+ failed logs only).
  • Skill invokes script and maps exit codes (no primary agent poll loop).
  • Read-only (no commits / force-push).
  • With features.ci_watch_before_ship: true and red checks, ship path does not report success (doc + action test or fixture).
  • With flag false/absent, ship behavior unchanged; skill still runnable alone.
  • Issue body states non-duplicate vs feat(aidd-orchestrator): react to failing CI checks and quality-gate feedback #149 (this section).

Prior art in this repo

Relations

Intended graph (same fields as GitHub parent / blocked-by / blocks). Formal GraphQL edges need maintainer write — see comment on #584.

Field Value
parent #584
blocked-by #585
blocks —
related #149
MVP 1

Out of scope

Activity

  1. blafourcade commented on Sep 9, 2026

    @blafourcade
    Contributor

    The problem is valid, but the proposed implementation duplicates gh pr checks --watch --fail-fast: GitHub CLI already resolves a PR or current branch, watches checks, supports an interval, exposes JSON state buckets, and documents a pending exit code. A bundled gh + jq polling script and its own exit-code taxonomy would create a second contract to maintain.

    There is also no interactive “ship” action to gate today. aidd-vcs:02-pull-request always creates a draft PR and does not claim merge or final delivery success. Consequently features.ci_watch_before_ship in .aidd/config.yml has no current enforcement point and should not depend on #585.

    Suggested narrower follow-up, if the capability remains wanted: a GitHub-backed, read-only VCS skill that calls the native gh pr checks --watch --fail-fast binary and reports pass, fail, pending, or cancelled. On another forge or without gh, it reports that the capability is unavailable. It performs no merge, ship decision, configuration read, custom polling script, or provider-agnostic simulation.

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

    Fields

    Priority

    Low

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions