From eb8ed2b1c160a93813ffc5b487477e62a1b5f794 Mon Sep 17 00:00:00 2001 From: Ajay Krishnan Date: Wed, 9 Sep 2026 15:44:55 -0700 Subject: [PATCH] Allow marcel 2 alongside marcel 1 Companion to the same change in opencode-ruby. This gem depends on activestorage directly, and Rails edge moved activestorage to marcel ~> 2.0, so pinning marcel ~> 1.0 makes this gem unresolvable alongside edge: Because every version of activestorage depends on marcel ~> 2.0 and every version of opencode-rails depends on activestorage >= 7.1, < 9.0, every version of opencode-rails requires marcel ~> 2.0. So, because every version of opencode-rails depends on marcel ~> 1.0, version solving has failed. Found by bumping ajent-rails to the new opencode-ruby ref and re-resolving: fixing opencode-ruby alone moved the conflict here rather than clearing it, because both gems carried the same pin. A permissive range rather than a bump, for the same reason as the sibling gem: marcel 2 requires Ruby >= 3.3 while this gem supports >= 3.2 and tests 3.2 in CI, so pinning to 2.x would silently narrow the supported range. One call site, lib/opencode/sandbox_file.rb:51: Marcel::MimeType.for(name: basename) Verified identical under marcel 2.1.0 rather than assumed, including the no-extension fallback this code relies on: for(name: "a.png") -> "image/png" for(name: "x.pdf") -> "application/pdf" for(name: "n.txt") -> "text/plain" for(name: "noext") -> "application/octet-stream" 94 runs, 382 assertions, 0 failures on Ruby 4.0.6. CI covers 3.2 through 4.0, which exercises both ends of the range. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Rch35u85D3buqx7wEsCVki --- opencode-rails.gemspec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/opencode-rails.gemspec b/opencode-rails.gemspec index 50e8027..3b21417 100644 --- a/opencode-rails.gemspec +++ b/opencode-rails.gemspec @@ -38,7 +38,13 @@ Gem::Specification.new do |spec| # exactly (= not ~>) so that consumers always pick the version this gem # was tested against. spec.add_runtime_dependency "opencode-ruby", "= 0.0.1.alpha9" - spec.add_runtime_dependency "marcel", "~> 1.0" + # Rails edge moved activestorage to marcel ~> 2.0, and this gem depends on + # activestorage directly, so pinning ~> 1.0 makes it unresolvable alongside + # edge. marcel 2 requires Ruby >= 3.3 while this gem supports >= 3.2, so the + # bound is a permissive range rather than a bump: consumers on 3.3+ resolve + # marcel 2, consumers on 3.2 resolve marcel 1. The single call site, + # Marcel::MimeType.for(name:), behaves identically in both majors. + spec.add_runtime_dependency "marcel", ">= 1.0", "< 3" # Rails sub-libraries used at runtime. Depending on these individually # (instead of the `rails` umbrella) avoids forcing host apps to load