This doesn't break semver.
It does not introduce a backwards incompatible change from the Ruby ecosystem's
perspective (the change is within internal specifications and is completely compatible
with previous versions of Ruby/RubyGems). You're expecting a semver contract with
internal gem specifications that doesn't exist.
And what I am doing with the "gem spec" output is my
business, I might just checking its checksum, or I might modify it, it doesn't really
matter.
Indeed, you can do whatever you want with the output. But note, there's further proof
your semver contract isn't applicable here - from the RubyGems specification, `gem
spec`'s purpose is described as follows:
The specification command allows you to extract the specification
from a gem for **examination**.
There's no break in contract, as you're still getting what RubyGems uses...for
examination.