diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ff798f..9d2ebee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. Format follows [Keep a Changelog](https://keepachangelog.com/). This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.18.1] - 2026-07-22 + +### Changed + +- The deck's closing footer — the "full argument, in text" CTA, the all-presentations link, and the subordinate Sources disclosure — moved from slide 6 (close) to slide 7 (the whats-next finale), so it sits on the deck's actual last slide; the fixed-chrome padding follows it, and check-presentations pins the new location. + ## [0.18.0] - 2026-07-22 ### Added diff --git a/pyproject.toml b/pyproject.toml index 3ffef3a..a7f11ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "org" -version = "0.18.0" +version = "0.18.1" description = "The AgentCulture org site — source of the web presence published to AgentCulture.org. Replaces the deleted landing-page repo. Not distributed on PyPI: the CLI stays repo-local; the deliverable is the published site." readme = "README.md" license = "Apache-2.0" diff --git a/site-astro/scripts/check-presentations.mjs b/site-astro/scripts/check-presentations.mjs index a0589d1..e58a408 100644 --- a/site-astro/scripts/check-presentations.mjs +++ b/site-astro/scripts/check-presentations.mjs @@ -197,6 +197,16 @@ function linksTo(html, href) { return anchors(html).filter((anchor) => anchor.attrs.href === href); } +/** Count semantic Sources disclosures. Element-based rather + * than a raw-substring count, so Astro's scope attributes and any harmless + * whitespace/formatting change in the rendered markup can't cause a false + * failure (PR #28 review). */ +function countSourcesSummaries(html) { + return elements(html, "summary").filter( + (summary) => textContent(summary.inner) === "Sources", + ).length; +} + function countOccurrences(html, needle) { return (html.match(new RegExp(needle.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) ?? []) .length; @@ -673,6 +683,30 @@ check("deck finale: whats-next is last with the triad, separation band, no photo finale.attrs["data-robot"] === undefined, "finale section must carry no data-robot attribute", ); + + // The deck's closing footer (article CTA, all-presentations link, the + // subordinate Sources disclosure) sits on the LAST slide — it moved off + // the close slide when the finale became slide 7. + const finaleArticleLinks = linksTo(finale.inner, articleRoute).length; + assert( + finaleArticleLinks === 1, + `the finale must carry the article CTA (${articleRoute}) exactly once; found ${finaleArticleLinks}`, + ); + const finalePresentationsLinks = linksTo(finale.inner, presentationsRoute).length; + assert( + finalePresentationsLinks === 1, + `the finale must carry the all-presentations link (${presentationsRoute}) exactly once; found ${finalePresentationsLinks}`, + ); + const finaleSources = countSourcesSummaries(finale.inner); + assert( + finaleSources === 1, + `the Sources disclosure must render exactly once, on the finale; found ${finaleSources} there`, + ); + const deckSourcesTotal = countSourcesSummaries(deckHtml); + assert( + deckSourcesTotal === 1, + `the deck must render exactly one Sources disclosure, found ${deckSourcesTotal}`, + ); }); check("deck imagery: three robot photos with alt text", () => { diff --git a/site-astro/src/data/mind-nervous-system-body-slides.ts b/site-astro/src/data/mind-nervous-system-body-slides.ts index 85ce539..7e772b2 100644 --- a/site-astro/src/data/mind-nervous-system-body-slides.ts +++ b/site-astro/src/data/mind-nervous-system-body-slides.ts @@ -11,7 +11,8 @@ // evidence-pinned beat text stay put in `mind-nervous-system-body.ts`; this // module still does not derive from it and carries no per-slide evidence // ids. Sources stay subordinate: see `deckSources` below (repo homes + one -// dated note), rendered once on the close slide, never per-slide. +// dated note), rendered once in the deck's closing footer on the finale +// slide, never per-slide. // // DECK SHAPE — exactly seven slides, one per primary beat (`beat` 1-7, in // slide order): org#23's six plus the whats-next-finale-slide trajectory @@ -328,7 +329,7 @@ export interface DeckSourceProject { } /** - * The deck's subordinate sources note, rendered once on the close slide (not + * The deck's subordinate sources note, rendered once on the finale slide (not * per-slide): repo-home links for both projects plus one dated note. This is * the deck's evidence surface — the article keeps the strict, commit-pinned * ledger in `presentations.ts` / `mind-nervous-system-body.ts`, untouched. diff --git a/site-astro/src/pages/presentations/mind-nervous-system-body.astro b/site-astro/src/pages/presentations/mind-nervous-system-body.astro index fe2f78d..5c5f08b 100644 --- a/site-astro/src/pages/presentations/mind-nervous-system-body.astro +++ b/site-astro/src/pages/presentations/mind-nervous-system-body.astro @@ -15,10 +15,13 @@ // 4. surfaces — the reachy-mini-action photo with three labels around it. // 5. autonomy — a triptych of three DeckSituationVignettes (stuck, // disconnected, routine); no photo. -// 6. close — two dual-maturity robot cards, the verbatim thesis, sources. +// 6. close — two dual-maturity robot cards and the verbatim thesis. // 7. whats-next — the trajectory finale: See/Remember/Act glyph triad, two // next-step cards (no photos, no data-robot), the shared -// separation band, the six-sentence spoken close. +// separation band, the six-sentence spoken close, and the +// deck's closing footer (article CTA, all-presentations link, +// the subordinate Sources disclosure) — it sits on the last +// slide, so it moved off "close" when the finale landed. // // Navigation is progressive enhancement over natural scroll: the dot rail is // plain anchors, the prev/next chrome and keyboard support exist only under @@ -390,34 +393,6 @@ const slideViews = slides.map((slide, index) => {

{slide.bottomLine}

-
-
- - The full argument, in text → - - - All presentations - -
-
- Sources - -

{deckSources.note}

-
-
)} @@ -478,6 +453,34 @@ const slideViews = slides.map((slide, index) => { > {slide.spokenLine}

+
+
+ + The full argument, in text → + + + All presentations + +
+
+ Sources + +

{deckSources.note}

+
+
)} @@ -1041,8 +1044,9 @@ const slideViews = slides.map((slide, index) => { color: var(--accent-strong); } - .slide--close { - /* room for the fixed chrome beneath the sources on short viewports */ + .slide--next { + /* room for the fixed chrome beneath the sources on short viewports — + the closing footer moved here when the finale became the last slide */ padding-bottom: 7rem; } diff --git a/uv.lock b/uv.lock index 1740f40..4327dba 100644 --- a/uv.lock +++ b/uv.lock @@ -236,7 +236,7 @@ wheels = [ [[package]] name = "org" -version = "0.18.0" +version = "0.18.1" source = { editable = "." } [package.dev-dependencies]