Problem
track-assembler.ts still owns several speech-policy fallback constants in the frame assembly path. They are not merely plumbing; they change timing and F0 when upstream declarative data is absent.
Evidence
src/track-assembler.ts has fallback duration logic around fallbackDuration.
src/track-assembler.ts uses a hard segmentStart + 0.02 floor for transition timing.
src/track-assembler.ts falls back to baseF0 / 2 when voiced event F0 underflows.
Acceptance criteria
- Move these fallback policies to explicit declarative config with citations or engineering-estimate labels.
- Validate required policy values at load time instead of silently applying inline defaults.
- Add focused tests for missing-policy failure and configured-policy behavior.
- Keep assembly code as orchestration over already-resolved policy, not the owner of fallback values.
npm.cmd run typecheck:core passes.
Problem
track-assembler.tsstill owns several speech-policy fallback constants in the frame assembly path. They are not merely plumbing; they change timing and F0 when upstream declarative data is absent.Evidence
src/track-assembler.tshas fallback duration logic aroundfallbackDuration.src/track-assembler.tsuses a hardsegmentStart + 0.02floor for transition timing.src/track-assembler.tsfalls back tobaseF0 / 2when voiced event F0 underflows.Acceptance criteria
npm.cmd run typecheck:corepasses.