Skip to content

test(orchestration): PR-2 the break contract pinned cell by cell (gh-#401) - #808

Merged
genwave-radio merged 4 commits into
mainfrom
test/break-contract-453
Sep 18, 2026
Merged

genwave-radio merged 4 commits into
mainfrom
test/break-contract-453

Conversation

@genwave-radio

Copy link
Copy Markdown
Collaborator

🧾 PR-2 of the Orchestrator split (#401): the break contract, one fact per cell

Follows PR-1 #805 (merged). Test-only: no production change (git diff --stat main -- src is empty).

What

  • T517 — STORY-453 AC1–AC17 (SPEC F186 slot table, F186.1, F186.2 a–f, F186.4 i): 20 facts through OrchestratorBuilder — back-announce, crosstalk and its ceremony exclusion, the two-announcement cap, station-id and ad cadence, StationId < Ad and Context < TimeDate drain tiebreaks, pooled vs rendered station id, time/date freshness, context provider key, lead-in last, the ceremony-only unit (no crosstalk / lead-in / track), the back-announce that stays on it, the held sign-on.
  • T518 — STORY-453 AC18–AC23 (F186.3): 8 drop facts — expired time/date + one expiry line, throwing ad vend + one WARN, null lead-in and over-budget back-announce drop their slot alone, null SignOff publishes exactly one HandoffPieceDropped, null announcement render keeps the claim. The over-budget race is decided by the fake clock alone.
  • T519 — the two product follow-ups ruled in F186.4 are filed: orchestration: announcements claimed into a ceremony-only unit — keep or skip after the split #806 (announcements claimed into a ceremony-only unit) and orchestration: an ad drained into a straddle break — keep or defer after the split #807 (an ad drained into a straddle break), project Authored safe-segment files have no delete/GC path #3. AC24 is the manual cell and names them.

One partial class FeatureBreakContract over three files (~300-line budget). Every fact is one assertion against the unsplit Orchestrator; the Story452 replay stays frozen.

📝 Story-wording drifts found while pinning (for the SPEC owner, no code change)

  • AC12 "due 10 s ago with a 90 s budget → Late": lateness must exceed the budget, so the fact adds an 85 s queued tail.
  • AC17 "a track that crosses the boundary": the NotBefore = max(existing, now + clamp(queuedAhead)) hold lives only on the ceremony-only decline rung, never on the crossing-track branch of GetNextAsync.

✅ Gate

dotnet build -c Release 0 warnings; full solution --filter "Category!=Integration": 0 failures. Orchestration 490 passed / 72 skipped (every remaining skip is pending: T<n> or manual:); Architecture 172/12sk; Host 3075/15sk; Core 182; Context 78; Plugins 53; Ads 222; MediaLibrary 169; Tts 879/9sk.

Part of #401.

…hrough the builder (gh-#401)

STORY-453 AC1–AC17 (SPEC F186 slot table, F186.1, F186.2 a–f, F186.4 i)
go green against the unsplit Orchestrator: back-announce, crosstalk and
its ceremony exclusion, the two-announcement cap, station-id and ad
cadence, StationId<Ad and Context<TimeDate drain tiebreaks, pooled vs
rendered station id, time/date freshness, context provider key, lead-in
last, the ceremony-only unit (no crosstalk / lead-in / track, on the tts
request seam) and the held sign-on. 20 facts over a partial class split
into two files for the line budget; every fact rides OrchestratorBuilder
and one assertion. AC18–AC23 stay skipped for T518, AC24 is manual.

Two story-wording drifts recorded in the fact comments: AC12 needs an
85 s queued tail to cross the 90 s budget, and AC17's NotBefore hold
lives only on the ceremony-only decline rung. No production change.
…through the builder (gh-#401)

STORY-453 AC18–AC23 (SPEC F186.3) go green against the unsplit
Orchestrator: an expired time/date is not buffered and logs one expiry
line; a throwing ad vend leaves the break without an ad and one WARN
naming the vend; a null lead-in render and an over-budget back-announce
render each drop their slot alone with every other item in position; a
null SignOff render publishes exactly one HandoffPieceDropped; a null
announcement render keeps the claim. Eight facts in a third partial
file; the over-budget race is decided by the fake clock alone. AC24
stays manual. No production change.
…and gh-#807 (gh-#401)

STORY-453 AC24 is the manual cell: the two product follow-ups ruled in
SPEC F186.4 (announcements claimed into a ceremony-only unit, an ad
drained into a straddle break) are filed in project #3 and named on the
skipped fact so the evidence is one grep away.
@genwave-radio
genwave-radio merged commit 4427f09 into main Sep 18, 2026
11 checks passed
@genwave-radio
genwave-radio deleted the test/break-contract-453 branch September 18, 2026 12:13
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 18, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant