Agents Builders

dor-check unpublished gem guard

Archived
dor-check-gem-guard

Created

Jun 25, 14:52

Started

Jun 25, 16:04

Completed

Jun 25, 19:24

DevOps handoff

Type

Feature

Shape

backend

Worktree Slug

dor-check-gem-guard

Repositories

mcritchie-studio

Release Train

Branch

feat/dor-check-gem-guard

Local URL

QA URL

Production URL

tooling devops-gate

Acceptance Criteria

  • Detect Gemfile constraint the lockfile cannot satisfy
  • Merge gate flags likely-unpublished gem before red CI
  • Deterministic local check; no RubyGems network call
  • Covers studio-engine and solana-studio consumer bumps

Expected Test Plan

  • [unit] dor-check fixture: constraint past lock fails merge gate

Checks Run

  • [unit] gem_constraint_violations: Gemfile constraint vs lock via Gem::Requirement
  • [integration] merge gate blocks/passes Gemfile-vs-lock from disk; ignores path/git + untouched Gemfile (60 runs 0 fail)

Agent Context

From the 2026-06-24/25 enumeral gem-ship session retro. The library/gem seam bit us: mcritchie#157 bumped studio-engine ~>0.9 while 0.9.0 was NOT on RubyGems, so CI went fully red (frozen bundle can't resolve) -> Avi blocked it 'dependency' -> manual publish + relock. dor-check (the deterministic, no-judgment DoR gate) should catch this at SUBMIT. CLEANEST LOCAL CHECK (no network, fits dor-check's offline ethos): when the branch diff bumps a gem constraint in Gemfile (e.g. studio-engine ~>0.9), confirm Gemfile.lock actually resolves a version SATISFYING it; if the lock is behind (still 0.8.0), the new version almost certainly isn't published -> CI will fail 'bundle install --frozen'. Flag at the merge gate with the fix: publish the gem first, or hold the bump / use the git-source bridge. Optional enhancement: cross-check rubygems.org/api/v1/versions for a definitive published signal, but the Gemfile-vs-lock mismatch is sufficient + offline. Tests in test/lib/dor_check_test.rb (a fixture whose diff bumps a constraint past the lock -> gate fails with the gem-seam reason). Would have erased the whole red-CI -> block -> manual-publish detour.

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.

  1. Created Designed
    A Abra
    Abra
    Model
    Duration
    Tokens
    Cost
    Completed Jun 25, 14:52 · 2 days ago
    api
  2. Designed Building
    A Abra
    Abra
    Model
    claude-opus-4-8
    Duration
    about 1 hour
    Tokens
    Cost
    Started Jun 25, 14:52
    Completed Jun 25, 16:04 · 1 day ago
    cli
  3. Building Submitted
    A Abra
    Abra
    Model
    claude-opus-4-8
    Duration
    9 minutes
    Tokens
    33,689,571
    Cost
    ~$19.01
    Started Jun 25, 16:04
    Completed Jun 25, 16:13 · 1 day ago
    cli
  4. Submitted Reviewed
    C Carl
    Carl primary
    J Jasper
    Jasper light
    Model
    claude-opus-4-8
    Duration
    about 2 hours
    Tokens
    Cost
    Started Jun 25, 16:13
    Completed Jun 25, 18:28 · 1 day ago
    cli
  5. Reviewed Assembled
    S Steffon
    Steffon
    Model
    Duration
    29 minutes
    Tokens
    Cost
    Started Jun 25, 18:28
    Completed Jun 25, 18:57 · 1 day ago
  6. Assembled Shipped
    A Avi
    Avi
    Model
    Duration
    26 minutes
    Tokens
    Cost
    Started Jun 25, 18:57
    Completed Jun 25, 19:24 · 1 day ago
  7. Shipped Archived
    8
    81fad33e-98b5-4075-8ed6-d0efe6cb5804
    Model
    claude-opus-4-8
    Duration
    about 2 hours
    Tokens
    89,137,925
    Cost
    ~$64.16
    Started Jun 25, 19:24
    Completed Jun 25, 21:16 · 1 day ago
    cli

Conversation

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

Comment 1 day ago

Review pair APPROVED: carl (heavy) + jasper (light). All 4 acceptance bullets met — Gem::Requirement#satisfied_by? detection; wired merge-gate-only (if gate != build) so it fires before red CI; fully offline (File.read + regex + Gem::Requirement, no network); gem-name-agnostic regex covers studio-engine + solana-studio (verified against live Gemfile/lock, neither false-flagged). False-flag guards sound (path:/git: bridges, untouched Gemfile, new/unlocked gems all skipped). Tests green (56 runs), CI green. Non-blocking nits: only first constraint of a multi-constraint line checked; Gem::Version.new(locked) unrescued; net-new-unpublished-gem intentionally out of scope; a named solana-studio fixture would self-document acceptance #4. Held from release merge until Rails 8.1 RC ships.

Sealed-bid sizing

Edit →

Alex (PM)

Avi (PO)

Dev

Actual