Review rounds get caps; reading time follows the film's Pace instead of fixed seconds - #57
Merged
Merged
Conversation
…of fixed seconds
A studio film's independent review ran 11 full rounds: each fresh reviewer
found new taste nits, scores hovered at 7-9, and small fixes sometimes broke
something else. The maintainer asked for at most 5 rounds per kind of issue,
10 in all, no full review for a small fix, and no hard-coded text intervals
("有的时候太慢").
Review caps (TASTE_CHECKLIST scoring layer, CLAUDE.md/AGENTS.md, playbook/01
and 02, READMEs, NOTES/REVIEW templates, video-types/09):
- at most 10 full review rounds per film, then ship or go to gate 3;
- the same kind of issue (one checklist item on one shot or segment) gets at
most 5 fix-and-check cycles, then it is a known limitation for the human;
- a local fix is rechecked on its own span (frames, strips, the automated
checks, the author's look); a new round is for structural changes or the
last pass;
- minimums unchanged (standard 1, studio >= 3 with all eight >= 8);
- a later round contradicting an earlier one on a taste item may be
overruled with a DECISIONS line;
- NOTES gets a one-line-per-round log, a per-issue counter and known
limitations; bin/vh effort prints the caps.
Reading time:
- floor (TASTE_CHECKLIST #5): one brisk read, CJK/7 + other/20 + 0.5 s,
never under 1 s; no fixed 2.5 s minimum;
- target (taste default): BRIEF "- Pace: relaxed | normal | brisk",
default normal: relaxed CJK/4.5 + other/15 + 1.0 s, normal CJK/6 +
other/18 + 0.6 s, brisk = the floor;
- tools/readcheck.py: --pace, else the nearest BRIEF's Pace, else normal;
FAIL (exit 1) under the floor, WARN (exit 0) under the target; data-pace
and "pace" per text; labels use brisk; old flags retune the target only;
--budget and -h describe both; bin/vh rhythm draws WARNs amber;
- playbook/03 §2 explains the numbers; templates, recipes (three recomputed
at normal), style presets, a case and research note 04 stop restating
2.5 s; CI covers the new rules.
- The floor is max(1.5 s, CJK/7 + other/20 + 0.8 s) again: the rule the
intro film was cut to and the maintainer approved ("not a flash").
The PR had lowered it to 1 s and +0.5 s while saying it kept it.
brisk = the floor; normal's pad 0.6 -> 0.8 so the paces never cross.
Recipes recomputed (black-card 46, breath-title-card 62,
brand-imprint-open 45 frames), CI expectations updated.
- Style presets keep their own 2.5 s holds as style beats (editorial-data,
monumental-scifi, symmetry-pastel, dark-math); type 01's question card
is a 2-3 s pause to think again.
- Caps: studio's three rounds run even between small fixes; a gate 3
return restarts the counts; a floor FAIL at its cap goes to the human
and never ships as final. Changing Pace gets a DECISIONS line.
- bin/vh new: Pace relaxed for math and paper, brisk for meme.
- 7 chars/s is marked as an assumption; product-film-60s's breath beats
are rhythm, not reading time.
…ds in playbook/02
# Conflicts: # CHANGELOG.md
ZLHad
marked this pull request as ready for review
October 4, 2026 05:13
ZLHad
added a commit
that referenced
this pull request
Oct 4, 2026
…of fixed seconds (#57) - Review caps (TASTE_CHECKLIST scoring layer, CLAUDE.md / AGENTS.md, playbook/01 and 02, READMEs, NOTES and REVIEW templates): at most 10 full review rounds per film and 5 fix-and-check cycles per issue; a local fix gets a check of its own span, not a new round; studio's three rounds still run; a gate 3 return restarts the counts; a floor FAIL at its cap goes to the human and never ships as final. bin/vh effort prints the caps. - Reading time has no fixed seconds. The floor (TASTE_CHECKLIST #5) is one brisk read, max(1.5 s, CJK/7 + other/20 + 0.8 s), the short-label rule from #53. A new BRIEF line, Pace: relaxed | normal | brisk, sets the comfortable target (relaxed CJK/4.5 + other/15 + 1.0 s, normal CJK/6 + other/18 + 0.8 s, brisk = the floor); bin/vh new writes relaxed for math and paper, brisk for meme. - tools/readcheck.py: FAIL under the floor, WARN under the target; --pace, data-pace and "pace" in texts.json; --budget shows both. bin/vh rhythm draws red and amber to match. - Docs that restated 2.5 s follow the rule: templates, playbook/03, video-types/01, five style presets (four keep 2.5 s as a style beat), recipes recomputed (black-card 46, breath-title-card 62, brand-imprint-open 45 frames), docs/research/04.
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
A
studiofilm (two-constellations) ran 11 full independent review rounds: every fresh reviewer found new taste nits, the scores hovered at 7–9, and small fixes sometimes broke something else. The maintainer, verbatim:1. Caps on review rounds
Where the loop is defined:
templates/TASTE_CHECKLIST.md(scoring layer), CLAUDE.md / AGENTS.md (effort table, a new 评审有上限 paragraph, hard rule 4), playbook/01 (stage 7, unattended mode), playbook/02 (layer 5), both READMEs,templates/NOTES.md,templates/REVIEW.md, video-types/09.bin/vh effort standard|studioprints the caps paragraph.2. Reading time: no fixed seconds
relaxedtargetnormaltarget (default)brisktarget(old rule: max(2.5 s, CJK/4.5 + other/15 + 1.5 s): 5.1 s and 2.5 s)
- Pace: relaxed | normal | brisk, default normal.tools/readcheck.py:--pace, else the nearest BRIEF.md's Pace line, else normal. FAIL (exit 1) only under the floor, WARN (exit 0) under the target; output OK / WARN / FAIL.data-paceon a clip/scene (nearest wins, sub-compositions included) and"pace"in texts.json;--exportwrites it.--mode label/data-read="label"kept and folded in (target = brisk).--cjk-cps/--latin-cps/--pad/--minkept; they retune the target only.--budgetshows the pace's target and the floor;bin/vh readcheck -hprints the rules.tools/rhythm.pyfollows (red under the floor, amber under the target, the project's Pace).cases/promo-video-shotcraft.md, a current-state line in docs/research/04 (zh, en).Verification
tools/ci.sh --committedandVH_BASH=/bin/bash tools/ci.sh --committed: all checks passed.uvx --from shellcheck-py shellcheck) on PATH anduv run --no-project --with pyflakes -- bash tools/ci.sh --committed: shellcheck -S warning and pyflakes pass, all checks passed.--budgetlines; a WARN band at normal with exit 0, while a label and a"pace": "brisk"text pass at the floor; FAILs under the floor and under 1 s; the BRIEF's Pace (relaxed) and--pace briskoverriding it; a bad pace refused (exit 2); a project made bybin/vh newcarriesPace: normal, and readcheck reads it.data-paceinheritance into a sub-composition and a baddata-pacenote;bin/vh rhythmwith a WARN and two FAILs;bin/vh recipes check32/32.After independent review
A fresh-context review asked for changes; these went in before merging:
rhythm, their say.bin/vh newwrites Pace relaxed for math and paper, brisk for meme.