A ranked open question is only useful if a researcher landing on it can see
what evidence currently bears on it — which hypotheses propose answers,
which papers provide partial evidence, which experiments would discriminate
between candidate answers. Right now open_question artifacts have no
incoming/outgoing typed edges to the rest of the knowledge graph. Build a
matcher that populates artifact_links and knowledge_edges for every
open question so the detail page (api.py:_render_open_question_detail,
line ~26912) can render an evidence panel.
scidex/agora/open_question_evidence_matcher.py (≤700 LoC).open_question artifact with metadata.evidence_summary:scidex.atlas.vector_search (existing pgvector util onartifact_embeddings).{relates_to, supports_answer_a, supports_answer_b, refutes} withpaper_embeddings exists) → top 20;artifact_type IN
('experiment','experiment_proposal')) → top 10.
artifact_links(source_artifact_id=<question>, target_artifact_id=<other>,
link_type IN ('bears_on_question','partial_answer_for','candidate_answer','discriminating_experiment'),
metadata={confidence, judge_persona, model}).(source, target, link_type).
GET /api/open_question/{id}/evidence returns a tree:{question, candidate_answers:[{hypothesis, support_score, papers:[]}],
partial_evidence:[], discriminating_experiments:[]}.
_render_open_question_detail to include an "Evidence bearingopen_question artifacts, target ≥3 evidencedata/scidex-artifacts/reports/openq_evidence_xref_<utc>.jsonscidex/atlas/vector_search.py for the existing pgvector helpersartifact_embeddings / paper_embeddings table shapes.
DOMAIN_JUDGES persona selection fromscidex/agora/open_question_tournament.py for the LLM filter step.
evidence_xref_atb2d85e76-51f3 — open_question schemaq-openq-mine-from-wiki-pages and siblings — populate the corpusscidex/atlas/vector_search.py — must have artifact_embeddings populated.orchestra-slot.json conflict (ours), dropped "restore files" commit as upstream..orchestra-slot.jsonceda8384f to origin.
Staleness review: task is valid — no existing cross-reference matcher, no
evidence links in artifact_links for these types, 7838 open questions awaiting
processing.
Infrastructure gap: pgvector extension not installed and artifact_embeddings/
paper_embeddings tables don't exist. Used sentence-transformers
(all-MiniLM-L6-v2, already available) with in-memory numpy cosine similarity
as the kNN backend — equivalent functionality, no new dependencies.
What was built:
migrations/add_open_question_link_types.py — adds four new link types tochk_link_type CHECK constraint on artifact_links:bears_on_question, candidate_answer, partial_answer_for,discriminating_experiment. Also creates a partial unique indexidx_artifact_links_evidence_dedup) for idempotent inserts.scidex/agora/open_question_evidence_matcher.py (≤700 LoC):load_corpus() — loads hypothesis + experiment artifacts from DB into memorybuild_embeddings() — encodes corpus with sentence-transformer (cached)knn() — cosine similarity ranking with similarity floorjudge_candidates() — single LLM call per question batching all candidates;emit_links() — idempotent INSERT via ON CONFLICT DO NOTHING on therun_batch() — incremental refresh respecting 14-day staleness window andget_evidence_for_question() — retrieves evidence panel from DBgenerate_report() — writes JSON report to data/scidex-artifacts/reports/api.py changes:GET /api/open_question/{id}/evidence endpoint (line ~80549)_render_open_question_detail to accept evidence_rows parameterartifact_detail to query and pass evidence_rowstests/test_open_question_evidence_matcher.py — 23 passing tests coveringdata/scidex-artifacts/reports/openq_evidence_xref_20260427T113408Z.json