Mímir — the nornir warehouse data-structure manual
72 Apache-Iceberg tables · 722 columns · 10 domains. Every table and every column below is enumerated directly from the spec::Schema source of truth (
nornir/src/warehouse/iceberg_schema.rs, plus the three release tables re-exported from thenornir-release-ledgeredda leaf). Nothing here is hand-transcribed or guessed.
Mímir is the well of memory: nornir writes every fact it learns about the nordisk codebase — the dependency graph, the resolved call graph, benchmarks, coverage, releases, binaries, embeddings, the fleet — into one columnar warehouse so that any question is a read, never a re-computation. dwarves (and korp, and the MCP agents) query it through the stable function surface documented in Part 2.
Contents
- The data structure — 10 domains, every table, every column
- The functions — what dwarves asks Mímir
- The ER diagram
The ER diagram
The full detailed entity-relationship map (skade dark-board style, all 72 tables clustered by the 10 domains, columns typed, join-key arrows bundled) lives beside this manual:
If your viewer does not inline SVG, open
assets/mimir-schema.svgdirectly (2354×4841, self-contained).
Reading the tables
- ● = required column · ○ = optional (additive, migration-safe — a table written before the column reads it back as its documented default).
- ◆ marks a logical join / identity key.
- part = the Iceberg partition column (how a read prunes files); unpartitioned tables are read with a residual filter.
- Field ids are explicit and stable in the source (append-only; never reused, never renumbered) — they are what Iceberg resolves columns by, so schema evolution is safe.
Domain overview
| # | Domain | Tables | Columns | What it remembers |
| D1 | Knowledge & Code Graph | 9 | 88 | the code graph — public items, call edges, resolved SCIP occurrences, cfg gates, the Cargo.toml feature-activation graph, tests, git heat |
| D2 | Vector / Semantic Search | 3 | 26 | semantic search — deduped embeddings, index identity, per-occurrence manifest |
| D3 | Dependency Graph | 4 | 31 | the cargo/multi-ecosystem dependency graph and its audits |
| D4 | Release & Publish Pipeline | 14 | 156 | the whole release + crates.io publish pipeline, reversibly |
| D5 | Build & Binary Provenance | 6 | 88 | build provenance and compiled-binary analysis (hardening, sizes, diffs) |
| D6 | Test · Bench · Coverage | 10 | 86 | tests, benchmarks, coverage and the completeness gate |
| D7 | UX Journeys & Snapshots | 3 | 34 | user-journey capture/replay, render-oracle frames, the viz action trail |
| D8 | Security & SBOM | 2 | 12 | cached vulnerability findings and the SBOM |
| D9 | Time-Machine Artifacts | 12 | 91 | the Urðr time-machine: immutable artifact snapshots + rendered docs + arch wiring |
| D10 | Fleet Ops & Infra | 9 | 110 | the fleet — idea funnel, populate outcomes, airgap, MCP/agent telemetry, Yggdrasil infra |
| Total | 72 | 722 |
Part 1 — the data structure
D1 · Knowledge & Code Graph
8 tables · 78 columns. The code graph — public items, call edges, resolved scip occurrences, cfg gates, tests, git heat.
symbol_facts (13 cols · partitioned by repo)
One row per public item found by the syn walker (fn/struct/enum/trait/impl/…).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | crate_name |
string | ● | |
| 5 | module_path |
string | ● | |
| 6 | item_kind |
string | ● | |
| 7 | item_name |
string | ● | |
| 8 | visibility |
string | ● | |
| 9 | file |
string | ● | |
| 10 | line |
int (i32) | ● | |
| 11 | doc_lines |
int (i32) | ● | |
| 12 | signature |
string | ○ | |
| 13 | language |
string | ○ |
call_edges (10 cols · partitioned by repo)
Caller→callee identifier edges from syn ItemFn bodies (syntactic).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | crate_name |
string | ● | |
| 5 | caller_path |
string | ● | |
| 6 | callee_ident |
string | ● | |
| 7 | call_kind |
string | ● | |
| 8 | file |
string | ● | |
| 9 | line |
int (i32) | ● | |
| 10 | language |
string | ○ |
scip_occurrences (15 cols · partitioned by repo)
IDE-grade RESOLVED defs+refs from rust-analyzer SCIP, SHA-historized.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | ◆ |
| 5 | symbol |
string | ● | |
| 6 | role |
string | ● | |
| 7 | is_definition |
boolean | ● | |
| 8 | display_name |
string | ● | |
| 9 | kind |
string | ● | |
| 10 | file |
string | ● | |
| 11 | start_line |
int (i32) | ● | |
| 12 | start_col |
int (i32) | ● | |
| 13 | enc_start_line |
int (i32) | ● | |
| 14 | enc_end_line |
int (i32) | ● | |
| 15 | language |
string | ○ |
feature_gate_facts (9 cols · partitioned by repo)
One row per #[cfg(...)] attribute on a discovered item.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | crate_name |
string | ● | |
| 5 | module_path |
string | ● | |
| 6 | item_name |
string | ● | |
| 7 | cfg_expr |
string | ● | |
| 8 | file |
string | ● | |
| 9 | line |
int (i32) | ● |
feature_dep_edges (10 cols · partitioned by repo)
The FEATURE ACTIVATION graph parsed out of Cargo.toml — one row per "feature X enables Y" edge. The manifest side of the feature story (feature_gate_facts is the source side). cargo metadata cannot supply this: its features map is already flattened and resolved, so the conditional structure — which feature would have to be switched off to drop a dep, and above all the weak pkg?/feat form — is destroyed before cargo hands the data over.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | part |
| 4 | crate_name |
string | ● | ◆ |
| 5 | feature |
string | ● | ◆ |
| 6 | enables |
string | ● | ◆ |
| 7 | kind |
string | ● | |
| 8 | optional |
boolean | ● | |
| 9 | target_cfg |
string | ○ | |
| 10 | dep_kind |
string | ● |
feature = ""means UNCONDITIONAL, not unknown: the package pullsenableswith no feature behind it, so no feature toggle can remove it. This is the ⊥ "cannot be removed" case the UI renders; a consumer treating""as a missing value inverts the answer.kind∈dep(feature enables an optional dep) ·feature(feature enables another feature) ·dep-feature(pkg/feat— enablesfeatonpkgand implicitlypkg) ·weak-dep-feature(pkg?/feat) ·implicit-dep(the auto-generatedfoo = ["dep:foo"]feature).weak-dep-featureis the only form that creates an AND-group — it fires only ifpkgwas enabled by some other route — and getting it into the data is the point of the table.target_cfgNULL ⇒ not under a[target.'cfg(...)']block. NULL and""are different answers and the reader keeps them apart.dep_kind∈normal|build|dev, so a consumer can drop dev-deps likecargo tree -e no-dev.- Sort key
(repo, enables, crate_name, feature)—enablesleads because the reverse point lookup ("which features pull dep X") is the needle-in-haystack one that needs the file skip. - Written by populate step 7d (
monitor::republish_with→compute_feature_graph), which parses every member's manifests through thenornir-feature-graphedda leaf (re-exported asnornir::feature_graph). Compute fans out ongatling; the append is serial under one snapshot id for the whole run — the writer groups byrepoitself because the table is partitioned and skade takes one partition per append. - Measured 2026-08-01 over the real nornir + edda + dwarves trees: 1078 edges / 86 packages; 8
weak-dep-feature, 661 unconditional, 0implicit-dep(these repos name every optional dep withdep:syntax, which suppresses cargo's implicit feature). - Read via
warehouse::feature_dep_edges::query_feature_dep_edges, which errors instead of returning an emptyVecwhen the scope was never populated: an empty read here is indistinguishable from the genuinely meaningful "nothing pulls this dependency".
test_inventory (10 cols · partitioned by repo)
Every #[test]/#[tokio::test]/… fn found by the build-free scan.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | crate_name |
string | ● | |
| 5 | module_path |
string | ● | |
| 6 | test_name |
string | ● | |
| 7 | file |
string | ● | |
| 8 | line |
int (i32) | ● | |
| 9 | is_heavy |
boolean | ● | |
| 10 | is_async |
boolean | ● |
git_heat_facts (9 cols · partitioned by repo)
Per-file git activity heat (commit/author counts, recency).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | file |
string | ● | |
| 5 | commits_total |
long (i64) | ● | |
| 6 | commits_30d |
long (i64) | ● | |
| 7 | commits_90d |
long (i64) | ● | |
| 8 | authors_total |
long (i64) | ● | |
| 9 | last_commit_ts_micros |
timestamptz | ● |
warehouse_access_edges (8 cols · unpartitioned)
Static fn→warehouse-table read/write edges (feeds the arch graph).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | caller_fn |
string | ● | |
| 4 | crate_name |
string | ● | |
| 5 | table |
string | ● | |
| 6 | access |
string | ● | |
| 7 | file |
string | ● | |
| 8 | line |
int (i32) | ● |
knowledge_scans (4 cols · partitioned by repo)
Ledger of (repo,git_sha) already knowledge-scanned — re-scan idempotency.
| # | col | type | req | key |
| 1 | repo |
string | ● | ◆ |
| 2 | git_sha |
string | ● | ◆ |
| 3 | snapshot_id |
string | ● | ◆ |
| 4 | scanned_at_micros |
timestamptz | ● |
D2 · Vector / Semantic Search
3 tables · 26 columns. Semantic search — deduped embeddings, index identity, per-occurrence manifest.
embedding_snapshots (11 cols · unpartitioned)
Identity of one semantic-index build (repo,sha,model,chunker,fileset).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | workspace |
string | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | |
| 5 | branch |
string | ● | |
| 6 | model_profile |
string | ● | |
| 7 | chunker_hash |
string | ● | |
| 8 | fileset_hash |
string | ● | |
| 9 | complete |
boolean | ● | |
| 10 | row_count |
int (i32) | ● | |
| 11 | ts_micros |
timestamptz | ● |
embedding_manifest (7 cols · unpartitioned)
Per-occurrence rows: which content_hash sits at which file/span.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ordinal |
int (i32) | ● | |
| 3 | content_hash |
string | ● | ◆ |
| 4 | model_profile |
string | ● | |
| 5 | file |
string | ● | |
| 6 | start_line |
int (i32) | ● | |
| 7 | end_line |
int (i32) | ● |
embeddings (8 cols · unpartitioned)
Content-addressed, deduped vector store (native Arrow list).
| # | col | type | req | key |
| 1 | content_hash |
string | ● | ◆ |
| 2 | model_profile |
string | ● | ◆ |
| 3 | dim |
int (i32) | ● | |
| 4 | vector |
list<float> | ● | |
| 5 | normalized |
boolean | ● | |
| 6 | vector_sha256 |
string | ● | |
| 7 | language |
string | ○ | |
| 8 | model_id |
string | ○ |
D3 · Dependency Graph
4 tables · 31 columns. The cargo/multi-ecosystem dependency graph and its audits.
dep_graph_edges (8 cols · unpartitioned)
Snapshot of cross-repo dependency edges (from_repo→to_repo via crate).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | workspace_name |
string | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | from_repo |
string | ● | |
| 5 | to_repo |
string | ● | |
| 6 | via_crate |
string | ● | |
| 7 | kind |
string | ○ | |
| 8 | ecosystem |
string | ○ |
resolved_features (8 cols · unpartitioned)
Resolved feature set per workspace member, long/narrow.
| # | col | type | req | key |
| 1 | dep_graph_snapshot_id |
string | ● | ◆ |
| 2 | workspace_name |
string | ● | |
| 3 | member_repo |
string | ● | |
| 4 | member_crate |
string | ● | |
| 5 | dep_crate |
string | ● | |
| 6 | dep_version |
string | ● | |
| 7 | feature |
string | ● | |
| 8 | source |
string | ● |
links_declarations (6 cols · unpartitioned)
links = manifest declarations in a dep-graph snapshot.
| # | col | type | req | key |
| 1 | dep_graph_snapshot_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | crate_name |
string | ● | |
| 4 | version |
string | ● | |
| 5 | links_value |
string | ● | |
| 6 | manifest_path |
string | ● |
path_dep_audits (9 cols · unpartitioned)
Per path-dep audit of version= presence at release time.
| # | col | type | req | key |
| 1 | release_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | manifest_path |
string | ● | |
| 4 | dep_name |
string | ● | |
| 5 | dep_path |
string | ● | |
| 6 | has_version |
boolean | ● | |
| 7 | version_req |
string | ○ | |
| 8 | ok |
boolean | ● | |
| 9 | ts_micros |
timestamptz | ● |
D4 · Release & Publish Pipeline
14 tables · 156 columns. The whole release + crates.io publish pipeline, reversibly.
release_lineage (21 cols · unpartitioned)
Per-(release,repo) outcome ledger — the release's headline record.
| # | col | type | req | key |
| 1 | release_id |
string | ● | ◆ |
| 2 | workspace_name |
string | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | dep_graph_snapshot_id |
string | ● | |
| 5 | build_order_idx |
int (i32) | ● | |
| 6 | repo |
string | ● | |
| 7 | git_sha |
string | ● | |
| 8 | git_branch |
string | ● | |
| 9 | git_dirty |
boolean | ● | |
| 10 | gate_status |
string | ● | |
| 11 | tests_passed |
int (i32) | ● | |
| 12 | tests_failed |
int (i32) | ● | |
| 13 | dry_run |
boolean | ● | |
| 14 | published_versions_csv |
string | ● | |
| 15 | tantivy_snapshot_id |
string | ○ | |
| 16 | dwarf_snapshot_id |
string | ○ | |
| 17 | gimli_snapshot_id |
string | ○ | |
| 18 | git_tag |
string | ○ | |
| 19 | git_tag_matches_published |
boolean | ○ | |
| 20 | rustdoc_json_snapshot_id |
string | ○ | |
| 21 | patch_lines_stripped |
int (i32) | ○ |
release_events (11 cols · unpartitioned)
Row-level DAG of a release run (one row per component×op×phase).
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | seq |
long (i64) | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | component |
string | ● | |
| 5 | repo |
string | ● | |
| 6 | op |
string | ● | |
| 7 | phase |
string | ● | |
| 8 | status |
string | ● | |
| 9 | detail |
string | ● | |
| 10 | depends_on |
list<string> | ○ | |
| 11 | elapsed_ms |
long (i64) | ○ |
release_changes (16 cols · unpartitioned)
Reversible release-change ledger (enough before-state to undo).
| # | col | type | req | key |
| 1 | release_id |
string | ● | ◆ |
| 2 | seq |
long (i64) | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | kind |
string | ● | |
| 5 | repo |
string | ● | |
| 6 | change_sha |
string | ● | |
| 7 | crate_name |
string | ○ | |
| 8 | old_version |
string | ○ | |
| 9 | new_version |
string | ○ | |
| 10 | file |
string | ○ | |
| 11 | old_req_lines |
string | ○ | |
| 12 | removed_block |
string | ○ | |
| 13 | branch |
string | ○ | |
| 14 | prev_head |
string | ○ | |
| 15 | registry |
string | ○ | |
| 16 | immutable |
boolean | ○ |
release_commits (11 cols · unpartitioned)
Commits between prev and current release, parsed as conventional commits.
| # | col | type | req | key |
| 1 | release_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | git_sha |
string | ● | |
| 4 | parent_sha |
string | ○ | |
| 5 | author |
string | ● | |
| 6 | ts_micros |
timestamptz | ● | |
| 7 | conventional_type |
string | ○ | |
| 8 | scope |
string | ○ | |
| 9 | breaking |
boolean | ● | |
| 10 | subject |
string | ● | |
| 11 | body |
string | ○ |
patch_strip_events (7 cols · unpartitioned)
Per-line [patch] strip events during a release.
| # | col | type | req | key |
| 1 | release_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | file |
string | ● | |
| 4 | line |
int (i32) | ● | |
| 5 | raw_line |
string | ● | |
| 6 | action |
string | ● | |
| 7 | ts_micros |
timestamptz | ● |
publish_attempts (11 cols · unpartitioned)
Per-attempt publish poll (replaces the planned sleep-20 wait).
| # | col | type | req | key |
| 1 | release_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | crate_name |
string | ● | |
| 4 | version |
string | ● | |
| 5 | attempt_idx |
int (i32) | ● | |
| 6 | started_ts_micros |
timestamptz | ● | |
| 7 | index_seen_ts_micros |
timestamptz | ○ | |
| 8 | wait_ms |
int (i32) | ○ | |
| 9 | http_status |
int (i32) | ○ | |
| 10 | outcome |
string | ● | |
| 11 | stderr_excerpt |
string | ○ |
crate_metadata_checks (13 cols · unpartitioned)
Gate readme/license/repository/description presence per crate@version.
| # | col | type | req | key |
| 1 | release_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | crate_name |
string | ● | |
| 4 | version |
string | ● | |
| 5 | has_readme |
boolean | ● | |
| 6 | has_license |
boolean | ● | |
| 7 | license_expr |
string | ○ | |
| 8 | has_repository |
boolean | ● | |
| 9 | repository_url |
string | ○ | |
| 10 | has_description |
boolean | ● | |
| 11 | description_len |
int (i32) | ○ | |
| 12 | ok |
boolean | ● | |
| 13 | ts_micros |
timestamptz | ● |
crate_tarball_stats (12 cols · unpartitioned)
.crate tarball size + largest-file warning per crate@version.
| # | col | type | req | key |
| 1 | release_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | crate_name |
string | ● | |
| 4 | version |
string | ● | |
| 5 | tarball_bytes |
long (i64) | ● | |
| 6 | file_count |
int (i32) | ● | |
| 7 | largest_file |
string | ○ | |
| 8 | largest_file_bytes |
long (i64) | ○ | |
| 9 | p50_bytes_baseline |
long (i64) | ○ | |
| 10 | exceeds_threshold |
boolean | ● | |
| 11 | threshold_bytes |
long (i64) | ● | |
| 12 | ts_micros |
timestamptz | ● |
registry_mirrors (13 cols · unpartitioned)
Mirror of a crates.io publish to additional registries.
| # | col | type | req | key |
| 1 | mirror_id |
string | ● | |
| 2 | release_id |
string | ● | ◆ |
| 3 | repo |
string | ● | |
| 4 | crate_name |
string | ● | |
| 5 | version |
string | ● | |
| 6 | source_registry |
string | ● | |
| 7 | target_registry |
string | ● | |
| 8 | started_ts |
timestamptz | ● | |
| 9 | completed_ts |
timestamptz | ○ | |
| 10 | bytes_copied |
long (i64) | ○ | |
| 11 | sha256 |
string | ○ | |
| 12 | outcome |
string | ● | |
| 13 | error |
string | ○ |
version_bump_plans (5 cols · unpartitioned)
Coordinated cross-workspace version-bump plan header.
| # | col | type | req | key |
| 1 | plan_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | dep_graph_snapshot_id |
string | ● | |
| 4 | scope |
string | ● | |
| 5 | requested_by |
string | ○ |
version_bump_targets (8 cols · unpartitioned)
Per-crate rows of a version-bump plan (from→to).
| # | col | type | req | key |
| 1 | plan_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | crate_name |
string | ● | |
| 4 | from_version |
string | ● | |
| 5 | to_version |
string | ● | |
| 6 | reason |
string | ● | |
| 7 | applied |
boolean | ● | |
| 8 | applied_release_id |
string | ○ |
yank_events (11 cols · unpartitioned)
Cascade yank/un-yank in dep order (self-referential cascade root).
| # | col | type | req | key |
| 1 | event_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | dep_graph_snapshot_id |
string | ● | ◆ |
| 4 | repo |
string | ● | |
| 5 | crate_name |
string | ● | |
| 6 | version |
string | ● | |
| 7 | action |
string | ● | |
| 8 | reason |
string | ○ | |
| 9 | requested_by |
string | ○ | |
| 10 | cascade_root_event_id |
string | ○ | |
| 11 | http_status |
int (i32) | ○ |
semver_diffs (9 cols · unpartitioned)
rustdoc-json semver diff (added/removed/changed → suggested bump).
| # | col | type | req | key |
| 1 | from_snapshot_id |
string | ● | ◆ |
| 2 | to_snapshot_id |
string | ● | ◆ |
| 3 | repo |
string | ● | |
| 4 | crate_name |
string | ● | |
| 5 | added_items |
int (i32) | ● | |
| 6 | removed_items |
int (i32) | ● | |
| 7 | changed_items |
int (i32) | ● | |
| 8 | suggested_bump |
string | ● | |
| 9 | ts_micros |
timestamptz | ● |
msrv_probes (8 cols · unpartitioned)
Actual MSRV via cargo +toolchain check probes.
| # | col | type | req | key |
| 1 | probe_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | crate_name |
string | ● | |
| 4 | declared_rust_version |
string | ○ | |
| 5 | probed_rust_version |
string | ● | |
| 6 | probe_status |
string | ● | |
| 7 | ts_micros |
timestamptz | ● | |
| 8 | ci_run_id |
string | ○ |
D5 · Build & Binary Provenance
6 tables · 88 columns. Build provenance and compiled-binary analysis (hardening, sizes, diffs).
build_provenance (16 cols · partitioned by repo)
One flat row per nornir build --attest (variant, digest, host, outcome).
| # | col | type | req | key |
| 1 | id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | variant |
string | ● | |
| 4 | outcome |
string | ● | |
| 5 | profile |
string | ● | |
| 6 | target |
string | ● | |
| 7 | vcs_rev |
string | ● | |
| 8 | vcs_branch |
string | ● | |
| 9 | rustc |
string | ● | |
| 10 | host_cores |
int (i32) | ● | |
| 11 | host_memory_bytes |
long (i64) | ● | |
| 12 | artifact_count |
long (i64) | ● | |
| 13 | digest |
string | ● | ◆ |
| 14 | built_at |
string | ● | |
| 15 | ts_micros |
timestamptz | ● | |
| 16 | record_json |
string | ● |
build_info (9 cols · unpartitioned)
Exploded per-fact build record (provenance/dep/artifact/log/metric/step).
| # | col | type | req | key |
| 1 | build_id |
string | ● | ◆ |
| 2 | step_id |
string | ● | |
| 3 | ts_micros |
long (i64) | ● | |
| 4 | kind |
string | ● | |
| 5 | level |
string | ● | |
| 6 | name |
string | ● | |
| 7 | value |
string | ● | |
| 8 | content_id |
string | ● | ◆ |
| 9 | blob |
binary (blob) | ○ |
binary_facts (25 cols · partitioned by content_sha256)
Per-artifact hardening + format/size header (checksec-class), by content_sha256.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | |
| 5 | build_id |
string | ● | |
| 6 | content_sha256 |
string | ● | ◆ |
| 7 | artifact_path |
string | ● | |
| 8 | format |
string | ● | |
| 9 | arch |
string | ● | |
| 10 | class |
string | ● | |
| 11 | total_bytes |
long (i64) | ● | |
| 12 | stripped |
boolean | ● | |
| 13 | has_debug_info |
boolean | ● | |
| 14 | pie |
boolean | ● | |
| 15 | relro |
string | ● | |
| 16 | nx |
boolean | ● | |
| 17 | stack_canary |
boolean | ● | |
| 18 | fortify |
boolean | ● | |
| 19 | rpath |
boolean | ● | |
| 20 | runpath |
boolean | ● | |
| 21 | build_id_note |
string | ● | |
| 22 | n_sections |
long (i64) | ● | |
| 23 | n_sym_defined |
long (i64) | ● | |
| 24 | n_sym_undefined |
long (i64) | ● | |
| 25 | n_dyn_deps |
long (i64) | ● |
section_sizes (11 cols · partitioned by content_sha256)
Per-(artifact,section) size row — the Bloaty section view.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | content_sha256 |
string | ● | ◆ |
| 4 | section_name |
string | ● | |
| 5 | size_bytes |
long (i64) | ● | |
| 6 | vaddr |
long (i64) | ● | |
| 7 | alloc |
boolean | ● | |
| 8 | exec |
boolean | ● | |
| 9 | write |
boolean | ● | |
| 10 | file_offset |
long (i64) | ● | |
| 11 | kind |
string | ● |
symbol_sizes (14 cols · partitioned by content_sha256)
Per-(artifact,symbol) size — cargo-bloat/twiggy per-symbol/crate/mono view.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | content_sha256 |
string | ● | ◆ |
| 4 | symbol_mangled |
string | ● | |
| 5 | symbol_demangled |
string | ● | |
| 6 | symbol_demangled_no_generics |
string | ● | |
| 7 | crate_name |
string | ● | |
| 8 | section |
string | ● | |
| 9 | size_bytes |
long (i64) | ● | |
| 10 | kind |
string | ● | |
| 11 | binding |
string | ● | |
| 12 | is_monomorphization |
boolean | ● | |
| 13 | source_file |
string | ○ | |
| 14 | source_line |
int (i32) | ○ |
artifact_diff (13 cols · partitioned by to_content_sha256)
One narrow row per change between two analysed artifacts (size waterfall).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | release_id |
string | ● | |
| 4 | from_content_sha256 |
string | ● | ◆ |
| 5 | to_content_sha256 |
string | ● | ◆ |
| 6 | repo |
string | ● | |
| 7 | kind |
string | ● | |
| 8 | name |
string | ● | |
| 9 | crate_name |
string | ● | |
| 10 | before |
long (i64) | ● | |
| 11 | after |
long (i64) | ● | |
| 12 | delta_bytes |
long (i64) | ● | |
| 13 | severity |
string | ● |
D6 · Test · Bench · Coverage
10 tables · 86 columns. Tests, benchmarks, coverage and the completeness gate.
bench_runs (7 cols · partitioned by repo)
One row per bench run (repo,version,machine,cores,ts).
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | date |
string | ● | |
| 5 | version |
string | ● | |
| 6 | machine |
string | ● | |
| 7 | cores |
int (i32) | ● |
bench_results (4 cols · partitioned by repo)
One row per scalar bench metric of a run.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | result_name |
string | ● | |
| 3 | metric_name |
string | ● | |
| 4 | metric_value |
double (f64) | ● |
bench_telemetry (11 cols · partitioned by repo)
Per-(run,bench) CPU/mem/elapsed footprint the sampler captured.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | bench |
string | ● | |
| 4 | n_cores |
int (i32) | ● | |
| 5 | cpu_pct_avg |
double (f64) | ● | |
| 6 | cpu_pct_max |
double (f64) | ● | |
| 7 | cores_busy_avg |
double (f64) | ● | |
| 8 | cores_busy_max |
int (i32) | ● | |
| 9 | mem_peak_mb |
double (f64) | ● | |
| 10 | mem_pct_max |
double (f64) | ● | |
| 11 | elapsed_ms |
double (f64) | ● |
test_outcomes (10 cols · partitioned by repo)
Bench-coupled test verdicts (pass/fail/duration) + flake bookkeeping.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | test_name |
string | ● | |
| 3 | passed |
boolean | ● | |
| 4 | duration_ms |
double (f64) | ○ | |
| 5 | message |
string | ○ | |
| 6 | source_repo |
string | ○ | |
| 7 | source_crate |
string | ○ | |
| 8 | attempt_idx |
int (i32) | ○ | |
| 9 | retry_of_run_id |
string | ○ | |
| 10 | quarantined |
boolean | ○ |
test_results (10 cols · partitioned by repo)
First-class test-matrix board (one row per run×suite×test) + aspect/metric.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | suite |
string | ● | |
| 4 | test_name |
string | ● | |
| 5 | status |
string | ● | |
| 6 | duration_ms |
double (f64) | ● | |
| 7 | ts_micros |
timestamptz | ● | |
| 8 | message |
string | ● | |
| 9 | aspect |
string | ○ | |
| 10 | metric |
double (f64) | ○ |
test_impacted_selections (6 cols · unpartitioned)
Auditable record of which tests an impact-set selection chose to run.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | dep_graph_snapshot_id |
string | ● | |
| 3 | changed_repo |
string | ● | |
| 4 | selected_test_name |
string | ● | |
| 5 | reason |
string | ● | |
| 6 | ts_micros |
timestamptz | ● |
test_quarantines (8 cols · unpartitioned)
Flake decision state (quarantine window + pass-rate + reason).
| # | col | type | req | key |
| 1 | test_name |
string | ● | ◆ |
| 2 | repo |
string | ● | |
| 3 | quarantined_at_ts |
timestamptz | ● | |
| 4 | unquarantined_at_ts |
timestamptz | ○ | |
| 5 | pass_rate_window |
double (f64) | ● | |
| 6 | sample_size |
int (i32) | ● | |
| 7 | decision_reason |
string | ● | |
| 8 | decided_by |
string | ○ |
coverage (10 cols · partitioned by repo)
Source line/region coverage rollup (overall/crate/file), historized.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | scope |
string | ● | |
| 5 | krate |
string | ● | |
| 6 | file |
string | ● | |
| 7 | lines |
long (i64) | ● | |
| 8 | lines_covered |
long (i64) | ● | |
| 9 | regions |
long (i64) | ● | |
| 10 | regions_covered |
long (i64) | ● |
coverage_fn (10 cols · partitioned by repo)
Per-function coverage tagged with its ui/grpc/emitter/core boundary.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | name |
string | ● | |
| 5 | file |
string | ● | |
| 6 | boundary |
string | ● | |
| 7 | lines |
long (i64) | ● | |
| 8 | lines_covered |
long (i64) | ● | |
| 9 | regions |
long (i64) | ● | |
| 10 | regions_covered |
long (i64) | ● |
surface_coverage (10 cols · unpartitioned)
autonom completeness-gate verdict per surface node × mode × workspace.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | workspace |
string | ● | |
| 4 | surface_key |
string | ● | |
| 5 | kind |
string | ● | |
| 6 | id |
string | ● | |
| 7 | mode |
string | ● | |
| 8 | verdict |
string | ● | |
| 9 | reason |
string | ○ | |
| 10 | utfallsrum_covered |
double (f64) | ○ |
D7 · UX Journeys & Snapshots
3 tables · 34 columns. User-journey capture/replay, render-oracle frames, the viz action trail.
saga_events (17 cols · partitioned by session_id)
Captured user-journey nav/click/log events for record→replay robot tests.
| # | col | type | req | key |
| 1 | session_id |
string | ● | ◆ |
| 2 | seq |
long (i64) | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | kind |
string | ● | |
| 5 | route |
string | ● | |
| 6 | component |
string | ● | |
| 7 | action |
string | ● | |
| 8 | detail |
string | ● | |
| 9 | state_json |
string | ● | |
| 10 | level |
string | ● | |
| 11 | span_id |
string | ● | |
| 12 | parent |
string | ● | |
| 13 | app_user |
string | ● | |
| 14 | app |
string | ● | |
| 15 | app_version |
string | ● | |
| 16 | git_sha |
string | ● | |
| 17 | sha |
string | ● |
ui_snapshots (10 cols · partitioned by repo)
Render-oracle reference frames (lossless WebP), SHA-deduped, git-keyed.
| # | col | type | req | key |
| 1 | repo |
string | ● | |
| 2 | crate |
string | ● | |
| 3 | test_name |
string | ● | |
| 4 | theme |
string | ● | |
| 5 | webp |
binary (blob) | ● | |
| 6 | width |
int (i32) | ● | |
| 7 | height |
int (i32) | ● | |
| 8 | content_sha |
string | ● | ◆ |
| 9 | git_sha |
string | ● | |
| 10 | created_at |
timestamptz | ● |
viz_actions (7 cols · partitioned by session_id)
Durable sink for the viz user-action trail (tab/click/query/rpc/error).
| # | col | type | req | key |
| 1 | session_id |
string | ● | ◆ |
| 2 | seq |
long (i64) | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | kind |
string | ● | |
| 5 | workspace |
string | ● | |
| 6 | tab |
string | ● | |
| 7 | detail |
string | ● |
D8 · Security & SBOM
2 tables · 12 columns. Cached vulnerability findings and the sbom.
sbom_components (7 cols · partitioned by repo)
One row per resolved dependency (name,version,license) for CycloneDX SBOM.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | repo |
string | ● | |
| 4 | name |
string | ● | |
| 5 | version |
string | ● | |
| 6 | license |
string | ● | |
| 7 | derived_from |
string | ○ |
vuln_findings (5 cols · unpartitioned)
Cached OSV/RUSTSEC findings keyed by immutable crate@version.
| # | col | type | req | key |
| 1 | crate |
string | ● | ◆ |
| 2 | version |
string | ● | ◆ |
| 3 | ids |
string | ● | |
| 4 | summary |
string | ● | |
| 5 | checked_at_micros |
timestamptz | ● |
D9 · Time-Machine Artifacts
12 tables · 91 columns. The urðr time-machine: immutable artifact snapshots + rendered docs + arch wiring.
tantivy_index_snapshots (9 cols · partitioned by repo)
Metadata of a captured Tantivy code-index snapshot.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | workspace |
string | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | |
| 5 | branch |
string | ● | |
| 6 | ts_micros |
timestamptz | ● | |
| 7 | schema_hash |
string | ● | |
| 8 | blob_count |
int (i32) | ● | |
| 9 | total_bytes |
long (i64) | ● |
tantivy_index_blobs (5 cols · partitioned by snapshot_id)
Raw bytes of the files inside a Tantivy index snapshot.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | filename |
string | ● | |
| 3 | bytes |
binary (blob) | ● | |
| 4 | byte_len |
int (i32) | ● | |
| 5 | sha256 |
string | ● |
dwarf_snapshots (9 cols · partitioned by repo)
Metadata of a captured DWARF debuginfo snapshot (Urðr time-machine stub).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | workspace |
string | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | |
| 5 | branch |
string | ● | |
| 6 | ts_micros |
timestamptz | ● | |
| 7 | schema_hash |
string | ● | |
| 8 | blob_count |
int (i32) | ● | |
| 9 | total_bytes |
long (i64) | ● |
dwarf_blobs (5 cols · partitioned by snapshot_id)
Raw bytes of a DWARF debuginfo snapshot.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | filename |
string | ● | |
| 3 | bytes |
binary (blob) | ● | |
| 4 | byte_len |
int (i32) | ● | |
| 5 | sha256 |
string | ● |
gimli_snapshots (9 cols · partitioned by repo)
Metadata of a captured gimli unwind-table snapshot (stub).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | workspace |
string | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | |
| 5 | branch |
string | ● | |
| 6 | ts_micros |
timestamptz | ● | |
| 7 | schema_hash |
string | ● | |
| 8 | blob_count |
int (i32) | ● | |
| 9 | total_bytes |
long (i64) | ● |
gimli_blobs (5 cols · partitioned by snapshot_id)
Raw bytes of a gimli unwind-table snapshot.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | filename |
string | ● | |
| 3 | bytes |
binary (blob) | ● | |
| 4 | byte_len |
int (i32) | ● | |
| 5 | sha256 |
string | ● |
rustdoc_json_snapshots (9 cols · partitioned by repo)
Metadata of a captured rustdoc-JSON snapshot (feeds semver_diffs).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | workspace |
string | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | |
| 5 | branch |
string | ● | |
| 6 | ts_micros |
timestamptz | ● | |
| 7 | schema_hash |
string | ● | |
| 8 | blob_count |
int (i32) | ● | |
| 9 | total_bytes |
long (i64) | ● |
rustdoc_json_blobs (5 cols · partitioned by snapshot_id)
Raw bytes of a rustdoc-JSON snapshot.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | filename |
string | ● | |
| 3 | bytes |
binary (blob) | ● | |
| 4 | byte_len |
int (i32) | ● | |
| 5 | sha256 |
string | ● |
docs_index_snapshots (9 cols · partitioned by repo)
Metadata of a captured docs Tantivy-index snapshot.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | workspace |
string | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | |
| 5 | branch |
string | ● | |
| 6 | ts_micros |
timestamptz | ● | |
| 7 | schema_hash |
string | ● | |
| 8 | blob_count |
int (i32) | ● | |
| 9 | total_bytes |
long (i64) | ● |
docs_index_blobs (5 cols · partitioned by snapshot_id)
Raw bytes of a docs-index snapshot.
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | ◆ |
| 2 | filename |
string | ● | |
| 3 | bytes |
binary (blob) | ● | |
| 4 | byte_len |
int (i32) | ● | |
| 5 | sha256 |
string | ● |
doc_exports (11 cols · unpartitioned)
Rendered-doc export history (full artifact bytes inline, per version).
| # | col | type | req | key |
| 1 | export_id |
string | ● | ◆ |
| 2 | workspace |
string | ● | |
| 3 | repo |
string | ● | |
| 4 | doc_name |
string | ● | |
| 5 | version |
string | ● | |
| 6 | format |
string | ● | |
| 7 | git_sha |
string | ● | |
| 8 | ts_micros |
timestamptz | ● | |
| 9 | sha256 |
string | ● | |
| 10 | byte_len |
long (i64) | ● | |
| 11 | bytes |
binary (blob) | ● |
architecture_wiring (10 cols · unpartitioned)
Per-git_sha coarsened wiring graph — JSON + rendered SVG inline.
| # | col | type | req | key |
| 1 | wiring_id |
string | ● | ◆ |
| 2 | workspace |
string | ● | |
| 3 | repo |
string | ● | |
| 4 | git_sha |
string | ● | ◆ |
| 5 | ts_micros |
timestamptz | ● | |
| 6 | node_count |
long (i64) | ● | |
| 7 | edge_count |
long (i64) | ● | |
| 8 | graph_sha256 |
string | ● | |
| 9 | graph_json |
binary (blob) | ● | |
| 10 | svg |
binary (blob) | ● |
D10 · Fleet Ops & Infra
9 tables · 110 columns. The fleet — idea funnel, populate outcomes, airgap, mcp/agent telemetry, yggdrasil infra.
funnel_events (37 cols · unpartitioned)
Every mutation to the idea-intake DAG (wide, one optional col per variant field).
| # | col | type | req | key |
| 1 | event_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | kind |
string | ● | |
| 4 | idea_id |
string | ○ | |
| 5 | plan_id |
string | ○ | |
| 6 | node_id |
string | ○ | |
| 7 | run_id |
string | ○ | |
| 8 | from_node |
string | ○ | |
| 9 | to_node |
string | ○ | |
| 10 | source |
string | ○ | |
| 11 | text |
string | ○ | |
| 12 | refs |
list<string> | ○ | |
| 13 | decision |
string | ○ | |
| 14 | node_status |
string | ○ | |
| 15 | plan_status |
string | ○ | |
| 16 | why |
string | ○ | |
| 17 | summary |
string | ○ | |
| 18 | planner |
string | ○ | |
| 19 | node_kind |
string | ○ | |
| 20 | targets |
list<string> | ○ | |
| 21 | prompt_excerpt |
string | ○ | |
| 22 | params_json |
string | ○ | |
| 23 | ran_by |
string | ○ | |
| 24 | outcome |
string | ○ | |
| 25 | log_ref |
string | ○ | |
| 26 | produced_commits |
list<struct{repo,sha}> | ○ | |
| 27 | produced_test_runs |
list<string> | ○ | |
| 28 | item_kind |
string | ○ | |
| 29 | mode |
string | ○ | |
| 30 | member |
string | ○ | |
| 31 | role |
string | ○ | |
| 32 | from_lane |
string | ○ | |
| 33 | to_lane |
string | ○ | |
| 34 | component |
string | ○ | |
| 35 | wire_origin |
string | ○ | |
| 36 | wire_status |
string | ○ | |
| 37 | wire_confidence |
double (f64) | ○ |
clone_events (8 cols · unpartitioned)
Per-member clone/fetch/republish populate outcome (why a member failed).
| # | col | type | req | key |
| 1 | ts_micros |
timestamptz | ● | |
| 2 | workspace |
string | ● | ◆ |
| 3 | member |
string | ● | |
| 4 | remote |
string | ● | |
| 5 | op |
string | ● | |
| 6 | status |
string | ● | |
| 7 | detail |
string | ● | |
| 8 | elapsed_ms |
long (i64) | ● |
workspace_events (7 cols · unpartitioned)
Per-(member,step) populate outcome (snapshot/deep-scan/arch/populate).
| # | col | type | req | key |
| 1 | ts_micros |
timestamptz | ● | |
| 2 | workspace |
string | ● | ◆ |
| 3 | member |
string | ● | |
| 4 | step |
string | ● | |
| 5 | status |
string | ● | |
| 6 | detail |
string | ● | |
| 7 | elapsed_ms |
long (i64) | ● |
airgap_events (9 cols · unpartitioned)
Row-level DAG of an airgap pack/move/unfold/install/start run.
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | seq |
long (i64) | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | product |
string | ● | |
| 5 | op |
string | ● | |
| 6 | phase |
string | ● | |
| 7 | status |
string | ● | |
| 8 | detail |
string | ● | |
| 9 | depends_on |
list<string> | ○ |
mcp_requests (4 cols · unpartitioned)
MCP tool-call telemetry (tool, status, latency) — metrics only.
| # | col | type | req | key |
| 1 | ts_micros |
timestamptz | ● | |
| 2 | tool |
string | ● | ◆ |
| 3 | status |
string | ● | |
| 4 | latency_ms |
long (i64) | ● |
agent_model_runs (16 cols · partitioned by run_id)
Local-LLM bake-off matrix cell (agent×model answer + token economics).
| # | col | type | req | key |
| 1 | run_id |
string | ● | ◆ |
| 2 | ts_micros |
timestamptz | ● | |
| 3 | model |
string | ● | |
| 4 | prompt_id |
string | ● | |
| 5 | prompt |
string | ● | |
| 6 | output |
string | ● | |
| 7 | latency_ms |
double (f64) | ● | |
| 8 | tokens_in |
long (i64) | ● | |
| 9 | tokens_out |
long (i64) | ● | |
| 10 | tokens_per_s |
double (f64) | ● | |
| 11 | score |
double (f64) | ● | |
| 12 | ok |
boolean | ● | |
| 13 | error |
string | ○ | |
| 14 | agent |
string | ○ | |
| 15 | cost_usd |
double (f64) | ○ | |
| 16 | mcp_tool_calls |
long (i64) | ○ |
infra_nodes (11 cols · unpartitioned)
Yggdrasil infra-crown nodes (machine/service/vm/container).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | |
| 2 | workspace_name |
string | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | node_id |
string | ● | ◆ |
| 5 | kind |
string | ● | |
| 6 | host |
string | ● | |
| 7 | node_group |
string | ● | |
| 8 | cores |
int (i32) | ● | |
| 9 | mem_mb |
long (i64) | ● | |
| 10 | role |
string | ● | |
| 11 | online |
boolean | ● |
infra_edges (6 cols · unpartitioned)
Infra-crown edges (runs_on/hosts/deploys/member_of).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | |
| 2 | workspace_name |
string | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | from_node |
string | ● | ◆ |
| 5 | to_node |
string | ● | ◆ |
| 6 | rel |
string | ● |
runtime_spans (12 cols · unpartitioned)
Yggdrasil runtime/trace band — one row per executed span (jera job / server op).
| # | col | type | req | key |
| 1 | snapshot_id |
string | ● | |
| 2 | workspace_name |
string | ● | |
| 3 | ts_micros |
timestamptz | ● | |
| 4 | span_id |
string | ● | ◆ |
| 5 | parent_span |
string | ● | |
| 6 | service |
string | ● | |
| 7 | op |
string | ● | |
| 8 | start_micros |
long (i64) | ● | |
| 9 | dur_us |
long (i64) | ● | |
| 10 | job_id |
string | ● | |
| 11 | machine |
string | ● | |
| 12 | status |
string | ● |
Part 2 — the functions dwarves uses over Mímir
Every function below is a read over the warehouse — dwarves (and korp, and the MCP agents) never re-walk git or re-run cargo to answer these; the fact was written once and is queried back. The table column names each function reads are given so a query can be reproduced by hand with warehouse_query.
A. The dependency Mímir — the cross-repo graph
A small model need not reason over the whole graph: these answer blast-radius, build-order and re-run-set questions straight from the latest dep_graph_edges snapshot.
deps_of(repo)
Answers: the direct + transitive repos this repo depends on.
Over: dep_graph_edges (latest snapshot: from_repo → to_repo via_crate, filtered to kind != dev).
dependents_of(repo)
Answers: who depends on this repo — the roots of its blast radius.
Over: dep_graph_edges (reverse walk on to_repo → from_repo).
affected_by_change(repos)
Answers: the full downstream set that must be rebuilt / re-tested when these repos change.
Over: dep_graph_edges (transitive reverse closure), optionally intersected with test_results / test_inventory for the impacted-test list.
build_order()
Answers: a topological publish / build order for the workspace.
Over: dep_graph_edges (Kahn topo-sort over the snapshot).
dep_path(from, to)
Answers: a concrete dependency path between two repos (why A pulls in B).
Over: dep_graph_edges (BFS/shortest path).
changed_since_last_release(repo)
Answers: which repos have commits newer than their last recorded release.
Over: release_lineage (last git_sha per repo) ⋈ dep_graph_edges / release_commits.
B. The syntactic knowledge map (syn tier)
Name-matched, build-free — produced by the syn walker; fast and language-agnostic within Rust.
symbol_lookup(name) / defined_in(name)
Answers: where a symbol is defined (file · line · module · visibility · signature).
Over: symbol_facts.
callers_of(symbol)
Answers: which functions call this symbol (one hop in).
Over: call_edges (callee_ident = symbol) ⋈ symbol_facts for the caller's location.
callees_of(symbol)
Answers: which functions this symbol calls (one hop out).
Over: call_edges (caller_path = symbol).
path_between(a, b)
Answers: a call path linking two symbols.
Over: call_edges (BFS over caller→callee).
C. The resolved knowledge map (SCIP tier)
IDE-grade — every row carries rust-analyzer's fully resolved symbol moniker (trait/macro/type resolution included) and is SHA-historized, so find-usages is precise, not a name match.
knowledge_symbol_lookup(name) / knowledge_defined_in(name)
Answers: the resolved definition site of a symbol at a given git_sha.
Over: scip_occurrences (is_definition = true).
knowledge_callers(symbol) / knowledge_callees(symbol) / knowledge_call_path(a, b)
Answers: resolved callers / callees / a resolved call path — precise across traits and macros.
Over: scip_occurrences (resolved symbol + enclosing-range def spans).
knowledge_context(seed)
Answers: the change-radius / context around a symbol, with its embedding neighbours.
Over: call_edges ⋈ embeddings ⋈ embedding_manifest ⋈ symbol_facts.
dwarf_symbol_lookup / dwarf_defined_in / dwarf_callers / dwarf_callees / dwarf_call_path
Answers: the same lookups resolved from compiled DWARF debuginfo (post-mono, real linkage).
Over: dwarf_snapshots ⋈ dwarf_blobs (the captured debuginfo restored and read back).
D. Coverage, history & semantic search
surface_coverage(workspace)
Answers: the autonom completeness-gate verdict per surface node × mode (covered / allowlisted / missing).
Over: surface_coverage.
test_history(repo)
Answers: the pass/fail/duration history of a repo's test matrix.
Over: test_results (per run×suite×test) — for bench-coupled runs also test_outcomes.
bench_history(repo)
Answers: the metric trend of a repo's benchmarks over time (+ CPU/mem footprint).
Over: bench_runs ⋈ bench_results (scalar metrics) ⋈ bench_telemetry (load profile).
test_coverage(repo)
Answers: source line/region coverage — overall, per-crate, per-file and per ui/grpc/emitter/core boundary.
Over: coverage (rollup) + coverage_fn (per-function boundary rows).
vector_search(query)
Answers: the semantically nearest code chunks to a natural-language or code query, at any historical git_sha.
Over: embeddings (deduped vectors) ⋈ embedding_manifest (occurrence → file/span) ⋈ embedding_snapshots (index identity) ⋈ symbol_facts (readable symbol).
E. The escape hatch
warehouse_query(sql)
Answers: any question — read-only SQL (DuckDB / DataFusion) over all 72 tables at once (joins, window functions, aggregates).
Over: every table in Part 1. Companion warehouse_tables returns the valid FROM names; mimir_sql_template offers ready-made queries.
Runs embedded against the local warehouse (no SQL over the wire). This is how a novel question is answered without shipping new code.
Generated from source on request. Table/column counts are computed, not asserted: 72 tables, 722 columns. To regenerate the diagram + this manual, re-run the schema enumerator against src/warehouse/iceberg_schema.rs.