Skip to content

epic: private ap-mini operator (Steward) for autonomous repo stewardship #49

@anipotts

Description

@anipotts

context

docs/rfcs/freshness-watcher.md and docs/rfcs/mini-control-plane.md describe a pattern for an always-on operator machine that monitors upstream sources and keeps this repo current. the reference implementation lives outside this repo (private to ani, hosted on ap-mini, integrated with the Rudy OS plan). this issue tracks the public-repo coordination work that pairs with that private build.

what already exists locally (not on origin)

  • wip/mini-control-plane branch — preserved 1,200 lines of in-progress operator code (control_plane.py, launchd plist templates, run-job.sh, tests, workflow-thinning diffs). this WIP was scaffolded inside this repo before the public/private split was clarified. it should be cannibalized by the private operator and deleted from here.
  • handoffs/rudy-os-steward-prompt.md (gitignored) — comprehensive spec for the Steward module: voice rules, monitoring sources, action catalog, notification tiers, full YAML config schema, abstraction requirements for adding a second repo, onboarding UX. used as the planning artifact when the operator implementation is started.

what this repo has to do (the public coordination)

  • confirm .github/workflows/stamp-bump.yml accepts workflow_dispatch cleanly with a version input. currently does — verify the input contract is documented and stable.
  • confirm .github/workflows/auto-merge-autonomous.yml covers the auto/upstream-* and auto/freshness-* branch namespaces, with the trusted-author + trusted-branch matrix the operator will produce PRs from.
  • document the public side of the contract in docs/freshness.md (new file, see #FOLLOW-UP): "this repo's freshness automation is driven by a private operator; here's the workflow_dispatch surface and auto-merge rule matrix it relies on. anyone adopting the pattern has a working public side."
  • update docs/rfcs/freshness-watcher.md to clarify "reference implementation lives on the operator, not in this repo" + remove any phrasing that implied the implementation would be checked into this repo.
  • decide what to do with wip/mini-control-plane: harvest into private operator → delete branch from this repo. tracking in #FOLLOW-UP.

scope NOT in this repo

private mini-side implementation, voice classifier internals, notification dispatcher, dashboard UI, per-repo YAML configs, OAuth + scoped GitHub-token rotation. those live in the private rudy/ops tree per the Rudy OS plan.

quality bar this repo must hold up under operator-driven PRs

these are referenced in AGENTS.md + REVIEW.md and need to remain enforced via CI:

  • em-dash count == 0 in any markdown/JSON the operator commits
  • marketing-adjective scan (configurable list) == 0
  • version stamps consistent across files
  • markdown-lint, link-check, plugin-smoke all green before any auto-merge fires

sub-issues (filed separately)

  • #FOLLOW-UP docs/rfcs/freshness-watcher.md update
  • #FOLLOW-UP wip/mini-control-plane harvest decision
  • #FOLLOW-UP create docs/freshness.md
  • #FOLLOW-UP investigate why PR upstream: official claude code updates 2026-04-24 #40 was closed-not-merged (auto-merge contract gap?)

ownership

all coordination on this issue is repo-side only. the private operator work is in ani's private rudy/ops plan and references this issue from there.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestepicTracks a multi-issue body of workoperatorPrivate operator-side coordination

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions