Skip to content

v2.28.0 — A usable Atlas, and a citable theme vocabulary

Latest

Choose a tag to compare

@EISSeuropa EISSeuropa released this 29 Aug 14:52
· 51 commits to master since this release
Immutable release. Only release title and notes can be modified.

The Atlas shipped in August as a map to look at. This release makes it a map to work with: in French and German, from a keyboard, on a phone, and behind a link that carries the view it was shared from. Alongside it, the seventeen research themes the Anthology indexes by are published as a vocabulary that can be cited and reused.

The Atlas, from something to look at to something to work with

Most of this release is the map catching up with the promise of it. It opens on the map rather than below a screen of chrome, zooms and pans, and holds still while it is read. Clicking a research theme now describes that theme: its papers, its years, the themes it most often shares papers with, and one press into any of them. A filtered view has a link, and so does an open theme panel, so a view that was found is a view that can be sent. Under the map, a slider walks the nine annual editions one at a time, and a line of findings says what only the map's own structure knows, such as the busiest bridge between two fields.

It is also readable now by people who were previously locked out of it. The whole current view exists as a list under the canvas, the map speaks its state through a live region, and the French and German Atlases are complete rather than an English core with translated edges, including the parts the script writes rather than the page.

A vocabulary other people can use

The seventeen themes were a JavaScript constant inside a website's build. They are now a published SKOS vocabulary at /vocab/themes/, in Turtle and JSON-LD, each theme carrying a permanent identifier that resolves, with its labels in English, French and German. The map links to them, and each theme page prints its own identifier in full, ready to copy into a citation or a mapping file.

Publishing it meant deciding what the vocabulary does not cover, which is a more useful statement than it sounds. The matching rules stay unpublished, because they are how a paper gets tagged rather than what a theme means. One rule turned out to be genuinely too narrow and was widened. The papers that still carry no theme were then gone through one by one, and what remains is keynotes, poster sessions, four 2019 panels titled only "Session I" to "Session IV", and two panels whose subject the vocabulary deliberately does not reach.

The Anthology says more about itself

The header counted speakers, editions, papers and abstracts, none of which say whether the Initiative is meeting the same people again or new ones. It now sets out every annual edition against five figures, and two movements are visible in them: first-time presenters have fallen from 87% in 2018 to between 61% and 77%, and sole-authored papers from 89% to 69%. The page also stops calling itself a preview and names instead which editions are finished and which are still filling in.

Two figures were quietly wrong and are not any more. Poster papers were counted in the abstract-coverage ratio in some editions and not in others, depending on how each programme was transcribed. And the corpus note described a tagging method the site stopped using when abstracts began feeding the themes.

The phone, and the reader without JavaScript

A run of fixes that share one cause: the map was built at desktop width with scripts running. On a phone it now reaches the first screen in all three languages, a tap previews rather than navigating away, the hover card stays out from under the thing it describes and inside the map, and a scrolling finger is no longer trapped. Without JavaScript the list alternative still exists. The rest is the ordinary tail of a release: share cards that were blank, language switches that lost the reader's place, and a licence line that contradicted the licence.

Index of changes

The themed sections above are the story. The index below is the audit trail, same content, terser.

Added

  • Every research theme on the Atlas now carries its permanent identifier. The seventeen themes were published as a citable vocabulary last week and nothing on the map said so, which left the identifiers reachable through the sitemap and the documentation and nowhere a reader actually goes. A theme's panel on the map now links to its identifier, each of the seventeen theme pages prints its own in full, ready to copy into a citation or a mapping file, and the theme list on every Atlas view links to the vocabulary itself. Closes #1571.

  • The Anthology says how the conference is changing, not only how big it is. The header counted speakers, editions, papers and abstracts, and none of those say whether the Initiative is meeting the same people again or new ones. A panel under the coverage bars now sets out every annual edition against five figures: papers, people, the share presenting for the first time, the share writing alone, and authors per paper. Two movements are visible in it. First-time presenters have fallen from 87% in 2018 to between 61% and 77%, so a conference that was almost all new faces has grown regulars. Sole-authored papers have fallen from 89% in 2018 to 69% in 2026, with authors per paper up from 1.15 to 1.43. The panel carries what the numbers cannot know, including that names are matched conservatively, so the first-time share is the top of a range rather than a point. Closes #1566.

  • The Atlas shows every pair of research themes at once. Pressing a theme hub says which other themes it bridges into, one pair at a time, and 70 of the 136 possible pairs carry papers, so the structure a reader walks press by press has never been visible whole. A grid under the map now holds all of it: seventeen themes against themselves, each cell the papers two themes both tag, shaded by how many, and every filled cell opens exactly those papers on the map. The busiest pair is cyber and technology with transformations of warfare, at 18 papers. On a phone, where seventeen columns are not a table anybody can read, the same seventy pairs arrive as a ranked list instead. It is markup rather than a drawing, which means it survives a screenshot, a slide and a screen reader, none of which the map does. Closes #1567.

  • The seventeen research themes are now a citable vocabulary of their own. The themes the Anthology indexes by, translated by hand into French and German, existed only inside the site's build, so nobody outside it could reuse them or map their own material onto them. They are now published as SKOS, in Turtle at /vocab/themes.ttl and in JSON-LD at /vocab/themes.jsonld, with a page of their own at /vocab/themes/ and a permanent identifier for each theme that resolves to its view in the Atlas. The nine permanent conference sections and the eight themes drawn from the open panels stay distinguishable in the published form. Reusable under CC BY 4.0. Part of #1249, whose remaining half is the Zenodo deposit and the Loterre submission.

  • The Atlas is published in French and German. The map was English only, and its language switcher made that worse rather than saying it: clicking FR from the Atlas dropped a reader on the site home page, losing the map and offering no explanation. There are now three Atlases, and the switcher moves between them. Everything a reader sees is translated by hand, including the parts the script writes rather than the page: the lens and filter chips, the hover cards, the theme panel, the bridge view, the findings, the list headers, the scrubber and the guided tour. The seventeen theme pages exist in all three languages too, so the map and its views are one surface rather than an English core with translated edges. The research themes use the same French and German vocabulary as the Anthology filters. Closes #1495.

  • An open theme on the Atlas has its own link. The panel a theme hub opens is the densest thing on the page and was the one piece of the view a copied link could not carry, so a link to "look at this theme" handed over a bare map. The URL now holds it, and a theme's own Atlas page opens its panel on arrival, which is what that page is about. Closes #1473.

  • The Atlas can be read over time. A slider under the map steps through the nine annual conferences from 2017 to 2026, one edition at a time, with a play control that walks through them on its own. The layout holds still while the years change, so each frame sits exactly where the last one did and what moves is the corpus rather than the map. The joint events and the Ukraine workshop stay on the chips, since two papers would read as the map going blank rather than as a year with a different shape. Closes #1192.

  • The Atlas shows what two research themes have in common. The hub panel says a theme shares 18 papers with another, and that number was the one figure on the page with no route to the papers behind it. Pressing it now narrows the map and the list beneath it to exactly those papers, with each theme one press away on its own, and the view has its own link, so a bridge between two fields is a thing that can be sent to somebody. Closes #1468.

  • The Atlas figures now say something the Anthology cannot. Under the corpus counts there is a line of findings drawn from the map's own structure: the busiest bridge between two themes, the edition that spread across the most of them, and the share of papers sitting in more than one. The first is a button into that bridge. Counting the corpus is what the Anthology is for, and this is the part only a map knows. Part of #1468.

  • Clicking a research theme on the Atlas now describes it. The labelled circles that organise the map were the one thing on it that answered nothing: a click fell through to the drag handler, and on a phone, where there is no hover either, a theme hub did nothing at all. A click or a tap now opens a panel under the map with the theme's paper count, its year range and its author count, the themes it most often shares papers with, and links to its own Atlas page and feed. The map keeps that theme lit while the panel is open. Filtering the map down to the theme is one button inside the panel rather than something the click does on its own, so a stray click costs nothing, and pressing it moves the chips, the list, the copy-link row and the URL together. Closes #1465.

  • A filtered Atlas can be handed to someone else. The lens, the chips, the toggles and the current spotlight have been mirrored into the query string since v2.26.0, so a narrowed view of the map has always been shareable, and nothing on the page said so. A copy-link button now appears beside the Find control as soon as the view differs from the default map, and hands over the OS share sheet instead on a touchscreen that offers one. Closes #1445.

  • The Atlas view can be read as a list. The canvas is opaque to assistive technologies, and the answer until now was a line pointing at the whole Anthology, which is the unfiltered corpus rather than the map on screen. A disclosure under the map now lists exactly what the current view holds, papers or authors depending on the lens, rebuilt from the same test the canvas paints with, capped at 200 with a count of the rest. It is a closed disclosure rather than a hidden block on purpose: hidden links are focusable links a sighted keyboard user cannot see. Closes #1446.

  • The Atlas chip rows have All and None, and a filtered view has a way out. Every edition and theme chip starts switched on, so isolating a single edition meant switching off the other eleven by hand, and a single theme meant sixteen. Each row now leads with All and None, so it takes two presses, and the filter summary carries a Clear action whenever anything is filtering. The summary is the only filter control visible while the rows are collapsed, which is where a reader who has filtered the map down to nothing goes looking. Closes #1442.

  • The Atlas tells a screen reader what the map just did. The card pinned by a tap is a canvas overlay that nothing announced, and a search that landed on a paper moved the map silently. Both now speak through a polite live region, alongside the Find messages added earlier in this release. Part of #1446, whose remaining half is a keyboard path into the map itself.

Changed

  • Four more papers now carry a research theme, and the untagged set is down to 29. A panel on foreign information influence matched none of the seventeen themes, because the pattern behind "emerging domains" recognised information operations and not the influence and disinformation vocabulary the same literature uses. Widening it moves four papers, three of which carried no theme at all, and it changes nothing else: the words appear in 1.4% of abstracts on file, so they are topical rather than ambient. The remaining untagged papers are now keynotes and roundtables, poster sessions, four 2019 panels titled only "Session I" to "Session IV", and two panels whose subject the vocabulary genuinely does not cover. Closes #1570.

  • The Atlas share card is the map itself again, in all three languages. The English card was a photograph of the running map, composed by hand, which is why it showed what the Atlas actually is rather than a title on a background. A photograph cannot be translated, and the hub labels on the map are the reader's language now, so the French and German pages had been given plainer title cards instead. All three are now drawn from the corpus by the build, using the same layout, forces and colours the page itself uses, so each language gets its own map with its own labels and figures, and a new edition refreshes all three with one command. Closes #1545.

  • The licence block has gone from the Anthology as well as the map. It said a third time what the footer and the page's own machine-readable declaration already say, and on a page that opens with the corpus figures, the citation panel and the coverage bars, a third statement of the licence was one block too many. The footer states the licence on every page and the head still declares it, so the position is unchanged and only the repetition is gone.

  • The Anthology says which editions are finished instead of calling itself a preview. The page opened with an early-access notice covering everything on it, which is a label that can never come off, because the corpus grows by an edition a year and the older ones are recovered by hand. A reader meets it every visit, learns it never changes, and stops reading it, while it discounts the four editions that are all but done. The notice now names both sides: the 2023 to 2026 editions at 94% abstract coverage or better, and the 2017 to 2022 editions still filling in with 195 abstracts of 270 outstanding. The figures come from the same derivation as the coverage bars below them, so the sentence cannot drift from the bars, and a build gate fails if an edition the page calls finished slips back. The Atlas keeps its Beta pill: the corpus and the map are declared separately, and the map is still early-stage work. Closes #1499.

  • The Atlas filters now look like a control that opens. The row reading "Filters" was styled as a section heading, uppercase above a rule, with no disclosure triangle, so nothing suggested that the editions and the research themes were behind it. It is now a control: a chevron that turns as it opens, a surface that responds to hover and to focus, and a line saying what is inside, which steps aside once the row reports how much is filtered. The play control on the timeline is a play and pause icon rather than the words, which is what a media control looks like everywhere else, with the accessible name changing with the state. The licence block has gone from under the map, where it joined the legend, the figures, the findings and the theme list in a foot that was doing too much. The footer states the licence on every page and the head still declares it, so only the crowding is gone.

  • Every Atlas page now names who built it and what to cite. The credit line naming the author of the Atlas rendered on the canonical map alone, on the argument that the seventeen theme pages are the same map pre-filtered. They are not duplicates. They are real URLs with their own titles and share cards, and they are the ones people share, so they carry the credit too. The map and its theme pages also emit the citation metadata the Anthology has carried since the corpus was deposited, under the map's own title and each theme's own title, so a reference manager saving one records the dataset rather than a web page. A build gate now covers all eighteen pages, so the metadata cannot quietly fall off one of them. Closes #1490.

  • The Atlas lede says what the map is for. It opened by describing how the map is drawn, which left two pages holding the same 511 papers with nothing to tell a reader which one to use. It now names the difference: the Anthology is the corpus as a catalogue, the Atlas is the corpus as a structure. One clause, on the map and on the 17 theme pages, and the findings under the map are what make good on it. Closes #1479.

  • The Atlas lede stops at what the map is. It closed with "read it by paper or by author, and hover any dot to see what it is", which the lens chips directly above the map, the welcome bar and the tour all say already, and whose verb stopped describing the gesture on a phone once a tap started pinning the card. Dropping it takes 53px off the lede at 375px, which is what finally puts the map on screen there on a first visit, and it goes from the theme pages as well as the canonical map. Closes #1459.

  • The accessibility statement describes the Atlas as it now is. The known-limitation entry for the map still offered the pre-August mitigation, a link under the map pointing at the whole Anthology, which is the unfiltered corpus rather than the view in front of the reader. It now describes the list that matches the current view, the live region that announces what a tap or a search lands on, and the controls that were always keyboard-reachable. It also states plainly what is still true, that the canvas cannot be moved through dot by dot from the keyboard. Hand-translated into French and German, and the review date is bumped in all three.

  • The Atlas welcome strip is a bar, and a first visit opens on the map. The strip greeted a first-time reader with a heading, a paragraph and four tips, which is 251px of a 1280x900 screen and 407px of a phone, and the tour it offers teaches the same four things to the same reader a moment later. It is now one line and two buttons: 73px and 143px. A first visit shows 311px of the map on that desktop, where it showed 128px, and the phone tour picks up the editions step the tip list used to carry. Closes #1444.

  • The Atlas map now opens on the map. The top edge of the canvas sat at y=1074 on a 1280x900 desktop and y=1275 on a 375px phone, so the page a reader landed on was a column of filter chips with the map somewhere below it. The filter rows now start collapsed at every width, not just on phones, with the active-filter count on the disclosure summary, and the corpus figures have moved below the map, where they read as context rather than as a control. The map top is now at y=501 on that desktop and y=679 on that phone. The guided tour opens the filters for itself, so its editions and themes steps still have something to point at. Closes #1430.

  • The Atlas can be zoomed and panned. Around a thousand dots in 640px of height meant the clusters around the busier hubs were a single mass, and the only way to see inside one was to filter the corpus down. A zoom cluster now sits over the top right of the map: the wheel zooms about the cursor on a desktop, the buttons work anywhere, dragging empty canvas pans, and Reset returns the view. Reset also puts dragged theme hubs back where the layout seeded them, and appears only once there is something to reset. Closes #1433 and #1434.

  • The Anthology Atlas is now tagged Beta rather than Prototype. The pill beside the Atlas heading, on the full map and on each theme page, read "Prototype" from the soft launch onwards. The map has been live and stable since v2.27.0, so the tag now reads "Beta".

  • The public roadmap describes v2.28.0 as it now stands. The card was written when persistent identifiers were the headline, and those shipped early in v2.27.0: the Zenodo DOI, the HAL note and the Software Heritage archive are all live and shown on the site, so the card was promising work already done. It now leads on what actually remains, the French Anthology leaving beta on a declared scope, an analytical export of the corpus, affiliations matched to the standard registry of research organisations, a citable theme vocabulary, and the accessibility declaration. Retitled "The corpus in French, and the data behind it" in all three locales, with docs/roadmap-2026.md brought into line.

Fixed

  • Poster papers are counted the same way in every edition. The abstract-coverage figure measures how completely the papers are documented, and it excludes the sessions that never have a submitted abstract, which is what the page has always said. Poster sessions were only half excluded: the 2025 programme records them one way and the 2024 and 2026 programmes another, so seven poster papers sat inside the denominator while three sat outside it. They are all outside it now, decided on what the session is rather than on how its edition happens to be transcribed. The figure reads 286 abstracts across 485 eligible papers, and the 2024 edition rises from 94% to 96%. No abstract has been removed, and the poster abstracts on file are still on the site.

  • The Atlas map reaches the first screen of a phone in all three languages. The work that got the map above the fold was measured in English, and publishing it in French and German put it back under: a longer title wrapped the heading and pushed the Beta pill onto a line of its own, the translation ribbon took two or three lines, and the German lens control took two. On a 375px screen the map started 903px down in French and 917px in German, against 651px in English. A smaller mark, a smaller heading and tighter settings on narrow screens bring that to 773px and 764px, with English improving to 594px as well. Closes #1548.

  • The French and German Atlas now says its translation is unreviewed, like every other translated page. The beta-translation ribbon is how the site frames a hand-made translation that a native speaker has not yet checked, and the thirty-six pages published in those languages shipped without one, quietly claiming a review that has not happened.

  • Sharing the French or German Atlas produced a blank preview. Publishing the map in those languages gave it thirty-six new pages, and the site names a share card per language by rewriting the English filename, so every one of them pointed at an image that had never been made. Nothing caught it: the link checker reads links rather than picture tags, and the first thing to notice a missing preview is somebody posting the link. The cards exist now, one per theme per language, generated from the same words the pages use. The build also fails from now on when a page names a card that is not there, which is the half that stops this happening again.

  • The French and German site maps sent readers to the English Atlas. They linked to the English map and described it as English-only, which was true when they were written and stopped being true when the map was translated.

  • The new-conference runbook no longer names an edition that does not exist. It walked through every step with a concrete example, a June 2027 conference in Amsterdam, composed in three languages and looking exactly like settled fact, while the parked 2027 page in the same repository says June in Stockholm. A runbook is read by somebody doing the task for the first time who will copy what it shows, so two plausible venues for one edition is how the wrong one reaches a data file. Every substitutable value is now an obvious placeholder, and the page says where the confirmed edition actually lives. Closes #1523.

  • Three links the build had stopped checking are checked again, and a wobbling host no longer reddens an unrelated pull request. Stockholm University, the EUI host behind the Global Risks report and the ETSI page backing the EN 301 549 citation were all skipped by the link checker because they timed out from the build runners rather than because anything was wrong with them. A skip is a permanent blind spot, and one of those three backs a compliance claim, so if the URL rotted nothing would say so. The timeout work earlier in this release removed the reason they were skipped, so the skips are gone. Separately, a server error now gets the same patience a timeout does, three attempts on a widening pause instead of one retry after three seconds, because a host answering 503 for a couple of minutes was enough to fail a build and then pass on a re-run of the same commit. A host that fails every attempt is still reported broken. Closes #1423.

  • Switching language on the Anthology keeps the view that was open. The language switcher is rendered into the page, so its links pointed at the bare page: a reader looking at the 46 papers on deterrence in French, who wanted to read the same set in German, arrived at the whole corpus and had to filter again. The links now carry the query string across, which works because the values behind the filters are the same in every language by design, the edition being a programme address and the theme being its English name. Untranslated pages, whose language links fall back to the language home page, are left alone, since a filter means nothing there.

  • The French and German Anthology now use one vocabulary for the research themes. The by-person filter has shown the translated theme labels since it was built, while the by-paper filter one tab across showed the English ones, so the same page offered a reader two vocabularies depending on which tab they were on. The by-paper filter, the theme chips on each paper and the filter status line now all show the reader's own language, while the values behind them stay the English names that the filtering and the shared ?theme= links depend on. The note at the top of the page said theme labels stay in their original language, which stopped being true when they were translated, and now says what is actually the case: names, titles and affiliations stay as they are, and the research themes are our own vocabulary, so they are translated. Closes #1492.

  • The site no longer claims all rights reserved over material it publishes under CC BY. The footer read "All rights reserved | Tous droits réservés" on every page, including the Anthology, whose citation panel a few screens above declares the corpus CC BY 4.0, and including the Atlas. A reader who scrolled to the bottom found the opposite of what the page had just told them, and the footer is the sentence a cautious reader acts on. It now separates the three positions the project actually holds: the site's text and images under CC BY 4.0, the code under MIT, the corpus under CC BY 4.0, with the member photographs and third-party material carved out as they always were. Rewritten in all three locales. The Anthology, the Atlas and the seventeen theme pages also carry a licence block in the body with the attribution string and a CC BY badge, and declare the licence in machine-readable form. Closes #1488.

  • The Atlas list alternative no longer depends on scripts to exist. The accessibility statement names the map's canvas as its known limitation and points at the list under it as the equivalent, and that list was an empty <ul> filled entirely by JavaScript, so with scripting off a reader got a blank canvas, an empty disclosure and a statement promising otherwise. The list is now in the page as sent, holding the corpus on the canonical map and its own theme on each of the seventeen theme pages, and the script narrows the same element as the view changes. It is also a table now rather than a list, because every row carries the same three fields and a screen reader can move through a table by column. The statement is updated in all three locales to say so. Closes #1496.

  • Atlas theme labels no longer run through each other. Each hub's label was drawn at a fixed offset below it with no collision handling, so around the busy middle of the map one theme's name overwrote the next and the label stopped naming anything, which is the job colour cannot do. Labels are now offered four positions, ordered by where their hub sits relative to the middle of the map so the outer ring reads outward, and a label that would land on one already placed takes the next position instead. Measured on the default layout: one overlapping pair on a 1280x900 desktop and four on a 375px phone, both now none, with all eighteen labels still drawn. Closes #1275.

  • Scrolling past the Atlas works again on a desktop. The wheel zoom that shipped with the map claimed every wheel event over the canvas, so a trackpad flick that happened to cross 640px of map zoomed it instead of scrolling the page, which is the desktop version of the phone scroll trap fixed earlier in this release. Zooming now needs ctrl or command held, which is also what a trackpad pinch sends, so pinching behaves as it reads. A plain scroll belongs to the page again, and the buttons on the map cover anyone who would rather not use a modifier. The legend now says so.

  • An Atlas filtered down to nothing now says what happened. Switching off every edition, or every research theme, left a blank rectangle where the map had been and no account of why. The stage now carries a short message naming which set of chips emptied the map and what to do about it, in both lenses.

  • A search on the Atlas that finds nothing now says so. Typing a name the corpus does not hold, or one the current filters are hiding, moved nothing on the map and reported nothing either, which reads as a broken control. The Find box now answers in both cases, and the paper hidden by a filter is distinguished from the paper that is not there at all.

  • The Atlas failure message is back where the reader can see it. When the map's data cannot be loaded the page used to say so in the corpus figures, which moved below the map earlier in this release, leaving the notice under an empty stage and off the fold. The message is now drawn on the stage itself, where the map should have been, and points at the Anthology as the way to browse the same papers.

  • The Atlas zoom buttons are big enough for a thumb. They were sized for a cursor at 34px square, and are now 42px on a touchscreen, where they matter most.

  • A tap on the Atlas no longer navigates away before the reader has seen what they tapped. Touch has no hover, so the card naming a dot appeared for the single frame between a tap landing and the browser leaving for the paper page, and with a hit radius sized for a mouse cursor the paper that opened was often not the one aimed at. On a touchscreen the first tap now pins the card, which becomes tappable and carries the paper's link, and a second tap on the same dot follows it. The hit radius is wider on a touchscreen, and zooming in (new in this release) narrows it in map terms, which is what makes picking one dot out of a cluster possible. Closes #1431.

  • The Atlas hover card no longer parks itself on top of the dot it describes. Near the right-hand edge of the map the card stopped following the pointer and clamped, which put it over the dot the reader was pointing at and its neighbours. It now flips to the left of the pointer, the same treatment the bottom edge got in the previous fix. Part of #1434.

  • The Atlas hover card is no longer cut in half by the bottom of the map. The card was always anchored below the pointer, and the stage that holds the canvas clips its overflow, so hovering a dot anywhere in the lower third of the map lost the bottom of the card: measured at 145px of a 226px card on a 1280×900 desktop, and what disappeared was the theme pills and the "Read more" line, the two parts naming the dot and marking it as clickable. The card now flips above the pointer when it would run past the bottom edge. Verified against dots in four bands of the map at desktop and phone widths, in both lenses.

  • The Atlas map no longer traps a scrolling finger on a phone. The canvas carried touch-action: none, which is what let a theme hub be dragged, and it also told the browser to ignore every other gesture over the map. On a 375px screen that is a 480px-tall block, more than half the screen, where a swipe scrolled nothing and a pinch zoomed nothing, on a page where the map itself starts well below the fold. The canvas now declares pan-y pinch-zoom, so vertical swipes scroll the page and pinch-zoom works over the map again. A mostly-horizontal hub drag still reaches the canvas, a vertical one now scrolls instead, which is the right trade on a touchscreen.

  • The release script's offer to flip the public roadmap card had never once fired. scripts/release.sh holds the version in the bare form its own usage documents (2.27.0) and passed it straight to flip-roadmap-card.mjs, which accepted only the tag form, so the guard that decides whether to offer the flip read a usage message instead of a diff and skipped the offer silently. That was true of every release since the offer was added, and the card has been flipped by hand or not at all ever since. The flip script now takes either form, which fixes the guard, the diff, the write and the command the release script prints for the maintainer to run by hand, all at once. Two follow-ons in the same pass: the change count now falls back to the just-promoted [X.Y.Z] section when [Unreleased] has already been emptied, where it used to write changes: 0 onto the card, and a guard that finds nothing to flip now says so instead of passing over in silence. Closes #1415.

  • A slow host no longer fails the link check as a broken link. hal.science, which holds the Anthology's corpus-description note and is cited from /licensing and the cite panel, timed out from GitHub's runners twice yesterday and took two unrelated pull requests red, while answering in about half a second from a laptop. The single retry the checker had was on the same 15-second clock, so a host that is merely slow under a burst failed twice and was called broken. Timeouts now get three attempts on a widening clock (15, 30 then 45 seconds) with a widening pause, and a host that never answers is reported as slow rather than counted as broken, which is the treatment a rate-limited host already gets. The alternative on offer was SKIP_HOSTS, which buys a green build by never checking the link again. scripts/test-check-links.py gains a hanging-server case, and the workflow now runs that self-check before trusting the checker with 700-odd links. Closes #1417.