Repository navigation
Releases
v2.51.1
Fixed
- No half-empty rows in a dashboard. Layouts pair their half-width charts, but a chart without data drops out per record, and some layouts placed a half-width chart between two wide ones by design, so a chart often sat alone on half a row beside an empty cell: on a subject's page (item 25332) Languages and People linked most often each did. Across the golden dashboards 108 of 173 had at least one such gap, every person, subject and genre page among them. The renderer now pairs the charts that are actually drawn and widens the odd one out of each run (
packWidthsindashboard.js); single-chart embeds stay full width. - Stat cards fill their rows. The fixed three-column grid left empty cells for 4, 5 and 10 cards (one card alone under three). The row count now sets balanced columns, at most four (5 → 3 + 2, 9 → 3 × 3, 10 → 4 + 4 + 2), and a short last row's cards widen to fill it; narrow screens still drop to two columns, then one.
- The comparison's summary cards take one column each: without anything in common the overlap card is absent, and the fixed third column stood empty.
Security
- Development tooling only: npm
overridesliftminimatchto 11.0.7 (GHSA-g3hv-75wg-m249, ReDoS in 10.x) and, with it,globto 14.0.4, the first release built on minimatch 11. eslint 10.14.0 and Lighthouse's Sentry bundler plugins still ask for minimatch 10 and glob 13; both only callnew Minimatch().match(),minimatch()andglob(), which minimatch 11 and glob 14 keep. eslint lints the same files as before. Drop the overrides once eslint and Sentry depend on these versions themselves. Nothing in the release zip changes.
v2.51.0
Fixed
- The embeddings-refresh ping records its once-a-minute throttle before it asks GitHub, not after the download. A look that timed out or failed with an unexpected error used to leave no trace, so every following anonymous
POST …/dre-data/embeddings-refreshsent another outbound request. - British spelling in the last American strings. The announcement after a chart loads reads "Visualisation ready." (it said "Visualization"), the maintenance notice after a withdrawal "Published visualisations withdrawn.", and the snapshot store's errors say "visualisation storage". The module's interface copy is British English, as the shared wording glossary of the DRE theme requires.
Added
npm run i18n:check(part ofnpm run check) andnpm run i18n:extractfail on an American spelling in any catalogue string (visualiz…,organiz…,color,center,behaviorand similar), so it cannot return. The names "DRE Visualizations" and the repository's stay as they are.- A unit test holds stops 1–6 of the categorical palette to the vendored
--brand-*tokens, as the data-colour contract requires; nothing checked it before.
Changed
- Checks that run code are tests now. The tooltip-formatter sweep, the registry contracts and the graph contracts moved from
scripts/check-*.mjsintotests/js/(npm test), and so did the treemap formatter's hostile-label run fromcheck-html-safety.mjs, which keeps the static sink inventory.npm run check:formatters,check:registryandcheck:graphare gone;npm run checkruns the same checks throughnpm test. - Rendered assertions instead of substring checks.
check-accessibility-contracts.mjskeeps only the source policies (one spinner partial, the touch-target and status styles, map popups). The async-surface markup is now checked on the real partial rendered through PHP (tests/AsyncSurfaceTest.php), the loading, ready, empty and error states oncore/async.jsitself (tests/js/async.test.mjs), and the chart headings and toolbars on every rendered golden block in the browser suite. The two checks that pinned the dashboard's second state implementation are gone. - The PHP harnesses share one assertion helper,
tests/lib/assert.php, instead of a copy of its own in each. - One loading, empty and error panel. The dashboards drew their own empty and error notices and set their busy state by hand beside the shared
ns.asyncState(core/async.js) every other block uses; they now go through it, so a dashboard's "Try again" works like every other surface's (it is disabled once pressed) and its empty notice is the shared one.ns.asyncStategains apartialoutcome for a dashboard with a broken chart. The orchestrator's inline-dashboard path (.dashboard-containerwith adata-dashboardattribute), which nothing has rendered for several releases, is removed. - Eighteen
innerHTML = ''clears in the controllers usens.setChildreninstead; the reviewedinnerHTMLsink count drops from 43 to 25. - The heatmap's axis and cell labels no longer drop to 8–10 px on narrow screens: they stay at the smallest type token (
--text-2xs, 11 px,THEME.fontSizeMin). - Documentation follows the split of the precompute into generators (
CONTRIBUTING.mdrecipes, README, two code comments),docs/SECURITY_AND_PRIVACY.mdexplains why the full-text word counts are served publicly and how they are refreshed, and anAGENTS.md(withCLAUDE.md) gives coding agents the commands, gotchas and release steps. Neither ships in the release archive. - Precompute internals (no change to the generated data). The vocabulary terms the precompute reads are named once, in
Precompute\Terms(Terms::IS_PART_OF,Terms::CLASS_ORGANIZATION, …), withTerms::isOrganisation()andTerms::isAffiliation()for the "dcterms:isPartOf to a foaf:Organization" idiom that was spelled out at every use.Runnertakes oneGeneratorPaths(GeneratorPaths::forGeneration()) instead of eight path strings that it packed into one again; it has ten parameters instead of nineteen. The snapshot of the golden corpus is byte-identical before and after. - Releases bump the version by
npm version, not by hand.npm version <patch|minor|major> -m "Release v%s"writespackage.jsonandpackage-lock.json, and itsversionhook (scripts/sync-version.mjs, as in DRE-theme) writesconfig/module.ini,CITATION.cffand the dated CHANGELOG section from the[Unreleased]notes, then npm commits and tags.docs/RELEASING.mddescribes it.
AMIRA semantic map inputs · build 42
Scoped semantic-map inputs for the DRE Visualizations module, which downloads the newest build made for its current publication revision.
AMIRA semantic embeddings v1 · EmbeddingGemma 2 · build 42
Public AMIRA vectors. Read manifest.json before indexing; embedding spaces are model-specific.
v2.50.0
Upgrading: install this release, then Regenerate now: the project galleries and the featured collections' new source arrive with the next snapshot. The installation profile changed, so semantic inputs and word clouds built against the earlier profile no longer match it. Until a new build is installed, the Semantic Map and Similar Items stay hidden and the word clouds use the module's own tokeniser. The nightly Build semantic embeddings run rebuilds after the deploy (or run it by hand with scope all); the word clouds need Actions → Build word clouds, its pull request merged and a release.
Added
- A research project's images on its page. The Visualisations block of a project item shows, under the project dashboard, a Photo Browsing gallery (Grid, Map, Timeline) of every image-bearing record of the project, whichever of its collections holds it (
photo-galleries/project-<item id>.json). A project with images but no dashboard shows the gallery alone. - The Photo Browsing block can show a research project, picked by title, as well as a featured collection or an item set.
Changed
- Featured collections name their research project, not its item set. The profile pins Museu Afro-Digital and "Beyond the Digital Return" by the project item's
dre:id(projects,projectKey), not by item-set ids 6295 and 6262. A project's records are the items that name it indcterms:isPartOftogether with those of its collection sets, so the Museu Afro-Digital galleries and the DECCA and Jambo counts no longer come out empty if a set is made private. On the live data both ways give the same records (110 and 298), and the generated galleries are unchanged. ILAM, which belongs to no project, keeps its item set. - The item-set gallery of a set that a sub-collection used to split (Museu Afro-Digital's) no longer carries each photo's identifier: only the featured galleries need it.
AMIRA semantic map inputs · build 41
Scoped semantic-map inputs for the DRE Visualizations module, which downloads the newest build made for its current publication revision.
AMIRA semantic map inputs · build 40
Scoped semantic-map inputs for the DRE Visualizations module, which downloads the newest build made for its current publication revision.
AMIRA semantic map inputs · build 39
Scoped semantic-map inputs for the DRE Visualizations module, which downloads the newest build made for its current publication revision.
AMIRA semantic map inputs · build 38
Scoped semantic-map inputs for the DRE Visualizations module, which downloads the newest build made for its current publication revision.
AMIRA semantic map inputs · build 37
Scoped semantic-map inputs for the DRE Visualizations module, which downloads the newest build made for its current publication revision.