[Exchange] Usage-based quality signals (citations, embeds, links) done

← Artifact Debates
Compute usage metrics per artifact and blend into quality propagation (60/20/20 upstream/current/usage)

Completion Notes

Auto-release: work already on origin/main

Git Commits (15)

[Exchange] Add usage-based quality signals to propagate_quality [task:agr-ad-03-USAGE]2026-04-25
Squash merge: orchestra/task/agr-ad-0-artifact-quality-profile-dashboard (2 commits)2026-04-25
[Verify] auto-trigger debates implementation verified [task:agr-ad-06-TRIG]2026-04-25
[Agora] Work log: auto-trigger debates implementation complete [task:agr-ad-06-TRIG]2026-04-25
[Agora] Auto-trigger debates for low-quality or conflicting artifacts2026-04-25
Squash merge: orchestra/task/agr-ad-0-artifact-evidence-accumulation-system (1 commits)2026-04-25
[Docs] Work log: merge gate placeholder fix [task:agr-ad-04-VDEB]2026-04-18
[Agora] Fix debate_sessions INSERT: 12 columns, 12 placeholders [task:agr-ad-04-VDEB]2026-04-18
[Agora] Version-aware debates — target version population + reduced-weight propagation2026-04-18
[Agora] Sync slot file for agr-ad-01-TARG [task:agr-ad-01-TARG]2026-04-15
[Agora] Sync slot file for agr-ad-01-TARG [task:agr-ad-01-TARG]2026-04-15
[Agora] Update spec work log for generalized debate targeting [task:agr-ad-01-TARG]2026-04-15
Squash merge: orchestra/task/agr-ad-0-generalize-debate-targeting-to-any-artif (1 commits)2026-04-15
[Senate] Holistic prioritization run 2: quest fixes + 3 new CI tasks [task:b4c60959-0fe9-4cba-8893-c88013e85104]2026-04-06
[Senate] Holistic prioritization: 6 tasks created for uncovered P88-P95 quests [task:b4c60959-0fe9-4cba-8893-c88013e85104]2026-04-06
Spec File

Goal

Implement usage-based quality signals that track how artifacts are used by other artifacts
and feed this back into quality scores. Highly-cited, frequently-embedded, widely-linked
artifacts are likely more valuable — this creates a virtuous cycle where good artifacts
rise and poor ones fade.

Acceptance Criteria

☐ Usage metrics computed per artifact:
- citation_count: number of incoming cites links
- embed_count: number of incoming embeds links
- derivation_count: number of incoming derives_from links
- support_count: number of incoming supports links
- contradiction_count: number of incoming contradicts links
- total_usage: weighted sum of all usage types
compute_usage_score(artifact_id) function
☐ Usage score blended into propagate_quality():
- Current: 70% upstream + 30% current
- New: 60% upstream + 20% current + 20% usage
☐ Usage recalculated periodically (not on every query — cached)
☐ Usage metrics stored in artifact metadata or separate usage_cache table
☐ High-usage artifacts surfaced in search results and recommendations

Dependencies

  • agr-ad-02-EVAC — Evidence profile provides the accumulation framework

Dependents

  • agr-ad-05-PROF — Profile dashboard shows usage metrics

Work Log

2026-04-25 23:20 PT — Slot minimax:74

  • Task: Implement usage-based quality signals
  • Status: Completed
Implementation Details

  • compute_usage_score(artifact_id) — added to scidex/atlas/artifact_registry.py:
  • - Computes usage metrics from incoming links (cites, embeds, derives_from, supports)
    - Gets contradiction count from artifact_debates table (score decrease > 0.05)
    - Uses USAGE_WEIGHTS for weighted sum: cites=1.0, embeds=1.5, derives_from=2.0, supports=1.5, contradicts=1.0
    - Returns all metrics plus total_usage score

  • propagate_quality() enhancement — updated to use 60/20/20 blend:
  • - 60% upstream quality (from weighted average of upstream artifacts)
    - 20% current artifact's own quality score
    - 20% usage score (normalized via min(1.0, total_usage / 20.0))
    - Removed evidence_certainty-based blend modulation

  • Usage caching — new functions in artifact_registry.py:
  • - cache_usage_score(artifact_id): Compute and cache usage in usage_cache table
    - get_cached_usage_score(artifact_id): Get from cache or compute on miss
    - get_high_usage_artifacts(limit, min_usage): Query top artifacts by usage

  • usage_cache table — migration 127:
  • - Stores: artifact_id, citation_count, embed_count, derivation_count, support_count, contradiction_count, total_usage, updated_at
    - Indexes on total_usage and citation_count for fast lookups

  • API endpoints — new routes in api.py:
  • - GET /api/artifacts/{id}/usage: Get usage metrics for a single artifact
    - GET /api/artifacts/high-usage?limit=20&min_usage=0.0: List high-usage artifacts

    Files Changed
    • scidex/atlas/artifact_registry.py — added compute_usage_score(), cache_usage_score(), get_cached_usage_score(), get_high_usage_artifacts(); modified propagate_quality()
    • api.py — added /api/artifacts/{id}/usage and /api/artifacts/high-usage routes
    • migrations/127_usage_cache_table.py — created usage_cache table
    Acceptance Criteria Status
    ☑ Usage metrics computed per artifact (citation_count, embed_count, derivation_count, support_count, contradiction_count, total_usage)
    compute_usage_score(artifact_id) function
    ☑ Usage score blended into propagate_quality(): 60% upstream + 20% current + 20% usage
    ☑ Usage recalculated periodically (cached via usage_cache table)
    ☑ Usage metrics stored in separate usage_cache table
    ☑ High-usage artifacts accessible via /api/artifacts/high-usage endpoint

    Payload JSON
    {
      "completion_shas": [
        "8489ef525b222f77a76a0f5267b1b890c2d1f718"
      ],
      "completion_shas_checked_at": ""
    }

    Sibling Tasks in Quest (Artifact Debates) ↗