Complete Multi-Bundle Support: tests, docs, and task unblock#8
Merged
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
skul remove(empty directory removed, shared directory preserved with registry verification), andskul applyhonouring tool selection stored in desired state.add/resetreplacing the removeduse/clean), correct bundle manifest format (no spurioustargetswrapper), and accurate output examples forskul listandskul status.[REVIEW]→[TODO]now that the design is settled: bundles are always authored in Claude Code format (the canonical source);bundle-translation.tshelpers are already implemented; remaining work is wiring them intobundle-materialization.tsatskul add/skul applytime.Test plan
pnpm testpasses (171 tests)skul removedeletes Skul-created directories when empty; preserves them when another bundle still owns files there; registry confirms removalskul applyin a linked worktree materialises only the tool subset stored in desired state; cursor files absent when onlyclaude-codewas selectedhttps://claude.ai/code/session_01NQkrTNo2bx8HWkGMzJxceV