Skip to content

Drop beta/main two-channel model; move to trunk-based + release tags #450

Description

@olegbrok

Replaces #449 (which becomes a sub-task — beta needs to be reconciled before / during this migration anyway).

Why

The current PINKYBOT_CHANNEL=stable|beta two-branch model has no production fleet on beta. Mac Mini and Pi both run stable. Beta exists as a long-lived integration branch that diverges from main whenever hotfixes land (#449). Today (2026-05-11) the divergence required a careful cherry-pick (#448) instead of a clean rollup (#447 closed).

The cost of maintaining beta exceeds the value, because beta isn't serving as a soak environment — it's just an unmerged-work parking lot.

Proposed end state

  • One long-lived branch: main. Feature branches off main, short-lived.
  • Tagged releases: v2026.05.071 calver style.
  • Channel via tag selection, not branch:
    • stable → latest v* tag (Mac Mini, Pi fleet)
    • edge → main HEAD (dev hosts)
    • beta → deprecated alias for edge
  • Hotfixes = normal PRs. No special "land on main, backport to beta" pattern.

Design doc

Full plan in docs/plans/task-450-trunk-based-releases.md (gitignored — same as #84, #433).

Migration phases

Phase 1 — Additive (this week):

  1. Reconcile beta ↔ main (closes Reconcile beta↔main divergence (hotfixes on main not in beta) #449) — recommend big-merge approach
  2. Cut baseline tag from main: v2026.05.072
  3. Update update_and_restart to recognize edge and resolve stable to latest tag
  4. Update /admin/channel endpoint
  5. Add release.yml GH Action for manual tag-cut + release-notes
  6. Update Docker workflow for :stable / :edge / :v* tag publishing

Phase 2 — Subtractive (one week later, after validation):

  1. Audit + migrate any host on PINKYBOT_CHANNEL=beta
  2. Remove beta from accepted channel values
  3. Tag archive/beta-2026-05-DD, delete beta branch
  4. Strip channel→branch mapping logic from api.py
  5. Docs + agent CLAUDE.md updates

Files touched (Phase 1)

  • src/pinky_daemon/api.py/admin/channel + /admin/update (channel→ref resolution)
  • .github/workflows/release.yml — new
  • .github/workflows/docker-publish.yml — tag-push trigger + multi-tag publishing
  • Dockerfile — channel arg semantics (if needed)
  • CLAUDE.md — "Release Channels" section
  • README

Effort

~2 days focused work, spread over a week with validation gaps.

Decisions needed from Brad (in design doc)

  1. Big-merge vs drain for beta reconciliation? (rec: big-merge)
  2. Manual tagging or auto-on-schedule? (rec: manual)
  3. Calver v2026.05.072 or semver? (rec: calver)
  4. Bus factor — Brad-only tag permission, or share with an agent?
  5. Phase 2 timing: 1 week after Phase 1, or explicit Brad-ok gate?

Status

Design doc drafted. Awaiting Brad's go on the decision points before Phase 1 step 1 (which is the riskiest).

🤖 Opened by Barsik

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions