Repository navigation
v0.2.0
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
reindexno longer drops Browsertrix crawls. A wrong source check meant everyindice reindexsilently skipped Browsertrix-imported crawls, leaving them out of the rebuilt index. Re-runindice reindexto 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