Skip to content

claude-ops v3.10.20

Choose a tag to compare

@github-actions github-actions released this 17 Sep 12:57
· 89 commits to main since this release

Fixed

  • Unread status can no longer be used as an inbox-triage filter on WhatsApp,
    Slack, or Gmail. A message an operator opened and navigated away from without
    replying still owed a reply, so any scan step that relied on read/unread
    state to decide what needs him is wrong by design. ops-inbox, ops-rules,
    and the scan tooling now classify every open item by who spoke last, never
    by read state. A new unread-filter-guard.py hook hard-blocks the unread
    scan calls (whatsapp_unread, mcp__slack__conversations_unreads, and any
    is:unread/unread_count/unread=1 filter passed to a terminal or code
    tool), wired into every box's pre-tool dispatcher. tests/test-unread-filter-guard.sh
    proves the block and allow shapes.

Added

  • ops-release now sweeps open pull requests before it cuts anything. Twice in
    one day a release went out while reviewed, good external PRs sat open, and
    both had to be merged by hand and the release re-cut. The new stage runs
    before the version bump, so the changelog and tag cover everything that
    landed. For every open PR against main — drafts and fork PRs included — it
    classifies the PR, approves workflow runs that GitHub is holding at
    action_required, dispatches one background review agent per PR (all of them
    together, so independent PRs are reviewed in parallel), and merges only what
    the agent blessed and the required checks report green. skipped, neutral
    and cancelled are not failures; failure, timed_out, action_required
    and error are. Anything the agent would not clearly bless, anything still
    red, still draft, or in conflict is reported and left open, and the release
    proceeds without it. The stage is on by default, --no-sweep skips it, and
    --sweep-only runs the sweep and stops. --dry-run never sweeps, since a
    sweep merges for real.

Fixed

  • A pull request from a fork looked permanently blocked. GitHub holds a fork's
    workflow runs at action_required until a maintainer approves them, so the
    required checks never started and mergeable_state stayed blocked forever.
    The sweep approves those held runs, which is what unblocked both stalled
    external contributions.