Docs/Skills and code/skill video-script-production
.claude/skills/video-script-production/references/quality-bar.md
The v6 bar: what "finished" means: Moser Baer v6 is the script the user approved ("i like v6"). This file turns that approval into checks, so that the next script stops at the same calibre. Part 1 is mechanical (check.js runs it).
Mentioned on: page 12
The v6 bar: what "finished" means
Moser Baer v6 is the script the user approved ("i like v6"). This file turns that approval into checks, so that the next script stops at the same calibre. Part 1 is mechanical (check.js runs it). Part 2 is judgement (the read-aloud pass and the readers). Part 3 shows the numbers v6 reached. Part 4 says what the bar does not mean.
Part 1. The mechanical bar (check.js)
| Gate | Pass when | Kind |
|---|---|---|
| T1 Integrity | the chain is valid JSON and no file contains a stray control character | hard |
| L1 Lint | 0 FAIL across all rules (A to M) | hard |
| D1 Damage test | every mutation in selftest.js is caught by the rule meant to catch it | hard |
| F1 Ledger | every digit figure in the spoken text is in the fact ledger (or listed as a refuted rival figure); the script file has packaging, ledger, do-not-use and open-items sections | hard |
| L2 Warnings | 0 WARN. Read each; a false alarm is fixed by rewording, not by raising a budget | bar |
| T2 Timecodes | heading time ranges equal the word counts (check.js --fix) | bar |
| B1 Numbers | contractions >= 1.5 per 100 words; <= 3 quantities per minute; hook 60 to 110 s; no stretch over 60 s without a person or "you"; hard 30-second windows <= 40%; 4 to 16 comparison markers | bar |
| M1 Read-aloud | Read-aloud pass: done in the hand-off file | bar |
| M2 Readers | Reader pass: done or skipped: <reason> | bar |
| M3 Unproven | the Unproven: line of the hand-off file states, in a sentence, what is not proven | bar |
"Hard" gates decide the exit code. "Bar" gates decide whether check.js prints BAR MET. The numbers in B1 live in rules.json under bar.
Part 2. The judgement bar (what the machine cannot see)
These are answered by the author in the read-aloud pass and by readers if authorised. A script that passes Part 1 and fails any of these is not finished.
- The whole story is told. The origin of the person and the thing, the rise (how it got big, with the mechanism), the turn (the first sign), the response, the fall, the people who paid, the blame question answered by the record, the lesson. v3 and v4 cut the founder, the city, the partner and the rise; the user's reaction was to ask for them back. Rule J1 forces a beat for each part; it cannot judge whether the beat is rich.
- The thesis is verified, not only the numbers. Every "X caused Y" has a source for the link. If one does not, the script says so aloud and the thesis is the weaker version the sources support.
- A reader who has never seen the chain can say the argument back and knows who the main person is, what they wanted, and why a decision of theirs is a puzzle.
- The first two minutes are not a menu. The hook confirms the click inside 30 seconds, names a person with a want, carries the rise and the fall as images, and teases experiences, not the route.
- The persona is likeable, not smug, is fair to both sides, and is never aloof about the people who paid.
- Every figure of speech earns its place: it explains something hard, its limit is honest, and it is not a stock phrase.
- Every "I" is true of whoever will say it.
- The title and the evidence agree, or the disagreement is stated to the user with alternates.
- Nothing the script asserts about a living person goes beyond the record: allegations are stated as allegations, courts' decisions as decisions.
- Nobody is a stranger. Every person has a role or a relation where they arrive and again where they return; every name earns its place; every count is backed; every term is either known to the audience or defined once. (K)
- Nothing needs decoding. No line is understood only by working out what it means; the words are the ones people say; a pronoun has its person in the sentence before. (K)
- The prize is felt before the fall, the turn is heard, the cost is said. And each beat is a small arc: the doubt, the person's edge, the proof. (L)
- A dense stretch opens with a headline and then keeps its promise: the details close the loop the headline opened. The hook ends as a trailer, not a menu. (M)
Part 3. The reference profile (Moser Baer v6)
| Measure | v6 | Sample of 8 English winners (median, range) |
|---|---|---|
| Rules passed | 55 of 55 (0 FAIL, 0 WARN) | n/a |
| Damage-test checks | 42 of 42 | n/a |
| Length / words / beats | 19.6 min / 2,940 / 14 | 19.9 min (11.6 to 30.4) |
| Quantities per minute / max in 30 s / in the hook | 2.0 / 4 / 1 | 2.4 (0.9 to 5.3) |
| Hook length | 110 s | not measured |
| Contractions per 100 words | 1.84 | 0.75 (0.13 to 1.88). Other English winners measured earlier had a median of 1.5; these are auto-captions of scripted voice-overs, which tend to expand contractions |
| Negation pivots / staged run-ups | 0 / 0 | 2.5 / 1.5 |
| Sentence-length variation | 0.60 | 0.56 |
| Comparison markers per 1,000 words | 1.7 | 0.73 (0 to 2.3) |
| First-person admissions per 1,000 words | 2.4 | 0 (0 to 1.5) |
| "You" per 100 words | 1.0 | 0.33 |
| Hard 30 s windows / quiet windows | 26% / 46% | 29% / 45% |
| Longest run of hard windows | 2 | 3 (1 to 13) |
| Longest stretch with no person or "you" | 60 s | not measured |
| Pulls (kinds) / loops | 8 (7 kinds) / 31 | n/a |
Reproduce the winners' column with scripts/calibrate.js --dir <winner transcripts> --script SCRIPT-vN.md. Re-run it when new winners arrive; the thresholds in rules.json should follow the data, with the reasons recorded in learnings.md.
Part 3b. Moser Baer v7 (a polish of v6 after the Hinglish review)
70 of 70 rules (0 FAIL, 0 WARN), 56 of 56 damage-test checks; 20.2 min, 3,029 words, 14 beats; 2.0 quantities per minute, 4 in the busiest 30 s, 1 in the hook; hook 107 s; contractions 1.65 per 100; hard windows 25%, quiet 40%, longest hard run 2; longest stretch with no person or "you" 58 s; 5 comparison markers; at most 4 new people or organisations in any beat; headlines on beats 3, 7, 9, 10 and 12. The v6 profile above is kept because v6 is what the user approved; v7 is the user's polish of it.
Part 4. What the bar does not mean
- It does not mean the video will perform. None of lessons A to M has been tested on viewers or in a cohort of weak and strong scripts. They are design constraints, graded in
principles.mdandtexture.md. - v6 deliberately differs from the winners we measured on figures of speech and first-person voice. If those differences hurt, the data will say so slowly (retention, comments); change
rules.json, not the story of why it was right. - A script can pass every gate by declaring the right quotes and still be dull. The read-aloud pass and the readers are the check on that, and the only one.
Show the raw text
# The v6 bar: what "finished" means
Moser Baer v6 is the script the user approved ("i like v6"). This file turns that approval into checks, so that the next script stops at the same calibre. Part 1 is mechanical (`check.js` runs it). Part 2 is judgement (the read-aloud pass and the readers). Part 3 shows the numbers v6 reached. Part 4 says what the bar does not mean.
## Part 1. The mechanical bar (`check.js`)
| Gate | Pass when | Kind |
|---|---|---|
| T1 Integrity | the chain is valid JSON and no file contains a stray control character | hard |
| L1 Lint | 0 FAIL across all rules (A to M) | hard |
| D1 Damage test | every mutation in `selftest.js` is caught by the rule meant to catch it | hard |
| F1 Ledger | every digit figure in the spoken text is in the fact ledger (or listed as a refuted rival figure); the script file has packaging, ledger, do-not-use and open-items sections | hard |
| L2 Warnings | 0 WARN. Read each; a false alarm is fixed by rewording, not by raising a budget | bar |
| T2 Timecodes | heading time ranges equal the word counts (`check.js --fix`) | bar |
| B1 Numbers | contractions >= 1.5 per 100 words; <= 3 quantities per minute; hook 60 to 110 s; no stretch over 60 s without a person or "you"; hard 30-second windows <= 40%; 4 to 16 comparison markers | bar |
| M1 Read-aloud | `Read-aloud pass: done` in the hand-off file | bar |
| M2 Readers | `Reader pass: done` or `skipped: <reason>` | bar |
| M3 Unproven | the `Unproven:` line of the hand-off file states, in a sentence, what is not proven | bar |
"Hard" gates decide the exit code. "Bar" gates decide whether `check.js` prints `BAR MET`. The numbers in B1 live in `rules.json` under `bar`.
## Part 2. The judgement bar (what the machine cannot see)
These are answered by the author in the read-aloud pass and by readers if authorised. A script that passes Part 1 and fails any of these is not finished.
1. **The whole story is told.** The origin of the person and the thing, the rise (how it got big, with the mechanism), the turn (the first sign), the response, the fall, the people who paid, the blame question answered by the record, the lesson. v3 and v4 cut the founder, the city, the partner and the rise; the user's reaction was to ask for them back. Rule J1 forces a beat for each part; it cannot judge whether the beat is rich.
2. **The thesis is verified, not only the numbers.** Every "X caused Y" has a source for the link. If one does not, the script says so aloud and the thesis is the weaker version the sources support.
3. **A reader who has never seen the chain can say the argument back** and knows who the main person is, what they wanted, and why a decision of theirs is a puzzle.
4. **The first two minutes are not a menu.** The hook confirms the click inside 30 seconds, names a person with a want, carries the rise and the fall as images, and teases experiences, not the route.
5. **The persona is likeable, not smug**, is fair to both sides, and is never aloof about the people who paid.
6. **Every figure of speech earns its place**: it explains something hard, its limit is honest, and it is not a stock phrase.
7. **Every "I" is true** of whoever will say it.
8. **The title and the evidence agree**, or the disagreement is stated to the user with alternates.
9. **Nothing the script asserts about a living person goes beyond the record**: allegations are stated as allegations, courts' decisions as decisions.
10. **Nobody is a stranger.** Every person has a role or a relation where they arrive and again where they return; every name earns its place; every count is backed; every term is either known to the audience or defined once. (K)
11. **Nothing needs decoding.** No line is understood only by working out what it means; the words are the ones people say; a pronoun has its person in the sentence before. (K)
12. **The prize is felt before the fall, the turn is heard, the cost is said.** And each beat is a small arc: the doubt, the person's edge, the proof. (L)
13. **A dense stretch opens with a headline** and then keeps its promise: the details close the loop the headline opened. The hook ends as a trailer, not a menu. (M)
## Part 3. The reference profile (Moser Baer v6)
| Measure | v6 | Sample of 8 English winners (median, range) |
|---|---|---|
| Rules passed | 55 of 55 (0 FAIL, 0 WARN) | n/a |
| Damage-test checks | 42 of 42 | n/a |
| Length / words / beats | 19.6 min / 2,940 / 14 | 19.9 min (11.6 to 30.4) |
| Quantities per minute / max in 30 s / in the hook | 2.0 / 4 / 1 | 2.4 (0.9 to 5.3) |
| Hook length | 110 s | not measured |
| Contractions per 100 words | 1.84 | 0.75 (0.13 to 1.88). Other English winners measured earlier had a median of 1.5; these are auto-captions of scripted voice-overs, which tend to expand contractions |
| Negation pivots / staged run-ups | 0 / 0 | 2.5 / 1.5 |
| Sentence-length variation | 0.60 | 0.56 |
| Comparison markers per 1,000 words | 1.7 | 0.73 (0 to 2.3) |
| First-person admissions per 1,000 words | 2.4 | 0 (0 to 1.5) |
| "You" per 100 words | 1.0 | 0.33 |
| Hard 30 s windows / quiet windows | 26% / 46% | 29% / 45% |
| Longest run of hard windows | 2 | 3 (1 to 13) |
| Longest stretch with no person or "you" | 60 s | not measured |
| Pulls (kinds) / loops | 8 (7 kinds) / 31 | n/a |
Reproduce the winners' column with `scripts/calibrate.js --dir <winner transcripts> --script SCRIPT-vN.md`. Re-run it when new winners arrive; the thresholds in `rules.json` should follow the data, with the reasons recorded in `learnings.md`.
## Part 3b. Moser Baer v7 (a polish of v6 after the Hinglish review)
70 of 70 rules (0 FAIL, 0 WARN), 56 of 56 damage-test checks; 20.2 min, 3,029 words, 14 beats; 2.0 quantities per minute, 4 in the busiest 30 s, 1 in the hook; hook 107 s; contractions 1.65 per 100; hard windows 25%, quiet 40%, longest hard run 2; longest stretch with no person or "you" 58 s; 5 comparison markers; at most 4 new people or organisations in any beat; headlines on beats 3, 7, 9, 10 and 12. The v6 profile above is kept because v6 is what the user approved; v7 is the user's polish of it.
## Part 4. What the bar does not mean
- It does not mean the video will perform. None of lessons A to M has been tested on viewers or in a cohort of weak and strong scripts. They are design constraints, graded in `principles.md` and `texture.md`.
- v6 deliberately differs from the winners we measured on figures of speech and first-person voice. If those differences hurt, the data will say so slowly (retention, comments); change `rules.json`, not the story of why it was right.
- A script can pass every gate by declaring the right quotes and still be dull. The read-aloud pass and the readers are the check on that, and the only one.
Shown as it is in the repository at build time (2026-11-03); the home directory appears as <home>. If this page and the file differ, the file is right. Back to the catalogue.