feat(hygiene): /ca:standup morning briefing + /ca:watch PR babysitter (v2.1.0-beta.4) - #46
Merged
Conversation
…sitter Two opt-in repo-hygiene features for the session-hygiene sprint, built test-first under subagent-driven-development. Both dormant without arbiter: enabled; no change to existing gates. standup-hygiene (Feature 1): - SessionStart hook emits a read-only hygiene briefing on the first session of each local calendar day (one-line offer on later sessions): branch divergence, merged-but-unpruned branches, stale worktrees, stashes/dirty state. Remote git fetch is detached and non-blocking. - /ca:standup performs the cleanups, each under per-action confirmation: ff-only pull on a clean tree, prune of merged branches (never current or default), stale-worktree removal, report-only stash/dirty surfacing. - New hooks/_standuplib.py pure-logic parsers with full unittest coverage. pr-babysitter (Feature 2): - /ca:watch <PR> watches CI via the server-side gh pr checks --watch block (no poll loop). On red: diagnose at CODEARBITER_BABYSIT_ONRED depth (propose | branch). On green: notify + offer the merge, never auto-merge; default-branch merge still routes through the merge-to-default hard gate. - /ca:pr auto-attaches a watcher only when CODEARBITER_BABYSIT is on (default off, mirrors CODEARBITER_PRUNE); the flag is never set for the user. New hooks/_babysitlib.py flag reader with unittest coverage. Version bumped 2.1.0-beta.3 -> 2.1.0-beta.4 (plugin.json, README badge, CHANGELOG). Catalog/routing updated (counts 32->34). CI-parity sweep green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Post-landing bookkeeping: plan task 19 marked ACCEPTED (PR #46; merge to default deferred to the user per the hard gate); sprint-log SH-T19 + sprint-complete entries recorded. Transient sprint-active lock removed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The SessionStart narrative described persona + startup-state injection but not the new first-session-of-day repo-hygiene briefing (and its /ca:standup cleanups). Add a sentence so the prose matches the shipped hook behavior. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Consolidate the user-facing environment variables (CODEARBITER_BABYSIT[_ONRED] and the CODEARBITER_PRUNE family) into one Configuration section after Statusline. They were previously documented only inside individual command bodies, so the opt-in toggles were effectively undiscoverable. Maintainer-only CODEARBITER_DEV is intentionally excluded — it stays in the /ca:dev catalog row. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two opt-in repo-hygiene features from the session-hygiene sprint, built test-first under
subagent-driven-development. Both are dormant in a repo withoutarbiter: enabled, and neither changes an existing gate./ca:standup— daily hygiene + SessionStart morning briefing (Feature 1)git fetchis detached and non-blocking — session start never awaits the network./ca:standupperforms the cleanups, each under per-action confirmation: ff-only pull on a clean tree (refuses on divergence/dirty), prune of merged branches (never the current or default branch), stale-worktree removal, and report-only surfacing of stashes/un-pushed work.hooks/_standuplib.pypure-logic parsers (porcelain / ahead-behind / merged-branch / worktree / stash) with fullunittestcoverage./ca:watch <PR>— PR CI babysitter (Feature 2)gh pr checks --watchblock — zero model tokens while CI runs, not a polling loop.CODEARBITER_BABYSIT_ONREDdepth —propose(default, no tracked-file edit) |branch(an unmergeablespike/fix-*).CODEARBITER_BABYSIT(default off, mirrorsCODEARBITER_PRUNE) auto-attaches a watcher when/ca:propens a PR; the flag is never set on the user's behalf.hooks/_babysitlib.pyflag reader withunittestcoverage.Test plan
_standuplib/_babysitlib/session-startunittest suites — 114 tests greencheck-plugin-refs.py— reference graph intactpy_compileon the 3 touched hooksplugins/ca/tools/**change → farm typecheck/test/build leg not triggeredTradeoffs
_babysitlib.pyis a pure env reader; theghcalls live in orchestrator-executed command prose, already guarded (auth precondition, no poll loop, no auto-merge, default-branch hard gate). Resolved at conflict-hierarchy level 1 (security) — see.codearbiter/sprint-log.md.🤖 Generated with Claude Code