- Update intro to be about hooks generally, not just `wt hook` command
- Add "Running hooks manually" section with `wt hook <type>` examples
- Expand NAME argument help to explain user:/project: prefix syntax
- Fix inaccurate claim that hooks only run during `wt switch --create`
(they also run during regular `wt switch` for post-switch hooks)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
Add subdoc directive for `wt config show` and fix the `--full` flag
documentation to accurately describe both diagnostic checks:
- CI tool status (gh/glab installation and authentication)
- Commit generation (LLM command verification)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
The `git diff` command was splitting across panes because the sleep
after `Ctrl+n` (new pane) was too short (600ms). Increased to 1.2s.
Also added GIF review documentation to help catch similar issues.
Co-authored-by: Claude <noreply@anthropic.com>
Move mention of hooks from summary to "Creating worktrees" section to
accurately reflect that hooks only run when a worktree is created, not
when switching to an existing one.
- Merge wt-select-short.tape into wt-select.tape for single unified demo
- Update docs and build config to use wt-select for both docs and social
- Adjust timing and interactions in unified tape
- Fix wt-zellij-omnibus demo npm dev server backgrounding
Fix the npm dev server command to remove the background ampersand to
match hook configuration, and update URL column snapshots to apply dim
formatting consistently across test outputs.
Remove is_interactive_tape function and simplify hooks config
generation in prepare_with_hooks by using list concatenation instead
of f-string formatting.
- Reformat imports and function arguments for better readability
- Consolidate multi-line imports into organized lists
- Wrap long function signatures and calls
- Normalize string quotes and spacing in configuration files
- Improve code style consistency across build, lib.py, and themes.py
Change bin directory from ~/bin to ~/.local/bin for mock CLIs (npm, llm,
gh, cat) and update PATH references in build script and tape files to
match the standard XDG Base Directory specification.
Document the requirement to set ANTHROPIC_API_KEY environment variable for demos that launch Claude Code, and explain that API credits are consumed during recording.
Remove the trailing `&` from npm dev commands in devserver and
zellij_omnibus demo configurations. The ampersand was causing
processes to run in the background unnecessarily.
Update documentation and CLI help to better explain how arguments after
-- are passed to the execute command, with a concrete example showing
the resulting command invocation.
Replace generic examples with concrete GitHub issue reference format
to better illustrate passing initial prompts to Claude via --execute.
Updates docs, CLI help text, and related snapshots.
Combine brew/cargo install with shell config into single commands
using && operator. Add custom success message to dist config for
post-install guidance.
Add a note encouraging users to open issues for missing fields in the
JSON output, even for small improvements. Updates help text in cli.rs
and docs, with corresponding snapshot updates for terminal output.
Replace "you/your" with direct references following CLI output
formatting guidelines. Changes:
- "your config" → "the config"
- "your shell" → "the shell"
- "You can hash" → "Hash"
- "when you know" → "to a known"
- "unless you pass" → "unless ... is passed"
- "Commands you provide" → "Explicitly provided commands"
- "when you approve" → "when approving"
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
The approval gate in `approve_hooks_filtered` didn't parse the
`user:`/`project:` prefix syntax, so filters like `project:foo` or
`project:` matched nothing (command names are just "foo" without
prefix), returned Ok(true), and project hooks ran without approval.
Fix by reusing `ParsedFilter` from hooks.rs:
- Parse filter to extract source and name separately
- Skip approval for `user:` filters (user hooks don't need approval)
- Use parsed name (not raw filter) for matching command names
Also adds security regression tests for the fix.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
Hide demo images until they finish loading to prevent broken-image icon
flash. Add JavaScript to detect load completion and visibility toggle via
CSS class. Update demo figure styles to support dynamic visibility and
maintain aspect ratio during scroll.
* docs: add demo GIFs to command pages
Add demos to switch, list, merge, llm-commits, and claude-code pages.
Position demos after the intro sentence for consistent layout.
Changes:
- Add wt-switch, wt-list, wt-commit, wt-statusline to DOCS_DEMOS
- Update doc pages with <figure class="demo"> elements
- Update CLAUDE.md with new available demos list
Note: Demos involving `claude` (wt-switch, wt-statusline) need fixes
to the Claude Code mock before the GIFs look correct.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: add demo markers to cli.rs for switch, list, merge commands
Demo markers in after_long_help allow demos to persist through page
regeneration by test_command_pages_are_in_sync.
Positioned after intro sentence (matching wt-select pattern).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: add new demo pages to lychee exclude_path
These files have root-relative asset paths that lychee can't resolve
locally (assets are fetched at deploy time from worktrunk-assets repo).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: update help snapshots for demo markers
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: exclude asset GIF links by pattern instead of by file
Broadened `/assets/wt-.*\.gif` to `/assets/.*\.gif` to match all asset
directories including `/assets/docs/{light,dark}/`. This is cleaner than
excluding entire files from link checking.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: pin lychee to 0.20.x in CI
Version 0.22.0 has a regression where exclude patterns for root-relative
paths (like /assets/*.gif) don't work properly - they're treated as
errors instead of being excluded.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Add documentation example showing worktree-path template for nested bare
repo layout (project/.git pattern from issue #313). Users can use relative
paths like `../{{ branch | sanitize }}` to create worktrees as siblings to
the .git directory.
Also adds a standalone configure_git_cmd() helper function in tests/common
that can be reused by different test fixtures.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
Remove duplicate Require statements from tape files by sourcing
shared-commands.tape after shared-setup.tape. Consolidate multiple
preparation functions into parameterized versions using functools.partial
to reduce code duplication in demo registrations.
Move repeated VHS configuration and environment setup from individual tape
files into two shared sources:
- shared-setup.tape: VHS Set directives (Width, Height, Theme, etc)
- shared-commands.tape: Environment variables and shell initialization
Update render_tape() to inline Source directives since VHS doesn't support
them natively. This reduces duplication across 11 tape files by ~330 lines
while keeping tape logic readable.
Add concurrent.futures ProcessPoolExecutor to record multiple demos in
parallel. Introduce record_demo() function to encapsulate single demo
recording logic for subprocess compatibility. Replace lambda with named
function prepare_with_hooks_deps() for multiprocessing pickling. Add
--sequential flag to opt out of parallel execution. Improve output
formatting and error handling with failed demo tracking.
Restructure demo asset output to use mode (docs/social) and theme (light/dark)
subdirectories. Updates all asset references in documentation, build scripts,
and publish tooling to match the new layout:
- docs/light/ and docs/dark/ for documentation site demos (1600x900)
- social/light/ for social media demos (1200x700)
Simplifies asset management and allows docs/social builds to coexist without
overwriting each other. Updates build script to organize GIFs by theme after
recording, fetch-assets to preserve directory structure, and all markdown
references to use the new paths. Renames twitter build target to social for
broader applicability.
Update wt-list-remove and wt-zellij-omnibus tapes to demonstrate
tab completion functionality. Add fish completion sourcing and
replace direct command typing with tab-completion sequences showing
menu selection, review time, and command execution flow.
Create shared-setup.tape with common configuration (shell settings,
env vars, fish initialization) and update all 12 demo tapes to Source
it instead of duplicating the setup. Each tape can still customize
pre-show commands for demo-specific needs like claude plugin install.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add practical examples to tips-patterns.md:
- Enhanced dev server section with lvh.me subdomain routing for
cookies/CORS isolation between worktrees
- New "Database per worktree" section showing Docker containers
with unique ports via hash_port, plus .env.local generation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
Add tab completion support to the wt-core demo by installing fish
completions during base repo setup and pre-loading them in the demo
shell config. Update demo tape to showcase tab cycling through branch
options when switching worktrees. Simplify setup by removing redundant
repo_root parameter from fish config function. Add timing guidelines
for tab completion sequences to maintain natural pacing.
Support recording text output from demo tapes via VHS native .txt format
for capturing authentic shell sessions. Add --text flag to build script to
record shell output instead of GIFs, with automatic detection and skipping
of interactive demos. Refactor tape rendering to share template variable
replacements between GIF and text recording modes.
- Remove WorktreeList wrapper, list_worktrees() returns Vec<Worktree> directly
- Add current_worktree() method to Repository for common lookup pattern
- Simplify load_project_config() - returns None when not in worktree
- Remove require_project_config() - inline error handling at call site
- Simplify remove_current_worktree() - use current_branch() directly
- Add integration tests for bare repository bootstrap workflow
Fixes#293🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
Update documentation, tests, and snapshots to use the new `--yes` flag
instead of `--force`. The `--yes` flag is used to bypass approval prompts
and confirmations, while `--force` is now reserved for destructive
operations like forced file removal.
Remove setup_gh_mock, build_shell_env, clean_ansi_output, and
run_fish_script from the shared demo library along with their exports
from __init__.py. These functions are no longer used by any demo
recording scripts.
* Add --force flag to wt remove for worktrees with untracked files
The --force flag now also passes --force to git worktree remove,
allowing removal of worktrees containing untracked files like build
artifacts (.vite/, node_modules/, etc).
- Extended existing --force flag semantics (was: skip approval prompts)
- Added -f short form for convenience
- wt merge now always forces worktree removal (build artifacts unneeded post-merge)
Fixes#301🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Separate --force into --yes (prompts) and --force (removal)
The --force flag on wt remove had two meanings: skipping approval prompts
AND forcing worktree removal with untracked files. This was confusing and
potentially dangerous.
Now:
- --yes/-y: Skip approval prompts (all commands with prompts)
- --force/-f: Force worktree removal with untracked files (wt remove only)
This follows CLI conventions (apt, npm, etc.) where --yes skips prompts
and --force overrides safety checks.
Breaking change acceptable per project guidelines (early release mode).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Fix unit test for NotInteractive error message
Update test to check for --yes instead of --force.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Add docs/demos/out/ to .gitignore and delete generated files from
that directory including git objects, hooks, config files, mock
binaries, and demo recordings.
Add demo configuration files, mock CLI binaries, and recorded GIF
demonstrations for worktrunk-core showcase. Includes starship prompt
config, git repository structure, and tool mocks for cargo, npm, docker,
gh, and llm. Also updates theme colors and removes unnecessary asset
copying logic.
The --force flag now also passes --force to git worktree remove,
allowing removal of worktrees containing untracked files like build
artifacts (.vite/, node_modules/, etc).
- Extended existing --force flag semantics (was: skip approval prompts)
- Added -f short form for convenience
- wt merge now always forces worktree removal (build artifacts unneeded post-merge)
Fixes#301🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
- Move demo GIF output directory from docs/demos/out/ to docs/static/assets/
- Update build and publish scripts to use consolidated assets location
- Update .gitignore to reflect new assets path
- Document unified workflow for building and fetching demo assets