bin/vh <command> -h prints its usage instead of running the command - #50
Merged
Merged
Conversation
These took -h as a video, project or preset name: sheet failed in basename, check printed ffprobe's help, gif failed in ffmpeg, hf-init said no such project, mux printed a bash parameter error, and style printed render.sh's help after checking the swatch renderer's npm install. Each now prints its own usage line and exits 0 for -h and --help; CI checks all six.
The first commit fixed six commands one by one. The review found that -h was still passed through elsewhere: setup -h ran the whole install, sync-agents -h rewrote AGENTS.md, beats and qa took -h as an audio file or mix, style check -h reached determinism.sh, and new, effort, install-skill, music and sfx exited 1. The dispatcher now prints the command's lines from the help header for -h and --help and exits 0; captions, readcheck, review, storyboard, rhythm, cover-preview, voices, mix and recipes keep their own help. The per-command edits are gone.
Second review: sfx -h already printed its full docstring and exited 0, and tts and qa have fuller help than the header's lines, so sfx and qa pass through again (qa now prints its docstring for -h or --help, also qa mix -h, and exits 0) and tts -h prints the header lines plus tts.py's option list, read with the plain python3 so nothing is installed. The CI test now reads the command list from the dispatch, so a new command without a header line is caught, and runs on a copy of bin/vh in a temp folder, so a regression cannot run setup or rewrite AGENTS.md. cmd_usage reads the name through ENVIRON (awk -v expands backslashes), and the header's style entry points to render.sh -h.
Third review: with HOME in the temp folder, a broken check would still let uv build mlx-audio or librosa there, and the floor of 15 commands sat one below today's 16, so moving one more command onto the own-help list would have failed the test for nothing.
ZLHad
marked this pull request as ready for review
October 2, 2026 08:35
ZLHad
enabled auto-merge (squash)
October 2, 2026 08:35
ZLHad
added a commit
that referenced
this pull request
Oct 2, 2026
…he READMEs (#51) * Docs: counts and wording after #41–#50; a Blender section in the README; Blender large-scene notes - overview/architecture SVGs, CITATION.cff, recipes/README: 31 styles, 13 playbook docs, 30 reference repos, 9 types - README (en/zh): styles are references, not templates; quick's checks; concept cards in the FAQ; research note 06; the reel is 46 s; the bin/vh table lists new flags, style compare/apply, storyboard/rhythm/cover-preview - README: code-driven Blender as a feature (badge, a bullet, a section) - engines/blender.md: lessons from the intro film's opening (numpy-driven point clouds, velocity motion blur, no denoiser on stars, camera up vector, nodexpr, chunked resumable renders, Metal determinism) - styles/_swatch/lib.js: color(tokens, 'fg') falls back to ink/text before magenta (pastel-ui names its foreground ink) - showcase 00/01 READMEs: mix figures re-measured after the #40 sound refresh; build_audio.sh comments: 21 built-ins * Intro film v5: a Blender galaxy opening, 150.5 s, and HD players in the READMEs - showcase/04-intro-film is now v5: 0–15.8 s rendered in Blender (Cycles, a galaxy of films), the rest in HyperFrames + Three.js, one camera handed across the dissolve. v3 moves to v3/. - The film follows one request (showcase 02's question) through the router, the gates and the self-review loop to the finished short. A time map (js/tmap.js) lengthens holds so every line meets the reading-time floor; the score is retimed with the same map. - READMEs: the samples play inline (GitHub user-attachments, 1080p, a small corner mark); the intro plays as eight chapters. Each sample links its original file. - Lessons into playbook/02 and 08, engines/blender.md, recipes; CHANGELOG entry. * Intro v5: fixes from review — shellcheck, the beat map, a reproducible Reproduce block - tools/deliver.sh and tools/build_audio.sh pass shellcheck; deliver.sh drops the unused 720p clip and WebP preview and cuts the eight README chapters instead (tools/chapters.sh, tools/watermark.sh, now in the repo). - audio/music.beats.json (the body score's beat map, which js/main.js reads for its pulses) is committed; rendering audio/score.base.json reproduces it byte for byte, and a missing map now logs a warning instead of failing silently. - Reproduce: npm i (no lockfile), the shader export before the atlases, film_atlas.py pinned to the 41 rows the film was made with (the rebuilt films.jpg is byte-identical), Blender steps marked macOS only (bl.sh says so and exits). - The hand-over is 15.0–15.6 s everywhere; the Blender determinism figures say which plate they are from; the asset ledger covers the AI stills, atlases and v5 audio; showcase docs use showcase paths (NOTES says it is a log). - README chapter thumbnails: chapters 2–8 re-uploaded without a picture fade-in (frame 0 is the player's thumbnail); the 04 cell says it plays chapter 5; exact chapter ranges; the clone is about 530 MB now. * Intro v5: cut the README chapters after the final check; chapters.sh is executable
ZLHad
added a commit
that referenced
this pull request
Oct 4, 2026
) * -h prints the usage for sheet, check, gif, hf-init, mux and style These took -h as a video, project or preset name: sheet failed in basename, check printed ffprobe's help, gif failed in ffmpeg, hf-init said no such project, mux printed a bash parameter error, and style printed render.sh's help after checking the swatch renderer's npm install. Each now prints its own usage line and exits 0 for -h and --help; CI checks all six. * Answer -h at the dispatcher for every command without its own help The first commit fixed six commands one by one. The review found that -h was still passed through elsewhere: setup -h ran the whole install, sync-agents -h rewrote AGENTS.md, beats and qa took -h as an audio file or mix, style check -h reached determinism.sh, and new, effort, install-skill, music and sfx exited 1. The dispatcher now prints the command's lines from the help header for -h and --help and exits 0; captions, readcheck, review, storyboard, rhythm, cover-preview, voices, mix and recipes keep their own help. The per-command edits are gone. * Keep sfx, qa and tts's full help; run the -h test on a copy Second review: sfx -h already printed its full docstring and exited 0, and tts and qa have fuller help than the header's lines, so sfx and qa pass through again (qa now prints its docstring for -h or --help, also qa mix -h, and exits 0) and tts -h prints the header lines plus tts.py's option list, read with the plain python3 so nothing is installed. The CI test now reads the command list from the dispatch, so a new command without a header line is caught, and runs on a copy of bin/vh in a temp folder, so a regression cannot run setup or rewrite AGENTS.md. cmd_usage reads the name through ENVIRON (awk -v expands backslashes), and the header's style entry points to render.sh -h. * CI -h test: stub uv and npm, loosen the command-count floor Third review: with HOME in the temp folder, a broken check would still let uv build mlx-audio or librosa there, and the floor of 15 commands sat one below today's 16, so moving one more command onto the own-help list would have failed the test for nothing.
ZLHad
added a commit
that referenced
this pull request
Oct 4, 2026
…he READMEs (#51) * Docs: counts and wording after #41–#50; a Blender section in the README; Blender large-scene notes - overview/architecture SVGs, CITATION.cff, recipes/README: 31 styles, 13 playbook docs, 30 reference repos, 9 types - README (en/zh): styles are references, not templates; quick's checks; concept cards in the FAQ; research note 06; the reel is 46 s; the bin/vh table lists new flags, style compare/apply, storyboard/rhythm/cover-preview - README: code-driven Blender as a feature (badge, a bullet, a section) - engines/blender.md: lessons from the intro film's opening (numpy-driven point clouds, velocity motion blur, no denoiser on stars, camera up vector, nodexpr, chunked resumable renders, Metal determinism) - styles/_swatch/lib.js: color(tokens, 'fg') falls back to ink/text before magenta (pastel-ui names its foreground ink) - showcase 00/01 READMEs: mix figures re-measured after the #40 sound refresh; build_audio.sh comments: 21 built-ins * Intro film v5: a Blender galaxy opening, 150.5 s, and HD players in the READMEs - showcase/04-intro-film is now v5: 0–15.8 s rendered in Blender (Cycles, a galaxy of films), the rest in HyperFrames + Three.js, one camera handed across the dissolve. v3 moves to v3/. - The film follows one request (showcase 02's question) through the router, the gates and the self-review loop to the finished short. A time map (js/tmap.js) lengthens holds so every line meets the reading-time floor; the score is retimed with the same map. - READMEs: the samples play inline (GitHub user-attachments, 1080p, a small corner mark); the intro plays as eight chapters. Each sample links its original file. - Lessons into playbook/02 and 08, engines/blender.md, recipes; CHANGELOG entry. * Intro v5: fixes from review — shellcheck, the beat map, a reproducible Reproduce block - tools/deliver.sh and tools/build_audio.sh pass shellcheck; deliver.sh drops the unused 720p clip and WebP preview and cuts the eight README chapters instead (tools/chapters.sh, tools/watermark.sh, now in the repo). - audio/music.beats.json (the body score's beat map, which js/main.js reads for its pulses) is committed; rendering audio/score.base.json reproduces it byte for byte, and a missing map now logs a warning instead of failing silently. - Reproduce: npm i (no lockfile), the shader export before the atlases, film_atlas.py pinned to the 41 rows the film was made with (the rebuilt films.jpg is byte-identical), Blender steps marked macOS only (bl.sh says so and exits). - The hand-over is 15.0–15.6 s everywhere; the Blender determinism figures say which plate they are from; the asset ledger covers the AI stills, atlases and v5 audio; showcase docs use showcase paths (NOTES says it is a log). - README chapter thumbnails: chapters 2–8 re-uploaded without a picture fade-in (frame 0 is the player's thumbnail); the 04 cell says it plays chapter 5; exact chapter ranges; the clone is about 530 MB now. * Intro v5: cut the README chapters after the final check; chapters.sh is executable
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.
Why
bin/vh sheet -hfailed withbasename: illegal option -- h. Review found the same class of bug across the CLI:-hand--helpreached the command as an ordinary argument.setup -hreferences/fetch.sh, the swatch renderer)sync-agents -hdoctor -h,types -hsheet -hbasenameerror, exit 1check -hgif -hUnrecognized option 'h.gif', exit 8hf-init -hno such project: -h, exit 1mux -hline 573: 2: usage: …, exit 1beats -h-h, exit 1qa -h/qa --help/qa mix -hJSONDecodeErrortraceback / the docstring with exit 1 /qa mix: no such folder: -h, exit 1style -hrender.sh's helprender.sh -h), exit 0style check -hdeterminism.shas a preset namenew,effort,install-skill,musicwith-hmusic --help: "unknown option")tts -htts.py's option list via the plain python3, exit 0, nothing installedsfx,captions,readcheck,review,storyboard,rhythm,cover-preview,voices,mix,recipesChanges
bin/vh: before dispatch,bin/vh <command> -h|--helpprints that command's lines from the help header at the top ofbin/vh(cmd_usage, continuation lines included) and exits 0. The header already lists every command and its arguments, so this usage cannot drift frombin/vh help. Commands with a fuller help of their own (the last row, plusqa) keep it. An unknown command with-hstill exits 1; without-h, every command behaves as before.cmd_usagereads the name throughENVIRON, sinceawk -vexpands backslashes.tools/audio/qa.py:-hor--helpanywhere in the arguments prints the docstring and exits 0.tools/ci.sh: the smoke test reads the list of dispatched commands frombin/vh, drops the own-help list (and fails if that list names a command that is not dispatched), then runs-hand--helpfor the remaining 16 and forstyle check. It expects exit 0 and output starting withusage: bin/vh <command>. It runs on a copy ofbin/vhin a temp folder whose only content is a link totools/, withuvandnpmstubbed out onPATH, so nothing is downloaded and if the check ever regressed,setupwould stop at its firstcdandsync-agentswould write the temp folder's AGENTS.md. I checked this with main'sbin/vh: the real AGENTS.md was unchanged.CHANGELOG.md: an entry.Four commits. The first fixed six commands one at a time. The second moved the check into the dispatcher after the review found the rows above. The third keeps the fuller help of
sfx,qaandttsand makes the CI test safe and complete, after the second review. The fourth stubsuvandnpmin that test and loosens its command-count floor, after the third review (approve).Checked
tools/ci.shandVH_BASH=/bin/bash tools/ci.sh --committed(bash 3.2, clean checkout of HEAD): all checks passed.bin/vh nosuch -handbin/vh 'ne\w' -hexit 1;bin/vh -handbin/vh help -hprint the full help.cmd_usagegives identical output on macOS awk, mawk and BusyBox awk; 51 invocations without-hmatch main under both bashes.Not changed
styles/product-keynote/STYLE.mdcites lemo-opuscar under the wrong licence (CC BY 4.0, while the current LICENSE is MIT). It is correct as written: the preset was adapted on 2026-09-29 from the snapshot before the MIT switch, andreferences/community-skills.mdsays such adaptations keep their CC BY attribution, as 22 other presets do.hf-initpasses its resolution tohyperframes initunchecked, so a typo reports "init failed (offline?)";sheeton a missing video createsout/check/next to it and shows a Python traceback;bin/vh tts <project> -htakes-has the provider.