ace-test-runner-e2e 0.40.4 → 0.40.6
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/.ace-defaults/e2e-runner/config.yml +1 -1
- data/CHANGELOG.md +17 -0
- data/lib/ace/test/end_to_end_runner/molecules/bwrap_sandbox_backend.rb +36 -12
- data/lib/ace/test/end_to_end_runner/molecules/config_loader.rb +1 -1
- data/lib/ace/test/end_to_end_runner/molecules/pipeline_prompt_bundler.rb +2 -1
- data/lib/ace/test/end_to_end_runner/molecules/sandbox_runtime_builder.rb +1 -1
- data/lib/ace/test/end_to_end_runner/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8d69fa4e48a31e4dd0f92cf961dfcc9b1c2fca7b392e61519add56ab806bc492
|
|
4
|
+
data.tar.gz: d07a32cde8ab19937798129a563d65ef97884caf0158ce0dd5c6f757fdec352c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d6c7df27616d263629bcda75f2a3ff6eb098170115a8ad3a21cab96ff3e860a380f555c9d06603baef3f6922a7616880392c79cace2888ae89da41d40e55a275
|
|
7
|
+
data.tar.gz: 39158b36f9a7b20d5c1e7ee8c5ae27b488482e4724d63758234a59700ca98ec67c8ac03e6783d5b1369b2fafa027db8013f188ad2c70716a330f2ac4bfeeb12b
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.40.6] - 2026-09-29
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- macOS E2E runs keep provider auth: sandbox HOME/TMPDIR/XDG_RUNTIME_DIR/TMUX_TMPDIR overrides now apply only when the bwrap sandbox is supported.
|
|
14
|
+
- Prepared env clears RUBYOPT/RUBYLIB with empty strings so ambient loader variables cannot leak into runner/verifier children (plain delete does not unset through env-hash spawns, and nil-unset is unreliable once RubyGems re-reads the ambient environment).
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- Runner system prompt: scenario-prescribed isolation (for example `env -i` and direct executables) must be executed exactly as written.
|
|
18
|
+
- Verifier system prompt: pre-created placeholder files are input contracts, not postcondition evidence.
|
|
19
|
+
|
|
20
|
+
### Technical
|
|
21
|
+
- Regression test proving a contaminated parent RUBYLIB cannot reach backend children.
|
|
22
|
+
|
|
23
|
+
## [0.40.5] - 2026-09-02
|
|
24
|
+
|
|
25
|
+
### Technical
|
|
26
|
+
- Included in the coordinated all-package patch release preparation for ACE monorepo review.
|
|
10
27
|
## [0.40.4] - 2026-08-12
|
|
11
28
|
|
|
12
29
|
### Technical
|
|
@@ -41,6 +41,7 @@ module Ace
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def ensure_available!
|
|
44
|
+
return unless self.class.supported?
|
|
44
45
|
return if self.class.available?(bwrap_path: @bwrap_path)
|
|
45
46
|
|
|
46
47
|
raise "bubblewrap is required for Linux E2E sandboxing but '#{@bwrap_path}' is not available"
|
|
@@ -48,13 +49,19 @@ module Ace
|
|
|
48
49
|
|
|
49
50
|
def prepared_env(base_env = {})
|
|
50
51
|
env = stringify_keys(base_env)
|
|
51
|
-
|
|
52
|
+
# Empty strings clear inherited loader vars for children. A plain
|
|
53
|
+
# delete leaves the parent's value leaking through env-hash spawns,
|
|
54
|
+
# and nil-unset is unreliable once RubyGems auto-activation re-reads
|
|
55
|
+
# the ambient environment.
|
|
56
|
+
STRIPPED_ENV_KEYS.each { |key| env[key] = "" }
|
|
52
57
|
env["PROJECT_ROOT_PATH"] = @sandbox_root
|
|
53
58
|
env["ACE_E2E_SOURCE_ROOT"] ||= @source_root if @source_root
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
59
|
+
if self.class.supported?
|
|
60
|
+
env["HOME"] = sandbox_home
|
|
61
|
+
env["TMPDIR"] = sandbox_tmp
|
|
62
|
+
env["XDG_RUNTIME_DIR"] = sandbox_runtime_dir
|
|
63
|
+
env["TMUX_TMPDIR"] ||= sandbox_runtime_dir
|
|
64
|
+
end
|
|
58
65
|
env["BUNDLE_GEMFILE"] ||= File.join(@sandbox_root, ".ace-local", "e2e-runtime", "Gemfile")
|
|
59
66
|
env["ACE_CONFIG_PATH"] ||= File.join(@sandbox_root, ".ace")
|
|
60
67
|
env["BUNDLE_APP_CONFIG"] ||= bundler_app_config
|
|
@@ -70,6 +77,8 @@ module Ace
|
|
|
70
77
|
end
|
|
71
78
|
|
|
72
79
|
def command_prefix(chdir:, env: {})
|
|
80
|
+
return [] unless self.class.supported?
|
|
81
|
+
|
|
73
82
|
ensure_available!
|
|
74
83
|
merged_env = prepared_env(env)
|
|
75
84
|
ensure_runtime_dirs(merged_env)
|
|
@@ -125,16 +134,31 @@ module Ace
|
|
|
125
134
|
end
|
|
126
135
|
|
|
127
136
|
def capture3(cmd, chdir:, env: {}, stdin_data: nil)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
137
|
+
if self.class.supported?
|
|
138
|
+
Open3.capture3(
|
|
139
|
+
@outer_env,
|
|
140
|
+
*wrap_command(cmd, chdir: chdir, env: env),
|
|
141
|
+
chdir: "/",
|
|
142
|
+
stdin_data: stdin_data
|
|
143
|
+
)
|
|
144
|
+
else
|
|
145
|
+
full_env = prepared_env(env)
|
|
146
|
+
Open3.capture3(
|
|
147
|
+
@outer_env.merge(full_env),
|
|
148
|
+
*Array(cmd),
|
|
149
|
+
chdir: chdir,
|
|
150
|
+
stdin_data: stdin_data
|
|
151
|
+
)
|
|
152
|
+
end
|
|
134
153
|
end
|
|
135
154
|
|
|
136
155
|
def exec(cmd, chdir:, env: {})
|
|
137
|
-
|
|
156
|
+
if self.class.supported?
|
|
157
|
+
Kernel.exec(@outer_env, *wrap_command(cmd, chdir: chdir, env: env))
|
|
158
|
+
else
|
|
159
|
+
full_env = prepared_env(env)
|
|
160
|
+
Kernel.exec(@outer_env.merge(full_env), *Array(cmd), chdir: chdir)
|
|
161
|
+
end
|
|
138
162
|
end
|
|
139
163
|
|
|
140
164
|
private
|
|
@@ -62,7 +62,7 @@ module Ace
|
|
|
62
62
|
# @return [String] Dedicated Ruby version for sandbox runtime
|
|
63
63
|
def self.default_sandbox_ruby_version
|
|
64
64
|
config = load
|
|
65
|
-
config.dig("sandbox", "ruby_version") ||
|
|
65
|
+
config.dig("sandbox", "ruby_version") || RUBY_VERSION
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
# @return [Array<String>] CLI provider names
|
|
@@ -17,7 +17,7 @@ module Ace
|
|
|
17
17
|
Rules:
|
|
18
18
|
- Execute each goal in order
|
|
19
19
|
- Treat the initial working directory as SANDBOX_ROOT; if a goal needs commands in a created worktree, cd there for execution but keep any declared outcome artifacts under SANDBOX_ROOT/results
|
|
20
|
-
- Preserve the sandbox runtime environment; do not reset PATH, HOME, or other provided env vars
|
|
20
|
+
- Preserve the sandbox runtime environment for ACE tooling; do not reset PATH, HOME, or other provided env vars on your own initiative. When a goal prescribes its own isolation (for example `env -i` or direct executables for the tool under test), execute it exactly as written — do not drop `env -i` or substitute partial environment overrides
|
|
21
21
|
- If `ACE_E2E_SANDBOX_RUNTIME_ROOT` is set, make sure command execution uses `$ACE_E2E_SANDBOX_RUNTIME_ROOT/bin` on PATH in the shell where you run scenario commands
|
|
22
22
|
- Run `ace-*` commands directly; do not wrap them with `timeout`, `env -i`, or other execution wrappers that can change behavior or hide diagnostics
|
|
23
23
|
- Do not bypass the public CLI with repo-local executables such as `./exe/ace-*`, `bin/ace-*`, or `ruby .../exe/ace-*`
|
|
@@ -41,6 +41,7 @@ module Ace
|
|
|
41
41
|
- Treat declared artifacts and helper filenames as hints, not as the source of truth
|
|
42
42
|
- If a helper file is missing or stale, inspect the sandbox directly before failing the goal
|
|
43
43
|
- Use artifact mtimes to detect runner ordering mistakes; if postcondition captures are older than the primary command's stdout/stderr/exit, classify the goal as `runner-error` unless direct sandbox state proves a product failure after the command completed
|
|
44
|
+
- Pre-created placeholder files required by the goal contract are input contracts, not postcondition evidence; their emptiness or older mtimes never fails a goal on their own
|
|
44
45
|
- Use read-only commands in the sandbox when they materially improve confidence (for example: git log/status/show, ls/find/cat)
|
|
45
46
|
- Do not speculate beyond the provided sandbox evidence and runner observations
|
|
46
47
|
- For each failed goal, include a category:
|
|
@@ -10,7 +10,7 @@ module Ace
|
|
|
10
10
|
module Molecules
|
|
11
11
|
# Builds a sandbox-local Ruby/Bundler runtime for E2E execution.
|
|
12
12
|
class SandboxRuntimeBuilder
|
|
13
|
-
DEFAULT_RUBY_VERSION =
|
|
13
|
+
DEFAULT_RUBY_VERSION = RUBY_VERSION
|
|
14
14
|
DEFAULT_SHARED_RUNTIME_CACHE_ROOT = ".ace-local/test-e2e/runtime-cache"
|
|
15
15
|
SHARED_RUNTIME_ENV_KEY = "ACE_E2E_SHARED_RUNTIME_ROOT"
|
|
16
16
|
RUNTIME_CACHE_LAYOUT_VERSION = 1
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ace-test-runner-e2e
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.40.
|
|
4
|
+
version: 0.40.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michal Czyz
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-
|
|
10
|
+
date: 2026-09-29 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: ace-support-cli
|
|
@@ -43,14 +43,14 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - "~>"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '0.
|
|
46
|
+
version: '0.18'
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - "~>"
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '0.
|
|
53
|
+
version: '0.18'
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: ace-support-test-helpers
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -71,14 +71,14 @@ dependencies:
|
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '0.
|
|
74
|
+
version: '0.39'
|
|
75
75
|
type: :runtime
|
|
76
76
|
prerelease: false
|
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
79
|
- - "~>"
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0.
|
|
81
|
+
version: '0.39'
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
83
|
name: ace-b36ts
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|