test(podcasts): the briefing acceptance plays the born-reversed order
Release / build-and-push (push) Successful in 3m32s

The §0-item-2 acceptance pin predates the chain-order system and
assumed the native default: it started the chain at feed position 1
and expected a forward hop. With the born-reversed default (d56031f3),
the page's first card is feed position 5 and the chain runs 5 → 1 —
the acceptance's MEANING is unchanged (play from the first card you
see, chained back-to-back within the live briefing set); the fixture
card it starts from flipped accordingly. Changelogged.

This was the only failure in the full-suite validation run (154s,
green) — the first whole-suite pass across today's four units
(chips, label endpoint, apply-path seed, born-reversed acceptance).
This commit is contained in:
John O'Keefe committed 2026-11-01 13:55:49 -05:00
1 parent 57bc0e9dd4
commit 5fb80f82ed
2 files changed
+15 -7

No files matched your search

+9 -7
View File
@@ -884,9 +884,10 @@ func TestPodcastSmartCollections(t *testing.T) {
t.Run("acceptance_briefing_plays_back_to_back", func(t *testing.T) { t.Run("acceptance_briefing_plays_back_to_back", func(t *testing.T) {
// ALL mode is the stored tree root: today's unplayed feed-A // ALL mode is the stored tree root: today's unplayed feed-A
// episodes = aNew + aNew2, chained in native feed order. Playing // episodes = aNew + aNew2. BORN REVERSED (2026-11-01): the
// the FIRST match (the header's Play-as-Sequence target) must // collection's default chain order is reverse, so the page's
// chain into the second. // first card is feed position 5 (aNew2) and the chain runs
// 5 → 1 — book order for feeds that list newest-first.
// The detail page (smart branch, All Libraries view) renders // The detail page (smart branch, All Libraries view) renders
// episode cards with the play affordance + the header button. // episode cards with the play affordance + the header button.
@@ -905,16 +906,17 @@ func TestPodcastSmartCollections(t *testing.T) {
assert.Contains(t, html, "Play as Sequence", "smart collections play as a sequence too") assert.Contains(t, html, "Play as Sequence", "smart collections play as a sequence too")
assert.Contains(t, html, "?queue=collection:"+collID, "smart episode cards chain through the queue param") assert.Contains(t, html, "?queue=collection:"+collID, "smart episode cards chain through the queue param")
// Start from the first briefing match (feed position 1): index 1 // Start from the page's FIRST card (feed position 5 under the
// of 2, next = the second, both hops carrying the queue param. // reversed default): index 1 of 2, next = feed position 1, both
// hops carrying the queue param.
code, body = podcastAuthed(t, setup, regToken, "GET", code, body = podcastAuthed(t, setup, regToken, "GET",
"/readers/"+uuid.UUID(aNew.ID.Bytes).String()+"?queue=collection:"+collID, "") "/readers/"+uuid.UUID(aNew2.ID.Bytes).String()+"?queue=collection:"+collID, "")
require.Equal(t, http.StatusOK, code) require.Equal(t, http.StatusOK, code)
html = string(body) html = string(body)
assert.Contains(t, html, esc(`"source":"collection"`)) assert.Contains(t, html, esc(`"source":"collection"`))
assert.Contains(t, html, esc(`"episode_index":1`)) assert.Contains(t, html, esc(`"episode_index":1`))
assert.Contains(t, html, esc(`"index_total":2`), "exactly the briefing set: aOld fails <7d, aPlayed fails unplayed, aPending is un-downloaded, bEp is RLS-dropped") assert.Contains(t, html, esc(`"index_total":2`), "exactly the briefing set: aOld fails <7d, aPlayed fails unplayed, aPending is un-downloaded, bEp is RLS-dropped")
assert.Contains(t, html, esc(`"next_url":"/readers/`+uuid.UUID(aNew2.ID.Bytes).String()+`?queue=collection:`+collID+`"`)) assert.Contains(t, html, esc(`"next_url":"/readers/`+uuid.UUID(aNew.ID.Bytes).String()+`?queue=collection:`+collID+`"`))
assert.NotContains(t, html, `id="player-order-select"`, "computed order — the order control stays hidden (R1)") assert.NotContains(t, html, `id="player-order-select"`, "computed order — the order control stays hidden (R1)")
}) })
+6
View File
@@ -714,3 +714,9 @@ Explicit values (client-sent or stored — e.g. a deliberate native)
are never clobbered. Pinned (TestSmartCollectionBornReversed): are never clobbered. Pinned (TestSmartCollectionBornReversed):
apply-seeds-when-unordered, respects stored native, respects client apply-seeds-when-unordered, respects stored native, respects client
native. native.
TestPodcastSmartCollections' acceptance pin updated with the same flip:
the briefing acceptance now starts from the page's FIRST card (feed
position 5 — the born-reversed default's book order) and chains into
feed position 1. The acceptance meaning is unchanged: play from what
you see, chained back-to-back within the live briefing set.