rosett-ai 1.5.9 → 1.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29a816be5fea64d709f477070a052b5b595a13f74c1f77507a17f7f175a87972
4
- data.tar.gz: ca13bcf8795e23edb27c19c27f2b5f90355159f1688f5a40c05e88c45331afd9
3
+ metadata.gz: 9fc2d403485de8a1af9034d9f7bf19e7545620406b691b0c917e6e360ad9e56b
4
+ data.tar.gz: 89a8c039303808bed9f592e0f17d4478ffc87d34f129006a5981651c80bf82ac
5
5
  SHA512:
6
- metadata.gz: fa098e5c74b48e50337278e7a6e8f59a37c4a26d916466d573426882e5aa8b139680d68d9e5d48e5975bfba36f016b6d684716cf829d910fdc85698469f6774a
7
- data.tar.gz: 4951940f5dc9d20cd28f0dc648a2f004c69c7ec8bce406191c91819736e8faae92a51b6393d881fc9a1b511ef555fb77dc3181c65273aedaa866cdb8f731e535
6
+ metadata.gz: 0254e2ea9ea0e3261863ec052e8987e8c45a645de615e9fd266a0ce6d861f90ce04f3c1b3f08ad4c9adc9e17fec951b026c4d01a24446dc69b6597aa7c97f7ed
7
+ data.tar.gz: c201357a747fa445901851484a17bbd5398b3be363bbbecaf8791a120768974a12b34c1a5cedc4173f6990b3ef470418c4ad818168537fdf176f2c2efda3f57e
data/CHANGELOG.md CHANGED
@@ -6,6 +6,21 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.5.10] - 2026-07-08
10
+
11
+ ### Security
12
+
13
+ - **publish:gem CI gate hardened** — `publish:gem` now declares `needs:` on
14
+ `audit:artifact`, `package:smoke-test`, and `package:gem-smoke-test` in
15
+ addition to the existing `audit:gem` gate. Gem publication is blocked until
16
+ both the `.gem` and `.deb` artifact audits pass and the install-parity smoke
17
+ tests succeed. Closes the DAG gap that allowed v1.5.9 to publish the gem
18
+ past failing audit and smoke-test jobs.
19
+
20
+ - **publish:deb-push-aptly CI gate hardened** — adds `package:smoke-test`
21
+ to the existing `needs:` list so `.deb` publication is also blocked until
22
+ the postinst smoke test passes.
23
+
9
24
  ## [1.5.9] - 2026-07-06
10
25
 
11
26
  ### Security
@@ -13,7 +28,7 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
13
28
  - **audit:gem CI gate** — adds a standalone `audit:gem` job (allowlist,
14
29
  denylist, PII scan, gitleaks) wired as a `needs:` dependency of
15
30
  `publish:gem`. Closes the DAG gap that let v1.5.8 publish without any
16
- security verification (WP#3248).
31
+ security verification.
17
32
 
18
33
  ### Added
19
34
 
@@ -22,8 +37,8 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
22
37
  subcommands load without `LoadError` or `NameError`.
23
38
 
24
39
  - **test:mutant:full** — full-suite mutant gate on `v*` tag pipelines;
25
- `allow_failure:true` until surviving mutants are resolved (WP#3248 P1
26
- baseline ~596 survivors).
40
+ `allow_failure:true` until surviving mutants are resolved
41
+ (baseline ~596 survivors).
27
42
 
28
43
  - **sec_016 behaviour rule** — codifies the requirement that every publish
29
44
  job targeting a public registry must declare both an artifact-audit gate
@@ -89,7 +89,7 @@ module RosettAi
89
89
  '.project', '.rosett-ai',
90
90
  # Dev-only documentation (not needed at runtime)
91
91
  'doc/api', 'doc/reference', 'doc/context', 'doc/issues',
92
- 'doc/decisions', 'doc/changes',
92
+ 'doc/decisions', 'doc/changes', 'doc/design',
93
93
  # Security advisories — internal, never ship publicly
94
94
  'doc/security',
95
95
  # Design docs — carry internal WP refs, not runtime-required
@@ -444,13 +444,24 @@ module RosettAi
444
444
  # -- gem installation --------------------------------------------------
445
445
 
446
446
  def install_gems!
447
- spinner = build_spinner('Installing gems (deployment mode)...')
447
+ spinner = build_spinner('Installing gems into embedded gem home...')
448
+ ruby_abi = query_embedded_ruby('RbConfig::CONFIG["ruby_version"]')
449
+ gem_home = staging_embedded.join('lib', 'ruby', 'gems', ruby_abi)
450
+ FileUtils.mkdir_p(gem_home)
448
451
  embedded_bundle = staging_embedded.join('bin', 'bundle').to_s
449
452
 
450
- env = embedded_env
453
+ # Install runtime deps directly into the embedded Ruby's own gem home.
454
+ # The embedded ruby finds them by default (via GEM_HOME) with no wrapper
455
+ # env vars or bundler/setup at runtime — proving genuine self-containment.
456
+ env = clean_env.merge(
457
+ 'PATH' => "#{staging_embedded.join('bin')}:#{HERMETIC_SYSTEM_PATH}",
458
+ 'BUNDLE_GEMFILE' => staging_app.join('Gemfile').to_s,
459
+ 'GEM_HOME' => gem_home.to_s,
460
+ 'GEM_PATH' => gem_home.to_s,
461
+ 'LD_LIBRARY_PATH' => staging_embedded.join('lib').to_s
462
+ )
463
+
451
464
  cmds = [
452
- [env, embedded_bundle, 'config', 'set', '--local', 'deployment', 'true'],
453
- [env, embedded_bundle, 'config', 'set', '--local', 'path', 'vendor/bundle'],
454
465
  [env, embedded_bundle, 'config', 'set', '--local', 'without', 'development test build desktop engines'],
455
466
  [env, embedded_bundle, 'config', 'set', '--local', 'jobs', jobs_count.to_s],
456
467
  [env, embedded_bundle, 'install']
@@ -462,8 +473,8 @@ module RosettAi
462
473
  spinner.error(Rainbow(' failed').red)
463
474
  log_bundle_debug(env, embedded_bundle)
464
475
  abort_build(<<~MSG.chomp)
465
- Gem installation failed.
466
- The embedded Ruby bundler could not resolve or install gems.
476
+ Gem installation into embedded gem home failed.
477
+ The embedded Ruby bundler could not install gems into #{gem_home}.
467
478
  This usually means Bundler environment variables from the parent
468
479
  process leaked into the build. Check the build log for details.
469
480
  MSG
@@ -492,8 +503,8 @@ module RosettAi
492
503
  end
493
504
 
494
505
  def collect_build_artifacts
495
- Dir.glob(staging_app.join('vendor', 'bundle', '**', '{gem_make.out,mkmf.log}')) +
496
- Dir.glob(staging_app.join('vendor', 'bundle', '**', 'ext', '**', 'Makefile'))
506
+ Dir.glob(staging_embedded.join('lib', 'ruby', 'gems', '**', '{gem_make.out,mkmf.log}')) +
507
+ Dir.glob(staging_embedded.join('lib', 'ruby', 'gems', '**', 'ext', '**', 'Makefile'))
497
508
  end
498
509
 
499
510
  def remove_artifact(path)
@@ -523,15 +534,6 @@ module RosettAi
523
534
  # 1. Unsets all Bundler/RubyGems vars inherited from `bundle exec`
524
535
  # 2. Sets PATH to prefer the embedded Ruby
525
536
  # 3. Points BUNDLE_GEMFILE at the staging app's Gemfile
526
- def embedded_env
527
- env = clean_env.merge(
528
- 'PATH' => "#{staging_embedded.join('bin')}:#{HERMETIC_SYSTEM_PATH}",
529
- 'BUNDLE_GEMFILE' => staging_app.join('Gemfile').to_s
530
- )
531
- log_to_file("embedded_env: #{env.inspect}")
532
- env
533
- end
534
-
535
537
  # Strips all Bundler/RubyGems variables. When passed to system(),
536
538
  # nil values cause the variable to be unset in the child process.
537
539
  def clean_env
@@ -5,5 +5,5 @@
5
5
 
6
6
  module RosettAi
7
7
  # @return [String] Current version of the rosett-ai gem.
8
- VERSION = '1.5.9'
8
+ VERSION = '1.5.10'
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rosett-ai
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.9
4
+ version: 1.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hugo Antonio Sepulveda Manriquez