v1.4.0
Robustness fixes for constrained and sandboxed environments, driven by a batch of real-world run reports. Adds a constrained-Linux integration test so these seams are caught in CI.
Added
- PATH-robust tool resolution. A shared
resolve_tool()findsffmpeg,ffprobe, andyt-dlpeven when they live in a user-local bin (~/.local/bin, the Python userbase) that isn't onPATH, and the pipeline now invokes them by absolute path. This fixes "tool installed but invisible" failures afterpip install --userorpipx. - Auto-install on Linux.
setup.pynow runs the no-sudo installs itself:yt-dlpviapipx/pip --user(with a PEP 668--break-system-packagesfallback), and thedocxnpm module into the per-user cache. It prints exactexport PATH=...hints when a tool lands offPATH, and prints sudo hints only for packages that need root (ffmpeg, Node.js/npm). - Constrained-environment integration test. A new CI job makes the skill directory read-only, runs the real pipeline on a synthetic local video, and builds the document, asserting
docxself-installs into the writable cache. This catches environment seams that mocked unit tests can't.
Changed
docxinstalls into the per-user cache when the skill dir is read-only.setup.pyinstallsdocxinto~/.cache/analyze-video(matchingbuild-docx.js) whenscripts/isn't writable, instead of silently failing against a read-only mount.- Compact contact-sheet appendix. Contact sheets in the document appendix are now sized so about two fit per page, instead of one sheet filling a whole page.
- Hardened delivery gate. SKILL.md Step 8 now makes the "include contact sheets / transcript?" question a mandatory, explicit gate before the single document build, so appendices are never added without asking.
Docs
- SKILL.md documents skill-directory resolution when
CLAUDE_SKILL_DIRis unset, the setup exit-code contract (0 means ready, non-zero means not ready), and the harmless yt-dlp "no JavaScript runtime" warning.
Full Changelog: v1.3.0...v1.4.0