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

feat(entangle): Phase 4+5 — dashboard card + 54-case test suite

Phase 4 — Intel Dashboard card - Add entangle card (5th) to intel_dashboard.html; shows pair count + preview - Update .intel-cards grid to repeat(5,1fr) with new 1200/720/540px breakpoints - Wire entangle_count + entangle_preview context vars in intel_dashboard_page() - Rebuild app.css

Phase 5 — EntangleProvider test suite (ET_01–ET_54) - 8 tiers: Unit, Integration, E2E, Stress, State, Integrity, Performance, Security - Covers: Jaccard-min rate formula, import/bare-path filter, canonical pair key, same-file exclusion, mass-commit exclusion, MAX_PAIRS cap, idempotency, stale-row purge, repo isolation, injection strings

sha256:871e55a2357656feccfe5c6ae5412ee711e3b311ec32dac44cb9fbd18a07fa8a sha
+86 ~1 symbols
sha256:3f60876ea19f19afad2f2762ce9fb01a6901e06b8747b495164fc184c1be55cb snapshot
+86
symbols added
~1
symbol modified
0
dead code introduced
Semantic Changes 87 symbols
~ tests/test_entangle_provider.py .py 86 symbols added
+ TestEntangleE2E class class TestEntangleE2E L393–533
+ test_ET_19_three_symbol_pair_ranking method async_method test_ET_19_three_symbol_pair_ranking L396–419
+ test_ET_20_a_in_test_flag_set_for_test_files method async_method test_ET_20_a_in_test_flag_set_for_test_files L422–440
+ test_ET_21_result_metadata_keys method async_method test_ET_21_result_metadata_keys L443–461
+ test_ET_22_ref_stored_on_pair_row method async_method test_ET_22_ref_stored_on_pair_row L464–479
+ test_ET_23_multiple_disconnected_pairs method async_method test_ET_23_multiple_disconnected_pairs L482–499
+ test_ET_24_structurally_linked_defaults_false method async_method test_ET_24_structurally_linked_defaults_false L502–516
+ test_ET_25_same_file_false_on_stored_pair method async_method test_ET_25_same_file_false_on_stored_pair L519–533
+ TestEntangleIntegration class class TestEntangleIntegration L202–386
+ test_ET_09_empty_repo_returns_empty method async_method test_ET_09_empty_repo_returns_empty L205–213
+ test_ET_10_no_history_entries_returns_empty method async_method test_ET_10_no_history_entries_returns_empty L216–225
+ test_ET_11_two_symbols_in_one_commit_no_pair method async_method test_ET_11_two_symbols_in_one_commit_no_pair L228–240
+ test_ET_12_two_co_changes_produces_one_pair method async_method test_ET_12_two_co_changes_produces_one_pair L243–261
+ test_ET_13_import_symbols_excluded method async_method test_ET_13_import_symbols_excluded L264–282
+ test_ET_14_bare_path_addresses_excluded method async_method test_ET_14_bare_path_addresses_excluded L285–302
+ test_ET_15_same_file_pair_excluded method async_method test_ET_15_same_file_pair_excluded L305–320
+ test_ET_16_pair_stored_canonical_a_lt_b method async_method test_ET_16_pair_stored_canonical_a_lt_b L323–339
+ test_ET_17_file_a_b_populated method async_method test_ET_17_file_a_b_populated L342–361
+ test_ET_18_commits_both_active_is_min method async_method test_ET_18_commits_both_active_is_min L364–386
+ TestEntangleIntegrity class class TestEntangleIntegrity L822–919
+ test_ET_37_address_with_only_import_produces_no_pair method async_method test_ET_37_address_with_only_import_produces_no_pair L825–841
+ test_ET_38_mixed_valid_and_import_symbols method async_method test_ET_38_mixed_valid_and_import_symbols L844–862
+ test_ET_39_unknown_ref_in_bfs_returns_empty method async_method test_ET_39_unknown_ref_in_bfs_returns_empty L865–871
+ test_ET_40_co_changes_count_exact method async_method test_ET_40_co_changes_count_exact L874–899
+ test_ET_41_rate_capped_at_one method async_method test_ET_41_rate_capped_at_one L902–919
+ TestEntanglePerformance class class TestEntanglePerformance L926–1015
+ test_ET_42_ten_commits_ten_symbols_under_500ms method async_method test_ET_42_ten_commits_ten_symbols_under_500ms L929–945
+ test_ET_43_100_commits_20_symbols_under_2s method async_method test_ET_43_100_commits_20_symbols_under_2s L948–964
+ test_ET_44_empty_repo_under_50ms method async_method test_ET_44_empty_repo_under_50ms L967–974
+ test_ET_45_rerun_same_speed_as_first method async_method test_ET_45_rerun_same_speed_as_first L977–996
+ test_ET_46_point_lookup_fast method async_method test_ET_46_point_lookup_fast L999–1015
+ TestEntangleSecurity class class TestEntangleSecurity L1022–1183
+ test_ET_47_sql_injection_in_address_stored_verbatim method async_method test_ET_47_sql_injection_in_address_stored_verbatim L1025–1043
+ test_ET_48_xss_payload_in_address_stored_safely method async_method test_ET_48_xss_payload_in_address_stored_safely L1046–1062
+ test_ET_49_repo_isolation_strict method async_method test_ET_49_repo_isolation_strict L1065–1081
+ test_ET_50_repo_isolation_no_cross_contamination method async_method test_ET_50_repo_isolation_no_cross_contamination L1084–1104
+ test_ET_51_delete_old_provider_run_on_rerun method async_method test_ET_51_delete_old_provider_run_on_rerun L1107–1125
+ test_ET_52_unicode_in_address_handled method async_method test_ET_52_unicode_in_address_handled L1128–1143
+ test_ET_53_long_address_does_not_exceed_column_width method async_method test_ET_53_long_address_does_not_exceed_column_width L1146–1166
+ test_ET_54_newline_in_address_stored_verbatim method async_method test_ET_54_newline_in_address_stored_verbatim L1169–1183
+ TestEntangleState class class TestEntangleState L658–815
+ test_ET_31_idempotent_rerun_same_rows method async_method test_ET_31_idempotent_rerun_same_rows L661–680
+ test_ET_32_stale_rows_purged_on_rerun method async_method test_ET_32_stale_rows_purged_on_rerun L683–712
+ test_ET_33_incremental_new_pair_appears method async_method test_ET_33_incremental_new_pair_appears L715–741
+ test_ET_34_no_duplicate_pairs method async_method test_ET_34_no_duplicate_pairs L744–761
+ test_ET_35_rate_updates_on_new_commits method async_method test_ET_35_rate_updates_on_new_commits L764–795
+ test_ET_36_truncated_flag_true_when_over_cap method async_method test_ET_36_truncated_flag_true_when_over_cap L798–815
+ TestEntangleStress class class TestEntangleStress L540–651
+ test_ET_26_max_pairs_cap_respected method async_method test_ET_26_max_pairs_cap_respected L543–561
+ test_ET_27_mass_commit_excluded method async_method test_ET_27_mass_commit_excluded L564–589
+ test_ET_28_500_symbols_completes method async_method test_ET_28_500_symbols_completes L592–607
+ test_ET_29_result_count_matches_stored_rows method async_method test_ET_29_result_count_matches_stored_rows L610–628
+ test_ET_30_bfs_walk_cap_limits_commits_analysed method async_method test_ET_30_bfs_walk_cap_limits_commits_analysed L631–651
+ TestEntangleUnit class class TestEntangleUnit L134–195
+ test_ET_01_jaccard_min_rate_perfect method method test_ET_01_jaccard_min_rate_perfect L137–146
+ test_ET_02_jaccard_min_rate_partial method method test_ET_02_jaccard_min_rate_partial L148–157
+ test_ET_03_jaccard_min_rate_low method method test_ET_03_jaccard_min_rate_low L159–168
+ test_ET_04_import_pseudo_symbol_excluded method method test_ET_04_import_pseudo_symbol_excluded L170–173
+ test_ET_05_bare_path_excluded method method test_ET_05_bare_path_excluded L175–178
+ test_ET_06_pair_key_canonical_ordering method method test_ET_06_pair_key_canonical_ordering L180–184
+ test_ET_07_same_file_pairs_excluded method method test_ET_07_same_file_pairs_excluded L186–190
+ test_ET_08_min_co_changes_threshold method method test_ET_08_min_co_changes_threshold L192–195
+ _OWNER variable variable _OWNER L49–49
+ _SLUG variable variable _SLUG L50–50
+ _cid function function _cid L45–46
+ _fetch_pairs function async_function _fetch_pairs L100–111
+ _run_provider function async_function _run_provider L94–97
+ _seed_commit function async_function _seed_commit L53–72
+ _seed_history function async_function _seed_history L75–91
+ _uid function function _uid L41–42
+ AsyncSession import import AsyncSession L29–29
+ EntangleProvider import import EntangleProvider L33–33
+ annotations import import annotations L18–18
+ combinations import import combinations L23–23
+ create_repo import import create_repo L34–34
+ db import import db L32–32
+ defaultdict import import defaultdict L22–22
+ fake_id import import fake_id L31–31
+ pg_insert import import pg_insert L28–28
+ pytest import import pytest L25–25
+ pytest_asyncio import import pytest_asyncio L26–26
+ sa import import sa L27–27
+ secrets import import secrets L20–20
+ time import import time L21–21
+ repo function async_function repo L119–120
+ two_repos function async_function two_repos L124–127
← 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:871e55a2357656feccfe5c6ae5412ee711e3b311ec32dac44cb9fbd18a07fa8a --body "your comment"