chore(plan): pending specs for the crosstalk stretch (STORY-326–329, F127) - #534
Open
genwave-radio wants to merge 3 commits into
Open
chore(plan): pending specs for the crosstalk stretch (STORY-326–329, F127)#534genwave-radio wants to merge 3 commits into
genwave-radio wants to merge 3 commits into
Conversation
Four spec scaffolds for the voice epic's expressiveness stretch (SPEC F127, PLAN VQ-i, T281–T289): the two-voice script writer, per-line rendering + single-asset assembly, the single-use ahead-of-air stock, and the on-air vend with its fail-closed config. All 49 facts pending (Skip = 'Pending TXXX') per the Story253 idiom — /build-loop turns them green task by task, gated behind T280 (the start gate) and T283 (Dean's paper-audition checkpoint). STORY-330 is manual close-out, no specs. Solution builds clean; both suites green with the new skips registered. Refs #385
The eighth kind (F127.1), appended last — value sequence [0..7] pinned by
the flipped Story329 fact. One load-bearing arm: PatterTemplateRenderer
gains a Crosstalk placeholder ('Two voices, one moment.') because the
preview endpoint reflection-parses kinds and would have 500'd; the arm
carries the T287 airable-filler hazard note (the TtsSegmentSource drop
guard does not list Crosstalk — the wiring task must decide). Ripples:
piper-only EngineByKind seed gains the kind (this branch's baseline;
superseded when the VQ-d branch's seed removal merges), Story005 count
7→8.
Review rounds: mechanical sweep PASSED round 1; rounds 1-2 caught and
fixed falsified closed-set documentation — the published Abstractions
XML docs (IPersonaPreviewWriter/PersonaPreviewResult now defer to the
IsLlmAuthored predicate instead of enumerating) and the routing SSOT
comments (LlmCopyWriter class summary + IsLlmAuthored doc + echoes,
LlmPromptBuilder, LlmCopyStatusHolder) all now name or defer correctly;
Crosstalk is template-class on this seam BY DESIGN — its real copy
arrives via the T282 script writer. Final one-clause fix applied by the
orchestrator verbatim from the reviewer's prescription (recorded
deviation: no builder round for a prescribed comment clause).
Air-inert: no producer emits the kind until T287. Suites: 0 failed.
Release note: additive enum member = minor Abstractions bump at the next
tagged release (no in-repo version file to edit — tag-driven).
One completion per exchange (F127.3 — reactions must react to what was actually said): CrosstalkScriptWriter + a two-card prompt built BESIDE LlmPromptBuilder (F116 goldens byte-identical, verified), speaker-tagged HOST:/NEIGHBOR: wire format with an (interjects) overlap marker — plain prefixes over JSON because the production 3B emits them reliably. The F123 machinery is shared, not copied (ApplyCopyHygiene extracted; DeriveMaxTokens/ClassifyForRing widened internal — extraction proven byte-identical by the pre-existing F123/gh-#186 facts redding under helper mutations). Validation is fail-closed, skip-only (F127.4): 3–8 lines, both speakers (incl. the all-interjection one-voice hole), strict alternation outside interjections, per-line hygiene + budget with NO trimming, a live Crosstalk:DurationTargetSeconds estimate (default 25s, allowlist 5–120), and — review round 1's catch — finish_reason=='length' discards a token-capped reply whose chopped final line would otherwise validate clean (the gh-#424 class, ruled into F127.4's scope). Operator hooks (ShowName/Daypart) truncate at the MaxSoulChars precedent; discard reasons echo at most 120 chars of model text. Every attempt is visible: LlmCallKind (Copy|Crosstalk) rides the ring through /api/llm-calls to a new Kind chip, and Rejected renders brass with its own label — a content-quality decision, never the danger tone of an outage (the gh-#277 red-tile lesson, honored this time). 17 facts live (15 planned + 2 the review forced against vacuous pins); every fact mutation-verified — six deletion/inversion mutations re-run by the reviewer, each redding exactly its fact. Review: FAIL(6)→FAIL(1 word)→PASS across 3 gates; final one-word comment fix applied by the orchestrator from the reviewer's prescription (recorded deviation). Suites: dotnet 3,733 passed / 0 failed; admin-ui 1,054 passed; goldens 17/17. Recorded for T286: start-time gating is insufficient — shared completion gate or cancel-in-flight required (the #277 fence).
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.
The /plan output for the voice epic's expressiveness stretch (gh-#385 → SPEC F127, PLAN phase VQ-i, T281–T289 — planned 2026-08-14, same-day follow-through on the design session).
📦 What
Four pending-spec scaffolds, 49 facts, all
Skip = "Pending TXXX"per the Story253 idiom — /build-loop flips them green task by task:Tts.Tests/Specs/Story326_BoothWritesForTwo.csTts.Tests/Specs/Story327_TwoVoicesOneClip.csOrchestration.Tests/Specs/Story328_StockedAheadAiredOnce.csOrchestration.Tests/Specs/Story329_BanterOnTheAir.csSTORY-330 (the showcase gate) is manual close-out — no specs by design. The T288 wire acceptance is a production-binary check, deliberately not represented (house posture).
⛔ Gates encoded in the plan
✅ Verified
dotnet build GenWave.sln— 0 warnings, 0 errors. Both suites green with the new skips registered (Tts 564 passed/58 skipped · Orchestration 325 passed/27 skipped).