Docs/Skills and code/skill video-script-production

.claude/skills/video-script-production/references/learnings.md

Markdown149 lines33.7 KBSkill: video-script-production

What the file says about itself

Learnings log (script production): Read this before every script. Add new points after every script: one or two sentences each, with the project and version.

Mentioned on: page 06, page 07, page 10, page 12, page 13, page in

Learnings log (script production)

Read this before every script. Add new points after every script: one or two sentences each, with the project and version. Tags: [method] how to run the process · [measure] what the linter and readers can and cannot do · [content] what seems to make scripts work (hypotheses until confirmed blind on a cohort).

Method

Measurement

Content (hypotheses, not yet confirmed blind)

2026-10-25: v5 changes (implied pulls, voice)

2026-10-25: first blind fresh-reader pass (Moser Baer v4), two Sonnet readers

Readers saw only the voice-over (no chain, no lint). Viewer-simulation reader recalled the argument correctly and rated the hook and the "well-funded" press conference highest. The linter scored v4 100/100 and both readers still found problems the linter cannot see:

2026-10-25: Moser Baer v5 (the full story, pulls, plain voice)

2026-10-25: Moser Baer v6 (personality, rhythm, the human element)

2026-10-25: recording and harnessing the pipeline (after v6)

2026-10-25: S1 and S2 written in full, S1 run on a test topic

Cafe Coffee Day v1 (2026-10-25: first run on a new topic, no subagents, BAR MET)

Moser Baer v7 (2026-10-25: a polish after the line-by-line review of the Hinglish v6, BAR MET)

Show the raw text
# Learnings log (script production)

Read this before every script. Add new points after every script: one or two sentences each, with the project and version. Tags: **[method]** how to run the process · **[measure]** what the linter and readers can and cannot do · **[content]** what seems to make scripts work (hypotheses until confirmed blind on a cohort).

## Method
- **[method]** Verify the causal link before building a thesis on it, not only the numbers. The Moser Baer v4 draft's thesis ("the bond turned the decline into a debt") passed every number check and failed when the link itself was checked: the 2004 disc expansion was already largely debt-funded and no source says what the bond paid for. The thesis was rebuilt ("the same borrowed bet, twice"), and it was stronger. (moser-baer v4)
- **[method]** Use the title as a claim to audit. "Killed" overstated what the evidence could show; the script delivers the supportable version and the hand-off says so. (moser-baer v4)
- **[method]** Build the chain (junctions, care lines, hero numbers, loops, ladder) before the prose, and write the hook last. Writing the hook first locked in a three-tease opening in v3. (moser-baer v4)
- **[method]** Treat a fresh-reader pass as mandatory before filming. The linter validates the author's declarations, so it cannot catch an author who declares a weak care line or a fake BUT. (moser-baer v4, not yet run)

## Measurement
- **[measure]** The first quantity counter double-counted "₹354 crore" (the digit and the scale word) and overstated density by about a third; a damage test and a hand count caught it. Re-count by hand on one beat whenever the detector changes. (moser-baer v4)
- **[measure]** Heuristic rules (naked numbers, shared noun) are warnings. They flagged declared hero numbers whose stake line sat in the same sentence, so hero numbers are exempt from the naked-number heuristic and held to the strict stake-line rule instead. (moser-baer v4)
- **[measure]** v3's and-then problem was not "and then" tokens (it had none at joins). It was signpost joins ("Here is the second number I promised") and bare datelines ("June 2012 arrives"). The linter now flags both. (moser-baer v4)
- **[measure]** The declared word count matters: v3 was labelled "about 12 minutes" but was 1,427 spoken words, 9.5 minutes. Always report words and minutes from the text. (moser-baer v4)
- **[measure]** Thresholds (4 quantities per 30 s, 7 hero numbers, 75-second hook, three live loops) are design budgets, not validated against retention. (moser-baer v4)

## Content (hypotheses, not yet confirmed blind)
- **[content]** A prediction followed by its test makes numbers land: "sales should barely move, profit should vanish; check March 2008" turns the FY08 figures into a result instead of a fact. (moser-baer v4, untested)
- **[content]** A contradiction between two things the subject said, six months apart, is a stronger mid-video reveal than any single figure ("we are well-funded" in December; asking for more time in June). Look for these in press conferences and filings. (moser-baer v4, untested)
- **[content]** An unannounced bonus (here: the alleged-fraud cases sum to under a quarter of the creditors' claims) makes a video feel larger than its promise without any clickbait risk. (moser-baer v4, untested)
- **[content]** The opening scene in v4 is a short real scene with the cause withheld. Our cohorts contradicted cold-opening on the collapse as a narrated summary (ledger H-005). Whether a 20-second real scene behaves differently is an open test. (moser-baer v4, tension recorded)
- **[content]** Dropping a worker anecdote that is vivid but single-source and involves a death was the right trade: the chain did not need it and the claim could not be supported. (moser-baer v4)

## 2026-10-25: v5 changes (implied pulls, voice)

- [measure] **A declared beat loop covers little.** v4's loops were opened in a beat's last two sentences and closed in the next beat, so the middle of a beat had nothing pending even though D7 passed. The E rules count a pull as warm only for 60 seconds after a touch the text actually contains.
- [method] **The voice pass is separate from the structure pass.** Rewriting for sound moves hinge and care lines; re-run C and D after it. Order: draft, voice pass, lint, readers.
- [measure] **v4 scored 100 and still read as machine-written.** Run on the new F rules, v4 has 5 negation pivots and 18 staged run-ups and script-talk, and 0.47 contractions per 100 words against about 1.5 in the English winner transcripts we have. The first linter could not see this because it only counted structure.
- [content] **Hypothesis for the cohort:** winners show fewer negation pivots and run-ups per 1000 words than weak videos. Untested; the teardown now has S-IMPLICIT-PULL and S-PLAIN-VOICE to count presence in winners.

## 2026-10-25: first blind fresh-reader pass (Moser Baer v4), two Sonnet readers

Readers saw only the voice-over (no chain, no lint). Viewer-simulation reader recalled the argument correctly and rated the hook and the "well-funded" press conference highest. The linter scored v4 100/100 and both readers still found problems the linter cannot see:

- [measure] **A passing linter does not mean the load is fine.** Readers flagged the CARE paragraph (dates, a loss figure, "negative net worth", "subsidiaries") and the CBI paragraph (two agencies, four people, three figures in ~20 s) as the heaviest stretches, although both were under the 4-figures-per-30-s cap. Named entities and jargon are not counted by the quantity detector. Candidate rule: count named people/organisations and new terms in the same window.
- [method] **A tease must be paid at the size it was sold.** "Something so strange you can't unsee" was paid by an ordinary spin-then-loss pair; the editor called it oversold. Seed the tease at the size of the payoff.
- [method] **Do not build a link on an unsupported adjacency.** "Alongside all this, the company owed a bond" joined two things the script itself said it could not connect (bond proceeds unknown). Say what the link is, or do not make one.
- [content] **Claim sizes are not stolen money.** Comparing alleged fraud with creditor claims shows scale, not innocence; the script now says so.
- [method] **A recap after the thesis was already stated in the previous beat read as a third ending.** Close now restates in one line.
- Unfixed: reader P35 to P36 ("was it a scam?") still reads as a new section; the title says "Killed" and the editor judged the evidence supports "the financing made the decline fatal", not "the escape plan killed it".
- Limits: two readers, one run, same model family as the author; the "don't read ahead" instruction was honour-system.

## 2026-10-25: Moser Baer v5 (the full story, pulls, plain voice)

- [method] **Research the person before the company.** The Calcutta years, the Swiss partner, the cocktail party and the floppy bet were all in two Business Today profiles that the first fact base never opened. They changed the thesis from "the same bet twice" to "the playbook that had worked three times, once more, with borrowed money and a date". Start the fact base with who the decision-maker was and what they had done before. (moser-baer v5)
- [method] **Cross-check the magnitude of every figure against a second source.** v4 used one article's "In 2004, ₹3,500 crore, largely debt-funded"; another magazine had total debt at ₹1,620 crore in 2005 and ₹3,500 crore in 2011. Same number, different meaning. When one figure carries a beat, check it against a second source's order of magnitude. (moser-baer v4 and v5)
- [method] **Order of work that held:** research, chain and pulls, VO draft, voice pass, lint, fix, re-lint. The lint caught three dense windows (figures) that reading did not. (moser-baer v5)
- [measure] **Inside-the-beat questions are what keep a long beat covered.** Declaring only one loop per join left the middle of beats uncovered (D7 warnings at 82 s, 76 s, 95 s). Each fix was an honest inside-the-beat question (for example "how little was left?" before the 7-paise figure), not a decoration. (moser-baer v5)
- [measure] **Pull touches need real words in the text.** Every touch had to be rewritten once so that the quote existed verbatim; this is the gaming-resistant part of the E rules, and it forced the callbacks to be concrete ("the bond about six months from falling due") rather than announced ("remember the date").
- [measure] **False positives to expect from F1 and C2:** "I couldn't find what it earned. It was still..." matches the negation-pivot pattern; "moving on" matches the additive list even when it means leaving. Reword rather than raise the budget. (moser-baer v5)
- [content] **Hypothesis: the founder's earlier escapes make the last one legible.** A viewer who has watched three moves work is primed to expect the fourth to work, which is what gives the "the gate stayed shut" opening its reversal. Untested.
- [content] **Hypothesis: a named, sourced person in the plant (B3, B11, B14) gives the jeopardy pull something to hold.** Risk: a private individual named in a national magazine; the hand-off asks whether to name him at all.
- Not yet run on v5: a fresh-reader pass (needs subagents) and a rubric-v3 cohort comparison.

## 2026-10-25: Moser Baer v6 (personality, rhythm, the human element)

- [method] **A pronoun at a hinge needs its person on the page.** v5's hook closed on "So let's start with the city he left" when the only mention of the founder was "its founder" three paragraphs earlier. The reader meets a person the way they meet a stranger: by name, want and reason to care. Rule I3 now fails any hinge line with he/she/his/him unless a name is in the same or the previous sentence; I2 requires the protagonist named in the hook with a want.
- [method] **Texture is one plan, one additive pass, then the subtractive voice pass.** Three sequential passes (metaphor, rhythm, human) would each rewrite the last. The plan is the chain (`humans`, `figures`, `persona`, `landing_quote`, `hook_elements`); Step 4a adds, Step 4b removes, lint last. Reasoning in `references/texture.md`.
- [measure] **Calibrate a new threshold on winners before using it.** The first draft of the rhythm rule (warn above 2 hard windows in a row) would have flagged 4 of the 8 English winners; it was loosened to warn above 3 and fail above 6. Winners' medians: hard share about 30%, quiet share about 46%, longest hard run 3, about 7 swaps per 10 min. Eight transcripts is a small sample.
- [measure] **My own rules had loopholes the damage test found.** A role phrase ("its founder") counted as naming the protagonist; a different person named paragraphs earlier satisfied the dangling-pronoun test; the "no figures in a parable" test only looked at the first and last line. Each was fixed and has a mutation in `selftest.js`. Write the damage test for a new rule before trusting it.
- [measure] **Shell heredocs eat backslashes.** Two regex word boundaries were silently written as backspace characters (so "he" matched inside "the"). After any scripted edit of a regex, check the file for stray control characters (grep for the backspace byte); prefer the Edit tool for regexes.
- [content] **The winners do not do what v6 does.** In 20 teardowns S-ANALOGY is 9/20, S-PERSONA 6/20; the 8 English transcripts we measured have a median of 0.73 comparison markers per 1000 words (range 0 to 2.3; about one every nine minutes) and a median of zero first-person admissions (max 1.5 per 1000). v6 has 1.7 comparison markers per 1000 (5 in 19.6 minutes, about one every four minutes) and 2.4 admissions per 1000, plus an explicit persona. This is a bet on differentiation, not a copy of what worked. Hypothesis for a later cohort: videos with a stated limit on their own metaphor and a landing after the biggest number are remembered better. Untested.
- [content] **Hypothesis: a named witness in the hook raises the cost of the fall.** v6 names Mahesh Sharma before the thesis. Risk: he is a private person quoted in one magazine, and the hook now carries a name before the viewer has a reason to care about him. A blind reader should say whether it lands or reads as a list.
- [content] **A fact found while adding people.** v5's "the disc business had lost money three years running" was the solar arm's record in the source. Re-reading the source for a human detail caught it; the lesson is to re-read the page for every sentence you touch.
- Not run on v6: a fresh-reader pass (needs subagents), a rubric-v3 cohort comparison, any viewer data.

## 2026-10-25: recording and harnessing the pipeline (after v6)

- [method] **Write the runbook from the transcript, not from memory.** The user messages, every search and fetch, and the reader prompts were mined from the session log (`session-log.js`). Memory had mis-dated the work and mis-stated two numbers; the log did not.
- [method] **When a step is done by hand twice, make it a tool.** Calibration on winners, the numbered blind file for readers, timecodes, the research log and the ledger comparison were all scratch scripts before `calibrate.js`, `extract-vo.js`, `retime.js`, `session-log.js`, `ledger-check.js`. `references/tools.md` is the registry and the rule: add a row when you make one.
- [method] **A gate runner turns "remember the checklist" into one command.** `check.js` runs lint, the damage test, the ledger check, the timecodes and the bar numbers, reads the manual gates from `HANDOFF-vN.md`, and infers the stage reached from the files. It is the resume point for a new session.
- [measure] **The ledger check found real gaps on its first run.** "14 cents" and "₹110 crore" were spoken but the ledger held $0.14 and ₹109.8 crore; two rival figures that the script refutes lived only in the do-not-use table. Spoken forms are now written into the ledger rows.
- [measure] **Quote a rate with its unit and do the arithmetic.** "0.3 per 1,000 words" is not "one every five minutes" (it is one every 22 minutes). The calibration tool now prints per-1,000 rates from the same markers the linter uses, and the medians are in `quality-bar.md`.
- [measure] **Contraction medians differ by sample.** 12 mixed English winners had a median of about 1.5 per 100 words; the 8 "why X died" winners (auto-captioned scripted voice-overs) have 0.75. The F5 floor of 1.0 is a design choice above the latter and the v6 bar of 1.5 is a design target.
- [content] **Lesson J (the whole story) was missing from the harness.** The user's v5 request to restore the founder, the city and the partner had been met by hand; nothing would have stopped a future script from truncating them again. Each beat now declares the story part it tells.
- Not done: a second-topic validation run of the runbook; a rubric v4 for the cohort skill with the E to J checks; a named-people-and-terms density rule.

## 2026-10-25: S1 and S2 written in full, S1 run on a test topic

- [method] **Run the stage you are documenting.** Writing S1 from the code alone would have missed that the ranking is blind to the angle and that a 3-video run takes 8 minutes. A throwaway topic in a scratch folder costs little and is safe because the tool reads its key from the repo's `.env`.
- [measure] **A tool's "refresh" flag is a data-loss risk if outputs share a folder.** `topic-research --refresh` removed `research/<slug>/` including `script/`. Check every destructive flag in a tool you build a process on top of.
- [method] **Do not tell analysts a video is a winner when it is not.** `prepare.js --perf-unknown` for topic cohorts.
- [content] **Stage 2 needs a no-subagent path.** Options A (subagents), B (you as the analyst, same validator), C (lite).

## Cafe Coffee Day v1 (2026-10-25: first run on a new topic, no subagents, BAR MET)

- [method] **The thesis was rebuilt on what the pages said, not on the causal story the videos told.** The IL&FS-to-lenders link stayed a single blog summary, so beat 8 says "I couldn't confirm that link" and the thesis rests on Business Today's pledge levels, debt used for land and hotels, and the Mindtree money "entirely utilised to reduce debt". Weakening the claim was the right call; it cost no drama the script needed.
- [method] **Resolve each conflicting figure by its date and basis before choosing.** Three of the S1 brief's conflicts were different dates or bases, not errors: Malavika Hegde's Rs 7,200 crore was the debt at the start of 2019, her Rs 3,200 crore the debt in July 2020; the Rs 6,550 crore (March 2019) and Rs 4,970 crore (group, August 2019) are different entities or dates. A real error (the 2015 IPO at Rs 50 crore) was only visible against a second source.
- [method] **A search summary is not a fact basis.** Three of the cited pages returned 403 or a binary PDF; the rows stayed [V-search] and no script claim depends on one alone. The script's own rule (cite only what was opened) held.
- [method] **Check the S1 selection before trusting it.** Two "Malavika success story" recovery videos and a "comeback" video were in the selected eight. The swap used candidates the ranking had rejected on the entity rule, one of which named "CCD" rather than "Coffee Day". Record each swap; the brief's rule worked.
- [measure] **Rule A7 is a substring check on normalised text.** "L&T" normalises to "lt", which sits inside "built" in the hook, so the gloss was judged late. The gloss was in the right place; the declared term was the problem. Fix used: remove the term from `jargon` and keep the gloss in the text (rules untouched).
- [measure] **The sentence splitter ends sentences at "V.G."**, so a junction check read the first sentence of beat 6 as "In July 2019, V.G." and found no shared word. Write a name without initials at the start of a sentence that follows a junction.
- [measure] **D2 (care line before the first figure) reads only digit figures.** Number-words ("two hundred and eighty") hid the first figure in two beats; the damage test caught it. Write figures as digits where a care line must be checked.
- [measure] **Rung 1 of the promise ladder takes no seed.** B4 checks seeds only for rungs 2 and 3. Giving rung 1 a seed_quote made the damage test cut the wrong seed and report a miss. Keep rung 1 without `seed_quote` (the title promise is paid by the payoff, not seeded in the hook).
- [measure] **Comparison markers are a list, and one phrase can count twice.** "a bit like a property firm" counted as "bit like" and "like a". G4 allows two per minute; the analogies in beats 2 to 4 clustered. The fix was to move one analogy out of the cluster and to use "like a loan does" once, not three times.
- [measure] **The damage test requires the named rule to fire, not any rule.** Three mutations were "caught" only by a neighbouring rule (B4, B8, D2); each traced to the test cutting the wrong text (a second copy of the learning phrase in the packaging table), or to a figure the rule did not see. Read the MISS line, find which text the test cut, and fix the text, not the rule.
- [content] **Hypothesis: a thin-margin chain whose later profit came from non-core income is a stronger hook than the collapse narrative.** The hook names the cafes' thin profit and the close pays it. Untested.
- [content] **Hypothesis: a term explained at the first sentence that uses it (pledge, before the percentage) keeps the figure from landing on an unexplained word.** Untested; the read-aloud pass found the pronoun and joins, not this.
- [method] **Only three of eight S1 transcripts were on disk.** The re-run without `--refresh` completed but did not fetch the four cited transcripts, so their timestamps could not be audited. Say so in the hand-off; do not build the story on them.

## Moser Baer v7 (2026-10-25: a polish after the line-by-line review of the Hinglish v6, BAR MET)

- [method] **Cluster the margin notes, then find the viewer problem behind each.** Thirty-five notes reduced to ten pieces of intent; notes that looked unrelated shared a cause (five were about nobody being told who someone is). `review-round-7.md` section 1 is the method and section 2 the trace.
- [method] **A note is a request for an effect on the viewer, not a source.** Four notes carried claims the sources do not support (Xidex as a partner, "studied this country his whole life", "araam se", "sales doubled"); each was checked and either changed or dropped. Check before applying.
- [method] **Apply each lesson to every beat, and run each new rule on the old script as well as the new one.** The reviewer annotated beats 0 to 6; the same defects were in 7 to 13 (an untagged Ratul in beats 7, 9, 12; unspoken BUTs in beats 7, 8, 11). On the unchanged v6 text the new rules flagged what the reviewer had marked by hand.
- [method] **A rule that needs a declaration should warn when the declaration is missing and fail when it is wrong.** The first version of K1, K5, L2 and M1 failed an old chain outright; the Cafe Coffee Day v1 chain (BAR MET on the old rules) now gets 0 FAIL and 9 WARN, which is the honest answer: it passes the hard gates and has not had round 7 applied.
- [method] **When a change moves a line, re-read what it left behind.** Moving the December-to-June echo into the beat's headline left "This pattern is called escalation of commitment" with no antecedent; the read-aloud pass found it. Check the sentence after any line you move.
- [method] **The edit that adds a headline costs words.** Five dense beats gained 10 to 20 words each and four went over the 260-word cap; the fix was to cut a duplicated summary and a secondary sentence, not to raise the cap.
- [measure] **The name heuristic reads capitalised words inside sentences.** It misses a first mention that opens a sentence and counts "By May" until month names and sentence starters are skipped. The busiest beat in v6 had four new names, so `max_new_names_per_beat` (5) would not have flagged it; the dense-beat headline rule did. Treat K3 as a smoke alarm, K4 and M1 as the checks.
- [measure] **A damage-test mutation that cuts the first occurrence of a quote in the file will hit the notes sections** once they quote the same lines. Mutations now touch only `**VO:**` lines.
- [measure] **The buried-verb check needs a stoplist of sentence starters.** Without it, "For years, one company ... made..." and "Even if every allegation..." were flagged. It now looks only at sentences that open on a subject.
- [measure] **Backslashes in a shell heredoc were swallowed again** (a `\n` inside a patch script produced a literal line break in the damage test). Edit tool, not heredoc, for code with escapes.
- [content] **Hypothesis: a tagged cast, a spoken contrast at every join and a headline on dense beats make the same facts easier to follow.** Untested on viewers; the only evidence is one reviewer's notes. The signalling literature (Alpizar, Adesope and Wong 2020, d = 0.38 for learning; abstract level) is about instructional media.
- [content] **Hypothesis: a 13-word takeaway keeps the personal stake at a third of the length.** The v7 takeaway lost "when your own field starts to shrink"; the close (`your own next move`) pays the same idea. Untested.
- [content] **The edge a protagonist had must come from a source.** The reviewer wanted "Puri studied this country his whole life"; the sources support "more than twenty years making things in the country" and a third-largest floppy business. A weaker, true edge is used.
- [method] **Collect what was already written before verifying one fact at a time (S1b).** For Videocon, 37 saved pages plus the NCLAT order gave the whole spine in one sitting. Save the pages to disk (`fetch-articles.mjs`), read the primary order first, then the news.
- [measure] **About a third of article links are blocked to a scripted fetch** (14 of 51 for Videocon: 403s, paywalls, consent walls). Plan for it: the index lists them; open them another way or keep the fact at `[V-search]`.
- [measure] **Rival videos can be measured against the harvest.** A grep of the eight transcripts for the tribunal name, the late events and the promoters' own claim found none: a gap measured, not guessed.
- [method] **Google AI Mode is a link finder and a timeline cross-check, not a source.** Its timeline matched the saved articles; its trivia thread named publications without links and could not be traced. Ask for links; read the primary pages.
- [measure] **Numbers in the same story disagree by a factor of ten** (claims Rs 31,000 to 90,000 crore; a bid printed 2,692 and 2,962). Keep a table of the disagreeing figures and use the primary order's pair.
- [content] **Hypothesis: the gap for a Videocon video is the post-2022 chapter and the structure of the claims,** because the eight rival videos stop at 2022 and none mentions the tribunal's reasoning. Untested on viewers.
- [measure] **A percentage in a court order can be a party's argument on a different base.** The NCLAT order's "4.15%" is the plan against a Rs 71,433.75 crore total claim, quoted from an appellant; against the order's own admitted figure it is 4.58%. Say which base, or say "about 4 to 5 paise".
- [method] **Score the loops, then let the best-scoring one be the second rung if it answers a different question.** For Videocon, "who paid" scored highest (7) but answers who, not why; "what was the borrowing for" (6) is the CDL and "who paid" is the close.
- [method] **If the story has no witness who pays after S1b, search for one before S4 ends.** One search found the unpaid Aurangabad workers, a named union president on record in Business Today (2019).
- [method] **A title word like "paid" can be wrong in a way a figure is not.** The Videocon plan was approved and then set aside, so the title says "offered".

- [method] Videocon v1 (2026-11-01): the linter scored 100/100 before two blind readers; they still caught what it cannot: a hook that stated one side of a disputed fact flatly (the alms), a thesis premise ("made money for years") evidenced only to 2008, a simile that contradicted its point (haircut as a friend's favour), and a loaded word ("gambler") that contradicted a fairness line. Pull and loop rules reward a question every few paragraphs; the editor counted about 15 self-answered questions and called it a tic. Treat D7/E2 fixes as a cost, not free.
- [method] Chasing lint warnings by adding questions and names raised a tic risk; prefer moving an existing question over adding one.
- [content] A "who killed X" frame needs the script to say what it could not find (here, the TV profit after 2008) or the title outruns the proof.
- [measure] Videocon v1 round 2: asked to cut the self-answered questions, I removed 11; the D7/E2 pacing rules (no beat without a question for more than 60 s) brought 10 back, net cut 1. Questions are how this pipeline paces, so "cut the tic" and "keep 100/100" conflict. A real fix is a different pull type (a statement that opens a gap), not deleting questions. Unproven that viewers mind them.

- [method] Videocon v1-short (2026-11-02), a half-length cut of a finished 20-minute script: cut by function, not by shortening every sentence. List what the argument cannot lose (each suspect with one fact, one number per bet, the loan and the fall, the witness, the arithmetic that clears the usual suspect, the bid, the questions and the close), keep the verdict-bearing sentences, drop the second example of everything, and drop the weakest-sourced rows first (Ravva, Twin Star's appeal, the alms dispute) because they cost words and carried no part of the argument. Rebuild the chain from the long one (cast, cdl candidates and audience carry over). The first cut landed at 1,640 words (54 percent); two reader rounds added about 50 back (final 1,688 words, 55 percent), because the readers' complaints were almost all "compression shows": a term used before it is explained, a number with no denominator, a body named three ways.
- [measure] The gates scale down: 12 beats in 11 minutes passed 70 of 70 rules and the damage test. What broke at half length: hard 30 s windows (adjacent beats each carrying a pair of figures; fix by dropping one figure, not by adding words), D7/E2 pacing (fixed with loops that open at the end of one beat and close in the next, not with extra questions: 13 spoken questions against 21 in the long version), and C3 (the join needs a shared word, found twice by adding the word to a sentence that was already there). The v6 bar's hook of 60 to 110 s cannot hold a 30 to 50 s hook; `check.js` now accepts a `bar_overrides.hook_sec` in the chain with a written reason (gate T4) and `rules.json` is untouched.
- [method] A hook of 30 to 50 seconds (123 words, 49 s at 150 wpm) still carried every B8 element: name on the viewer's own machine, the person with a want and the rise, the turn on a contrast word, the witness, the question with three suspects, the destination, one trailer line and a bridge phrased as a question about the viewer's own washing machine. Both viewers still marked the bridge ("But first...") as the first dip, because rise-first means the story goes back to a small town right after the Diwali image; that is a structural cost of the user's rise-first decision, not a wording problem.
- [content] The second round of blind readers on the short cut still found the appeal sequence (a plan approved, then "duty bound to reconsider", then set aside) the weakest stretch, the same stretch the long version's viewer called its weakest. Plain words helped ("the next court up", "said, in writing"); the stretch is hard because three bodies act in four sentences.
- [content] Two chronology slips passed the long version's readers and the author ("what did Dhoot do next" when oil came first; "nearly missed it" before a sentence saying the deadline was missed). The short cut's editor found both on first read. They are still in `SCRIPT-v1.md`.
- [measure] `session-log.js --since` keeps events that have no timestamp in the transcript, so the log for the short cut listed one old search and five unrelated beat tasks until they were removed by hand. Check the counts against what the run actually did.
- [method] Gemini TTS takes start slowly and speed up after a sentence or two, so every recording now opens with a lead-in sentence ("This is B2 of The Fall of Videocon. Starting the script now."). The lead-in is cut off after alignment, using the silence between it and the first script word (`tts-trim-lead-in.js`). Live check on Videocon B2: a 4.5 s lead-in, the cut at 5.34 s in a 1.04 s silence, and the trimmed file re-transcribes from "By 2008" with 124 of 136 words.
- [measure] The Gemini 3.1 recording of Videocon B2 with the lead-in came back 53.4 s long; the script words alone are about 48.1 s after the trim. Whisper matched all 136 words of the lead-in plus script (mean similarity 0.999), so the trim rests on measured word times, not on estimates. Whether the slow start is gone is for the user's ear to judge; the timing data cannot show it.
- [method] Hinglish is not English with Hindi words: the linter's English word lists (comparators, human words, connectives, number words, contrast and cost words, the viewer's "you") miss most of a Hinglish script, so they were overlaid, not translated. The overlay adds Hinglish words to the English ones (lists joined, regexes alternated), so English business words still count in a Hinglish script. Doing it by hand per rule would have been two hundred edits and would have been wrong for the next language.
- [method] A translated chain works when every quoted or tagged string is a substring of the translation. The fastest route was one map of 166 English strings to Hinglish substrings, applied by a script, then the linter says which translation is missing. Two things broke that the English never showed: a person's alias was an everyday word ("chanda", the collection, matched the name Chanda Kochhar, so the translation uses "daan"), and a sentence split inside a quote the linter needs whole (the Hinglish splits what English keeps in one sentence). Keep the quote in one sentence.
- [method] Hindi puts the verb last, so "buried verb" and "pronoun before the name" checks fire on Hinglish in different places from English. Fixes that worked: split a clause that sits between two commas; put the subject first; use the name where a pronoun would lean on the previous sentence. Do not let a pronoun stand for a person whose name is one sentence back.
- [measure] Videocon v1-short Hinglish: 1,891 words against English 1,689 (12 percent longer, the same as Moser Baer's 16 percent). Hook 117 words (about 47 s at 150 wpm) against English 123; the first draft was 144 words (57 s), so the hook was cut by about 27 words to keep the 30 to 50 s window. Lint 100/100 with zero warnings after eight passes; parity PASS; damage test 55 of 55 (one skip, no hinge line uses a pronoun).
- [measure] A damage test built for English misses three of its own mutations on Hinglish (the connective, the stake order and the BUT join): the English word is not there. The mutations were rewritten to work in any language (the stake line moved onto the landing line, which is after the figure in any language), and the connective and BUT lists now name the Hinglish forms too.
- [measure] Gemini 3.1 flash TTS read the Roman-script Hinglish B0 as English: a 51 s take in which English Whisper heard "A machine in your house, perhaps..." (a paraphrase, not the script). Gemini 3.8 flash TTS, same prompt and voice, read the same text as Hinglish (Devanagari, 55 s). Use 3.8 for Roman Hinglish; do not trust a 3.1 take without a transcript check.
- [measure] Hinglish takes come back in Devanagari, so align.mjs with the Latin text finds the boundary words only as "interpolated", and the trimmer correctly refuses. Trimming B0 needed a manual cut at a quiet point (4.66 s), checked by re-transcribing the cut file (it must open on the first script word with no lead-in fragment). A cut is not verified by ear.
- [content] Hinglish turns: "shopping" as a verb was kept in English on purpose ("Dhoot shopping karne nikal pade!"), the energy is in the exclamation and the short sentences, not in a literal word-for-word. The question marks match the English exactly, so the rhetorical questions of the hook (Korean giants? Bank scandal? Owners?) stay as questions, not as statements.

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.