[Atlas] Assign trust scores to 50 knowledge edges missing trust_score done analysis:7 reasoning:6

← Gap Factory
700446 knowledge_edges have NULL or zero trust_score, limiting Atlas confidence ranking. ## Acceptance criteria - 50 high-traffic or recent KG edges receive trust_score values between 0 and 1 - Scores consider evidence_strength, source type, provenance, and epistemic_status - Remaining KG edges missing trust_score is <= 700396 ## Approach 1. Select edges linked to active hypotheses, analyses, or high-degree entities first. 2. Score trust using existing evidence_sources and provenance fields. 3. Persist trust_score/trust_computation_factors and verify before/after counts. Generated by the quest-engine low-queue cycle after live DB gap verification. Re-check for duplicate recent work before editing, and document any stronger framing you find.

Git Commits (4)

[Atlas] Assign trust scores to KG edges [task:720161b0-f95a-4d08-89e3-94264ee4471c]2026-04-26
[Atlas] Assign trust scores to KG edges [task:720161b0-f95a-4d08-89e3-94264ee4471c]2026-04-26
[Atlas] Assign trust scores to KG edges [task:720161b0-f95a-4d08-89e3-94264ee4471c]2026-04-26
[Atlas] Assign trust scores to KG edges [task:720161b0-f95a-4d08-89e3-94264ee4471c]2026-04-26
Spec File

Goal

Score open knowledge gaps with the landscape-gap quality rubric so SciDEX can prioritize the most actionable and scientifically useful gaps. Component scores should reflect specificity, evidence coverage, hypothesis density, debate depth, and actionability.

Acceptance Criteria

☑ The selected open gaps have gap_quality_score values between 0 and 1
☑ Component scores are populated where the schema supports them
☑ Scores are based on surrounding evidence and artifact coverage, not placeholders
☑ The before/after unscored-gap count is recorded

Approach

  • Query open gaps without gap_quality_score, prioritizing high priority_score and importance_score.
  • Inspect adjacent hypotheses, debates, papers, KG edges, and datasets.
  • Apply the landscape-gap rubric and persist the composite plus component scores.
  • Verify score ranges and count reduction.
  • Dependencies

    • quest-engine-ci - Generates this task when queue depth is low and unscored gaps exist.

    Dependents

    • Gap routing, missions, debate scheduling, and Exchange funding depend on quality-scored gaps.

    Work Log

    2026-04-27 04:56 UTC — Slot 54 (codex)

    • Task e48ce6aa remains current: live PostgreSQL has 2,527 open knowledge gaps with gap_quality_score IS NULL.
    • Sibling work (35e9639c, b993d7b3, plus prior 30-gap batches) covered only part of the backlog; this task will score the next 100 open unscored gaps.
    • Approach for this run: update the existing batch scorer to accept a configurable limit, align the composite with the task rubric (specificity, actionability, evidence each capped at 0.33), and mark gaps below 0.3 as quality_status='under_review' for closure/revision triage.
    • Applied scoring to 100 open unscored gaps with python3 score_30_gaps.py --limit 100.
    • Before: 2,527 open gaps unscored, 585 open gaps scored.
    • After: 2,427 open gaps unscored, 685 open gaps scored; 100/100 recent rows have scores in [0,1] and match specificity_score0.33 + actionability0.33 + evidence_coverage*0.33.
    • Low-quality triage: 2 gaps from this run scored below 0.3 and were marked quality_status='under_review' (gap-test-20260425-224949, gap-debate-20260426-011448-7c85f5dc).
    • Verification: python3 -m py_compile score_30_gaps.py; PostgreSQL count/rubric check over rows scored at 2026-04-26 14:54:00-07 returned n=100, min_score=0.066, max_score=0.924, rubric_match=100.

    2026-04-21 14:27 UTC — Slot 0 (minimax:73)

    • Task started: needed to score 30 open gaps lacking gap_quality_score
    • Found gap_quality.py scoring module exists at scidex/agora/gap_quality.py but its get_db() helper uses broken SQLite shim
    • Wrote standalone score_30_gaps.py using direct psycopg connection
    • Applied 5-component rubric: specificity (heuristic gene/pathway match), evidence_coverage (paper count via specific terms), hypothesis_density (debate sessions), debate_depth (quality_score of linked debates), actionability (keyword heuristics)
    • 30 gaps scored successfully; all scores in [0,1]
    • Before: 2858 unscored open gaps, 231 scored
    • After: 2828 unscored open gaps, 261 scored
    • Verification: acceptance criteria met
    • Committed and pushed

    2026-04-22 16:45 UTC — Slot (minimax:73)

    • Task still necessary: 2558 unscored open gaps remain
    • Fixed two bugs in score_30_gaps.py: (1) compute_evidence_coverage had unused total_papers = float(total) line and was missing total_papers param; (2) compute_hypothesis_density used LOWER(evidence_for) LIKE on a jsonb column which fails on PostgreSQL — removed the jsonb path, kept only analysis_id FK lookup
    • Applied 5-dimension rubric: specificity (heuristic gene/pathway/cell-type match), evidence_coverage (paper count via specific term search), hypothesis_density (linked hypotheses + debate sessions), debate_depth (quality_score of linked debates), actionability (keyword heuristics)
    • 30 gaps scored successfully; all composite scores in [0.205, 0.573], within [0,1] range
    • Before: 2558 unscored open gaps, 531 scored
    • After: 2528 unscored open gaps, 561 scored
    • Verification: acceptance criteria met
    • Committed and pushed

    2026-04-21 21:36 UTC — Slot 73 (minimax:73)

    • Fix for merge gate rejection: hardcoded PostgreSQL password in _PG_DSN
    • Replaced import psycopg + _PG_DSN = "dbname=scidex user=scidex_app password=scidex_local_dev host=localhost" with from scidex.core.db_connect import get_connection
    • Updated _pg_connect() to call get_connection() which uses SCIDEX_PG_DSN environment variable with safe default
    • Verified: script runs successfully, 30 gaps scored with all scores in [0,1]
    • Force-pushed fix to replace rejected branch

    Payload JSON
    {
      "requirements": {
        "analysis": 7,
        "reasoning": 6
      }
    }

    Sibling Tasks in Quest (Gap Factory) ↗