Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/nornir

.nornir/mimir-v2-inventory.md

Mímir v2 — lane 1 inventory (CLEAN FIRST, PLAN §7.1)

Branch mimir-v2, base nornir origin/main c18e6d1, 2026-10-13. Spec: workspace_nordisk/PLAN-MIMIR-V2-2026-10-12.md §7. One verdict per hit: DELETE (removed in lane 2, road letter given) · REPLACE-BY(lane N) (removed or left blind now, the v2 lane named feeds it again) · KEEP · ASK (owner decides; not deleted).

Rules applied: the SCIP row model + moniker/id helpers stay; non-parser producers stay as functions (only their trigger from the monitor populate goes); every lens SCORING / REPORT half stays with its unit tests, every lens READ / JOIN half (table reads, latest-snapshot dedupe, warehouse→Sources wrappers) goes; the Mimir.* gRPC / MCP / CLI surface keeps its wire types and answers an honest not-computed envelope ("Mímir v2: producer not wired yet — a missing producer, not an absence of findings").

0. Direct dependencies (nornir Cargo.toml)

dep direct use found verdict road reason
syn 2 (full, extra-traits, visit) 8 files: knowledge/symbols.rs (16 syn::), knowledge/delta.rs (2), vector/spans.rs (30), warehouse/access_scan.rs (12), coderoom.rs (20), mimir_calibrate.rs (21), doc mentions in warehouse/iceberg_schema.rs, viz/arch_tab.rs (label strings only) DELETE b every use is the syn knowledge road; cargo tree -i syn -e normal --depth 1 shows the rest of the graph only reaches syn through proc-macro crates (not ours)
quote 1 knowledge/symbols.rs, mimir_calibrate.rs (only beside syn) DELETE b only used to print syn nodes
proc-macro2 (span-locations) mimir_subclone.rs token lexer (walk_tokens) + syn spans KEEP — the subclone lens is a TOKEN winnower (a lexer, not a parser); plan §6 keeps subclone untouched; span-locations feeds its line numbers
petgraph 0.8 0 uses in src/ (only crates/nornir-introspect and edda's nornir-depgraph/nornir-graph use it) DELETE d a dead direct dep of the root crate
scip 0.10 (feature scip) protobuf decode in knowledge/scip.rs; coderoom.rs test scip_monikers_round_trip_through_the_scip_crate DELETE from [dependencies], move to [dev-dependencies] a decode = subprocess road; the round-trip test proves the moniker format (the id scheme) and stays
protobuf 3.7 (feature scip) knowledge/scip.rs::protobuf_parse DELETE a only the index.scip decode
ra_ap_ide, ra_ap_load-cargo, ra_ap_vfs, ra_ap_project_model, ra_ap_ide_db, ra_ap_paths, ra_ap_syntax =0.0.349 (feature ra-ingest) knowledge/ra_ingest.rs only DELETE c in-process RA road, replaced by the driver (lane 3)
feature scip gates the ingest + the resolved readers; server = [..,"scip"] DELETE a/c after a+c nothing produces scip_occurrences; a feature that gates only an orphan reader is an old road kept alive
feature ra-ingest gates ra_ingest DELETE c —
feature inotify gates knowledge/watch.rs loop DELETE b watch = targeted syn delta re-scan

1. Road a — rust-analyzer scip subprocess (knowledge/scip.rs, 2549 lines)

hit verdict reason
ingest_via_rust_analyzer, spawn_scip_child, await_child_within, GroupedChild/ReapableChild, StderrDigest/drain_stderr, retry/timeout consts, scip_failure_* DELETE (a) the spawn of rust-analyzer scip
use_in_process, subprocess_forced, SCIP_SUBPROCESS_ENV DELETE (a) road choice between two deleted roads
ingest_index_file, ingest_index, protobuf_parse, decode_roles, kind_label, scope_local_symbol DELETE (a) protobuf decode of an index.scip = output of the subprocess road
callers: monitor.rs resolve_member_scip + scip_fanout* + RA_MEMORY_BUDGET_BYTES + available_memory_bytes + scip_resolved_at_head + populate step 1b'; server_grpc.rs ~6052–6190 (knowledge scip RPC leg); bin/nornir.rs nornir scip verb (~7284–7400) DELETE (a) triggers of the road
ScipRow, ScipScan (edda nornir-warehouse-trait, re-exported) KEEP the SCIP row model = the id scheme
is_def_site_key, scan_is_def_site_keyed KEEP pure id helpers
global_symbol_table, scip_call_edges(_with), duplicate_global_definitions, is_callable_kind DELETE (c) hand join over scip_occurrences, a table with no producer after a+c; lane 4 (code_edges) replaces
query::load_latest_scip + load_preferred(_merged) resolved branch DELETE (c) — load_preferred* collapses onto load_latest "two views that can disagree" (v1 doc §3); the syn view it falls back to is itself orphaned after b → REPLACE-BY(lane 8)
warehouse/iceberg.rs scip_occurrences persist/read + Warehouse::load_latest_scip impl KEEP (table I/O) trait method lives in edda; old tables are dropped on first v2 boot (PLAN §7.5), not here
tests: query.rs / iceberg.rs fixtures that build a ScipScan through ingest_index DELETE with a (or rebuilt on ScipRow literals where the test is about the row model) —
tests/ra_ingest_smoke.rs, tests/ra_ingest_coverage_wiring.rs DELETE (c) tests of the deleted road

2. Road b — syn knowledge scan

hit verdict reason
knowledge/symbols.rs scan_repo, scan_repos_flattened, scan_selected_files, scan_file, scan_crate_entries, Walker, CallCollector, attr helpers, parse_files_parallel DELETE (b) the syn parser
symbols::{SymbolRow, CallEdgeRow, FeatureGateRow, TestDefRow, SymbolScan} re-exports KEEP (re-pointed at nornir_warehouse_trait) row types of tables many readers still use; REPLACE-BY(lane 4/8)
symbols::EdgeDerivation KEEP (moved, not a parser) call_edges column vocabulary used by iceberg.rs/iceberg_schema.rs
symbols::discover_files, DiscoveredFile, rel_path KEEP (moved, not a parser) file discovery (walkdir + Cargo.toml) used by twinscan
knowledge::scan_all, ScanResult DELETE (b) = syn scan + git_heat; git_heat stays callable on its own
knowledge/delta.rs (653) DELETE (b) file-level syn re-scan; the server never used it (v1 doc §3)
knowledge/watch.rs (390) + inotify feature + nornir watch verb + tests/inotify_watch_wiring.rs + .woodpecker.yml line + nornir-watch atom DELETE (b) inotify → delta re-scan
vector/spans.rs item_spans, leaf_spans, walk_item, impl_label, type_label, extent DELETE (b) the syn half
vector/spans.rs ItemSpan, enclosing, join KEEP pure span model; lane 3 driver fills it
vector/chunk.rs::chunk_rust (item-aware chunking via leaf_spans) DELETE (b) → chunk_file line-windows every file REPLACE-BY(lane 10): spans from the driver
mimir_subclone use of spans::item_spans (item attribution, pair_items) DELETE the syn call; spans become an input winnowing + scoring stays (plan §6 "untouched"); item attribution REPLACE-BY(lane 3)
warehouse/access_scan.rs scan_repo, scan_source, scan_one_crate, Walker (syn) DELETE (b) syn half
access_scan::{Access, AccessEdge, DYNAMIC_TABLE, accessor_table_access} KEEP row model + pure accessor→table rule used by warehouse_access.rs, arch/
coderoom.rs tarball ingest: scan_tarball, definition_extents, walk_extents, extent_of, impl_self_name, CrateFetcher::ingest_crate_version/fetch_and_ingest, ingest_batch_gatling (+ CLI/RPC ingest verbs) DELETE (b) syn tarball scan; PLAN §7.3b names it; its successor (universe ring per lockfile, lane 3/6) is the driver
coderoom.rs scip_moniker, scip_descriptor, escape_scip_name, scip_kind, ItemExtent, world_repo, fetcher (network/cache), persist_compat_edge, what_breaks*, snapshot_diff, db-dump ranking KEEP (untouched) id helpers + fetch + readers over the warehouse
mimir_calibrate.rs functions_in_file, callees_of, load_corpus, collect_rs (syn) + examples/calibrate_embedding_space.rs DELETE (b) syn corpus extraction; the calibration math (CosineDistribution, roc_auc, cohens_d, synth_type2/3, measure_populations, recorded calibrations, active()) is KEPT
deepscan.rs (2570, syn scan of the whole dep closure under repo deps) + nornir deepscan verb + populate step 5 DELETE (b) the universe ring comes from the driver (PLAN §2, lane 3/6)
release/doctor.rs::run_with_warehouse_semantic_blast NEW side (symbols::scan_repo of the dirty tree) DELETE the scan; the fn degrades through its existing "no delta derivable" path with an audit note naming Mímir v2 REPLACE-BY(lane 3): the driver dump of the working tree
bench_mimir.rs / bench_registry.rs arms that time symbols::scan_repo / discover_files-only scan / SymbolDelta DELETE (b) benches of a deleted road; lane 0's nornir.scip_ingest bench is reused by v2
viz/knowledge.rs live scan (scan_repos_flattened), viz/arch_tab.rs live scan_all, server_grpc.rs remote scan (~5930), bin/nornir.rs knowledge scan/arch generate/scan-backed verbs, release/pipeline.rs:525 scan_all DELETE the scan call (b); the surrounding pane / verb / RPC stays and says "producer not wired yet" or is removed when its only job was the scan consumers cut before producers (PLAN §7.2)
twinscan.rs KEEP only uses discover_files + mimir_subclone::detect

3. Road c — in-process rust-analyzer (knowledge/ra_ingest.rs, 611 lines)

hit verdict reason
ra_ingest.rs whole module, ra-ingest feature, 7 ra_ap_* deps DELETE (c) replaced by the driver (lane 3)
monitor.rs / server_grpc.rs / bin/nornir.rs ingest_in_process call sites DELETE (c) triggers
pure-string moniker helpers (is_def_site_key, coderoom scip_moniker family) KEEP id scheme

4. Road d — in-process graph

hit verdict reason
petgraph dep of the root crate DELETE (d) unused (0 sites)
src/graph/extract/binary.rs (extract_object, extract_graph, BinaryGraph::to_call_edge_rows, ObjectClass, BinaryEdge) + graph::extract::Provenance KEEP the binary extractor's OUTPUT (rows with provenance=binary, PLAN §7.3d); lane 9 re-keys them on monikers
BinaryGraph::to_workspace_graph → nornir_depgraph::WorkspaceGraph (release doctor blast radius, nornir graph binary) KEEP crate-level release-ordering graph from edda (nornir-depgraph), not the Mímir code graph; not nornir's petgraph
warehouse/dep_graph.rs (Cargo.toml → WorkspaceGraph, record_dep_graph) KEEP non-parser producer (manifest parse)
crates/nornir-introspect petgraph (callgraph_dwarf.rs) DELETE (d) — DECIDED 2026-10-13 a second DWARF call-graph producer + a second graph engine; replaced by mimir-binary (branch mimir-v2-binwire) + GraphBLAS. The no_second_parser guard covers EVERY crate of nornir's workspace (no petgraph anywhere in it)

5. Road e — chains, caches, monitor populate

hit verdict reason
src/lens_chain.rs (2303): LensChain, LensJob, LensParams, generation, fnv1a, chain_specs*, run_spec, run_job, fold*, answer*, read_or_fold_local, repopulate_inline, RepopulateReport, derived_tables*, source_census, machine_busy DELETE (e) the jera lens chain
src/feed_chain.rs (1186): FeedSpec, FEEDS, FeedJob, feed_generation, feed_specs, run_feed_job, produce_* glue DELETE (e) feed chain; producers it wraps stay (below)
warehouse/lens_cache.rs (1067): LENSES, lens_<name> ×13 tables (lens_change_risk, lens_generic_cost, lens_zombie_features, lens_weak_tests, lens_bench_gaps, lens_similar_code, lens_villa, lens_churn, lens_anomaly, lens_world_impact, lens_binary_drift, lens_semantic_clones, lens_subclone) + lens_runs, append_lens_fold, read_lens*, latest_run*, stamp_meta DELETE (e) result cache; "a query in ms needs no cache" (PLAN §4)
lens_cache::not_computed voice REPLACE-BY a v2 not-wired envelope in mimir_lens the Mimir surface must stay honest
warehouse/feed_cache.rs (373) + feed_runs table DELETE (e) feed ledger of the deleted chain
table schemas for lens_*/lens_runs/feed_runs in warehouse/iceberg_schema.rs / iceberg.rs DELETE (e) —
server_grpc.rs WorkspaceCtx.lens_chain, boot submit, spawn_server_poll_loop, generation watchers, Repopulate RPC DELETE (e); Mimir.* lens RPCs + Repopulate/Populate RPCs keep their wire types and answer not-wired —
mcp_stdio.rs lens_local_cached (14 tools) DELETE the fold; tools answer the not-wired envelope —
bin/nornir.rs repopulate verb (repopulate_inline), lens/feed verbs DELETE (e) / not-wired —
monitor.rs::republish_with steps 1–9, republish, sync_once, spawn_poll_loop, PhaseJobs, discover_test_surface, affected_set, build_member_graph, step helpers DELETE (e) replaced by the consumer loop (PLAN §3, lane 5)
monitor.rs::fetch_workspace(_with_progress), FetchReport, MemberOutcome, WorkspaceGate, workspace_last_synced, embed_workspace* (the nornir workspace embed verb) KEEP git clone/fetch of members + per-workspace gate; the consumer loop needs checkouts
mimir_lens/mod.rs warehouse wrappers (read_sources, read_raw, read_feeds, read_sources_for_*, generic_cost(wh,..) … binary_drift(wh,..), complexity_by_file, reachable_by_repo, binary_drift_edges, trust_report, svg wrappers) DELETE (e) lens READ / JOIN half
mimir_lens/rows.rs::latest_snapshot_* DELETE (e) latest-snapshot dedupe = read half
mimir_lens/rows.rs row structs + parse_*, sources.rs (Sources, Feed, evidence_note), every lens submodule's scoring fns (risk::analyze Tornhill, bloat tax, villa rules, weak, benchcov, testcov, churn_filter, anomaly, world_impact, binary_drift, zombie, data_reach, reachable_vuln, name_collision, symbol_identity, identity, trust, undoc_api, verdict_svg, change_series, subclone) + unit tests KEEP scoring / report halves; lane 8 feeds them from the graph
producers kept as functions: knowledge/git_heat.rs, security.rs SBOM, binscan.rs + DWARF rows, bench_history ingest, warehouse/coverage.rs wrap, warehouse/dep_graph.rs, warehouse/feature_dep_edges.rs, index snapshot (index/), warehouse/test_inventory.rs, warehouse/workspace_events.rs, warehouse/working_set.rs KEEP non-parser producers; only the monitor trigger goes
warehouse/populate_completeness.rs KEEP the pure checker; its call from republish_with goes —
tests: feed_chain_fills_the_empty_tables.rs, repopulate_refresh.rs, eager_register.rs republish half, feature_dep_edges_populate.rs, populate_jobs.rs DELETE (e) / cut to the fetch half tests of deleted roads

6. Other inventory points

hit verdict reason
query::load_preferred / load_latest + callers (viz callgraph/arch/release, server_grpc knowledge RPCs, mcp_stdio, bench_mimir, mimir_dup) DELETE the read (decision 2 above); callers answer not-wired → REPLACE-BY(lane 8) readers of orphan tables
every other reader of symbol_facts / call_edges / test_inventory / warehouse_access_edges (viz arch/metro/callgraph/navigator, funnel, autonom, release doctor, working_set, sql templates, Knowledge.* RPCs / MCP knowledge_*) DELETE the table-read/join code; surface answers "Mímir v2: producer not wired yet" — DECIDED 2026-10-13 never an empty view that looks like "nothing there"; rendering / report halves stay; a release GATE that read them fails CLOSED with the not-wired message. Porting onto code_nodes/code_edges = lane 8 (widened to every reader of the old tables)
crates/bindrift-fixtures/tests/drift_proof.rs, tests/mimir_villa_robot.rs, tests/support/mcp_seed.rs, tests/viz_arch_metro.rs (use scan_repo/scan_all as a fixture seeder) DELETE the scan dependency (b): seed rows directly or drop the test case tests may not resurrect a road

7. External consumers (read-only; follow-up lane, NOT done here)

consumer uses change needed
dwarves crates/dwarves/Cargo.toml:980 nornir = { path, default-features = false, features = ["full-server", "ra-ingest"] } drop "ra-ingest" (feature deleted in c) — else dwarves stops resolving
dwarves dwarves-server nornir::server_grpc::{run, pb} none (wire types unchanged); Mimir panes show the not-wired envelope
dwarves-gui mimir_lens.rs, dataview.rs, dupes.rs, graph_source.rs, coderoom.rs, warehouse_nav.rs, robot tests robot_mimir_chain_header, robot_dupes_reads_lens read lens_* / lens_runs / lens_meta.state / scip_occurrences / symbol_facts over Warehouse.Scan and Mimir RPCs handle lens_meta.state = "not_wired"; stop reading lens_* tables; move to code_nodes/code_edges with lane 4/8
dwarves src/mimir/{mod,risk,zombie,collide,bloat}.rs, dupes/*, coverage/*, dwarves-embed benchesview/warehousehealth read symbol_facts/call_edges etc. by table name move to v2 tables with lane 8
dwarves-gui generation.rs, lib.rs doc-only references to lens_chain::generation doc touch-up
dwarves crates/dwarves/Cargo.toml:1072 nornir-introspect path dep (its petgraph callgraph_dwarf) drop the DWARF call-graph use; move to mimir-binary rows (lane 9)
edda nornir-warehouse-trait ScipRow/ScipScan, TABLE_SCIP_OCCURRENCES, Warehouse::load_latest_scip none now (row model kept); load_latest_scip retires with the old tables
edda nornir-release-core::knowledge / semantic_blast own scip join over load_latest_scip reads an orphan table after lane 2; move to v2 with lane 8
edda nornir-testmatrix/src/gatedtests.rs fixture text naming tests/ra_ingest_smoke.rs / ra_ingest_coverage_wiring.rs doc/fixture touch-up
edda jera chain docs, nornir-purgatory docs mention lens_runs / ra_ingest doc touch-up
edda nornir-depgraph, nornir-graph petgraph none (not nornir's root crate)
korp nornir (no default features): bench::, register_bench, warehouse::iceberg, warehouse::test_results none

8. Lane 2 outcome (what the removal commits actually did)

Recorded after the fact, where the code forced a choice the table above did not spell out. Order of the commits: e → a → c → b → d → guard (e first, because the monitor populate held the triggers of every parse road; cutting it first made the road commits plain deletions).

item outcome
monitor::embed_workspace* KEPT (the nornir workspace embed verb, a non-parser producer); only populate step 3b went
Workspaces.Register eager / Workspaces.Fetch / CLI workspace add/populate/fetch --force clone members as before; the build half says NOT_WIRED_NOTE (parent job detail, CLI line, exit status for populate)
Workspaces.Repopulate answers refusal = "repopulate: Mímir v2: producer not wired yet …", same wire type
Mimir.* lens RPCs + MCP lens tools + mimir analyze verbs table-fed lenses answer mimir_lens::not_wired(lens, repo) (lens_meta.state = "not_wired"); similar_code / semantic_clones / subclone keep their own engines and fold on the request
Ops.ScipIngest, Ops.RunArch, Viz.Knowledge, Introspect.Callers/Callees/PathBetween, Dwarf.Callers/Callees/CallPath Unimplemented with the not-wired message (wire types unchanged)
vector/chunk.rs every file line-windowed; CHUNKER_VERSION bumped v1 → v2 (chunk membership changed)
mimir_subclone::detect item spans are an INPUT (SourceFile = (path, text, Option<Vec<ItemSpan>>)); span-less files are COUNTED (files_without_spans, groups_r6_unjudged) and named in the lens note — never a silent R6 drop
mimir_calibrate corpus extraction gone; the 6 tests that needed the syn corpus went with it (calibration math + its other tests kept)
deepscan.rs closure resolution (resolve_dep_closure), deps_generation, deps_snapshot_id, DEPS_REPO kept; the syn deep scan gone
release doctor semantic blast a pending bump FAILS CLOSED with the not-wired message (GATE)
coderoom fetcher, scip_moniker family, top-N ranking kept; ingest + compat edge + what-breaks + snapshot-diff gone (CLI verbs refuse)
nornir-introspect callgraph_dwarf (petgraph) + the empty callgraph syn stub deleted; CallEdge/CallKind rows moved to call_edge.rs (used by callgraph_llvm + persisted DWARF facts)
viz 🗺 Knowledge tab state = "not_wired" with the note in both modes; bubble renderer + wire types kept
viz 🏛 arch tab the live syn fallback + local deep scan gone (metro_fuel_source = "not_wired", deep scan error names it)
nornir introspect callgraph/callers/callees/path-between, MCP callers_of/callees_of/path_between/dwarf_call*, Introspect.* + Dwarf.Call* RPCs refuse by name (road d)

9. Readers of the orphan tables (decision 2, 2026-10-13)

symbol_facts / call_edges / feature_gate_facts / test_inventory / scip_occurrences / warehouse_access_edges / architecture_wiring / surface_coverage-for-arch lost their producers in lane 2. Each surface that read them now names that (NOT_WIRED_NOTE); their table-read/join code is gone. The table STORAGE went too (§10, follow-up decisions).

reader new state
knowledge::query (load_latest re-export, load_preferred*, view cache) DELETED — only the KnowledgeView model is re-exported
Knowledge.* gRPC (symbol_lookup, defined_in, callers, callees, call_path) Unimplemented + note
MCP knowledge_* tools (one funnel, knowledge_query_json) error + note
CLI knowledge query (all kinds incl. feature-gates) + its remote client refuses
Graph-RAG knowledge context (CLI + MCP) refuses; context_slices now takes the view as an INPUT (join kept + tested)
CLI vector slices-index / slices-search refuse
mimir::repo_overview (Mimir.RepoOverview, MCP, CLI) knowledge: {state: "not_wired", note}
autonom completeness GATE (gather, gather_with_utfallsrum; MCP + CLI) FAILS CLOSED with the note
release doctor semantic blast (gate input) FAILS CLOSED on a pending bump (road b)
funnel decompose grounding prints the note, decomposes ungrounded (never a silent empty retriever); --repo refuses
viz 🏛 arch tab board load_error = note (both modes); metro fuel not_wired; coverage/access overlay not read; autogen (Ops.RunArch kick) removed; placeholder names the note
viz 🚇 Metro tab fed-but-empty shows the note, state = "not_wired"
viz callgraph lens error = note, state = "not_wired" (no Warehouse.Scan of the tables)
viz release tab deep (symbol) edges deep_state = "not_wired" + label
Viz.Architecture Unimplemented + note; MCP arch_svg/arch_graph/arch_trace error + note; CLI arch history refuses
Viz.TestMatrix inventory: [] + inventory_state = "not_wired" + note (results still served); CLI test list refuses
working_set populate-end warm (HOT_LENS_TABLES, warm_hot_tables) DELETED (no populate)
Mimir SQL templates (def-use, change-radius, call-chain, table-access-lineage) + MCP mimir_sql_template + bench arms templates DELETED; tool refuses; raw SQL unchanged
similar_code / semantic_clones (mimir_dup / mimir_clones) not_wired on gRPC, MCP and CLI (§10 decision 4); they return when lane 10 feeds embeddings from driver spans
populate_completeness oracle core set = live producers only; require_scip / scip_ok removed (§10)
viz warehouse deck call_edges / scip_call_edges panes removed (§10)
mimir_calibrate tests (6, deleted with the syn corpus in road b) noted for lane 8b: re-add them on the driver corpus

External follow-up (not done here): dwarves-gui / dwarves panes that call Viz.Architecture, Viz.Knowledge, Knowledge.*, Introspect.Callers/…, Dwarf.Call*, Ops.RunArch, Ops.ScipIngest now receive Unimplemented with the not-wired note, and Mimir.* lenses answer lens_meta.state = "not_wired" — they should render that state instead of an error/empty pane.

10. Follow-up decisions on the ASK list (2026-10-13)

# decision done
1 proc-macro2 KEEP for subclone (a lexer, not a second parser) guard names it the ONE allowed token crate with the reason: root [dependencies] only, proc_macro2 only in src/mimir_subclone.rs; quote, rowan, tree-sitter*, rustc-ap-*, rustc_lexer forbidden
2 storage code of the orphan tables DELETE warehouse/{test_inventory,warehouse_access,semantic_clusters,working_set}.rs, arch/warehouse.rs; iceberg symbol-scan / scip / feature-gate / knowledge-scan I/O; nine table registrations + schemas + sort keys. The edda Warehouse trait still requires append_symbol_scan_async → the Iceberg backend refuses it (fail closed). Tables on disk are never read again (new namespace mimir_v2). Generic write-path tests + commit/SQL benches ported to git_heat_facts / feature_dep_edges
3 nornir-introspect::callgraph_llvm DELETE module + call_edge rows + introspect callgraph-llvm verb + DwarfFacts.calls gone; guard forbids the module coming back
4 similar_code / semantic_clones → not_wired all surfaces; mimir_dup, the symbol_facts row assembler and the mimir_clones warehouse wrapper removed; scoring halves + tests stay
5 mimir_calibrate tests noted for lane 8b (driver corpus) — see the §9 row
6 bench-corpus/ DELETE directory + workspace/package excludes gone (the driver regenerates corpora)

Not done here (separate lane): the external consumers (dwarves, edda) — §7.