Repository navigation
v1.13.0 — Introducing Mentorship Matching 2.0
This release turns the Directory from something you read into something you use. A member can now find a mentor or a mentee through a guided matching panel, open a fuller profile page that links out to their published work, and be introduced more widely as the weekly spotlight begins posting to LinkedIn alongside Bluesky. The site also takes an editorial design pass, loads faster, and moves its Indico programme updates onto a supported, upgrade-safe path. Three themes follow, then a single canonical index at the bottom.
A Directory that guides you
The mentorship facet becomes a working matchmaker. Filtering to people offering or seeking mentorship opens a panel built around a guided sentence, "I am a [stage] looking for [a mentor or a mentee] in [research area]", and the three closest matches re-rank live with a plain-language reason for each and a career-stage balance of who is offering and seeking. Mentors who have filled their roster can now mark themselves at capacity and members who found a mentor can say so, so a standing signal retires itself without the member leaving the Directory.
Each full profile page is rebuilt around a hero band and a two-column body, adding a "Mentors on similar topics" facepile, theme and region chips that deep-link into the filtered Directory, and one-click enquiry buttons where the member has published an email. Profiles also reach across to the EISS Anthology, linking a member to their published papers and marking a European Security Studies Prize winner, joined on a shared name key so the link never goes stale.
Wider reach for Directory members with social media integration
The social pipeline now posts to LinkedIn beside Bluesky, running the same composer through a new adapter to the NetSec company page, with news and curated threads still passing the approval gate before they land. The weekly spotlight tags the featured member where each platform allows it, an @-mention on Bluesky and a first-comment profile link on LinkedIn. The News system grows a working archive and issue-driven publishing, so labelling a GitHub issue publishes the item, and news now carries category and Working-Group tags over a cleaner year-grouped archive. The "Start where you are" audience router, once a home-page strip, follows the reader onto every page as a slide-out panel.
Steadier and faster underneath
The site takes an editorial design pass: a fluid type scale on Lexend, solid-ink headlines in place of the old gradient fills, a settled spacing rhythm, and the home hero recast as a letterboxed band. The stylesheet splits into a shared core and two page bundles, so a visitor reading About or the home page no longer downloads the Directory's styling first, which lifts the About page's performance score back above its budget floor. Navigation cross-fades between pages, looping animations genuinely stop under reduced motion, and the Working-Group pills reach AA contrast everywhere they appear. Beneath all of it, the Indico write path moves off the reverse-engineered HTTP tool onto the supported netsec-dispatch plugin CLI, which applies the same fix-plans through Indico's own API in one transaction.
Index of changes
Added
-
The Directory's mentorship signals can now be switched off as well as on. The membership form's mentorship question gains two options: mentors who have filled their roster can say they are mentoring at full capacity, and members who found a mentor through the Directory can say so. Either answer retires the standing signal, so the member drops out of the matching chips and the matching panel without disappearing from the Directory. An at-capacity mentor keeps a quiet "Mentoring, at capacity" badge that carries no intro-mail link, and a member who found their mentor simply stops showing as seeking one. Hand-translated for FR and DE.
-
The "Start where you are" audience router, until now a home-page-only strip, is available on every page as a slide-out side panel. A slim "Find your way in" tab rests against the right edge, and opening it reveals the same four role cards (researcher, policy, Action member, press), each now led by an icon, with the member and press cards' in-page links rewritten to absolute anchors so they work from any page. The panel is a native dialog, so it closes on Escape, on a click outside, or on the close button, and it respects reduced-motion. On the Directory it sits below the member-preview panel, which keeps the right edge when a profile is open. Content lives in
data/audiences.jsonand is hand-translated for FR and DE. -
The Phase 2 homepage IA recommendation document (
docs/homepage-ia-phase2.md), succeeding the Phase 1 quick-audit, records the header-grouping capacity rule, the mobile and section-ordering decisions, and content-lifecycle pointers, and ships alongside its one implementation: a static "Start where you are" audience-track strip on the home page routing researchers, policy-makers, MC members, and press to the pages each needs. -
News items now carry a category tag (Event, Publication, or Announcement) and an optional Working-Group activity tag (WG1 to WG4), shown as small pills beside the date on both the home "Latest news" block and the news archive. The News archive is also restyled into a cleaner, more scannable list grouped under year headings, with hairline dividers and larger titles in place of the boxed cards. The category labels are hand-translated for FR and DE, the WG pill takes its Working-Group colour, and an item published from a GitHub issue can set both with
Type:andWG:header lines. The home "Latest news" block shows the three most recent items, and on a phone each card's text is shortened to a few lines with a "Read more" toggle (hand-translated) so the block stays compact. The block also gains a "See all news" link through to the archive, beside the RSS button, and the standalone upcoming-event banner (which had gone stale after the conference) is retired from the home page. The visual site map now points its News entry at the News archive page and no longer renders a stray empty bullet in the Home card. Hand-translated for FR and DE. -
The social pipeline now posts to LinkedIn as well as Bluesky. The same composer that builds a Bluesky post renders the LinkedIn version, and a new adapter publishes it to the NetSec company page through the Community Management API, uploading the member's Open Graph card on a spotlight post. News and curated threads go out through the existing approval gate, so a reviewer sees the LinkedIn post before it lands. The weekly member spotlight posts itself best-effort, so a LinkedIn hiccup never blocks the Bluesky post. Access tokens renew themselves from a stored refresh token, a
scripts/linkedin-token.pyhelper walks the one-time OAuth setup, anddocs/social-publishing.mdcovers the secrets and the gated-first rollout. LinkedIn stays dormant until its secrets are added, so Bluesky is unaffected in the meantime. -
The Directory's mentorship matching panel is rebuilt around a guided sentence. Filtering to people offering or seeking mentorship brings up the panel above the grid, where you complete the line "I am a [stage] looking for [a mentor or a mentee] in [research area]" by tapping each part, and the three closest matches re-rank live with a plain-language reason for each, a career-stage balance of how many members are offering and seeking, and a nudge to mentor someone in your area in return. A "Browse all" toggle switches to a fuller grid of every match on both sides, with an actionable scope bar and a hover ring that links people who share a research area, in place of the earlier connection lines. Your selections write to the page address so a filtered view is shareable, your career stage stays in the browser for that visit and is never stored, and the choice of guided or browse view is remembered. Hand-translated for FR and DE.
-
A "Mentors on similar topics" facepile in the sidebar of each member profile page, alongside the existing "Works on similar topics" row. It shows the members who offer mentorship and work on the profile owner's topics, most relevant first, with a link through to those mentors in the directory (the mentor filter plus the owner's themes). Ordering is by shared keywords, then shared themes, then a behind-the-scenes seniority signal inferred from the academic job title, so a more established mentor surfaces first among equally on-topic people. It reuses the field-guide facepile styling and renders only where matching mentors exist. Hand-translated for FR and DE.
-
A member's full profile page now links through to that person's entry in the EISS Anthology when they have one. The profile matches the member against the Anthology's published author index by canonical name key (the same key both sites already share), and on a match shows an "In the EISS Anthology" link in the sidebar. The match runs in the browser against the live index, the same way the conference programme already marks published papers, so the link never goes stale and the static profile pages stay a pure function of local data. Hand-translated for FR and DE.
-
A gold "European Security Studies Prize" pill on the profile page of a directory member who has won it (the prize awarded by the European Initiative for Security Studies with the Journal of Strategic Studies, for the best paper by an early-career researcher), matching the pill on the EISS Anthology. It shows on the full profile page only, never on the directory card, and links to the prize page. Winners are listed in a small curated
data/prize-winners.json, since EISS holds the authoritative roll by paper title and does not yet publish it as a consumable file. The first is Dr Mattia Sguazzini, a 2026 laureate. -
The individual member profile pages (
/people/<slug>, all three locales) are rebuilt to use the space a full page gives. A hero band sets a larger headshot beside the name, role, affiliation, and working-group pills, over a two-column body: the bio, research interests, and recent publications on one side, a sidebar on the other. The sidebar surfaces the member's research themes and regions as chips that open the directory pre-filtered to that area, and a "Works on similar topics" row of headshots (the Glossary field-guide style) showing the members who work on the closest topics, each linking to that person's own profile, with a link through to everyone in those themes. The mentor and STSM-hosting badges become actionable: where the member has published an email, they turn into a one-click enquiry with a subject line already filled in. The layout collapses to a single centred column on small screens. Hand-translated for FR and DE. -
NetSec now publishes a small public cross-site contract,
directory-index.jsonat the site root, so another surface can link an author or a name back to that person's directory profile. Each row carries the member's canonical name key (the samename_key()the directory matches on, with middle initials dropped), any aliases, the slug, and the absolute profile URL. It is generated fromdata/bios.jsonbyscripts/build-directory-index.py, regenerated by the weekly bios sync, and drift-gated in CI. The first consumer is the EISS Anthology, which will link its authors to their NetSec profiles. -
The directory cards now link to each member's full profile page. The member's name is a link to their profile, reachable straight from the compact grid, and a "View full profile" link sits at the foot of the detailed or expanded card. Clicking the card still expands it in place as before (the expand handler ignores link clicks). The link is locale-aware, so the French and German directories point at the matching
people/<slug>.fr.html/.de.htmlpages. -
A third press-kit poster, the directory-search poster (
docs/promo/poster-find-your-next.html, A4 portrait), promotes what the Directory lets you do rather than recruiting bios. It reuses the "Find your next…" headline over the directory's role selector (co-author, mentor or host), four capability tiles (filter the directory, mentorship matching, find an STSM host, a weekly spotlight on early-career researchers), and a QR code that opens the directory atnetsec-cost.eu/people. The original "Add your bio" directory poster is unchanged. Listed on the press kit in all three locales with print-PNG and small-PNG downloads, hand-translated for FR and DE. Its background crowns the “Find your next…” headline with a soft band of member headshots, evenly spaced and kept clear of the logos and text, framing the headline and flanking the selector, fading down before the feature cards, to put real faces on the directory. -
The News system gains a working archive and issue-driven publishing, bringing it to parity with the sister EISS site. The
/newspage (all three locales) now renders the full chronological list of items fromdata/news.json(each card deep-linkable at#news-<id>), where it was a static "archive is empty" placeholder; the home-page "Latest News" block now caps at four items and decays anything older than 18 months, so older items live on in the archive and the RSS feed. Labelling a GitHub issuenewsnow publishes it: a workflow reads the issue (with optionalType:/URL:/Date:headers), prepends the item todata/news.json, regenerates the feed, and opens an auto-merging PR that closes the issue. Documented indocs/news-publishing.md. -
The Training School page (
/summer-school.html, all three locales) is rebuilt around editions rather than a single year. It now carries the COST-compliant name "NetSec Training School" (with the Early-Career Scholars Summer School / ECS³ as the subtitle), a forward-looking "next edition" module, and a "past editions" archive, both driven by a newdata/training-school.jsonthrough a light renderer. The next-edition module shows the 2027 edition as "to be announced" with no calendar yet; when an edition is announced with a date, an Add-to-calendar affordance appears on its own. The 2026 archive entry carries the cohort, coordinators, topics, and a photo gallery from the Stockholm edition. The page links directly to EISS's Euro-SWAMOS page, Julia Carver (a Working Group participant) joins the directory so her faculty headshot resolves, and Nicolas Blarel's faculty card now carries his photo. Hand-translated for FR and DE. -
An "In pictures" photo gallery on the archived ESSC 2026 page (all three locales), between the recap reel and the programme, so the past-conference page reads as a livelier record. The four photos are responsive and lazy-loaded. Training School signposting also improved across the site: a cross-link from the Grants page (the early-career audiences overlap), and the home news card and the visual sitemap now use the "Training School" name. Hand-translated for FR and DE.
-
A gold "European Security Studies Prize" badge on the two winning papers in the archived ESSC 2026 programme (all three locales), marking the prize awarded by the European Initiative for Security Studies with the Journal of Strategic Studies for the best paper by an early-career researcher. The badge is data-driven from a
prizeflag in the frozen programme snapshot, so it shows only on flagged contributions. Hand-translated for FR and DE. -
A home-page news item marking the close of the European Security Studies Conference 2026 in Stockholm on 12 June, linking back to the archived conference page. Added to
data/news.json, the RSS feed, and the no-JS fallback on the home page in all three locales. Hand-translated for FR and DE. -
A home-page news item announcing the winners of the European Security Studies Prize 2026, Anna Seliverstova (Linnaeus University) and Mattia Sguazzini (University of Genova), with their winning papers and a link to the archived conference page. Added to
data/news.json, the RSS feed, and the no-JS fallback on the home page in all three locales. Hand-translated for FR and DE. -
Per-member Open Graph card images for the directory profile pages, so a shared
/people/<slug>link unfurls as that person rather than the generic site card. The card carries a rounded headshot (an initials tile when no photo is on file), the member's name and role, their working-group pills (with a lead or co-lead marker), a mentor or mentee pill, an STSM-hosting pill, and the country flag, all on NetSec branding. A newscripts/build-og-cards.pyrenders a 1200×630 PNG per member fromdata/bios.json,scripts/build-profile-pages.pypoints each profile'sog:imageandtwitter:imageat it with a fallback to the generic card, and the weekly bios sync regenerates only the cards whose inputs changed. Country flags are bundled locally, and a content-manifest drift gate keeps the set in step with the directory. -
A filtered directory view is now fully shareable from the address bar: the working-group and Management Committee chips, the country picker, and the free-text search join the research themes, regions, mentorship, and STSM facets in the URL hash (
wg=,country=,q=), so a copied link lands with the same members showing, and member deep links (#name-surname) keep working unchanged. (#648) -
An STSM enablement kit rounds out the mobility-grant journey: the Grants page's STSM card gains a "Getting your visit ready" block with a downloadable host invitation-letter template and a pointer to the current collection dates on e-COST, and the WG3 section on the Working Groups page signposts "Find a mentor in the directory", landing on the directory pre-filtered to members offering mentorship. Hand-translated for FR and DE. (Part 2 of #1171)
-
A "Published" marker on conference-programme papers (the archived
/essc-2026.htmland the parked ESSC 2027 template, all three locales). When a paper's published version has been reviewed into the EISS Anthology, a quiet marker links from the programme straight to that paper's Anthology page, where the publication card lives. It carries the site's automatic external-link icon, so it needs no manual arrow. The match is made at load against the Anthology's ownanthology-index.json, which the EISS site publishes from its paper index, so NetSec consumes the result rather than reconstructing the collision-deduped slug. It is scoped to the conference year and shown only for papers flagged published, so it stays a genuine signal and fills in on its own as EISS reviews more publications, with no NetSec rebuild. A card under the programme grid also points at the Anthology's published-papers view, with a heading, a line of context, and a button. The marker and card are hand-translated for FR and DE, and the whole thing fails soft: a missing or unreachable index just means no markers, with the programme unaffected. -
A Photography and recording at NetSec events section in the Privacy Notice (all three locales, hand-translated for FR and DE), taking the notice to v1.3. It sets out that photographs, video, and audio are captured at the ESSC, Training Schools, Working Group meetings, and other NetSec events, and that by registering or attending you agree to your image and voice being used for any non-commercial purpose compatible with the aims of the Action, which covers the website, reporting to COST and the European Union as funder, dissemination material, and internal meeting records. The material is never sold, licensed, or passed on for advertising. It also records the Article 6 (1)(f) basis, notice at registration and at the venue, advance warning for speakers whose session is recorded in full, the retention period, and the routes to object under Article 21 or to have material taken down within fourteen days.
-
A v1.14.0 card on the public roadmap, in all three locales, hand-translated for FR and DE. It sits in Q4 above the Year 1 anniversary marker and is dated early October 2026, with the matching milestone due date set to 6 October so the two projections of the plan agree. The card leads on the NetSec Atlas, which draws the Working Groups, their members, and the ties between them as a map you can explore (#764), and carries the near-real-time Indico programme updates (#823), the optional home-hero backdrop (#1353), and result-type filter chips for the search overlay (#1404) alongside it. Its progress bar picks up the milestone automatically through
data-milestone. -
The search filter chips leave the roadmap's Under watch section, in all three locales, now that they have a date. The entry's recorded trigger was "Q3 capacity, after FR/DE review and calendar work land", and all three conditions are met, so the item moves onto the timeline as part of v1.14.0 rather than sitting in the watch list for another cycle. The three remaining watch items (sticky directory side panel, member self-edit, newsletter signup) keep their triggers.
-
The directory's research-theme taxonomy gains two themes. "EU, UN and other international organisations" clusters the UN, multilateralism, EU security and global-order keywords (moving "UN" and "Multilateralism" out of "Foreign policy and diplomacy"). "Crisis management and critical systems resilience" clusters crisis management, crises, critical infrastructure security, systems resilience and civil protection (moving the first three out of "Security and defence" and "Transnational and human security"). FR and DE names are translated, at the maintainer's request, as an exception to the usual hand-translation-only rule (#1237).
Changed
-
The weekly spotlight post now tags the featured member where the platform allows it. On Bluesky, a member who has given their profile is @-mentioned in the post so they are notified, resolved to a proper richtext mention at publish time. On LinkedIn, where a public profile URL cannot become a notifying mention, that profile link is posted as the first comment rather than in the body, which keeps the post's reach intact. Both are optional and fail quietly: no profile on file means no tag, and a comment that does not go through leaves the post itself untouched.
-
The site takes an editorial design pass: a tokenised fluid type scale on Lexend with solid-ink headlines in place of the old gradient text fills, a consistent 65 to 75 character body measure, a spacing scale behind the section rhythm, the home hero recast as a letterboxed full-bleed band with a left-aligned lockup and a quiet keyword line, one shared photographic grade so event photos read as one set in both themes (identity headshots keep their natural colour), and the motion vocabulary tuned quieter with the constellation hero, the faces marquee, and the card-tilt effect all retained. Carried almost entirely in the shared stylesheet, so the three locales pick it up together.
-
Moving between pages now cross-fades instead of hard-cutting, with the floating header holding still while the content changes beneath it. Works in current browsers, falls back to the instant switch in older ones, and visitors who prefer reduced motion keep the instant switch.
-
Page headers no longer take part in the scroll-reveal animation, so the title and lede of every page paint immediately on load (an entrance animation on content already in view was only ever perceived as delay). The hero lockup is also left-aligned on phones now, not just on desktop, since a fixed left reading edge matters most where text wraps most.
-
Every page loads faster: the stylesheet is split into a core that all pages share and two page bundles (the members directory with its profile pages, and the roadmap), so a visitor reading About or the home page no longer downloads the directory's styling before the page can paint (#1355). Locally measured, the About page's performance score recovers from just under the CI budget floor to comfortably above it.
-
The weekly member spotlight on the home page now lives inside the "Meet the network" section, directly above the faces marquee, so the featured member reads as the centrepiece of that section rather than as a separate band between the news and about blocks. It presents as a subsection of "Meet the network" and stays hidden when no member is featured, so the section reads the same with or without one. Applied identically across the three locales.
-
Four research keywords that had no home in the theme taxonomy are now placed, so every keyword maps to a theme again and no member falls out of the research-theme filter. "Transitional justice" joins Peace, mediation, and reconciliation; "Gender-based violence" and "International jurisprudence" join Transnational and human security; "Feminist studies" joins Theory and methods. The affected member now appears under those themes, and a few profile pages pick her up in their "Works on similar topics" facepiles.
-
Clicking a directory card in the compact view now opens the member's detail in a preview panel rather than expanding the card in place: a side rail on desktop, a bottom sheet on mobile (#72). The grid no longer reflows and you keep your scroll position, and the panel's "View full profile" link goes through to the full profile page. A
#slugdeep-link opens the panel; Esc, the close button, or a click outside (the scrim on mobile) dismisses it, with focus returning to the card. -
The directory preview panel is reworked into a self-contained quick look. The compact card's cue becomes a › drill-in chevron instead of a downward one, matching the fact that a click opens a panel to the side rather than an in-place expansion. On desktop the panel is now a floating card anchored below the navigation instead of sliding underneath it, carrying a sticky header (a "Quick look" label, an Esc hint, the close button) and a pinned "View full profile" button at the foot that stays in view. The bio shows as a clamped teaser, with the full text on the profile page, so the panel rarely needs scrolling. The "Quick look" label is hand-translated for FR and DE.
-
The directory preview panel gains two interaction refinements. Clicking the card whose panel is already open now closes the panel, where it previously re-opened the same member to no effect. Clicking a different member's card while the panel is open cross-fades the panel body to the new person, rather than swapping the content in one frame; the fade is suppressed under
prefers-reduced-motion. -
The directory's research-theme taxonomy gains a "Peace, mediation, and reconciliation" theme, clustering members working on peace studies, conflict resolution, and reconciliation (peacekeeping moves here from the transnational-and-human-security theme). With this and a couple of stray keywords folded into existing themes, every research keyword now maps to a theme, so no member falls out of the theme filter. Hand-translated for FR and DE.
-
Four research keywords that had no theme are folded into the taxonomy, so they cluster in the directory's theme filter instead of standing alone: "Critical security studies" and "Role theory" join "Theory and methods", and "Small states' foreign and security policy" and "Regional security cooperation and governance" join "Foreign policy and diplomacy". Every research keyword again maps to a theme.
-
The directory's research-theme taxonomy gains a "Political psychology, public opinion and decision-making" theme, gathering the behavioural keywords (political psychology and judgment-and-decision-making move here from "Theory and methods", joined by public opinion and defence attitudes). A sweep of the keywords that had drifted out of any theme folds the rest back in: European defence and collective defence join "European and transatlantic security order", AI governance, digital security and human-rights-and-technology join "Cyber and emerging technology", information integrity joins "Intelligence, information and influence", EU enlargement and European integration join "EU, UN and other international organisations", and transnational organised crime joins "Transnational and human security" (its lower-case "(tcos)" acronym capitalised to "(TCOs)", for transnational criminal organisations, at the same time). Every research keyword now maps to a theme again. The sync also drops any region name typed into the keyword box (e.g. "The Americas"), since geography belongs to the separate regions facet, not the topical keyword pills. Hand-translated for FR and DE.
-
A keyword-curation pass folds the 26 remaining unthemed research keywords back into the taxonomy, so every canonical keyword maps to a theme and no member drops out of the research-theme filter. Foreign policy, China's and Turkish foreign policy, strategic competition, regionalism, cooperation, Indo-Pacific geopolitics and Middle East studies join "Foreign policy and diplomacy". International organisations and global governance join "EU, UN and other international organisations". Human rights and the migration-security nexus join "Transnational and human security", nationalism joins "Identity, narratives and ideational security", and digital politics and governance join "Cyber and emerging technology". Theory, policy frameworks and securitisation join "Theory and methods", conflict studies, democratisation and transformation join "Peace, mediation and reconciliation", and energy security joins "Economic security and geoeconomics". Five submitted typos (". Foreign policy", "Conflcits", "comparative politicas", "Securiy studies", "migration-securty nexus") are corrected through the alias map at the same time. A thin cluster around domestic political change is flagged in
data/keyword-aliases.jsonfor the next pass, to revisit as a possible standalone theme once more members carry it. -
The published
directory-index.jsoncross-site contract now also carries each member'srole,affiliation, andphotoURL (all optional, null when unset), so the EISS Anthology can render an informative "NetSec profile" chip (a headshot and who the person is) rather than a bare link. Additive: the existingname_key/urljoin is unchanged. -
The award presented at the conference is now named consistently as the "European Security Studies Prize" everywhere it appears: the gold badge on the winning papers in the ESSC 2026 programme, the home-page news item, the closing-session title, and the new prize pill on member profiles. The programme badge previously read "ERC Best Paper Prize" and the news item "European Security Studies Best Paper Prize", which named the same award two different ways (#1081). The name is hand-translated in the French and German renderings.
-
On an expanded directory card in the compact view, the "View full profile" link and the collapse chevron now trade corners: the link sits at the bottom-right and the chevron at the bottom-left. Collapsed cards and the detailed view are unchanged.
-
The directory's research-region filter is now URL-addressable, like the research-theme filter already was. A link to
/people.html#regions=europeopens the directory pre-filtered to that region, and selecting regions on the page updates the address so the filtered view can be shared. This is what lets a profile page's region chip deep-link into the directory. -
The European Security Studies Prize news item now links to the prize page on the EISS site (
eiss-europa.com/prizes.html), where the prize and the winning papers live, rather than to the archived conference page. Repointed in the news data, the RSS feed, and the no-JS home-page fallback, in all three locales, and the link now opens externally with the standard external-link affordance. -
The members directory is now named "the Directory" consistently across the site, where parts of it previously read "the Network". The
/people.htmlpage title and heading, the global navigation label, the Open Graph title, and the visual sitemap entry now all read Directory ("Annuaire" in French, "Verzeichnis" in German), matching the page's own Early-Access banner and lede. Labelling only: "network" is left untouched where it means the community of people rather than the directory feature. -
The directory's social card (
/people.htmlOpen Graph image) is refreshed around what the directory does rather than a member count: a "Find your next…" headline beside a faux dropdown (co-author / mentor / host) and an "Add your bio" call to action, so it does not go stale as the directory grows. It is now generated from an HTML template byscripts/build-directory-og.pyrather than a hand-made file. -
The XML sitemap now lists every member profile page (
/people/<slug>, all three locales with hreflang alternates), so search engines find them from the sitemap rather than only by crawling.sitemap.xmlis now generated byscripts/build-sitemap.pyfrom the top-level page list plus the committed profile pages, with a CI drift gate, and the weekly bios sync regenerates it so a new member is listed automatically. The human-readable/sitemap.htmlis unchanged. -
Every research-theme name is standardised on no serial comma before the final "and". "Peace, mediation and reconciliation" drops the one Oxford comma that had crept into an otherwise comma-free list of theme names.
-
A directory member with no formal role and no Working Group membership now shows no role pill on their card or profile page, rather than the generic "Network member" label, which read as filler rather than information.
Fixed
- The roadmap's v1.13.0 card would not have flipped to shipped on release day. Its markup had been hand-edited to
rm-entry in-progressin all three locales, butscripts/promote-roadmap.pymatches onlyrm-entry planned, so the promotion would have failed with its exit-2 "no card found" warning and left the card reading as in progress after the release had gone out. The static markup is back toplanned, which is what the release tooling expects and what CLAUDE.md §5 requires. Nothing changes on the live page:assets/js/roadmap-progress.jspromotes the first still-planned card to In progress at render, so the card still reads as in progress with its milestone progress bar. - Compact directory cards now tell assistive technology what they actually do: each card announces itself as a button that opens a dialog (the member preview panel), with its expanded state following the panel as it opens, switches member, or closes, where before a screen-reader user heard only a plain focusable card with no hint that activating it opened anything. (#648)
- The directory no longer jumps on a first visit: the "First time here?" welcome strip used to appear only after the page script loaded, pushing the search toolbar and the whole grid down mid-read, and now occupies its place from the very first paint. This was also the layout-shift regression behind the Lighthouse budget failure on the directory page.
- Toggling a research-theme or research-region chip no longer drops keyboard focus to the page body: the rebuilt chip row returns focus to the chip that was toggled (or the first chip when it leaves the visible top eight), matching the active-filter pill row, so filtering by keyboard or from the mobile filter sheet keeps its place. (#648)
- Removed a third duplicate directory card. "Prof. Pavlos Koktsidis" was a stale earlier submission that had never been superseded when the fuller "Prof. Pavlosioannis Koktsidis" entry (same ORCID, same affiliation) joined the directory; the stale entry, its headshot, its OG card, and its ORCID works list were removed, and cross-references on other profiles (facepiles, sitemap, search index) were regenerated to drop it.
- Avatar initials for members without a photo now follow one rule everywhere: salutation stripped, then the first letter of the first and last name. The directory's own fallback used to take the first two words instead, so a member with a middle name could show different initials on their directory card than in search results or the weekly spotlight. The four separate copies of the rule are now one shared helper, with the same consolidation applied to the research-keyword title-casing used by the directory pills and the home spotlight. (#1194)
- Another sweep of the directory's research keywords folds the eleven that had drifted out of any theme back into the taxonomy, so every keyword clusters in the theme filter again. Nuclear deterrence joins "Strategy and deterrence"; comparative foreign policy analysis, common foreign and security policy, domestic politics of foreign and security policy, and great power competition join "Foreign policy and diplomacy"; algorithms-and-AI joins "Cyber and emerging technology"; social media joins "Intelligence, information and influence"; extremism joins "Transnational and human security"; informality joins "EU, UN and other international organisations"; and a bare "EU-NATO" folds onto the existing "EU–NATO relations" keyword. The two phrasings of the transnational-criminal-organisations keyword are consolidated onto a single canonical "Transnational criminal organisations (TCOs)", with the lower-case acronym capitalised.
- The directory join form's country question was renamed to "Country of your institution"; the bios sync now reads that column header, so a member's country keeps flowing through to their card and the country filter.
- The Working-Group colour pills now meet WCAG AA contrast everywhere they appear (Events, News, the directory cards, the Working Groups page). The WG1 blue and WG3 purple were a touch too light to carry white text at the size the pills use, and the directory cards compounded it by fading each pill into a lighter tint, so the purple pill in particular fell well short. The two hues are darkened a step in the brand palette (still the same blue and purple), the directory pills drop the gradient for a solid fill like the others, so all four WG pills now share one look and clear the 4.5:1 threshold. The green and amber pills, which already carried dark text, are unchanged.
- The mentorship panel's "Order for my career stage" control now reflects how academic mentoring actually works. It used to lean monotonically toward the most senior person, so a doctoral student was steered to full professors over the near-peers (postdocs, assistant or associate professors) that the research finds most useful, and a senior researcher got no meaningful ordering at all (the old formula went to zero for them). It now leans toward a mentor one or two stages ahead, gives a same-stage peer a smaller nudge, and stops rewarding distance beyond that, symmetrically on the mentee side. A "Most relevant first" cue sits above the lists whenever there is something to rank by (a research-area filter or a chosen stage), so the order reads as a ranking rather than an alphabetical list. The control is also restyled: a compact dropdown rather than a full-width bar, and it follows the theme instead of rendering as a white box in dark mode.
- The "Can host STSM visitors" filter now appears as a removable chip in the directory's active-filters row, like every other facet (search, working group, country, research theme, region, mentorship). It was the only filter missing from that summary, so an STSM filter could be left on without a visible reminder and could only be cleared from its own chip or Clear-all. The in-panel career-stage personaliser also resets on Clear-all now, and keeps keyboard focus when it re-orders the list.
- Looping animations (the live-programme, now-marker, and working-group status pulse dots) now genuinely stop for visitors who ask for reduced motion, rather than flickering at a near-instant duration. The site-wide reduced-motion reset was missing
animation-iteration-count: 1, so an infinite loop kept restarting; completing the reset closes that gap and also overrides the page's smooth-scroll. With the reset now covering every element, the per-component motion overrides that only disabled a transition or animation were redundant and have been removed (the ones that also drop a hover lift are kept). - The directory preview panel's close button could stop responding when the floating card's top edge slipped under the navigation (on a wrapped or taller nav, where the panel's 84px top no longer cleared it). The nav sat at a higher stacking order, so it intercepted the click. The panel and its scrim now sit above the nav, so the close button always receives the click. The panel's cross-fade also cancels cleanly on close, rather than leaving a pending content swap to run against a closing panel.
- The "Works on similar topics" and "Mentors on similar topics" facepiles on member profile pages were cramped against the section above them: their label is wrapped inside the facepile block, so it missed the section-gap rule that targets only the sidebar's direct children. The blocks now carry the section spacing themselves.
- Two directory-bio typos are corrected at source in
data/bios.json: "a associate" becomes "an associate" and "profesionnal" becomes "professional". Members' own punctuation and phrasing are left untouched. Rebuilding the bio search index from the corrected data also resynced two entries that had drifted out of date (one member was missing from search; another's working-group metadata was stale). The unusedlight-tmp.htmltheme-reset stub is removed. - Every French and German directory profile page (74 in all) now carries the manual-translation beta ribbon. The pages already declared the beta status on the document, but the profile generator never emitted the ribbon element, so the "manual translation, English authoritative" cue was missing on exactly the pages whose bios sit in English under a localised shell. The generator now splices the ribbon from the matching locale shell, with its "see in English" link pointed at each page's own English profile.
- Two faculty headshots that rendered broken are fixed: Dr John Helferich and Dr Šárka Kolmašová were referenced with the wrong file extension (.jpeg vs .jpg), so the images 404'd on the About and Working Groups pages in all three locales. Corrected to the files on disk. The news-archive lede also loses a stray semicolon in all three locales, in line with the house prose style.
- The roadmap (
/roadmap.html, all three locales) was rendering with a broken Q2/Q3 boundary: the v1.12.0 card's feature list had been split, swallowing the conference entry and leaking a stray "Outputs & recap" chip into Q3. The markup is repaired, so v1.12.0 shows its four themes and the quarters are clean again. The June Training School and European Security Studies Conference, which had stayed marked "planned" after it happened, now reads as a held Action milestone in its chronological place and is no longer counted among the collapsed "earlier releases". v1.13.0, the release currently in development, now shows "In progress" rather than "Planned", and the page carries the corrected event names. - Parallel sessions on the conference programme now expand and collapse their paper lists together (the archived
/essc-2026.htmland the parked ESSC 2027 template). Two sessions sharing a row are the same height, so opening one side's contributions on its own left the other side short with a tall empty gap beside it. Toggling either side now keeps both in step, in both directions, so the row stays balanced. - The "In numbers" figures on the About page (all three locales) now sit with clear space above them. As the first subhead in its container the heading had picked up the tight top margin meant for a page-leading subhead, so the figures crowded the objectives above them.
- Four directory fixes on the French and German directory (all three locales for the labelling change). The country half of a member's role line ("Comité de gestion · Switzerland") was rendering in English on the French and German pages;
netsecT()now translates the country independently of the role prefix, hand-translated for FR and DE. The "Management Committee" filter chip was surfacing only one representative, becausescripts/sync-cost.pyreconciled the cost.eu Management Committee roster against the WG-leadership roles but never tagged matching directory bios with a Management Committee role of their own; a newapply_mc_roles()pass closes that gap, bringing the count from 1 to 7. The floating help and join buttons over the directory grid could sit on top of the last row of cards; the grid now reserves space below itself to clear them. Finally, the directory's "MC members" filter chip and the French and German equivalents are spelled out as "Management Committee" ("Comité de gestion", "Management-Ausschuss"), to avoid the acronym. - The working-group pills now read clearly everywhere they appear, with a single source of truth for each hue's label colour. The readable ink per WG colour (white on the two dark hues, dark ink on the green and amber) was hard-coded inconsistently across four separate pill styles, so several were wrong: on the Events page the cards sit inside a
.prose-page, whose link rule recoloured the pill text to the accent blue (the WG1 colour), turning the WG1 pill blue-on-blue and the WG3 pill blue-on-purple; the News-page WG pills, the directory cards, and the Working Groups page all rendered the green WG2 (and on News the amber WG4) pill with white text on a light fill. New--wg-N-inktokens carry the readable colour for each hue, and every WG pill now points at them, so all four read with proper contrast on every page, in both light and dark mode.
Removed
- The external Indico write tool
scripts/indico_patch.pyand its testscripts/test-indico_patch.py, superseded by thenetsec-dispatchplugin CLIindico netsec apply-fixplan(#824). The YAML fix-plan schema is unchanged;docs/indico-patch.mdbecomes a retirement notice, the fix-plan READMEs point at the plugin CLI, thedata/indico-fix-plans/*.resolved.jsonsidecar.gitignorepattern is dropped (the plugin has no sidecar cache), andPyYAMLis removed fromrequirements.txt(it was used only by the retired tool).