ace-compressor 0.24.7 → 0.25.2

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: c46b4cab47deb8e1a3287e8bedb9e57d84363fc1ccfe5539740df6b962fecb71
4
- data.tar.gz: e5a2fbd022f5d9c4c407dd0b017981b991ffddb8333bc3631a08e0f69d95d828
3
+ metadata.gz: e1c996e7eab195756890b7054562db27f6c26889dbd877e24bc6b65ecc6dbfee
4
+ data.tar.gz: 19709fefdc5d05514374017e54f0a7b2601ae844fc1e05c894ad1bfd1ce24f05
5
5
  SHA512:
6
- metadata.gz: a4f3461475cefae66b44867148a8bdc47377e2532439f05b9f2c46c9676aa39f1b7b7675cb55e7fce9fd136605b410c0d5c2e8ca2e8b9e6a2e3cbb6305773e7a
7
- data.tar.gz: 0e5be68f63714ba0f641379d5c3ec3829e977372250b1af5d0670699e91fc901912f13ef82b283885b34a5759be0938a3cfbb11a4e2a0638aa8c7a834defd0ae
6
+ metadata.gz: ac0cacd03fad49727d70c294d9032f2bba3e08b2055f9cf2d4e907be567f8673426eb5826154b53ba9d34bd7d07a775fb302eb5f93a88208fd2c4eb98440641d
7
+ data.tar.gz: 7252c6067f0c3a19029301f4220e82df8dacd4953970705a44813cf4cf370382199f240d2744259a1a3761dcb3597e5580ad48e2b5deff5cf2128b71d99bdcf4
data/CHANGELOG.md CHANGED
@@ -4,6 +4,42 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.25.2] - 2026-06-30
8
+
9
+ ### Fixed
10
+ - Canonicalized exact and compact compressor source labels through real paths so symlinked project files and missing descendants render stable project-relative labels.
11
+
12
+ ### Technical
13
+ - Bumped exact, compact, and agent cache contract keys for the source-labeling fix.
14
+
15
+ ## [0.25.1] - 2026-04-16
16
+
17
+ ### Technical
18
+ - Updated `TS-COMP-001` sandbox setup to source `mise.toml` from `${ACE_E2E_SOURCE_ROOT:-$PROJECT_ROOT_PATH}` so public-surface smoke runs remain compatible with the shared E2E sandbox contract.
19
+
20
+ ## [0.25.0] - 2026-04-14
21
+
22
+ ### Changed
23
+ - Rewrote `TS-COMP-001` around public-surface goal-style contracts by preserving core smoke journeys, replacing brittle compact-refusal fixture behavior, and adding documented `--mode agent` and `benchmark` smoke goals.
24
+
25
+ ### Technical
26
+ - Updated scenario manifests, decision records, and verification criteria to align with impact-first E2E evidence while keeping package test coverage references current.
27
+
28
+ ## [0.24.9] - 2026-04-13
29
+
30
+ ### Changed
31
+ - Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
32
+
33
+ ### Technical
34
+ - Included in the coordinated assignment-driven patch release for batch i05 package updates.
35
+
36
+
37
+ ## [0.24.8] - 2026-04-12
38
+
39
+ ### Technical
40
+ - Migrated deterministic package tests from `test/{atoms,commands,molecules,organisms}` to `test/fast/...` and updated relative test helper loading for the new layout.
41
+ - Refreshed `TS-COMP-001` E2E scenario metadata and verifier checks to align smoke contracts with the fast/feat/e2e model, including guarded sandbox setup when `mise.toml` is absent.
42
+
7
43
  ## [0.24.7] - 2026-04-01
8
44
 
9
45
  ### Fixed
@@ -12,9 +12,9 @@ module Ace
12
12
  PACK_EXTENSION = ".pack"
13
13
  METADATA_EXTENSION = ".json"
14
14
  SHORT_KEY_LENGTH = 12
15
- EXACT_CACHE_CONTRACT = "exact-list-shell-v3"
16
- COMPACT_CACHE_CONTRACT = "compact-list-shell-v3"
17
- AGENT_CACHE_CONTRACT = "agent-payload-rewrite-v7"
15
+ EXACT_CACHE_CONTRACT = "exact-list-shell-v4"
16
+ COMPACT_CACHE_CONTRACT = "compact-list-shell-v4"
17
+ AGENT_CACHE_CONTRACT = "agent-payload-rewrite-v8"
18
18
 
19
19
  def initialize(cache_root: nil, project_root: Dir.pwd)
20
20
  @cache_root = File.expand_path(cache_root || default_cache_root, project_root)
@@ -445,13 +445,53 @@ module Ace
445
445
  end
446
446
 
447
447
  def source_label(source)
448
- pathname = Pathname.new(source)
449
- project_root = Pathname.new(Dir.pwd)
450
- relative = pathname.relative_path_from(project_root).to_s
451
- return relative unless relative.start_with?("..")
452
- source
448
+ value = source.to_s
449
+ return value if logical_source?(value)
450
+
451
+ source_path = canonical_path(value)
452
+ project_root = canonical_path(Dir.pwd)
453
+ relative = relative_path_under(source_path, project_root)
454
+ return relative if relative
455
+
456
+ value
457
+ end
458
+
459
+ def logical_source?(value)
460
+ return true unless Pathname.new(value).absolute?
461
+
462
+ value.match?(%r{\A[a-z][a-z0-9+\-.]*://}i)
453
463
  rescue ArgumentError
454
- source
464
+ true
465
+ end
466
+
467
+ def canonical_path(path)
468
+ expanded = File.expand_path(path)
469
+ return File.realpath(expanded) if File.exist?(expanded)
470
+
471
+ canonical_missing_path(expanded)
472
+ rescue
473
+ File.expand_path(path)
474
+ end
475
+
476
+ def canonical_missing_path(path)
477
+ parent = path
478
+ suffix = []
479
+ until File.exist?(parent) || parent == File.dirname(parent)
480
+ suffix.unshift(File.basename(parent))
481
+ parent = File.dirname(parent)
482
+ end
483
+ return path unless File.exist?(parent)
484
+
485
+ File.join(File.realpath(parent), *suffix)
486
+ end
487
+
488
+ def relative_path_under(path, root)
489
+ return "." if path == root
490
+
491
+ prefix = "#{root}#{File::SEPARATOR}"
492
+ return path.delete_prefix(prefix) if path.start_with?(prefix)
493
+
494
+ nil
455
495
  end
456
496
 
457
497
  def flush_pending_section!(lines, pending_section)
@@ -164,14 +164,15 @@ module Ace
164
164
  end
165
165
 
166
166
  def source_label(source)
167
- pathname = Pathname.new(source)
168
- project_root = Pathname.new(Dir.pwd)
169
- relative = pathname.relative_path_from(project_root).to_s
170
- return relative unless relative.start_with?("..")
167
+ value = source.to_s
168
+ return value if logical_source?(value)
171
169
 
172
- source
173
- rescue ArgumentError
174
- source
170
+ source_path = canonical_path(value)
171
+ project_root = canonical_path(Dir.pwd)
172
+ relative = relative_path_under(source_path, project_root)
173
+ return relative if relative
174
+
175
+ value
175
176
  end
176
177
 
177
178
  def mode_label
@@ -181,6 +182,44 @@ module Ace
181
182
  def mode_title
182
183
  mode_label.capitalize
183
184
  end
185
+
186
+ def logical_source?(value)
187
+ return true unless Pathname.new(value).absolute?
188
+
189
+ value.match?(%r{\A[a-z][a-z0-9+\-.]*://}i)
190
+ rescue ArgumentError
191
+ true
192
+ end
193
+
194
+ def canonical_path(path)
195
+ expanded = File.expand_path(path)
196
+ return File.realpath(expanded) if File.exist?(expanded)
197
+
198
+ canonical_missing_path(expanded)
199
+ rescue
200
+ File.expand_path(path)
201
+ end
202
+
203
+ def canonical_missing_path(path)
204
+ parent = path
205
+ suffix = []
206
+ until File.exist?(parent) || parent == File.dirname(parent)
207
+ suffix.unshift(File.basename(parent))
208
+ parent = File.dirname(parent)
209
+ end
210
+ return path unless File.exist?(parent)
211
+
212
+ File.join(File.realpath(parent), *suffix)
213
+ end
214
+
215
+ def relative_path_under(path, root)
216
+ return "." if path == root
217
+
218
+ prefix = "#{root}#{File::SEPARATOR}"
219
+ return path.delete_prefix(prefix) if path.start_with?(prefix)
220
+
221
+ nil
222
+ end
184
223
  end
185
224
  end
186
225
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ace
4
4
  module Compressor
5
- VERSION = '0.24.7'
5
+ VERSION = '0.25.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ace-compressor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.7
4
+ version: 0.25.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Czyz
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-04-01 00:00:00.000000000 Z
10
+ date: 2026-06-30 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ace-support-config