feat(split-reel v8): every voice decision happens before the charge - #5890
Merged
Merged
Conversation
An ordinary caller (not the house) who names no voice and has no clone is refused before the charge. Before, she was charged and then given the first voice in the house's ElevenLabs account. STOCK_VOICE_FOR_ORDINARY = false and fn voice_refused. The house keeps its own path. A new voice's length is estimated from its text before it is paid for: MS_PER_CHAR = 56. It is measured on the host's lipsync captions: 464 characters over 25920 ms, rounded up. fn speech_ms_estimate and fn text_fits add a boundary at 214 characters (fits, 11984 ms) and 215 (refused, 12040 ms). Two new tests (19/19 pass), vacuity 0 of 19, and three negative controls, each red: pace 55, nobody refused, and the ceiling one character wide. Sealed. Closes #5885 phi^2 + 1/phi^2 = 3 | TRINITY Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs #5885 phi^2 + 1/phi^2 = 3 | TRINITY Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
This was referenced Oct 4, 2026
Merged
…is given back The estimate from the text (MS_PER_CHAR = 56) is one voice's pace: the owner's Russian clone, the only voice in the host repo with its text. A slower voice can pass it and still be measured past SPEECH_MAX_SECONDS once it exists. That backstop refusal is the one refusal that comes after the charge, so REFUSED_BEFORE_SPEND's "nothing to refund" does not cover it. The slowest-per-language pace was not an option: the host's other voice files have no text (render/public/vo/vo1..vo5.wav, avatar_brain's mp3) and no English or client voice is there, so such a pace would be a guess. REFUND_TOO_LONG_VOICE = true, fn voice_too_long and fn backstop_refund: the exact sum this call was charged goes back, and nothing for a voice_url from an earlier call, a voice that fits, or the house (charged 0). 20/20 tests pass, vacuity 0 of 20. Three more negative controls, each red: no refund, a refund for a passed-back voice, a refund at the ceiling. Re-sealed; VERSION stays 8. Refs #5885 phi^2 + 1/phi^2 = 3 | TRINITY Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…8-voice-before-charge
Contributor
PR DashboardGenerated at: 2026-10-04 05:51:23 UTC
Summary
Seal Status
|
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
This was referenced Oct 4, 2026
gHashTag
added a commit
that referenced
this pull request
Oct 4, 2026
Closes #5913. crm-story-reel v24 removes HOUSE_SKIPS_ELEVENLABS and its assertion. The flag described audio_generate asking ElevenLabs for a voice when no voice and no clone was chosen, skipped for the house; split-reel v8 (#5890, host 999#3567) deleted that lookup, so the flag was true of nothing. The test keeps its delivery half (DELIVER_VIA_HOME_BOT, HOUSE_DELIVERY_BOT) as "the finished reel reaches the house through its own bot". VERSION 24 with a dated header note; seal regenerated. Reviewer bee checks at 2f503cf: t27c test-report 60/60 pass, 0 fail; t27c seal --verify all hashes MATCH; host copy (999#3575) byte-identical (sha256 2ec980e5...); host gen.ts equals fresh t27c gen-ts. Only red check is spec-guards (DRIFTED ring-096-rust specs/numeric/formats.t27), the same red as on master. Host: gHashTag/999-multibots-telegraf#3575
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.
What
specs/automation/split-reel.t27goes from v7 to v8: every voice decision now happens before the charge. The one refusal that cannot happen before the charge now refunds the voice. Closes #5885.An ordinary caller with no voice of her own is refused before the charge.
STOCK_VOICE_FOR_ORDINARY = falseandfn voice_refused(house, has_voice_id, has_clone).OWN_VOICEholds, and no Kie speech leg is measured working on this path.A new voice's length is estimated from its text before it is paid for.
fn speech_ms_estimate(chars)andfn text_fits(chars), atMS_PER_CHAR = 56.A voice refused for its length after it is paid is refunded, once.
REFUND_TOO_LONG_VOICE = true,fn voice_too_long(measured_ms)andfn backstop_refund(paid_here, measured_ms, charged_now).SPEECH_MAX_SECONDS * 1000.voice_urlpassed back from an earlier call;REFUSED_BEFORE_SPENDnote now says why its "nothing to refund" does not cover this case: this refusal comes after the charge.Where 56 ms/char was measured
apps/vibee-editor/player/public/lipsync/captions.jsonin gHashTag/999-multibots-telegraf. It is whisper output on 75 Russian words of the owner's clone.lipsync.mp4in the same directory, 25920 ms by ffprobe.Why a refund and not a conservative estimate
The host repo holds one voice with its text: the clip above, which is Russian and is the owner's clone.
render/public/vo/vo1..vo5.wav(Silero, cut to fit their scenes) and avatar_brain's mp3.A "slowest measured pace per language" would therefore be a guess. A guess cannot promise that no voice passes the estimate and then fails the backstop, so the backstop's refusal refunds the voice instead.
Checks (from output, on the merge of origin/master 7943bc4)
t27c test-report --verbose: 20 tests, 20 pass, 0 FAIL. Three are new:t27c seal --verify: all hashes MATCH, spec_hashsha256:ea49a4b1….tri spec-checkon the byte-identical vendored copy: 20/20, 0 of 20 vacuous, 23/23 negative controls red. Three of the controls are new for the refund:!paid_here;>=at the ceiling.split-reel.t27.Claim status
This PR adds a rule and one measurement. No reel has been rendered under v8 yet.
The host binding is gHashTag/999-multibots-telegraf#3567, where the refund is wired at the length backstop and pinned by a binding test and eight mutants.
phi^2 + 1/phi^2 = 3 | TRINITY
🤖 Generated with Claude Code