Skip to content

v2.26.0 — Introducing The Anthology

Latest

Choose a tag to compare

@EISSeuropa EISSeuropa released this 25 Jun 13:59
Immutable release. Only release title and notes can be modified.

This release introduces the European Security Studies Anthology as the site's flagship: the single home for every paper and every speaker across nine editions of the annual conference. The two separate archive views become one browsable surface, carried in the main navigation and linked outward to the NetSec member directory. Members' own published research gains a page of its own, and a round of polish runs through the navigation, the share cards, the Initiative page and the board.

Introducing the Anthology

The European Security Studies Anthology now lives at one address, /anthology, opening on a by-person view of every scholar who has presented and a by-paper view of every paper, one tap apart. It takes a place in the top navigation in lieu of Membership, so it is reachable from any page. An author who also holds a NetSec member-directory profile carries a link through to it in the partner network's blue, with a hovercard showing their role, affiliation and photo. Each paper now deep-links to its exact slot on the conference programme rather than the top of the year page. A pill beside each name states the author's EISS standing, Board or Staff, set apart from the NetSec link next to it. The conference programmes and the new per-paper pages now carry abstracts for 228 of the archive's 510 papers, pulled from Indico and recovered by hand from the organisers' files for the panel papers Indico cannot export. And a run of fixes tightened the by-person view so the prize and Published chips keep their shape beside a wrapping title and the Published chip shows in both views.

A home for members' publications

Our board and community members publish prolifically in their own right, and that work now has its own page at /publications. It draws automatically from members' public ORCID records, grouped by member under an A to Z rail with a search and a year filter, in the same shape as the Anthology's by-person view. Sixteen more members had their ORCID iD added, taking the feed from three members to sixteen, and the Initiative page keeps a one-per-member taste with a link through to the full list. These are members' own external publications, kept deliberately separate from the Anthology, which stays the record of work presented at EISS conferences.

Around the site

Beyond the Anthology, the social share cards are redrawn in the site's light brand language on the official lockup. The Initiative page leads more sharply, opening on the founding year and a one-line mission above a single corpus-scale statistics row. The homepage marks the close of the 2026 conference in Stockholm under its new name, the European Security Studies Conference. The Summer School page now points to NetSec for applications. On the board, the combined Founding and Honorary Director role is recognised, and Sarka Kolmasova and Marco Wyss move to the former-members footer. Under the hood the site generator moves to Eleventy 3.1.6, clearing a high-severity build-time advisory, and Dependabot now watches the npm dependencies.

Index of changes

Added

  • Paper abstracts across the archive: the Anthology now carries one for 228 of its 510 papers (about 45%). Coverage is strong on the Indico-era editions (2026: 62 of 69, 2025: 43 of 44, 2024: 49 of 63, 2023: 56 of 59) and has begun on the pre-Indico back catalogue with EISS 2022 Berlin (18 of 47). The earlier editions (2017–2021) are still to come, tracked in #1040. Most abstracts came from a bulk pull of the Indico records by a new scripts/sync-abstracts.mjs into src/_data/paperAbstracts.json (214 records), shown on the archive programme grids and on each paper's /papers/<slug> page behind a "Read full abstract" expand. The remaining 62 were recovered by hand from the organisers' panel-proposal files, for papers run as panel subcontributions that the Indico export API does not expose at any detail level or authentication (confirmed by a new scripts/probe-indico-subcontribs.py), plus the pre-Indico 2022 edition. These live in src/_data/paperAbstractsManual.json, where the Indico re-sync cannot strand them. The panels recovered by hand, by edition: at EISS 2022 Berlin, six panels (Daub on external sponsorship, Hansel on cybercrime, Saideman on civil-military relations, Silvestri on the third nuclear age, Wagner on norm violations, Wagnsson on information influence). At EISS 2023, the "From Guarding the Fulda Gap" NATO-expansion panel together with six further panels run as single Indico contributions. At EISS 2024, three open panels (East Asian Security Competition, Maritime Security in the Indo-Pacific, Knowledge Production on War). At EISS 2026, the Extended Nuclear Deterrence through European Eyes and GEO-POWER-EU panels, plus the standalone papers by Nikolaos Tzifakis ("EU's Ontological Security and Geopolitical Enlargement") and on the Pristina–Belgrade Dialogue (Ejdus, Prodromidou, Stojanović Gajić, Ververidou). Part of #794. Progresses #886.
  • Members' publications get their own page at /publications, fed by a near-complete board ORCID backfill. Sixteen more board members had their ORCID iD added (researched from public records and verified against each scholar's institution, employment history and field of publications), taking the members with a live works feed from three to sixteen. With the feed grown, the "Recent publications by our members" list had outgrown its slot on /initiative, so the full feed now lives on a dedicated /publications page (EN + FR + DE), grouped by member with up to five recent works each, while /initiative keeps only each member's single latest work with a "See all member publications" link through to it. The page borrows the Anthology's by-person structure rather than being a bare list: members ordered by surname under an A–Z jump rail, a live search (author, title or journal) and a year filter that narrow the feed in place, a count line and an assistive-tech status that announce the results, member groups that fold away when nothing matches (their A–Z letter heading folding with them), and the same headshot bubble. Two data-quality fixes to the ORCID sync feed it: book front/back-matter that ORCID lists as standalone works ("Introduction", "Conclusion", "List of Figures", and the like) and book-chapter / other work types are now skipped, so a member's monograph shows as the book rather than a pile of its chapters. Hand-added iDs are preserved across the weekly bios sync, and a member's own future Form submission still wins. These are members' own external works, deliberately separate from the Anthology of EISS-conference papers. Part of #718.
  • Every paper is individually deep-linkable, and the Anthology links each one to its exact slot on the programme. Each contribution on a /YYYY programme grid carries a stable id="paper-<title-slug>" anchor (emitted once per slug, with a distinct prefix from the existing panel- session anchors), so a single paper can be linked to directly. In both the by-paper and by-person views, the edition label beside a paper (e.g. "EISS 2024") now uses that anchor to link straight to the paper on the programme, opening its "View papers" panel and scrolling it just below the sticky header, rather than dropping the reader at the top of the year page. A single paperAnchor filter is the one source of truth for both the id the grids emit and the fragment the views append, so they always agree (verified by the link checker's internal-fragment resolution). Poster-session papers, which the programme grid does not render, keep their plain link to the edition page. Closes the per-paper anchors enabler (#676) and the link-back from the corpus to the programme (#738).
  • Anthology authors who are in the NetSec member directory now link to their profile. An author's entry in the by-person view carries a "NetSec profile" link when the same person has a profile in the NetSec directory (26 of the directory's current members are also ESSC authors). NetSec publishes a slim directory-index.json (the mirror of the /data/anthology-index.json EISS already publishes for it); scripts/sync-netsec-directory.mjs mirrors it into src/_data/netsecDirectory.json, and corpus.js matches it against the authors by a folded name key (NetSec's name_key drops middle initials, so Dr John N.T. Helferich still matches an author recorded as John Helferich, plus any declared aliases). The published url is used verbatim, so EISS never hardcodes NetSec's profile-URL scheme, and ORCID is not a join key (authors carry none). A wrong homonym match can be suppressed in src/_data/netsecDirectoryRejects.json. Stays fresh both ways: the Anthology grows via the Indico sync, the directory via a scheduled re-fetch that opens an auto-PR (with NetSec's repository_dispatch as the fast path). EN + FR + DE. Part of #966.
  • Bespoke share cards and social images for the News and Anthology pages. /news gets its own Open Graph / Twitter card in the established brand style, generated by scripts/make-share-cards.py (which gains a news entry and an optional slug filter, so one card can be regenerated without re-rasterising the rest). The Anthology gets a larger bespoke set, name-led in the light brand language, from a dedicated scripts/make-anthology-social.py: a redrawn Open Graph card (anthology-meta.jpg, EN + FR + DE, replacing the generic template) plus square (1080×1080), story (1080×1920) and A4-portrait poster (1240×1754, with a scannable QR to the archive) images under assets/images/social/ for Instagram, LinkedIn, stories and print. Each carries the official lockup, the soft scale (~500 papers, ~500 scholars, dozens of EISS events), open-access framing, and the URL. The anthology entry is owned solely by make-anthology-social.py.
  • A /prizes page, "The European Security Studies Prize", with the laureate roll. Since the Initiative awards a single prize, the page is named after it. /prizes (EN + FR + DE) lists the winners year by year under a "Laureates" heading, each laureate linking straight to its Anthology paper page (where the abstract, published version and citation already live). The roll is derived from the Anthology corpus (prizeLaureates.js over paperPrizes.json), so adding a year stays a one-line data edit, and a winning paper's prize line now links back to the page. The page is co-branded at the top with the EISS lockup and the official Journal of Strategic Studies logo (who jointly award it, both inlined so they take the theme text colour) and carries a "See all prize papers in the Anthology" button. The homepage news item about the prize now points here rather than straight to the Anthology. Part of #639.
  • A News surface: a "Latest" section on the homepage, a /news archive, and an Atom feed. The homepage gains a "Latest" list under the announcement card showing the five most recent items (decayed to the last 18 months), and a full /news archive (EN + FR + DE) lists everything newest-first. Items are hand-curated in src/_data/news.json (date, type, title, optional link and excerpt). An Atom feed at /feed.xml carries the same items, linked from the page head and the footer, so scholars and journalists can follow EISS without any tracking. Publishing is a two-minute task: file a GitHub issue, label it news, and a workflow turns the title and body into a post and opens an auto-merging PR (the issue body can lead with optional Type: / URL: / Date: lines). News chrome is localised; item titles and excerpts are authored once in English. Closes #96, #605, and #634.
  • Every paper page can now be cited, with a downloadable file for reference managers. The "Cite this paper" controls let a reader copy the BibTeX or download a .bib or .ris file. RIS is the format Zotero, Mendeley, EndNote and RefWorks open on download, so a citation lands in the reader's library in one step rather than via copy-paste. The citation describes the published version when one is on record (it sits inside the published-version card), otherwise the conference presentation itself, under a "Cite this presentation" heading (@inproceedings / RIS conference paper) — since the working paper behind a talk is usually not shared. It now appears on every paper page, not only the published ones. Files are built in the browser from the page, so nothing extra ships; and the pages already carry citation_* metadata, so reference-manager browser connectors can save them with no button at all. Part of #805.
  • The 2026 conference page gains a photo gallery, and the Summer School page shows its inaugural edition. Four photos from the European Security Studies Conference in Stockholm (the keynote, the "Contemporary and Future Warfare" panel, the auditorium and the foyer) appear in a responsive gallery on /2026, placed just before the programme. EN + FR + DE, sharing one set of images. Three photos from the first NetSec Early-Career Scholars Summer School (the cohort, a teaching session and a study visit) join /NetSecSchool.html. All images ship in 480 / 960 / full responsive sizes.
  • Keynote and conference recordings now embed on three event pages. The EISS 2024 keynote and EISS 2019 keynote join their conference archive pages, and the Joint Conference on the War in Ukraine page gains its full recording. Each uses the existing lazy, cookieless player (youtube-embed.njk, via youtube-nocookie.com): until the visitor clicks play, only the YouTube thumbnail loads and no YouTube cookies are set, matching the privacy posture documented in /policy §5.
  • A prize winner now links to its published version. The 2024 Best Paper Prize winner (Samuel Seitz's "Inter-alliance Security Dilemmas…") was published in the Journal of Strategic Studies as "When competition becomes contagious: Strategic arms racing spillovers, alliance politics, and the Sino-American nuclear competition" (with a new co-author, Elliot Ji). Its Anthology page now carries the published-version card, recorded in src/_data/paperLinks.json. Part of #805.
  • European Security Studies Prize winners now carry a badge on the programme and in the Anthology. Papers that won the European Security Studies Prize (the EISS × Journal of Strategic Studies initiative for the best early-career paper) show a small gold marker beside their title on the edition programme grid and in the Anthology's by-paper list, and a fuller line on the paper's own page naming the award, the partnership and the year. Four winners are marked so far: 2024 ("Inter-alliance Security Dilemmas: Korean Counterforce Systems…"), 2025 ("Does Preeminence in Emerging and Military Technologies Matter for International Status and Prestige?"), and the two 2026 winners ("Do Parliaments Dream of Cyber Power?" and "Telegram in Russia's Information Strategy: Evidence from Serbia"). Winners are listed in a new src/_data/paperPrizes.json (keyed the same way as the abstracts), and a winner always earns its own Anthology landing page. The Anthology's by-paper view gains a prize filter to show the winners across all editions at once, mirrored in the URL (?view=papers&prize=1) so the list is shareable. Adding next year's winner is a one-line data edit.
  • The Anthology now publishes a machine-readable index at /data/anthology-index.json. A small public data file with one record per paper (title, year, slug, the absolute URL of its Anthology page, and whether a published version is on record). It lets a sibling site read the Anthology rather than re-derive it: the NetSec site can match its ESSC programme papers to this index and mark which ones have been published, linking straight to the paper's page. The slug algorithm and the publication review stay on this side, where they belong, so consumers never reconstruct them. Built from paperIndex.js and emitted the same way as the People hovercard index. Part of the paired-repo data sharing in CLAUDE.md §13.
  • Paper pages gain within-edition prev/next, a mobile sticky Back, and focus-return on the Anthology. Three navigation refinements: each /papers/<slug> page now ends with Previous / Next links to the neighbouring papers in the same edition (in the Anthology's by-paper order), so a reader can page through a conference without returning to the index. On narrow screens a slim sticky Back bar keeps an entry-aware exit in reach while scrolling a long abstract (desktop keeps the breadcrumb). And returning to the Anthology at a specific paper or speaker now moves keyboard and screen-reader focus to that row rather than the top of the page. Completes #889.
  • The Anthology now carries an "early access" notice. Both /speakers and /papers open with a small amber-flagged callout explaining the archive is an evolving preview, still being filled in edition by edition, and inviting corrections. On the French and German pages the same notice also states that the individual paper pages are in English (the per-paper pages are EN-only by design, alongside the existing beta-translation ribbon on those locales). EN + FR + DE, rendered once from the navigator i18n catalog so it stays in step across both views and all three languages. Part of #889.
  • Paper landing pages gain a breadcrumb trail and an entry-aware Back control. Each /papers/<slug> page now opens with a breadcrumb (EISS › Anthology › edition › title), backed by BreadcrumbList structured data so search engines can read the hierarchy. The former "All papers" link becomes an adaptive Back control: with JavaScript and a same-origin referrer it returns the reader to exactly where they came from (their filtered Anthology view and scroll position, or the edition programme) via history.back(), relabelling itself accordingly ("Back to the Anthology", "Back to EISS 2024"); with no JavaScript or an external referrer it stays a plain link to the paper's row in the index. EN only, like the rest of these pages. First slice of #889.
  • Every ESSC paper is now individually linkable, and papers with an abstract get their own page. In the Conference Navigator's by-paper view, each paper has a stable anchor, so any single paper can be linked to directly. The papers that carry an abstract (the 2023–2026 editions, around 160 of them) now also have their own page at /papers/<slug>, with the abstract, the authors (members linking to their profile), the panel, and links back to the edition programme. Those pages carry Google Scholar citation metadata and schema.org ScholarlyArticle data, so each becomes an individually discoverable, citable record. A publishedUrl field is ready for recording where a paper was later published. EN only (titles and abstracts stay in their original language). Part of #794.
  • A "Publications & outputs" section on /initiative, with members' works drawn from ORCID (EN + FR + DE). The network's own publications (the book series, the Prix Bastien Irondelle, briefs and survey results, curated and expanding) now sit in their own section on the Initiative page. Separately, each board and community member's recent works are drawn live from their public ORCID record and shown on their profile page, refreshed weekly. A new scripts/sync-orcid.py, run weekly by a dedicated workflow, fetches each member's public ORCID works into src/_data/orcidWorks.json, rendered with DOI links; members who add their ORCID iD to the directory form appear automatically. First slice of #718; the curated network-publications catalogue continues under #97. Part of the people-and-outputs consolidation in #756.
  • The Coercive Statecraft Programme page lists its 2023 Florence symposium. /coercion now carries the programme of the inaugural War, Coercion, Statecraft Symposium (European University Institute, 19–20 October 2023): three roundtables (defining coercive statecraft, its effects, and why leaders resort to it) with their chairs and the scholars who gave introductory remarks. The page is mastheaded by the symposium's branded banner.
  • A Conference Navigator at /speakers and /papers (EN + FR + DE). One searchable archive of everyone who has presented at a European Security Studies Conference and every paper they gave, assembled from the programmes of every edition since 2017: 492 speakers and 510 papers across 12 conferences. It opens in either of two views over the same dataset, switched by a "By person / By paper" toggle, with the chosen view carried in the URL so it is shareable and survives Back: browse speakers surname-ordered (each with the papers they gave, the year, and their most recent affiliation on record, expandable inline and linking back to that conference page), or browse every paper with its authors, affiliations, year and panel. Both views filter by year and by theme and narrow by a diacritic-insensitive find-by-name box, with the result count announced to assistive technology; it is all progressive enhancement, so the full list still renders with JavaScript off and the site search indexes every title. Themes are the nine permanent EISS panel sections plus recurring themes derived from the open panels (Deterrence, Intelligence, European and transatlantic security and the like), inferred from each paper's panel and left untagged where a session title is too generic to be confident. Names are deduplicated conservatively, normalising case, accents and leading honorifics but biased to leave near-duplicates rather than risk merging two different people, with a manual alias hatch and a name particle like "van" filing under the right letter ("van Hooft" under H). Speakers who are EISS board or community members are badged and linked to their profile. Built on a new src/_data/corpus.js spine that flattens the archive programmes and the live Indico data into one paper/speaker dataset, with the corpus totals shown as summary cards. The interface is hand-translated, while speaker names, paper titles, affiliations and theme labels stay in their original language. Closes #635 and #632; the unified surface is the first phase of the people-and-outputs consolidation in #756.
  • The ESSC 2026 livestream link is live on /2026. A single Zoom webinar (view-only, so remote viewers can watch the plenary spine without interrupting the room) is reached through the "Livestream" pills themselves: every pill is a link to the stream, with an external-link icon, in the signpost above the programme grid, on each streamed session in the grid, and on the conference card on the homepage. The hero carries a matching "Livestream" button (the primary call to action while the conference is current, with a pulsing live dot). The link is a plain outbound link (no Zoom embed, nothing loads from Zoom until you click, cf. /policy §5) and is gated to the current edition, so the pills revert to plain markers and the hero button drops once the conference is over. EN + FR + DE. The address lives in a new livestreamUrl field on the conference in conferences.js.
  • /2026 now carries schema.org Event structured data. A JSON-LD Event block (built from conferences.js) describes the conference to search engines: its dates, a Place for Stockholm University, a VirtualLocation for the livestream (so the attendance mode reads as mixed in-person and online), and the organiser. It lets the conference qualify for event rich results in search. EN + FR + DE, with the event name kept in English on every locale (its canonical name) and inLanguage set per page. A new event-jsonld.njk partial renders it; extending the same block to the archived /YYYY pages is tracked in #603.
  • Every board and community member now has a profile page, linked from the People grid. The People page stays a compact, scannable overview (name, role, affiliation, research themes, contact links); a "View profile" link on each card opens that person's own page at /board/<slug>, which carries their full biography, recent publications (drawn from their public ORCID record, refreshed weekly, each linking to its DOI), research themes and links. Real per-person URLs make each profile linkable, shareable and crawlable, and give the conference archive and the in-prose hovercards a stable destination to point at. EN + FR + DE. Closes #719; part of the people-and-outputs consolidation in #756.
  • schema.org Event structured data now covers all archive conference pages. The JSON-LD Event block (dates, venue, attendance mode, organiser) is now emitted by every /YYYY conference archive page — 2019 and 2021–2026 — via event-jsonld.njk, which archive-programme.njk includes unconditionally. The deferred 2020 edition is excluded (no event was held). The description now draws from archiveMeta.en — the properly-formatted ordinal string — rather than the raw ordinal integer, which would have produced "3th" for the 2019 edition. The sitewide Organization block in base.njk was already in place; this completes the per-conference Event coverage. Closes #796.
  • scripts/match-publications.py — Phase 1 + 2 publication matcher (#805). A new Python script that searches for published versions of ESSC conference papers. Phase 1 checks each member-authored paper against that member's own ORCID works (already synced in orcidWorks.json) — near-zero false positives. Phase 2 queries OpenAlex (free, no key, polite pool) with an author-anchored title search in a ±4-year window around the conference year. Candidates are scored on title similarity and author surname-set Jaccard, labelled high or review, and written to data/publication-candidates.json for human sign-off before any entry reaches src/_data/paperLinks.json. Run with --dry-run, --year YEAR, or --limit N. Depends on requests already in scripts/requirements.txt; uses stdlib difflib for scoring.

Changed

  • Sarka Kolmasova and Marco Wyss move to the board's former-members footer. Both are marked formerMember in board.json, so boardSorted.js drops them from the active board and renders them under the community alumni list. sync-board.py now preserves a hand-set formerMember across the weekly bios sync (the Form has no field for it), the same way it already preserves photoOverride, so they stay former even while their Form responses persist.
  • The Anthology by-person pill now names the author's EISS standing, and reads clearly apart from the NetSec link. The one "EISS member" pill is replaced by the author's actual category, "EISS Board" or "EISS Staff" (staff being the interns and support team, current or past), derived from their board role. The pill is also redrawn as a solid, opaque brand chip (board in EISS blue, staff in a neutral slate) so it no longer reads as a near-twin of the outlined, translucent NetSec partner link sitting beside it. EN + FR + DE. Every board member who has presented at an ESSC now carries "EISS Board"; the staff pill is wired for any staff member who turns up as an author.
  • The header navigation now carries the Anthology in place of Membership. The top nav reads Annual Conference, Events, The Initiative, People, Anthology, putting the unified archive of every ESSC speaker and paper one tap from any page (it was previously reachable only from the conference pages, the footer and the homepage promo). Membership leaves the top nav but stays reachable from the footer and the homepage. EN + FR + DE ("Anthology" / "Anthologie" / "Anthologie").
  • The site generator is bumped to Eleventy 3.1.6, clearing a high-severity build-time advisory. A patch within the existing ^3.x range. It silences the Node 26 module.register deprecation warning the build had started printing, and a paired npm audit fix patches the dev-server's bundled ws (the only high-severity item, build-time only and never shipped to the static output) along with Eleventy's liquidjs and markdown-it. The one remaining advisory, a moderate js-yaml denial-of-service reached only through gray-matter, has no upstream fix and is build-time, trusted-input only. Dependabot now watches package.json through a new npm ecosystem block, so future Eleventy bumps arrive as grouped PRs.
  • The ESSC 2026 conference film now shows a real frame from the film as its poster. Until play, the portrait film embed showed the landscape Stockholm cityscape, which the 9:16 frame cover-cropped to an odd vertical strip. The poster is now a still from the film itself — its title card (the conference roundel, the "8", and "2026 European Security Studies Conference") — extracted at 720×1280 to match the portrait frame. The clip is confirmed H.264, video-only, served same-origin, so it plays inline on iOS. EN + FR + DE.
  • The Anthology's "NetSec profile" links are clearer and carry the partner network's colour. The link beside an author who also has a NetSec member-directory profile now renders in NetSec's network blue (the #73caff family of the constellation mark, kept contrast-safe in both themes), pairing with the EISS "member" badge as a dual-affiliation cue. Each link also gains a per-person accessible name (" on the NetSec member directory (opens in a new tab)") in place of the 26 identical "NetSec profile" labels a screen reader saw before, and runs through the standard extLink normalisation like every other outbound link. EN + FR + DE. Part of #966.
  • The social share cards are redrawn in the site's light design language, on the official logo. Every Open Graph / Twitter card (every page, EN + FR + DE) moves from the old dark-navy gradient to a light field (white to a faint blue) with brand-blue rules top and bottom, matching the site's own airy look. The card now carries the official EISS lockup in brand blue (embedded from logo-lockup.svg, not a hand-drawn copy) with a soft constellation watermark, a brand-blue eyebrow, a brand-navy title, and a slate subtitle. Regenerated from the updated scripts/make-share-cards.py.
  • The /initiative page leads more sharply, with one corpus-scale stats row. The lede now opens with the founding year (2017), a one-sentence mission, and a short independence statement (independent, scholar-led, non-partisan), in the spirit of peer "About" pages. A single stats row beneath it reads "9 annual conferences · 510 papers presented · ~490 scholars · 12 countries represented", sourced from paperIndex.js (the deduplicated paper count the Anthology shows, not the raw per-contribution total) + conferences.js + board.json so it stays accurate as editions land (scholars rounded down to the nearest ten, since the speaker de-duplication is conservative). It replaces the two overlapping rows that both opened on the conference count and a weak "1 COST Action" tile. EN + FR + DE. Closes #800.
  • The /initiative open-panel examples now deep-link to their programmes. Each of the six "recent open panels" listed under the research themes is a link to that panel's slot on the edition programme (the #panel-… anchor on the /YYYY page), so a reader can jump from the example straight to where it sat in that conference. EN + FR + DE.
  • The board directory gains a combined "Founding and Honorary Director" role, and a separate title field. The bio Form now collects the honorific title (Prof. / Dr / M / Mr / Mx / None) as its own question, which the sync prepends to the full name so cards still read "Prof. Jane Doe". The Form also merges the former "Founding Director" and "Honorary Director" into one role, "Founding and Honorary Director": Dr Hugo Meijer's card now carries it, at the top of the Leadership section. Secretary-General now sorts above Treasurer, matching the Form. The old role labels stay as aliases so nothing breaks.
  • The homepage news card now marks the close of the 2026 conference. It announces that the annual conference has wrapped up in Stockholm and now carries its new name, the European Security Studies Conference (ESSC), from its first edition jointly organised by the COST Action NetSec, EISS and Stockholm University, linking to the 2026 conference page for the programme, the conference film and a new photo gallery. The card's image is the keynote by Lieutenant General Ulf Thomas Nilsson, Director of Military Intelligence and Security, at Stockholm University. EN + FR + DE. (Replaces the NetSec-launch card in the single-announcement homepage slot.)
  • The Summer School page now points to NetSec for the application, and drops the duplicated detail. With the inaugural NetSec Early-Career Scholars Summer School held (9 to 11 June 2026), /NetSecSchool.html now leads with a prominent "How to apply, on NetSec" button to the authoritative page at netsec-cost.eu, and the Euro-SWAMOS signpost is promoted to a primary button. The Applications FAQ (eligibility, financial support, application steps, lecturer line-up) and the Stockholm venue card are removed, since NetSec keeps that detail and future calls.
  • The Anthology now lives at one address: /anthology.html. The archive previously answered at two URLs (/speakers.html for the by-person view, /papers.html for the by-paper view). It is now a single canonical page, /anthology.html (EN + FR + DE), opening on the by-person view with the by-paper view one tap away via the existing toggle. The old /speakers.html and /papers.html (and their FR/DE variants) redirect to it, carrying over any ?person=, ?year=, ?theme= and #paper-<slug> so existing links and bookmarks still land in the right place (/papers.html opens the by-paper view). Every internal link, the breadcrumb on paper pages, the conference-programme signpost, and the sitemap now point at /anthology.html. Part of #889.
  • Archive conference programmes: paper abstracts preview and expand in place, and link to the Anthology. Opening "View papers" on a /YYYY programme used to show every paper's full abstract at once. Each now shows a short preview that ends with a "Read full abstract" toggle, which reveals the rest in place instead of sending the reader to Indico (with JavaScript off, the full abstract simply shows). Each paper that has an Anthology landing page also gains an "Open in the Anthology →" signpost to it. A new src/_data/archiveProgrammesLinked.js joins programme contributions to their /papers/<slug> pages, and scripts/-free progressive enhancement (programme-abstracts.js) drives the clamp/expand. EN + FR + DE. Part of #889.
  • Anthology navigation and signposting polish. Four refinements: (1) the Anthology signpost on every conference archive page is now its own section after the programme (rather than tucked under it) and is edition-aware, linking to that edition's papers in the Anthology (/papers.html?year=YYYY) with a sub-line placing the edition within the full archive. (2) On a paper page, the "Panel:" line below the abstract now links to that panel's anchor in the edition programme. (3) The adaptive Back control on paper pages stands on its own line, a touch larger than the secondary actions, with a return-arrow icon. Part of #889.
  • Hand-recovered paper abstracts can no longer be stranded by the Indico sync. Abstracts for pre-Indico editions (2022 and earlier, recovered by hand) now live in a separate src/_data/paperAbstractsManual.json, kept apart from the Indico-synced paperAbstracts.json. The sync script rebuilds the synced file wholesale on every run, so anything hand-added there would have been silently dropped; the separate file is never touched by the sync. Both are merged at build time, so the rendered output is unchanged. A new on-demand scripts/check-abstract-coverage.mjs (a release-time cross-check, rule §5) lists every abstract that fails to attach to an Anthology paper, by year, with its closest programme title, so title drift between Indico and the transcription is easy to tell apart from a paper that is simply absent from the programme. Part of #794.
  • A paper's published version now shows its full citation, with a BibTeX export. On a /papers/<slug> page where a published version has been matched, the callout is redesigned into a tidy card: the publication type (journal article, preprint, book chapter, …), the outlet with its volume, issue and page range (or the publisher, for a preprint), the published author list (which can differ from the conference presenters), the DOI, a link to read it, and a one-click Cite (BibTeX) block with a copy button. The BibTeX entry is typed to match (@article, @incollection, @misc for a preprint). The bibliographic detail is backfilled from Crossref by DOI (scripts/enrich-publications.mjs), so it fills in for every confirmed match and stays in step with the monthly publication-match sync. The "Early-access preview" caution label is renamed "Beta feature". Part of #805.
  • Member profile pages now embed the person's ESSC conference papers. Where a profile previously carried a single "Their ESSC papers" link to the Conference Navigator, it now lists the member's conference papers inline (newest first, each tagged with its edition), styled the same as the recent-ORCID-publications list above it. Papers that have a landing page link to it; the rest are plain text. A "View in the Conference Navigator" link still sits below for the filterable, full view. As part of this, a linked title and a plain-text entry are now visually distinct in both the conference-papers and the ORCID lists (only the linked variant takes the accent colour), so a non-clickable entry no longer looks like a link. Part of #756.
  • The Conference Navigator is now "The European Security Studies Anthology". The cross-edition archive of speakers and papers was renamed site-wide to reflect what it actually holds: years of EISS annual-conference proceedings and the network's workshops, not a single conference. The page now opens with a short paragraph explaining its scope, and the framing copy no longer ties it to the ESSC conference name. The /speakers and /papers URLs are unchanged. The short form "Anthology" is used in links and the footer. EN + FR + DE. Part of #756.
  • The top navigation is reorganised. "Conferences" becomes Annual Conference, and the standalone Navigator item is removed (the Anthology is reached from the conference pages, /past, the footer and the homepage). The remaining items run flagship-first: Annual Conference, Events, The Initiative, People, Membership. The Anthology signpost card at the foot of the People page is also removed, since People is who runs EISS and the Anthology is who has presented. EN + FR + DE.
  • Speaker paper titles in the Navigator by-person view link to their landing pages (#794). In the expandable papers list under each speaker entry, any paper that has a landing page (abstract or confirmed published URL) is now a clickable link to /papers/<slug>.html rather than a plain span. Papers without landing pages remain plain text. Completes the by-paper → landing-page direction of the cross-link pair; the by-person → profile direction is already live via the member badge.
  • Per-person deep-link on the Conference Navigator (#771). Each member speaker entry now carries a stable id (person-<profile-slug>) so it can be targeted by a URL fragment or the ?person= query param. speaker-filter.js reads ?person= on load, scrolls to the matching entry, and opens its papers panel. The profile-page link ("Their ESSC papers →") will be wired once the per-person profile pages land (PR #828).
  • speakerByProfileUrl lookup exported from corpus.js. A reverse index from profileUrl to the speaker entry, for use by the profile page template to detect whether a member is a known ESSC speaker.
  • The "Activities" nav item is now "Events" and absorbs the Network Events page. The two previously separate nav entries ("Activities" at /programmes and "Network Events" at /events) are merged into a single "Events" page. Visiting /events now shows both the multi-year research programmes (NetSec, the Summer School, Coercive Statecraft, Euro-SWAMOS, Global Risks, Sciences Po–EISS Conference) and the rolling calendar of online and hybrid network events. /programmes redirects to /events. EN + FR + DE.
  • The Conference Navigator's paper list shows a "Published" badge where a journal match exists. Papers in the /papers list that have a confirmed published-version link now carry a small "Published" chip beside the title, so the existence of a citable journal article is visible while scanning the index rather than only after opening the paper's own page.
  • Paper landing page navigation buttons are visible in light mode. The "programme" and "All papers" buttons at the foot of each paper page were using btn-ghost — a glass-effect class designed for dark or photo backgrounds. They rendered white-on-white in light mode. Both are now btn-secondary, consistent with how all other in-prose navigation buttons are styled.
  • 2026 entries in the Conference Navigator are no longer doubled. An iterator in corpus.js emitted each 2026 contribution twice: once from the static archiveProgrammes.js backup (which has no abstracts) and once from the live indico.json (which does). Every speaker appeared twice in the by-person view, and abstracts from Indico were invisible because the abstract-less first copy suppressed the page. The iterator now skips any archive slug that Indico covers, so each contribution is emitted once and its abstract surfaces correctly. 69 → 69 (from 138), 50 with abstracts recovered.
  • Paper pages can now link the version later published in a journal. Where an ESSC paper was subsequently published, its /papers/<slug> page carries a short note ("This presentation at EISS 2018 was followed by a publication in The Chinese Journal of International Politics in 2022."), the journal link and the DOI, turning the archive into a "presented at ESSC → published here" record. A paper with a confirmed link gets a page even when it has no abstract. Because the link is found by an automated author-and-title match, the note sits in an "Early-access preview" callout that says plainly it may be inaccurate and invites a correction. Confirmed matches live in src/_data/paperLinks.json; they are proposed by a matcher and recorded only after human review, per #805.
  • The 2026 conference page is now an archive, with the conference film. With the Stockholm edition over, /2026 (EN + FR + DE) turns from the live, Indico-driven conference page into a past-conference page like /2025: an archive header, a short "In review" note beside the conference film, the final programme, and the host and funding cards. The programme is frozen into src/_data/archiveProgrammes.js from the final Indico timetable, so it renders through the same grid as before but no longer changes if the Indico event is edited. The hero, registration badge, countdown, livestream link and the travel and accommodation section are gone. The film is a self-hosted portrait clip given the same on-scroll, muted, tap-to-play treatment as the Thessaloniki 2025 film.
  • Member profile pages now link to the speaker's Conference Navigator entry. Board and community members who have presented at an ESSC edition carry a "Their ESSC papers" link on their profile page, pointing to the Navigator's by-person view filtered to them. The Navigator already links back to each member's profile (the name is the link), completing the cross-link pair in both directions. Part of #756 (Phase 2 / Phase 4).
  • The People page now carries a Conference Navigator signpost. A link card at the foot of /board leads visitors from the team overview into the full ESSC archive. Part of #756 (Phase 4).
  • The "Archive" disclaimer ribbon now applies only to 2024 and older. The quiet grey ribbon ("this page may not be as complete as current pages") is removed from the 2025 and 2026 conference pages: both are complete, with their full programme and conference film, so they read as finished pages rather than rough archives. Older editions keep it. The site-wide "What's New" banner that pointed at the live ESSC 2026 programme is also retired, now that the conference is over.
  • The Conference Navigator is signposted from the conference pages, not from People. A link-card now points to the unified Navigator from each edition's programme and from the All past conferences page (/past), and the visual sitemap names it in place of the old separate "Speakers" and "Papers" entries. It was removed from the People page, where a corpus of (mostly external) past speakers sat awkwardly beside the board: People is who runs EISS, the Navigator is who has presented. Wayfinding for the speaker and paper merge (#756). EN + FR + DE.
  • The Conference Navigator now has a permanent home across the site. It joins the main navigation as its own "Navigator" item, and a stats-backed entry point (the live speaker, paper and edition counts) leads into it from the homepage and sits at the head of the /past conferences page, above the per-edition archive, where the smaller link-card used to live. The footer's Conferences column and the Initiative's Publications & outputs section also link through. Its own page now frames it as a citable record, noting the abstracts, citation details and published-version links the corpus has gained, rather than only as a way to navigate. EN + FR + DE. Continues the people-and-outputs consolidation in #756.
  • The election-interference members' seminar now lists its full panel. The "Joint Seminar on Election Interference and Disinformation" on /events (held as the Stanford CISAC panel "Election Interference & Disinformation: How Can Democracies Fight Back?") now names all four panellists (Patrick Chevallereau, David Colon, Herb Lin, Kathryn Stoner) alongside the moderator, Arthur Laudrain, rather than the moderator alone.
  • Annual conferences before 2026 are labelled "EISS", not "ESSC". The annual conference ran as the EISS Annual Conference (EISS 2017–2025) until it was renamed the European Security Studies Conference (ESSC) from the 2026 Stockholm edition. The site now reflects that historically: editions up to 2025 read "EISS {year}" across the speaker index, the archive conference pages, /past and the sitemaps, while 2026 onwards stays "ESSC". Corrects a retroactive misnaming.
  • Phones no longer download full-resolution desktop images. The full-bleed hero on the homepage and /2026 (EN + FR + DE) now carries a three-step srcset (a 480-wide and an 800-wide variant alongside the original 1600×900) with sizes="100vw", so a phone fetches a fraction of the bytes for its largest, highest-priority image while desktop still gets the full file. The 2023, 2024 and 2025 conference banners and the nine /2025 gallery photos gain the same width-stepped variants, kept lazy where they already were. The variants are pre-generated with sips, so no build-time image dependency was added. Closes #554. Extending coverage to the 2019–2022 galleries and a possible WebP layer is tracked in #732.
  • The roadmap progress bars now say "so far". The in-progress card's bar read "{closed} of {total} issues closed", which looked like a finished release whenever the count hit its total. But the total is only the work milestoned to that release so far, and it grows through the cycle. The label (EN + FR + DE, and the matching aria-label) now reads "{closed} of {total} issues closed so far", so the bar reads as a running tally rather than a completeness claim.
  • Author names in the Conference Navigator's paper view link to their profile. Where a paper's author is an EISS board or community member, their name in the by-paper view is now a link through to their profile page, joining the two lenses of the corpus (a paper → the people behind it). Other authors stay plain text. (The retired board-card modal's leftover styles were also cleared out.)
  • The Initiative's leadership is updated on the People page. Moritz Weiss and Chiara Ruffa are now Co-Directors and lead the board, Hugo Meijer (who founded the Initiative) becomes Honorary Director, and the Secretary-General role is retired for now. EN + FR + DE. Closes #344 and #563.

Fixed

  • The prize and "Published" pills in the Anthology by-person view keep their pill shape beside a multi-line title. The contribution row is a flex row, which by default stretches every item to the row's height, so beside a title that wrapped to several lines the pills blew up into tall rounded blobs with the label floating in the middle (clearest on a paper carrying both pills, like Samuel Seitz's 2024 prize winner). The row now top-aligns its items, so each pill keeps its natural height, level with the conference label and the title's first line. Desktop and mobile.
  • The "Published" chip now shows in the Anthology by-person view, not just the by-paper view. A paper with a confirmed published version carried the amber "Published" chip in the by-paper list but not beside the same paper in an author's contribution list, so the two views disagreed (Jonata Anicetti's "Why States Arm…" was the reported case). The by-person paper records now carry the publishedUrl, and the by-person list renders the same chip, so both views agree.
  • A long paper title no longer drops to its own line below the conference label in the Anthology by-person view. The wrapping row added so the prize chip could fall to its own line had a side effect: a sufficiently long title (Moritz Weiss's "States vs. Markets in Rising Powers…" at EISS 2017) overflowed the first line and wrapped whole to a new full-width line below the "EISS 2017" label, reading as misaligned. The title now keeps its place beside the conference label and wraps its own text within the column, while the prize chip still drops to its own line when present.
  • The prize chip no longer clips on the Anthology by-person view. Since the prize was renamed to "European Security Studies Prize" (longer than the old "Best Paper Prize"), the gold chip overflowed and was cut off on the right of the desktop conference-and-title paper row. The row now wraps, so the chip drops to its own line below the title at full width. Mobile (already a stacked column) and the programme grid / by-paper list (where the chip sits inline in a block heading) were unaffected.
  • "Download .bib" now works on every paper page. On a paper's published-version card the button silently did nothing: the handler looked for the BibTeX only inside a .paper-cite section, but the published-version card wraps it in .pub-match, so it found nothing and bailed. It now matches either container, and reads the BibTeX via textContent rather than innerText (the latter returns empty for the collapsed-by-default box). The .ris download was unaffected because it reads its text from a data attribute. Part of #805.
  • The cite controls in a paper's published-version card have more room above them. Inside the published-version card the "Show BibTeX / Download" row sat directly under the "Read the published version" button; it now has a little space above it. The standalone "Cite this paper" section is unchanged (its heading already provides the gap).
  • Anthology polish: a clearer empty state, a bigger view-toggle target, and the prize badge in the by-person view. Three tweaks from a UX pass. When a filter leaves no results, the "No papers match" / "No speakers match" message is now a centred, boxed panel rather than a thin line over a blank list, so the page reads as intentional. The "By person / By paper" toggle tabs are now a 44px touch target (up from ~35px). And the gold "Best Paper Prize" badge now also appears beside a winning paper in the by-person view's papers list, matching the by-paper list, programme grid and paper page.
  • The Anthology's "papers" headline count now matches the list it sits above. The stat row (and the homepage / /past entry-point cards) showed the raw per-contribution total, which double-counts the few papers that appear twice in the programmes (a poster shown on both days, a session listed under two rooms), so it read higher than the by-paper list and its filter dropdowns. It now shows the same deduplicated count as the list. All counts are computed from the data at build time, not hand-set.
  • The author byline on a prize-winning paper page has a little more room above it. The "Best Paper Prize" line between the title and the authors sat tight against the byline; it now carries a small bottom margin, scoped to prize pages only.
  • A paper's BibTeX citation now uses the published title, not the conference title. The "Cite (BibTeX)" export on a paper landing page already used the published byline and year, but its title field still carried the conference paper's title. It now uses the published title (falling back to the conference title only if no published title is on record), so the citation matches the published article. Checked across all 51 published entries: every BibTeX title now matches its published title. Part of #805.
  • Opening the Anthology at a specific person now moves focus to that entry. A ?person=<slug> deep link (used by the "their ESSC papers" link on member profiles) already scrolled to the person and opened their papers, but keyboard and screen-reader users were left at the top of the page. Focus now moves to the entry, matching the focus-return the by-paper deep link already had. Part of #889.
  • A paper's published-version card now states the title it was published under, and its published byline. A conference paper is often published under a changed title and with co-authors added or dropped, so the card now shows the published title verbatim (it previously named only the journal) and lists the published byline under a "Published as" label. The 2024 prize winner is the clear case: presented by Samuel Seitz alone, published as "When competition becomes contagious…" with Elliot Ji added. Byline and outlet detail are taken from Crossref by DOI.
  • Parallel conference panels now expand and collapse together. On a programme where two sessions share a timeslot, opening "View papers" on one used to leave a tall empty gap beside its still-collapsed neighbour. The panels in a parallel row now keep their open state in step: expand one and the other opens too, collapse one and both return to the compact view. Progressive enhancement, so with JavaScript off each panel still toggles on its own. Lone (non-parallel) panels are unaffected.
  • A paper presented at a poster session now has a working "Panel:" deep link. A poster session is modelled in the programme as a break slot that still holds its papers, and break slots carried no anchor, so the "Panel:" line on those papers' landing pages pointed at a missing anchor on the edition page. Break slots that hold contributions now get the same #panel-<title> anchor as a regular session (emitted once per title so a repeated break stays unique), so the deep link lands. Part of #889.
  • Conference programmes no longer show a panel's own abstract. A panel slot could carry a session-level description that rendered in full beneath the panel title. Only some panels had one, so the programme looked uneven, a long block of text under a few panels and nothing under the rest. The panel-level abstract is now hidden across all programme grids for consistency. The per-paper abstracts under "show contributions" (with their preview-and-expand) are unaffected. Tracked in #903.
  • The separator above a paper's "matched automatically" note is no longer cramped against the buttons. The note's top margin was being zeroed by the more specific .prose p rule, so the dividing line sat tight under the Cite button. Scoping it as .pub-match .pub-match-note restores the intended breathing room. Part of #889.
  • Three paper abstracts that were synced but never displayed now appear, and the coverage check runs on a schedule. A paper's abstract attaches to its Anthology entry only when the Indico title and the transcribed programme title match exactly, so a small difference left the abstract rendering nowhere. Three were reconciled: the 2023 "Engine or Brake? ... European Defence Industry" (Indico had the American "Defense"), the 2024 "US Troop Withdrawal from Korea" paper (a garbled year range in the Indico title), and the 2025 "Unmanned Systems" paper (a singular/plural transcription typo). A new src/_data/paperAbstractAliases.json maps a synced title to the programme title where the programme spelling is the one to keep, so the fix survives the next Indico re-sync. The scripts/check-abstract-coverage.mjs alarm now also runs every four months (.github/workflows/abstract-coverage.yml) and files a tracking issue if fresh title drift appears. Part of #794.
  • The publication-type chip on a paper's published-version card no longer strands at the far right on mobile. On a narrow screen the card header wraps (the "Beta feature" badge and "Published version" title fill the first row), dropping the type chip ("Preprint", "Journal article" and the like) to its own line. The chip kept the auto-margin that right-aligns it next to the title on desktop, so when wrapped it floated alone at the far right. It now left-aligns with the rest of the header below 30rem, while desktop keeps the right-aligned chip. Part of #805.
  • A former board or community member's profile now labels them "Former". The profile page showed the raw stored role (e.g. "Board Member") even for someone who has left, so a past member read as current. Profiles built from the community section now prefix the role with "Former" (e.g. "Former Board Member"); active members are unchanged. The profile photo is also a touch larger.
  • 2026 Navigator abstracts are no longer truncated, and five more papers gained a page. The 2026 papers drew their abstract from the live Indico feed, which carries only a ~360-character preview ending in "…", so the Navigator and the per-paper pages showed a clipped abstract even though the full text had already been synced into paperAbstracts.json. The corpus now keeps the longest abstract available across both sources, restoring the complete text on 49 papers and giving a landing page to 5 more whose live-feed abstract was empty but whose full text exists. Papers with no abstract in Indico at all (a handful, e.g. "Conceptual Inquiry into Military Deep Operations") still have no page, by design. Part of #794.
  • Linked paper titles in the Navigator's by-person view now look like links. A speaker's paper title that points to a landing page was styled in the body-text colour, identical to the title of a paper with no page, so there was no way to tell which were clickable. Linked titles now carry the accent link colour (and underline on hover); titles without a page stay plain. Part of #794.
  • Speaker paper titles in the Navigator's by-person view now link to their landing pages. A paper that has its own /papers/<slug> page (one with an abstract or a confirmed published version) was meant to be a clickable title under each speaker, but the by-person view read a paperUrl the corpus never computed, so every title rendered as plain text. The corpus now resolves each paper's landing-page URL the same way the by-paper view does, against the deduplicated first-occurrence slug so a repeated contribution can't point at a page that was never generated. 267 titles across the index become links. Part of #794.
  • The /speakers theme filter now reads in French and German on the localised pages. The broad-theme labels rendered in English on every locale, because the filter matched on the English label as its key. Each theme now carries a stable, locale-agnostic key, kept separate from its display label. The page emits the key as the filter value and the localised label as the visible chip and dropdown text, so a shared or deep-linked ?theme= view keeps working in all three languages. The French and German wording for the nine permanent panel sections is reused from the official /initiative translations, with the derived themes (Deterrence, Intelligence and the like) hand-translated. Closes #693.
  • Corrected names on the War in Ukraine conference programme. Cross-checking the archived 2023 joint conference (/Ukraine) against the official programme fixed a few transcription slips: the Roundtable 1 chair is Eliza Gheorghe (Bilkent University, previously misspelt), Jonathan Paquin's network is the Network for Strategic Analysis, Justin Massie is at the University of Québec in Montreal, and the keynote affiliation is the Center for Naval Analyses. The Gheorghe fix also reunites her entry in the speaker index with her ESSC appearances.
  • The homepage conference card reads correctly in light mode, with the livestream as its call to action. The registration / "Happening now" badge on the featured card was styled for the dark /YYYY hero (white text on a translucent-white chip), so on the light homepage card the label and its button rendered white-on-white and effectively vanished, leaving a lone status dot. The badge now uses surface-aware tokens on the featured card, legible in both light and dark themes. While the conference is current the badge also drops its "View on Indico" button, so the "Livestream" pill is the single, unambiguous call to action rather than sitting redundantly beside it. From conference-week QA.
  • The sticky header is less see-through, so page content no longer reads through it. The frosted header's background sat at 0.72 alpha (light) / 0.66 (dark), low enough that a page's large heading stayed legible through the chrome when scrolled under it. The --surface-nav token is raised to 0.90 (light) / 0.88 (dark), so the blur masks scrolled content while the header keeps a hint of translucency. From conference-week QA.
  • The "manage your membership" link no longer reads "here". On /membership (EN + FR + DE) the link to the Stripe billing portal was the bare word "here" / "ici" / "hier", which carries no meaning out of its sentence (it is the text a screen reader announces when listing the page's links). It now reads "Stripe billing portal" / "portail de facturation Stripe" / "Stripe-Abrechnungsportal". Closes #472.
  • Inlined brand logos no longer produce duplicate element ids. The brand SVGs carry internal ids (the <title>/<desc> pair referenced by aria-labelledby), and the same file is inlined more than once per page (the nav, the footer, and page content such as the press-kit previews), so /initiative and /press-kit shipped duplicate ids in the DOM. The inlineSvg shortcode now gives each inclusion a unique suffix on its ids and on the references to them, so every logo keeps its accessible name and every id on the page is unique. Caught by scripts/a11y_lint.py, which now runs as a gating CI check on every HTML-touching PR (#602).
  • The /NDC.html legacy alias now redirects instead of serving a second copy of the JPW 2019 page. It still rendered the full Joint Policy Workshop 2019 archive body, a live duplicate of /JPW2019.html that split search ranking between two URLs and risked drifting out of step. It now redirects to the canonical /JPW2019.html (canonical tag, meta-refresh, no-index), the treatment the other legacy Mobirise aliases already carry. The /page23.html alias also now lands visitors at /2026.html#venue rather than the top of the page. Closes #607.