fix(deck): move the closing footer to the finale, the deck's last slide (deck-footer-on-finale) - #28
Conversation
The "full argument, in text" CTA, the all-presentations link, and the subordinate Sources disclosure sat on slide 6 (close) — where the deck used to end. With the whats-next finale as slide 7, the deck's closing chrome now lives there, so a viewer reaches it at the actual end. The .slide--close padding-bottom that reserved room for the fixed pager chrome beneath the sources moves to .slide--next with the footer. check-presentations pins the new location (article CTA and all-presentations link inside the finale, Sources rendered exactly once deck-wide and inside the finale) — the CTA assertion was observed failing against the pre-move build. Dataset prose updated: deckSources renders once in the finale's footer, not on the close slide. Verified: 20/20 node tests, astro build clean, 23/23 presentation checks, 56 pytest, markdownlint clean, both slides screenshot-reviewed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FqTq59W6wi1YZqxGf228Tt
|
/agentic_review |
PR Summary by QodoFix deck closing footer to render on finale (last) slide
AI Description
Diagram
High-Level Assessment
Files changed (6)
|
Code Review by Qodo
1.
|
…iew) Two fixes to the finale check this PR added, both from Qodo on #28: - the all-presentations link asserted >= 1, so duplicate footer rendering would still pass while the article CTA next to it required exactly one. Now === 1, with the found count in both messages. - the Sources uniqueness assertions counted the raw substring ">Sources</summary>", which a harmless whitespace or formatting change in the rendered markup would break. Replaced with a semantic countSourcesSummaries() built on the existing elements() + textContent() helpers. Both verified against the built HTML: injecting a second /presentations/ link into the finale fails the tightened assertion, and reformatting the summary across newlines still passes 23/23 where the old substring count would have read 0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FqTq59W6wi1YZqxGf228Tt
|



The deck's closing footer — "The full argument, in text →", "All
presentations", and the subordinate Sources disclosure — sat on slide 6
(close), which is where the deck used to end. Now that the whats-next finale
is slide 7, that chrome belongs on the actual last slide, so a viewer reaches
it at the end of the talk rather than one slide early.
What moved
close-footblock (CTA pair + Sources<details>) moves from theclosebranch to thenextbranch, rendering after the finale's spokenclose.
padding-bottom: 7remthat reserved room for the fixed pager chromebeneath the sources moves with it:
.slide--close→.slide--next.deckSourcesrenders once in the finale's footer,not on the close slide.
Verification
The new location is pinned, not just moved:
check-presentations.mjs's finalecheck now asserts the article CTA and all-presentations link live inside the
finale, and that the Sources disclosure renders exactly once both deck-wide
and within that section. The CTA assertion was observed failing against the
pre-move build before the markup moved.
20/20 node tests, astro build clean, 23/23 presentation checks, 56 pytest,
markdownlint clean. Both affected slides screenshot-reviewed: the close slide
now ends on the verbatim thesis, and the finale ends on the CTA pair and
Sources. Version 0.18.0 → 0.18.1.
🤖 Generated with Claude Code
https://claude.ai/code/session_01FqTq59W6wi1YZqxGf228Tt