ποΈ The accepted skew (pinned, deliberate β this issue is the revisit ticket)
T250 re-keyed RollingPatterDurationEstimator's Exact memo to (voice, showName) so mixed-show templated-ident durations never cross-contaminate. The WRITE side stamps per-show; the READ side (Orchestrator.BuildBoundaryFit) still calls the 3-arg show-blind overload, so inside a show the fit can consult the plain ident's duration at Exact confidence while the airing will render the longer show line β up to ~4s one-directional under-estimate inside a 30s tolerance band. The (voice, null) bucket stays unpolluted (the important half), and worstConfidence widens the band whenever any other kind in the fit is non-Exact.
π In-code notes
src/GenWave.Orchestration/Orchestrator.cs ~BuildBoundaryFit (the read-side call)
tests/GenWave.Orchestration.Tests/Specs/Gh253_PatterDurationEstimator.cs β the deliberate pin; its "no show context to offer" comment is inaccurate (the resolver is one expression away) and should be corrected with the fix
π§ Fix shape
Pass scheduleResolver?.TryGetCurrent()?.Show?.Name into the 4-arg Estimate overload at the fit site; flip the pin to assert show-aware reads.
ποΈ The accepted skew (pinned, deliberate β this issue is the revisit ticket)
T250 re-keyed
RollingPatterDurationEstimator's Exact memo to(voice, showName)so mixed-show templated-ident durations never cross-contaminate. The WRITE side stamps per-show; the READ side (Orchestrator.BuildBoundaryFit) still calls the 3-arg show-blind overload, so inside a show the fit can consult the plain ident's duration atExactconfidence while the airing will render the longer show line β up to ~4s one-directional under-estimate inside a 30s tolerance band. The(voice, null)bucket stays unpolluted (the important half), andworstConfidencewidens the band whenever any other kind in the fit is non-Exact.π In-code notes
src/GenWave.Orchestration/Orchestrator.cs~BuildBoundaryFit(the read-side call)tests/GenWave.Orchestration.Tests/Specs/Gh253_PatterDurationEstimator.csβ the deliberate pin; its "no show context to offer" comment is inaccurate (the resolver is one expression away) and should be corrected with the fixπ§ Fix shape
Pass
scheduleResolver?.TryGetCurrent()?.Show?.Nameinto the 4-argEstimateoverload at the fit site; flip the pin to assert show-aware reads.