F111 + F112 completion: the straddle handoff (PR 4 of 4) - #420
Merged
Conversation
…eremonyOnly (T234, STORY-303) MusicSelectionPolicy returns MusicSelectionResult (candidate + rung); behavior-neutral this task — Straddle still airs the least-late pick until T235 ceremonies around it. The T218-carried delegate becomes IBoundaryFitLog (NoOp default; Orchestrator implements explicitly so boundary-fit lines stay on its logger; the positional-null nit dies). One floor authority: IsBelowFloor is the single comparison site for the 90s MusicFloor, shared by classifier and decline gate; the exact-90s edge is pinned as Straddle-and-not-declined from both sides. F111.5: the fit line gains an additive rung= template token (Loki queries survive). CeremonyOnly's reachability documented truthfully (non- declined StationId/TimeDate below floor = everyday; handoff decline whose ceremony rendered nothing falls through) and the classifier arm is mutation-pinned on the policy's own least-late line. Carry to T235: strike the stale 'only ever enqueues due-NOW deferrals' premise at Orchestrator.cs:489 (false since T230).
…g track (T235, STORY-303, closes the build half of gh-#320/gh-#300) When the policy proves the pick genuinely crosses (CrossesBoundary — measured duration, post-trim effective length vs the boundary; computed IN the policy, the only component that saw the length; duration-less never claims), the unit airs [SignOff, crossing track] with SignOn held via the drain hold-set to the next seam — back-announcing the captured track and thanking the outgoing DJ. Round-1 review ground-truthed the naive version airing sign-offs 4-6 minutes early on short-track pools (Straddle ≠ crossing) and forcing against moved boundaries — both now gated and bidirectionally mutation-pinned; non-crossing picks take T234 baseline timing exactly (probe-matched). Reconciliation dance documented both halves (moved ⇒ defer + re-classify next unit; retracted ⇒ ordinary unit), F92.4 per-piece degrade intact, one EnqueuePatterAsync call site. T236 watch: the crossing threshold ignores QueuedAhead/PreMusicPatter — conservative (degrades to baseline, never mis-airs) but misses legit straddles; candidate threshold recorded in review.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
📻 A station, not a playlist — PR 4 (T234–T236; stacked on #419)
gh-#320's middle rung, built — and the boundary ladder becomes one authority. Closes the build halves of gh-#320 and gh-#300; closes gh-#401's follow-through (the extraction carried the ladder as a policy outcome, exactly as ruled).
Fit | Straddle | CeremonyOnlyas a policy outcome; the T218 logging delegate retired forIBoundaryFitLog; one floor authority (IsBelowFloor, exact-90s edge pinned both sides); F111.5 rung token additive (Loki queries survive); CeremonyOnly's real reachability documented + classifier-arm mutation-pinned.CrossesBoundary— measured duration only, never inferred), SignOn held via drain hold-set to the seam after the track, back-announce captured at plan time. Review round 1 ground-truthed the naive version airing sign-offs 4–6 min early on short-track pools and forcing against moved boundaries — both gated, bidirectionally mutation-pinned, probe-matched to T234 baseline everywhere the premise doesn't hold.Evidence
Full sln 0W/0E; 3,220 tests, 0 failures; every task failed review round one (false reachability docs, unspecced classifier arm, the early-sign-off traces) and was mutation-proven before PASS.
🤖 /build-loop (builder sonnet / reviewer opus), specs-first.