Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 22:13
· 220 commits to main since this release
ca473fb

Highlights

Page annotations

Attach notes to a specific capture — a whole page, or a passage you select in the replayed page. Notes are freeform Markdown, public to read, and only signed-in users can write them (edit/delete your own only).

  • A Notes panel beside the replay; passage notes highlight in place in the archived page, without modifying it — the anchor is a W3C Web Annotation TextQuoteSelector, re-located on each visit.
  • A per-collection annotations index at /collection/{id}/annotations, linked from the collection page.
  • Notes are full-text searchable, appearing as their own "Note by …" results.
  • Stored as one JSON-LD line per note in collections/<slug>/annotations.jsonl — diff-friendly and committable alongside the finding aid.

Documented at indice.page/docs/guides/annotations.

A website and a manual

indice.page now has a landing page and a full documentation manual — install, quickstart, guides for searching, importing from Browsertrix and Archive-It, managing, deploying and scaling, plus CLI/API/configuration reference.

Replay engine updated

Vendored ReplayWeb.page 2.4.6 → 2.5.3 (wabac.js 2.26.4 → 2.27.2).

Fixes

  • reindex no longer drops Browsertrix crawls. A wrong source check meant every indice reindex silently skipped Browsertrix-imported crawls, leaving them out of the rebuilt index. Re-run indice reindex to restore them.
  • Deleting a collection now removes its annotations from the search index instead of leaving them searchable.
  • Creating an annotation validates the collection exists (404) and requires a URL and timestamp, rather than creating an orphan.
  • The replay Notes panel no longer leaves an empty column when there's no collection context, and a stale highlight no longer persists across page navigation.

Internals

Large files were split into focused modules for legibility — index.rs (4,028 lines), server.rs (3,967), search.rs (2,947) and views.rs (1,593) are now directory modules, and no file carries more than ~650 lines of non-test code. The ingest pipeline gained a WaczAccess handle that cut index_one from ~300 lines to ~50 and removed the remote-vs-local duplication. All of it verified as behaviour-preserving.

Security hardening: collection ids are now a validated CollectionId newtype, so building a filesystem path from an unvalidated id is a compile error, and the property is exhaustively tested. The annotation sanitizer is pinned against 15 XSS bypass techniques plus an end-to-end test. CI runs with least-privilege token permissions, and CodeQL moved to advanced setup so vendored bundles aren't scanned as if they were ours.

Upgrading

The search schema gained a field, so run indice reindex once after upgrading — serve will refuse to start until you do, and tell you so.

Full changelog: v0.1.0...v0.2.0

What's Changed

  • Homebrew tap tooling + RELEASING guide (deploy .8) by @edsu in #106
  • Landing site (Astro → GitHub Pages) — user-manual 8qtx phase 1 by @edsu in #107
  • Docs manual (Starlight) + slim README by @edsu in #108
  • site: serve at indice.inkdroid.org and add Plausible analytics by @edsu in #112
  • site: serve at indice.page by @edsu in #113
  • Page annotations: storage + endpoints + UI (gnqf.2 + gnqf.3) by @edsu in #111
  • site/docs: document annotations; surface imports + annotations on the landing page by @edsu in #114
  • Fix: reindex no longer skips Browsertrix sources (nk69) by @edsu in #115
  • Bump the cargo-minor group with 4 updates by @dependabot[bot] in #110
  • Bump the actions group with 6 updates by @dependabot[bot] in #109
  • Annotations: warn at authoring that notes are public (yrxe) by @edsu in #116
  • Split index.rs into a legible index/ module (qrd1) by @edsu in #117
  • Ingest: WaczAccess handle + a short index_one pipeline (wti6) by @edsu in #118
  • Split server/views/search into modules; free the accession-desk JS; validated CollectionId by @edsu in #119
  • ci: least-privilege GITHUB_TOKEN permissions for the CI workflow by @edsu in #120
  • codeql: switch to advanced setup to exclude vendored ReplayWeb.page bundles by @edsu in #122
  • Upgrade vendored ReplayWeb.page 2.4.6 → 2.5.3 by @edsu in #121
  • test: pin the annotation XSS invariant end-to-end by @edsu in #123

Full Changelog: v0.1.0...v0.2.0