Skip to content

Complete Multi-Bundle Support: tests, docs, and task unblock#8

Merged
sjquant merged 4 commits into
mainfrom
claude/start-next-task-c4eIu
Apr 5, 2026
Merged

Complete Multi-Bundle Support: tests, docs, and task unblock#8
sjquant merged 4 commits into
mainfrom
claude/start-next-task-c4eIu

Conversation

@sjquant

@sjquant sjquant commented Apr 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds 4 integration tests covering the remaining gaps in the Multi-Bundle Support milestone: cross-bundle file conflict resolution, per-bundle directory cleanup on skul remove (empty directory removed, shared directory preserved with registry verification), and skul apply honouring tool selection stored in desired state.
  • Updates README and SPEC to match the current implementation: correct command names (add/reset replacing the removed use/clean), correct bundle manifest format (no spurious targets wrapper), and accurate output examples for skul list and skul status.
  • Marks all Multi-Bundle Support tasks as DONE.
  • Promotes the three cross-tool transform tasks from [REVIEW][TODO] now that the design is settled: bundles are always authored in Claude Code format (the canonical source); bundle-translation.ts helpers are already implemented; remaining work is wiring them into bundle-materialization.ts at skul add/skul apply time.

Test plan

  • pnpm test passes (171 tests)
  • Cross-bundle conflict: second bundle's file lands at prefixed path; first bundle's file is untouched; registry records exact file paths for each bundle
  • Directory cleanup: skul remove deletes Skul-created directories when empty; preserves them when another bundle still owns files there; registry confirms removal
  • Apply tool-selection: skul apply in a linked worktree materialises only the tool subset stored in desired state; cursor files absent when only claude-code was selected

https://claude.ai/code/session_01NQkrTNo2bx8HWkGMzJxceV

claude added 4 commits April 4, 2026 15:10
…ol selection

Covers the remaining [TODO] test gaps in the Multi-Bundle Support milestone:

- Cross-bundle file conflict: verifies that resolveFileConflict is invoked when
  a newly added bundle targets a path already occupied by another bundle's
  managed file, and that the resolution (prefix/rename/skip) is applied correctly.

- Per-bundle directory cleanup: verifies that Skul-created directories are
  removed when the last managed file in them is deleted via `skul remove`, and
  that shared directories are preserved when another bundle still owns files
  there.

- apply respects tool selection: verifies that `skul apply` in a linked
  worktree honours the tools array stored in desired_state, materializing only
  the selected tool rather than all tools the bundle supports.

https://claude.ai/code/session_01NQkrTNo2bx8HWkGMzJxceV
- Test 1 (cross-bundle conflict): replace weak toHaveProperty checks with
  toMatchObject assertions that verify the exact file paths recorded in each
  bundle's registry entry after conflict resolution.

- Test 2 (directory cleanup): also assert that the parent .claude/skills
  directory is removed when it is left empty — exercising the full chain of
  Skul-created directory cleanup.

- Test 3 (shared directory preserved): drop the misleading resolveFileConflict
  stub (the two bundles write different filenames so no conflict occurs); add
  registry assertions verifying react-expert is removed from both desired and
  materialized state while next-expert remains intact.

- Test 4 (apply tool selection): use arrayContaining instead of an exact
  array literal for the files assertion, making it resilient to insertion
  order changes.

https://claude.ai/code/session_01NQkrTNo2bx8HWkGMzJxceV
README.md:
- Replace skul use → skul add and skul clean → skul reset throughout

SPEC.md:
- §7.1 Bundle manifest: remove spurious "targets" wrapper that never existed
  in the real schema; tool entries map directly to target names
- §10 command table: replace clean with reset
- §11.5 skul list: update output format to match actual (parenthetical tools)
- §11.6 skul status: update output format to match actual (Bundle:/Tool:
  prefixes, flat file list per tool)
- §11.7: rename skul clean → skul reset; drop the removed --bundle flag;
  note that skul remove handles per-bundle removal

TASKS.md: mark both Multi-Bundle Support TODO items as DONE

https://claude.ai/code/session_01NQkrTNo2bx8HWkGMzJxceV
Design decision confirmed: bundles are always authored in Claude Code format
(skills/, commands/, agents/ using Claude Code markdown conventions). When
a non-claude-code tool is selected via --tool, transforms are applied at
materialization time. The translation helpers in bundle-translation.ts are
already implemented; the remaining work is wiring them into the
materialization path.

https://claude.ai/code/session_01NQkrTNo2bx8HWkGMzJxceV
@sjquant sjquant changed the title Add tests for cross-bundle conflict, per-bundle cleanup, and apply tool selection Complete Multi-Bundle Support: tests, docs, and task unblock Apr 5, 2026
@sjquant sjquant merged commit 39d412e into main Apr 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants