Agents Builders

Run Deployment: gem releases as first-class members, published gems-first

Archived
task-1c92c482df6e

Created

Jun 21, 22:13

Started

Jun 21, 22:13

Completed

Jun 22, 13:55

DevOps handoff

Type

Feature

Shape

backend

Worktree Slug

gems-first-deployment

Repositories

mcritchie-studio

Release Train

Branch

feat/gems-first-deployment

Local URL

QA URL

Production URL

release-pipeline gem-publish deploy-ordering docs

Acceptance Criteria

  • A release can include gem-repo tasks (studio-engine, solana-studio) as first-class members; Release::Conductor.prepare! no longer breaks the assemble step on a member that has no app branch in the release repo.
  • Run Deployment (bin/release ship) processes members producer-first: gem members are published (PR merge + version bump + RubyGems push) BEFORE any app member deploys, honoring task dependencies (producer before consumer).
  • The gem-publish step is approval-gated — an explicit confirm like the prod-deploy confirm, never a silent gem push.
  • DOCS (the priority): devops-cycle-design.md + deployment.md document gem members + gems-first Run Deployment + the gem-release lifecycle; the board/in-app per-task action reflects gem vs app instead of offering an app-release button for a gem task.
  • Tests: Conductor producer-first ordering + gem-vs-app member classification covered at unit + integration tiers.

Expected Test Plan

  • [unit] repo classification (gem vs app) + Conductor producer-first member ordering
  • [integration] prepare! on a mixed gem+app release assembles without merging the gem branch and orders gem members first

Checks Run

  • [unit] bin/rails test test/models/release/repos_test.rb test/models/task_test.rb test/models/release/conductor_test.rb — repo gem/app classification, Task#release_repo/gem_release?, producer-first ordering + member_plan
  • [integration] bin/rails test test/integration/release_flow_test.rb — mixed gem+app release: member_plan gem-first, gem kind+version / app branch, dependencies honored
  • [unit] bin/rails zeitwerk:check clean; full suite 849 runs, 0 failures, 0 errors (4 pre-existing skips)

Stage Timeline

Who handled each stage, the time it took (measured), and the model / tokens / cost reported (best-effort) — plus who's on it right now. means the agent didn't report that metric.

No stage changes recorded yet.

Conversation

QA review feedback, agent handoffs, and follow-up notes for this task.

QA Feedback 5 days ago

QA (Avi): APPROVE-WITH-NITS — all 5 acceptance criteria met; docs excellent + accurate; tests strong (66/66); irreversible-ordering discipline correct (validations before gem push, gems before app deploy, loud abort). REQUIRED before merge (mechanical, not a defect): branch 14 behind origin/main + CONFLICTING — rebase + resolve 2 files by KEEPING BOTH (task.rb: main's slug trickle-down [attr_readonly :slug + default_devops_handles_from_slug + generate_slug] AND this PR's release_repo/gem_release?/release_kind/repo_from_pr_url — no overlap; deployment.md: both append distinct sections), re-run suite. Non-blocking nits -> fold into Task A (task-f25fabc1b67c): (1) solana-studio has no release_check so its publish skips the pre-push test gate — add one or document consuming-app-QA reliance; (2) consider --yes NOT auto-approving the irreversible gem push; (3) add a Release::Ordering dependency-cycle unit test; (4) no pre-flight 'version already published' check.

Comment 5 days ago

MERGED to main (squash) 2026-06-22 as the FOUNDATION for Task A (task-f25fabc1b67c, multi-repo conductor) — merged directly per operator instruction ('land #82 first'), not via a release. Rebased clean onto main first (carl: keep-both on task.rb/test_task.rb slug-vs-classification + deployment.md; full suite 880/0, CI green). Already in main, so it will reach prod + flip to shipped on the next mcr release (its branch merge is a harmless no-op). Left at 'reviewed' (self-healing). NOTE: this 'merged-to-main-but-not-deployed' awkwardness is itself a board-model gap Task A/B should address (a landed/merged state or auto-advance-on-merge).

Sealed-bid sizing

Edit →

Alex (PM)

Avi (PO)

Dev

Actual