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 +4 -4
- data/CHANGELOG.md +18 -3
- data/lib/rosett_ai/thor/tasks/build.rb +20 -18
- data/lib/rosett_ai/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9fc2d403485de8a1af9034d9f7bf19e7545620406b691b0c917e6e360ad9e56b
|
|
4
|
+
data.tar.gz: 89a8c039303808bed9f592e0f17d4478ffc87d34f129006a5981651c80bf82ac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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(
|
|
496
|
-
Dir.glob(
|
|
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
|
data/lib/rosett_ai/version.rb
CHANGED