Hand-written. ../harvested/package-and-dependency-layout.md is what the documents say; this file
is what the implementation found, and it wins. Each entry names the harvested entry it answers by
that entry's stable key.
- Ruby version floor: the design wins —
required_ruby_version >= 3.2in every gemspec, with a 3.2 / 3.3 / 3.4 / 4.0 CI matrix. Resolvespackage-and-dependency-layout/41b154a3. Library-versus-application again, and this is the clearest case of it:.ruby-versionpins the interpreter an application runs on, and a gem does not choose its consumer's interpreter —required_ruby_versiononly excludes consumers.NFR-10requires a declared lowest-supported-runtime floor targeted by all general-purpose units; pinning 4.0 would make the SDK uninstallable on every currently-maintained Ruby below it for no correctness gain. What the SDK does instead: floor 3.2 (the release that introducedData.define, which the domain model depends on),TargetRubyVersion: 3.2in.rubocop.yml, and the matrix runs the real suite on each Ruby rather than a syntax check, becauseTargetRubyVersioncatches syntax and not stdlib availability. The 4.0 column is load-bearing for a second reason: it is where the bundled-gem trap (logger,ostruct,benchmark,fiddle,pstoreleave the default set at 4.0) and the clean-bundle isolation run actually fire..ruby-versionremains committed for development, and it names the highest Ruby in the matrix, not the floor. The styleguide-amendment alternative (separating.ruby-versionfromrequired_ruby_versionin rule 1.1) was considered and not taken; this is recorded as an SDK deviation instead. review ·docs/work/mvp/2026-09-05-ruby-sdk-v1-roadmap-design.md· high · sha:manual-roadmap-conflict-3 - Gems per repository: the design wins — one repository, one directory and one gemspec per published gem under
gems/. Resolvespackage-and-dependency-layout/8c0687bf. The styleguide's rule reads "multiple gemspecs in one repo signal the gem should be split", and the port agrees with the signal and has already acted on it: the gems are split, intodexpace-coreplus one adapter per seam, which is exactly whatNFR-2asks for. The disagreement is only about repository count, which the styleguide's chapter does not actually reason about. What the SDK does instead: theaws-sdk-ruby/rubocopshape — one lean core and independently versioned satellites in one repository with shared CI and a rootVERSIONSfile asNFR-14's single source of truth. Thedry-rbone-repo-per-gem model was weighed and rejected because adapters must track core's seam interfaces closely while those interfaces are still moving pre-1.0, and cross-repo CI would cost more than it saves. Within eachgems/<name>/directory the styleguide's standard gem layout is followed exactly: single entry point,sig/,test/mirroringlib/, one gemspec. The styleguide-amendment alternative (rewording rule 12.5 point 4 to "one gemspec per published gem") was considered and not taken; this is recorded as an SDK deviation instead. review ·docs/work/mvp/2026-09-05-ruby-sdk-v1-roadmap-design.md· high · sha:manual-roadmap-conflict-4
- The Ruby 4.0 bundled-gem list is longer than five names,
raccleft at 3.3 andtsortleaves at 4.1,setstops being a gem entirely at 4.0, andGem::BUNDLED_GEMS::SINCEdoes not exist on the 3.2 floor. Supersedespackage-and-dependency-layout/934983a1and corrects the illustrative default-gem list inpackage-and-dependency-layout/a50018cc. The harvested facts were verified on Ruby 3.4.10 only, where the 4.0 column ofGem::BUNDLED_GEMS::SINCEwas still a forward-looking table; re-verified on 2026-09-05 against installed interpreters 3.2.11, 3.4.10 and 4.0.6 (ruby -e 'require "bundler"; p Gem::BUNDLED_GEMS::SINCE'under each), the table on Ruby 4.0.6 has 23 entries, not the 6 the harvested entry implies:raccsince 3.3.0;abbrev,base64,bigdecimal,csv,drb,getoptlong,mutex_m,nkf,observer,resolv-replace,rindaandsyslogsince 3.4.0;benchmark,fiddle,irb,logger,ostruct,pstore,rdoc,relineandwin32olesince 4.0.0; andtsortsince 4.1.0. Why it matters rather than being a longer list of the same thing:irb,rdocandrelineare names the harvested entry does not warn about and a core file could plausibly reach for;tsortis default on every Ruby in the supported range and is still a trap, because it leaves at 4.1 and an allowlist built from "default on the highest supported Ruby" would admit it today and break at the next floor bump. Two further corrections in the same family:setis not a default gem on 4.0.6 at all —Setis a core class there,Set.instance_method(:add).source_locationisnil, andrequire "set"succeeds as a no-op — so citing it as an example of a default gem is true on 3.2 and 3.4 and false on 4.0; andpathnameandcgimove the other way, from default gem on 3.2/3.4 to non-gemified stdlib on 4.0. And the mechanism itself has a floor:Gem::BUNDLED_GEMS::SINCEis undefined on Ruby 3.2.11, so the require-allowlist audit cannot read it on the floor interpreter and must take the highest Ruby in the matrix as the authority, which is whatdocs/sdk-design-ruby/09-toolchain-and-quality-gates.md§9.2 already says and is now a hard constraint rather than a preference. The counts behind all of this: 3.2.11 ships 71 default gems and noSINCEtable, 3.4.10 ships 58 default gems and a 28-entry table, 4.0.6 ships 46 default gems and a 23-entry table. Every name in the port's committed require-allowlist was checked torequirecleanly on all three. review ·docs/work/mvp/phase0/2026-09-05-phase0-scaffold-and-quality-gates-design.md· high · sha:manual-phase0-bundled-gems