Effort: deep
Hypothes.is offers a battle-tested W3C-Web-Annotation overlay any
researcher already uses — installing the browser extension makes
every URL annotatable, and the Hypothes.is API exposes
group-scoped public annotations as JSON. SciDEX wiki pages and
hypothesis pages are stable URLs (~17K + ~310 today, headed to
100K + 10K) that researchers will increasingly want to mark up
with cross-references, corrections, and "interesting!" pins.
Surface those annotations in-page so the social trace is visible
to non-extension users, and feed annotation density back into the
quality-gate pipeline.
migrations/<date>_hypothesis_annotations.sql:CREATE TABLE hypothesis_is_annotations (
id TEXT PRIMARY KEY,
target_url TEXT NOT NULL,
scidex_artifact_id TEXT REFERENCES artifacts(id),
author_account TEXT,
author_display TEXT,
text TEXT,
quote TEXT,
tags JSONB,
group_id TEXT,
created_at TIMESTAMP,
updated_at TIMESTAMP,
first_seen_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX ix_hypothesis_is_annotations_artifact ON
hypothesis_is_annotations(scidex_artifact_id);scidex/atlas/hypothesis_is_poller.py:https://api.hypothes.is/api/search?uri.parts=
scidex.ai&order=desc&sort=updated&limit=200 every 15 min,updated) so re-poll fetches only deltas.
hypothesis_is_annotation_count toquality_dashboard.py's rollup — high public-annotationerror or wrong annotations downgradehttps://via.hypothes.is/<page-url> so users withoutai.scidex.annotation.claim AT Protocolatproto/lexicons/)tests/test_hypothesis_is_poller.py: stubbedscidex_artifact_id NULL.
q-perf-deferred-work-queue — runs AT Proto push as a job.atproto/lexicons/ai.scidex.annotation.claim.json — mirrorq-integ-bluesky-publish-pipeline — annotations are anmigrations/20260427_hypothesis_is_annotations.sql — hypothesis_is_annotationsscidex/atlas/hypothesis_is_poller.py — pollsapi.hypothes.is/api/search?uri.parts=scidex.ai, uses system_settings cursor for deltaON CONFLICT DO UPDATE, resolves /wiki/ /hypothesis/ /artifact/ai.scidex.annotation.claim via env-configured PDS credentials (no-op if absent).
_build_hyp_is_overlay_html() function in api.py; wired intowiki_page(), hypothesis_detail(), and artifact_detail() — renders "Public annotations (N)"<details> expander with quote/text/author/date/tag badges. Includes "Annotate on Hypothes.is"scidex/senate/quality_dashboard.py — added hypothesis_is_annotation_count,hypothesis_is_annotated_pages, hypothesis_is_negative_count, hypothesis_is_new_7dheadline and new community_annotations section; graceful fallback if table not yet migrated.
tests/test_hypothesis_is_poller.py — 22 tests covering URL resolver, AT Proto