Skip to content

Conversation

@delner
Copy link
Collaborator

@delner delner commented Dec 27, 2025

Summary

Problem

  • CI began failing on Ruby 3.4 with cannot load such file -- base64 (LoadError).
  • Production users on Ruby 3.4 using Braintrust::Trace::Attachment would also encounter this error (since Nov 10, version 0.0.4)

Cause

  • Dec 2024: Ruby 3.4.0 released, moving base64 from stdlib to bundled gem
  • Aug 2025: VCR 6.3.0 adds base64 as a runtime dependency for Ruby 3.4 compatibility
  • Nov 10, 2025: Attachment class added with require "base64" — bug introduced but hidden because VCR (dev dependency) transitively provided base64
  • Dec 22, 2025: VCR 6.4.0 drops base64 dependency — bug unveiled in CI

Solution

Created Internal::Encoding::Base64 module using Ruby's native pack/unpack methods, eliminating the external dependency entirely:

Internal::Encoding::Base64.strict_encode64(data)  # uses [data].pack("m0")
Internal::Encoding::Base64.strict_decode64(str)   # uses str.unpack1("m0")

@delner delner requested review from clutchski and realark December 27, 2025 00:07
@delner delner self-assigned this Dec 27, 2025
@delner delner added the bug Something isn't working label Dec 27, 2025
@delner delner force-pushed the fix/missing_base64_dependency branch from 3abf692 to ec1eebf Compare December 27, 2025 00:15
@delner delner force-pushed the fix/missing_base64_dependency branch from ec1eebf to e918404 Compare December 27, 2025 01:07
@delner
Copy link
Collaborator Author

delner commented Dec 27, 2025

Fun discovery: looks like this was broken upstream in openai/openai-ruby#225 too, fixed in version 0.37.0. Older versions running Ruby 3.4 will remain affected.

@delner delner merged commit 40af7c7 into main Dec 29, 2025
7 checks passed
@delner delner deleted the fix/missing_base64_dependency branch December 29, 2025 06:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants