gabriel / musehub public
feat BREAKING intel dev
AI Agent gabriel · 138 days ago · May 3, 2026 · Diff

feat(intel): Phase 1 — SQL-derived DeadProvider + dismissed column

- Rewrites DeadProvider to query musehub_symbol_intel (blast/churn columns) instead of spawning a muse CLI subprocess - Confidence tiers: HIGH (churn=1), MEDIUM (churn>1 + churn_30d=0), LOW (churn_30d>0) - tracked_kinds: function, async_function, method, async_method, class - Upsert preserves dismissed=True across re-runs via COALESCE - Adds dismissed BOOLEAN column to MusehubIntelDead model - Migration 0007_dead_dismissed.py adds the column with server_default='false' - TDD spec: 18 tests across 8 layers, all green

sha256:2417d39312af3356c568fb2c6ed8911895f44b4f69cf272477b2d76408f065bb sha
+55 ~3 symbols
sha256:dcd8bd033c1d9081d34947016d2b478bc6abf45476f70f2eb238dbc02b9f6530 snapshot
+55
symbols added
~3
symbols modified
0
dead code introduced
Semantic Changes 58 symbols
+ branch_labels variable variable branch_labels L19–19
+ depends_on variable variable depends_on L20–20
+ down_revision variable variable down_revision L18–18
+ downgrade function function downgrade L30–31
+ Sequence import import Sequence L12–12
+ Union import import Union L12–12
+ annotations import import annotations L10–10
+ op import import op L15–15
+ sa import import sa L14–14
+ revision variable variable revision L17–17
+ upgrade function function upgrade L23–27
~ tests/test_phase1_dead_provider.py .py 42 symbols added
+ TestDeadProviderConfidence class class TestDeadProviderConfidence L167–212
+ test_P1_05_blast0_churn1_yields_high method async_method test_P1_05_blast0_churn1_yields_high L170–182
+ test_P1_06_blast0_churn_gt1_churn30d0_yields_medium method async_method test_P1_06_blast0_churn_gt1_churn30d0_yields_medium L185–197
+ test_P1_07_blast0_churn30d_gt0_yields_low method async_method test_P1_07_blast0_churn30d_gt0_yields_low L200–212
+ TestDeadProviderDismiss class class TestDeadProviderDismiss L307–344
+ test_P1_11_new_rows_start_not_dismissed method async_method test_P1_11_new_rows_start_not_dismissed L310–322
+ test_P1_11b_existing_dismissed_preserved_on_rerun method async_method test_P1_11b_existing_dismissed_preserved_on_rerun L325–344
+ TestDeadProviderDispatch class class TestDeadProviderDispatch L152–160
+ test_P1_03_job_types_for_push_code_includes_dead method method test_P1_03_job_types_for_push_code_includes_dead L154–156
+ test_P1_04_job_types_for_push_midi_excludes_dead method method test_P1_04_job_types_for_push_midi_excludes_dead L158–160
+ TestDeadProviderEdgeCases class class TestDeadProviderEdgeCases L351–396
+ test_P1_12_empty_repo_returns_empty_list method async_method test_P1_12_empty_repo_returns_empty_list L354–359
+ test_P1_13_idempotent_run_twice_one_row method async_method test_P1_13_idempotent_run_twice_one_row L362–380
+ test_P1_14_return_type method async_method test_P1_14_return_type L383–396
+ TestDeadProviderExclusion class class TestDeadProviderExclusion L219–248
+ test_P1_08_blast_gt0_excluded method async_method test_P1_08_blast_gt0_excluded L222–233
+ test_P1_09_untracked_kind_excluded method async_method test_P1_09_untracked_kind_excluded L236–248
+ TestDeadProviderNoSubprocess class class TestDeadProviderNoSubprocess L403–417
+ test_P1_15_no_subprocess_spawned method async_method test_P1_15_no_subprocess_spawned L406–417
+ TestDeadProviderReasons class class TestDeadProviderReasons L255–300
+ test_P1_10_high_reason_string method async_method test_P1_10_high_reason_string L258–270
+ test_P1_10b_medium_reason_string method async_method test_P1_10b_medium_reason_string L273–285
+ test_P1_10c_low_reason_string method async_method test_P1_10c_low_reason_string L288–300
+ TestDeadProviderRegistry class class TestDeadProviderRegistry L136–145
+ test_P1_01_dead_in_provider_registry method method test_P1_01_dead_in_provider_registry L138–140
+ test_P1_02_dead_satisfies_intel_provider_protocol method method test_P1_02_dead_satisfies_intel_provider_protocol L142–145
+ _TRACKED_KINDS variable variable _TRACKED_KINDS L60–60
+ _get_dead function async_function _get_dead L114–123
+ _run_provider function async_function _run_provider L126–129
+ _seed_symbol function async_function _seed_symbol L67–111
+ _uid function function _uid L56–57
+ AsyncSession import import AsyncSession L49–49
+ annotations import import annotations L40–40
+ create_repo import import create_repo L53–53
+ db import import db L52–52
+ fake_id import import fake_id L51–51
+ patch import import patch L43–43
+ pg_insert import import pg_insert L48–48
+ pytest import import pytest L45–45
+ pytest_asyncio import import pytest_asyncio L46–46
+ secrets import import secrets L42–42
+ select import import select L47–47
~ musehub/services/musehub_intel_providers.py .py 2 symbols added, 2 symbols modified
+ _DEAD_REASONS variable variable _DEAD_REASONS L555–559
+ _DEAD_TRACKED_KINDS variable variable _DEAD_TRACKED_KINDS L551–553
← Older Oldest on dev
All commits
Newer → Latest on dev

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:2417d39312af3356c568fb2c6ed8911895f44b4f69cf272477b2d76408f065bb --body "your comment"