ace-bundle 0.40.6 → 0.43.5
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/bundle/presets/project-base.md +40 -0
- data/.ace-defaults/bundle/presets/project.md +30 -24
- data/CHANGELOG.md +71 -0
- data/handbook/skills/as-onboard/SKILL.md +10 -1
- data/handbook/workflow-instructions/bundle.wf.md +1 -1
- data/lib/ace/bundle/molecules/section_processor.rb +5 -1
- data/lib/ace/bundle/organisms/bundle_loader.rb +50 -6
- data/lib/ace/bundle/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ba02c4e03000125c170e6c9858abee76a055a62ab828f12a4cb234fdba3f0682
|
|
4
|
+
data.tar.gz: b5e3b567fe50388b678012a3b317abb015bb86b3ca50be62ba505637ad30fc5f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f9c6878943db58fdfe45dcd739efbb9a4cc0513d8b371c28d528c224177b021dbd57b0667570633355a84d9cc12e0bc326685a5e60f71c512aa6788641f1412f
|
|
7
|
+
data.tar.gz: 4b5454c8c2f76da7e3ab2823068a0137d161187d39042ee1d5f744c225405512f7248c2d7fb5d55f80bd1dd8dc7c965fb11c2e3aa4afd27c71f16d43cf98d72e
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Lightweight project starter preset for first-run onboarding
|
|
3
|
+
bundle:
|
|
4
|
+
params:
|
|
5
|
+
output: cache
|
|
6
|
+
max_size: 10485760
|
|
7
|
+
timeout: 30
|
|
8
|
+
compressor_mode: agent
|
|
9
|
+
embed_document_source: true
|
|
10
|
+
sections:
|
|
11
|
+
vision:
|
|
12
|
+
title: Project Vision
|
|
13
|
+
content: |
|
|
14
|
+
TODO: Add a one-paragraph project overview and current priorities.
|
|
15
|
+
Move this to docs/vision.md later if desired.
|
|
16
|
+
|
|
17
|
+
structure:
|
|
18
|
+
title: Project Structure
|
|
19
|
+
content: |
|
|
20
|
+
TODO: Describe the top-level folders and where core logic lives.
|
|
21
|
+
Move this to docs/blueprint.md once project docs exist.
|
|
22
|
+
|
|
23
|
+
quick_status:
|
|
24
|
+
title: Quick Status
|
|
25
|
+
compressor_mode: exact
|
|
26
|
+
commands:
|
|
27
|
+
- pwd
|
|
28
|
+
- date
|
|
29
|
+
|
|
30
|
+
starter_guidance:
|
|
31
|
+
title: Starter Guidance
|
|
32
|
+
content: |
|
|
33
|
+
TODO: Add concise onboarding notes for contributors.
|
|
34
|
+
Replace placeholders with your project's goals and current priorities.
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
# Project Context
|
|
38
|
+
|
|
39
|
+
Use this lightweight preset as a starting point for new projects.
|
|
40
|
+
Expand sections as your team documentation grows.
|
|
@@ -1,35 +1,41 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Project-wide context
|
|
2
|
+
description: Project-wide context starter preset for generic projects
|
|
3
3
|
bundle:
|
|
4
4
|
params:
|
|
5
5
|
output: cache
|
|
6
6
|
max_size: 10485760
|
|
7
7
|
timeout: 30
|
|
8
|
+
compressor_mode: agent
|
|
8
9
|
embed_document_source: true
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
10
|
+
sections:
|
|
11
|
+
vision:
|
|
12
|
+
title: Project Vision
|
|
13
|
+
content: |
|
|
14
|
+
TODO: Add your project's mission, users, and success criteria.
|
|
15
|
+
Optionally move this to docs/vision.md once your docs structure is established.
|
|
16
|
+
|
|
17
|
+
architecture:
|
|
18
|
+
title: System Architecture
|
|
19
|
+
content: |
|
|
20
|
+
TODO: Add key architecture notes, major components, and decision records.
|
|
21
|
+
You can later split this into docs/architecture.md, docs/decisions.md, and docs/blueprint.md.
|
|
22
|
+
|
|
23
|
+
project_status:
|
|
24
|
+
title: Project Status
|
|
25
|
+
compressor_mode: exact
|
|
26
|
+
commands:
|
|
27
|
+
- pwd
|
|
28
|
+
- date
|
|
29
|
+
- ls -1
|
|
30
|
+
|
|
31
|
+
onboarding_notes:
|
|
32
|
+
title: Onboarding Notes
|
|
33
|
+
content: |
|
|
34
|
+
TODO: Replace this preset body text with your project-specific onboarding guidance.
|
|
35
|
+
Include your architecture highlights, coding standards, and ownership boundaries.
|
|
31
36
|
---
|
|
32
37
|
|
|
33
38
|
# Project Context
|
|
34
39
|
|
|
35
|
-
You are working
|
|
40
|
+
You are working in a project that uses ACE tooling.
|
|
41
|
+
Treat this as starter scaffolding and customize it for your codebase.
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,77 @@ The format is based on [Keep a Changelog][1], and this project adheres to [Seman
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.43.5] - 2026-04-19
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- Documented the `bundle.sources` preset shorthand in the configuration and getting-started guides so generated bundle presets can use the public file, command, and preset source-list contract.
|
|
13
|
+
|
|
14
|
+
## [0.43.4] - 2026-04-19
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- Added support for documented `bundle.sources` frontmatter entries so file, command, and preset sources expand through the same public bundle path as direct `files`, `commands`, and `presets` keys.
|
|
18
|
+
|
|
19
|
+
## [0.43.3] - 2026-04-16
|
|
20
|
+
|
|
21
|
+
### Technical
|
|
22
|
+
- Aligned `TS-BUNDLE-001` preset-loading verification with the documented `**/*.js` routing behavior so valid preset matches are preserved without treating unrelated files as failures.
|
|
23
|
+
|
|
24
|
+
## [0.43.2] - 2026-04-16
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
- Corrected `TS-BUNDLE-001` file-pattern verification so root-level markdown matched by `*.md` remains valid while genuinely out-of-scope test files stay excluded.
|
|
28
|
+
|
|
29
|
+
## [0.43.1] - 2026-04-16
|
|
30
|
+
|
|
31
|
+
### Technical
|
|
32
|
+
- Updated `TS-BUNDLE-001` sandbox setup to source `mise.toml` from `${ACE_E2E_SOURCE_ROOT:-$PROJECT_ROOT_PATH}` so goal runs stay compatible with read-only source mounts.
|
|
33
|
+
|
|
34
|
+
## [0.43.0] - 2026-04-14
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
- Rewrote `TS-BUNDLE-001` to a retained public-surface goal set by consolidating file-pattern checks into Goal 2, reframing Goal 4 around user-visible routing behavior, and renaming Goal 5 to CLI output consistency and error semantics.
|
|
38
|
+
|
|
39
|
+
### Technical
|
|
40
|
+
- Updated scenario/runner/verifier manifests to the retained 4-goal layout and removed the standalone TC-003 goal assets.
|
|
41
|
+
|
|
42
|
+
## [0.42.1] - 2026-04-13
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
- Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
|
|
46
|
+
|
|
47
|
+
### Technical
|
|
48
|
+
- Included in the coordinated assignment-driven patch release for batch i05 package updates.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## [0.42.0] - 2026-04-12
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
- Expanded `as-onboard` canonical skill metadata so the public `onboard` assign step is fully described via skill-owned `assign.steps`.
|
|
55
|
+
- Migrated package tests to the restarted `fast` / `feat` / `e2e` model: deterministic suites now live under `test/fast/` and legacy `test/integration/` coverage moved to `test/feat/`.
|
|
56
|
+
- Updated E2E TC-004 output-routing assertions to accept the observed explicit-stdio routing behavior when compression emits cache-save messaging.
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
- Added end-to-end support for diff path filters in bundle diff configs so `paths` now flows through section normalization and into `git diff -- <paths>`.
|
|
60
|
+
- Made `workflow_resolution_test` robust across repo and sandbox execution contexts by asserting workflow-suffix resolution against package-local WFI sources.
|
|
61
|
+
- Hardened TS-BUNDLE-001 sandbox setup by skipping `mise.toml` trust when that file is not present in package-copy sandboxes.
|
|
62
|
+
- Reduced brittle TC-001 verifier gating from strict line-count requirements to substantive observed output checks.
|
|
63
|
+
|
|
64
|
+
## [0.41.2] - 2026-03-31
|
|
65
|
+
|
|
66
|
+
### Fixed
|
|
67
|
+
- Made default bootstrap presets self-contained so generated onboarding guidance no longer depends on external release-specific context.
|
|
68
|
+
|
|
69
|
+
## [0.41.1] - 2026-03-30
|
|
70
|
+
|
|
71
|
+
### Fixed
|
|
72
|
+
- Removed the generic-project preset dependency on `ace-task` by replacing the task listing command with `ls -1` for plain-repo compatibility.
|
|
73
|
+
|
|
74
|
+
## [0.41.0] - 2026-03-29
|
|
75
|
+
|
|
76
|
+
### Changed
|
|
77
|
+
- Reworked shipped default bootstrap presets for generic projects: `project` now uses section-driven content, removes stale monorepo/taskflow copy, and includes TODO-oriented scaffold guidance.
|
|
78
|
+
- Added a shipped `project-base` preset for lightweight onboarding context in fresh repositories.
|
|
79
|
+
|
|
9
80
|
## [0.40.6] - 2026-03-29
|
|
10
81
|
|
|
11
82
|
### Technical
|
|
@@ -19,10 +19,19 @@ integration:
|
|
|
19
19
|
- pi
|
|
20
20
|
providers: {}
|
|
21
21
|
assign:
|
|
22
|
-
source: wfi://onboard
|
|
23
22
|
steps:
|
|
24
23
|
- name: onboard
|
|
25
24
|
description: Load project context and understand the codebase
|
|
25
|
+
prerequisites: []
|
|
26
|
+
produces: [project-context]
|
|
27
|
+
consumes: []
|
|
28
|
+
context:
|
|
29
|
+
default: null
|
|
30
|
+
reason: "Onboarding needs access to the main conversation context"
|
|
31
|
+
when_to_skip:
|
|
32
|
+
- "Already onboarded in a previous assignment"
|
|
33
|
+
- "Working in a context where project is already loaded"
|
|
34
|
+
effort: light
|
|
26
35
|
tags: [setup, context-loading]
|
|
27
36
|
skill:
|
|
28
37
|
kind: workflow
|
|
@@ -76,7 +76,7 @@ Analyze the loaded context and prepare a concise summary covering:
|
|
|
76
76
|
> "Load base preset"
|
|
77
77
|
|
|
78
78
|
**Files** - Task-specific context, custom one-off requirements:
|
|
79
|
-
> `ace-bundle .ace-
|
|
79
|
+
> `ace-bundle .ace-task/v.0.9.0/context/task-084.md`
|
|
80
80
|
> "Load task-specific context file"
|
|
81
81
|
|
|
82
82
|
> `ace-bundle /path/to/your/project/context.yml`
|
|
@@ -331,7 +331,7 @@ module Ace
|
|
|
331
331
|
since_ref = diff_config[:since] || diff_config["since"]
|
|
332
332
|
normalized[:ranges] = ["#{since_ref}...HEAD"]
|
|
333
333
|
end
|
|
334
|
-
|
|
334
|
+
normalized[:paths] = diff_config[:paths] || diff_config["paths"] if diff_config[:paths] || diff_config["paths"]
|
|
335
335
|
elsif diff_config.is_a?(String)
|
|
336
336
|
# Single range string
|
|
337
337
|
normalized[:ranges] = [diff_config]
|
|
@@ -376,6 +376,10 @@ module Ace
|
|
|
376
376
|
merged[:ranges] = ((merged[:ranges] || []) + (new_normalized[:ranges] || [])).uniq
|
|
377
377
|
end
|
|
378
378
|
|
|
379
|
+
if merged[:paths] || new_normalized[:paths]
|
|
380
|
+
merged[:paths] = ((merged[:paths] || []) + (new_normalized[:paths] || [])).uniq
|
|
381
|
+
end
|
|
382
|
+
|
|
379
383
|
# Merge diffs arrays (legacy format)
|
|
380
384
|
if merged[:diffs] || new_normalized[:diffs]
|
|
381
385
|
merged[:diffs] = ((merged[:diffs] || []) + (new_normalized[:diffs] || [])).uniq
|
|
@@ -449,6 +449,7 @@ module Ace
|
|
|
449
449
|
(frontmatter.keys & %w[preset presets files commands include exclude diffs]).any?
|
|
450
450
|
# Use frontmatter as the main config
|
|
451
451
|
config = unwrap_bundle_config(frontmatter)
|
|
452
|
+
config = normalize_bundle_sources(config)
|
|
452
453
|
|
|
453
454
|
# Merge params into options if present
|
|
454
455
|
params = config["params"]
|
|
@@ -613,6 +614,7 @@ module Ace
|
|
|
613
614
|
|
|
614
615
|
def load_from_preset_config(preset, options)
|
|
615
616
|
bundle_config = preset[:bundle] || {}
|
|
617
|
+
bundle_config = normalize_bundle_sources(bundle_config)
|
|
616
618
|
|
|
617
619
|
# Apply CLI overrides to context config (CLI takes precedence)
|
|
618
620
|
bundle_config = apply_cli_overrides(bundle_config)
|
|
@@ -890,6 +892,8 @@ module Ace
|
|
|
890
892
|
end
|
|
891
893
|
|
|
892
894
|
def process_template_config(config)
|
|
895
|
+
config = normalize_bundle_sources(config)
|
|
896
|
+
|
|
893
897
|
# Apply CLI overrides to config (CLI takes precedence)
|
|
894
898
|
config = apply_cli_overrides(config)
|
|
895
899
|
|
|
@@ -956,9 +960,10 @@ module Ace
|
|
|
956
960
|
# Process diffs
|
|
957
961
|
if config["diffs"] && config["diffs"].any?
|
|
958
962
|
data[:diffs] ||= []
|
|
963
|
+
diff_paths = config["paths"] || config[:paths] || []
|
|
959
964
|
config["diffs"].each do |diff_range|
|
|
960
|
-
result = generate_diff_safe(diff_range)
|
|
961
|
-
data[:diffs] << result.slice(:range, :output, :success, :error, :error_type)
|
|
965
|
+
result = generate_diff_safe(diff_range, paths: diff_paths)
|
|
966
|
+
data[:diffs] << result.slice(:range, :paths, :output, :success, :error, :error_type)
|
|
962
967
|
|
|
963
968
|
unless result[:success]
|
|
964
969
|
error_prefix = (result[:error_type] == :git_error) ? "Git diff failed" : "Invalid diff range"
|
|
@@ -988,6 +993,39 @@ module Ace
|
|
|
988
993
|
bundle
|
|
989
994
|
end
|
|
990
995
|
|
|
996
|
+
def normalize_bundle_sources(config)
|
|
997
|
+
return config unless config.is_a?(Hash)
|
|
998
|
+
|
|
999
|
+
sources = config["sources"] || config[:sources]
|
|
1000
|
+
return config unless sources.is_a?(Array) && sources.any?
|
|
1001
|
+
|
|
1002
|
+
normalized = config.dup
|
|
1003
|
+
files = Array(normalized["files"] || normalized[:files])
|
|
1004
|
+
commands = Array(normalized["commands"] || normalized[:commands])
|
|
1005
|
+
presets = Array(normalized["presets"] || normalized[:presets])
|
|
1006
|
+
|
|
1007
|
+
sources.each do |source|
|
|
1008
|
+
case source
|
|
1009
|
+
when Hash
|
|
1010
|
+
source_file = source["file"] || source[:file]
|
|
1011
|
+
source_command = source["command"] || source[:command]
|
|
1012
|
+
source_preset = source["preset"] || source[:preset]
|
|
1013
|
+
files << source_file if source_file
|
|
1014
|
+
commands << source_command if source_command
|
|
1015
|
+
presets << source_preset if source_preset
|
|
1016
|
+
when String
|
|
1017
|
+
files << source
|
|
1018
|
+
end
|
|
1019
|
+
end
|
|
1020
|
+
|
|
1021
|
+
normalized["files"] = files.compact.uniq if files.any?
|
|
1022
|
+
normalized["commands"] = commands.compact.uniq if commands.any?
|
|
1023
|
+
normalized["presets"] = presets.compact.uniq if presets.any?
|
|
1024
|
+
normalized.delete("sources")
|
|
1025
|
+
normalized.delete(:sources)
|
|
1026
|
+
normalized
|
|
1027
|
+
end
|
|
1028
|
+
|
|
991
1029
|
def format_bundle(bundle, format)
|
|
992
1030
|
bundle.metadata[:raw_content_for_auto_format] = bundle.content
|
|
993
1031
|
|
|
@@ -1270,10 +1308,11 @@ module Ace
|
|
|
1270
1308
|
return unless ranges.any?
|
|
1271
1309
|
|
|
1272
1310
|
processed_diffs = []
|
|
1311
|
+
diff_paths = section_data[:paths] || section_data["paths"] || []
|
|
1273
1312
|
|
|
1274
1313
|
ranges.each do |diff_range|
|
|
1275
|
-
result = generate_diff_safe(diff_range)
|
|
1276
|
-
processed_diffs << result.slice(:range, :output, :success, :error)
|
|
1314
|
+
result = generate_diff_safe(diff_range, paths: diff_paths)
|
|
1315
|
+
processed_diffs << result.slice(:range, :paths, :output, :success, :error)
|
|
1277
1316
|
|
|
1278
1317
|
unless result[:success]
|
|
1279
1318
|
bundle.metadata[:errors] ||= []
|
|
@@ -1372,17 +1411,21 @@ module Ace
|
|
|
1372
1411
|
# Generate diff with ace-git and return standardized result hash
|
|
1373
1412
|
# Handles GitError and ArgumentError with standardized error handling
|
|
1374
1413
|
# @param diff_range [String] Git range to diff
|
|
1414
|
+
# @param paths [Array<String>] Optional git path filters
|
|
1375
1415
|
# @return [Hash] Result with :range, :output, :success, and optional :error
|
|
1376
|
-
def generate_diff_safe(diff_range)
|
|
1377
|
-
|
|
1416
|
+
def generate_diff_safe(diff_range, paths: [])
|
|
1417
|
+
normalized_paths = Array(paths).map(&:to_s).map(&:strip).reject(&:empty?).uniq
|
|
1418
|
+
diff_result = Ace::Git::Organisms::DiffOrchestrator.generate(ranges: [diff_range], paths: normalized_paths)
|
|
1378
1419
|
{
|
|
1379
1420
|
range: diff_range,
|
|
1421
|
+
paths: normalized_paths,
|
|
1380
1422
|
output: diff_result.content,
|
|
1381
1423
|
success: true
|
|
1382
1424
|
}
|
|
1383
1425
|
rescue Ace::Git::Error => e
|
|
1384
1426
|
{
|
|
1385
1427
|
range: diff_range,
|
|
1428
|
+
paths: Array(paths).map(&:to_s).map(&:strip).reject(&:empty?).uniq,
|
|
1386
1429
|
output: "",
|
|
1387
1430
|
success: false,
|
|
1388
1431
|
error: e.message,
|
|
@@ -1391,6 +1434,7 @@ module Ace
|
|
|
1391
1434
|
rescue ArgumentError => e
|
|
1392
1435
|
{
|
|
1393
1436
|
range: diff_range,
|
|
1437
|
+
paths: Array(paths).map(&:to_s).map(&:strip).reject(&:empty?).uniq,
|
|
1394
1438
|
output: "",
|
|
1395
1439
|
success: false,
|
|
1396
1440
|
error: e.message,
|
data/lib/ace/bundle/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ace-bundle
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.43.5
|
|
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-04-20 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: ace-support-cli
|
|
@@ -124,6 +124,7 @@ files:
|
|
|
124
124
|
- ".ace-defaults/bundle/presets/development.md"
|
|
125
125
|
- ".ace-defaults/bundle/presets/documentation-review.md"
|
|
126
126
|
- ".ace-defaults/bundle/presets/mixed-content-example.md"
|
|
127
|
+
- ".ace-defaults/bundle/presets/project-base.md"
|
|
127
128
|
- ".ace-defaults/bundle/presets/project-context.md"
|
|
128
129
|
- ".ace-defaults/bundle/presets/project.md"
|
|
129
130
|
- ".ace-defaults/bundle/presets/section-example-simple.md"
|