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.
gap_quality_score values between 0 and 1gap_quality_score, prioritizing high priority_score and importance_score.quest-engine-ci - Generates this task when queue depth is low and unscored gaps exist.gap_quality_score IS NULL before this run; 1,085 open gaps already have in-range scores.python3 score_30_gaps.py --limit 30 --task-id 2f2a61c5-6996-4244-8705-35d1b84416c9 to score 30 open gaps; all 30 rows updated with composite + component scores.remaining_unscored=2008, scored_in_range=1145, low_quality_under_review=25.gap_quality_score IS NULL after this run; 1,115 open gaps already have in-range scores.python3 score_30_gaps.py --limit 30 to score 30 open gaps; all 30 rows updated with composite + component scores.remaining_unscored=2038, scored_in_range=1115, low_quality_under_review=25.gap_quality_score IS NULL; 985 open gaps already have in-range scores.python3 -m py_compile score_30_gaps.py; python3 score_30_gaps.py --limit 1 --dry-run --task-id ad73537f-7d01-4ed4-99d0-acef69b7c7f1; PostgreSQL check over rows scored between 2026-04-28 01:18:00-07 and 2026-04-28 01:24:00-07 returned n=100, components_populated=100, rubric_match=100, remaining_unscored=2068.--task-id/ORCHESTRA_TASK_ID instead of emitting an obsolete hardcoded task ID.gap_quality_score IS NULL before this run.python3 score_30_gaps.py --limit 100.remaining_unscored=2168, scored_in_range=985.gap_quality_score IS NULL before this run.python3 score_30_gaps.py --limit 100.remaining_unscored=2308, scored_in_range=845.gap_quality_score IS NULL.specificity, actionability, evidence each capped at 0.33), and mark gaps below 0.3 as quality_status='under_review' for closure/revision triage.python3 score_30_gaps.py --limit 100.specificity_score0.33 + actionability0.33 + evidence_coverage*0.33.quality_status='under_review' (gap-test-20260425-224949, gap-debate-20260426-011448-7c85f5dc).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.get_db() helper uses broken SQLite shimcompute_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_PG_DSNimport psycopg + _PG_DSN = "dbname=scidex user=scidex_app password=scidex_local_dev host=localhost" with from scidex.core.db_connect import get_connection_pg_connect() to call get_connection() which uses SCIDEX_PG_DSN environment variable with safe default