← all components

Registries & Sources

The two views that show the Well as a ledger rather than a field. Registries is the Sprawler side — every source decomposed into coded, cited, status-bearing atoms across seven typed registries. Sources is mimir.source itself: what has been ingested, from where, under what consent.

00

Registry navigation

Seven registries, each with a one-letter code, a colour and a blurb: decisions close questions, actions carry an owner, features describe the thing being built, questions are open loops, contradictions are two atoms that cannot both hold, sources are the provenance spine, entities are who and what it is about.

🗃️
Registry tabs
Multi-select, not radio: turning on Decisions and Contradictions together is a legitimate view. Each tab shows the letter code in a solid pill of its registry colour, and its live row count. An active tab takes its own colour for border and ink; the title attribute carries the registry's blurb.
ui/src/views/registries/index.tsx · REGISTRY_META
All seven · Decisions on
Filter controls
Free text across code, statement and citation, plus six status chips. The clear control only appears once something is actually filtered — no permanently-visible "clear" that does nothing nine times out of ten.
ui/src/views/registries/index.tsx · .reg-controls
Filtered
Unfiltered · no clear control
Sortable header
Three of six columns sort: code, status, last touched. Clicking the active column flips direction; clicking a new one resets to ascending — the behaviour people expect without being told. The arrow only renders on the active column.
ui/src/views/registries/index.tsx · head()
Active · ascending
Active · descending
Inactive
Σ
Row counter
Filtered count over corpus total, so the header always answers "how much of the ledger am I looking at". The denominator is summed from the per-kind counts rather than stored separately, which means it cannot drift from the tabs above it.
ui/src/views/registries/index.tsx · .reg-total
Filtered
214rowsof 1,610
Unfiltered
1,610rowsof 1,610
01

The ledger table

Six columns: code, statement, status, sources, tags, last touched. Rows are buttons, not table rows, because the whole row opens a drawer. Paging is a plain "load 60 more" — honest about the fact that nothing here is virtualised yet.

Registry table
Code renders in its registry colour, mono. Status is a trajectory pill. Citations render as bare [S###] ids in mono — the same notation the Sprawler corpus itself uses, so a row here can be grepped for in the source registry file unchanged.
ui/src/views/registries/index.tsx · .reg-table
Populated · one row selected
statementsourcestags
Empty & loading states
Two distinct messages that are easy to conflate and must not be: "reading the registries…" means the provider has not answered yet; "no rows match that filter" means it did and there is nothing. Conflating them makes a slow load look like a bad filter.
ui/src/views/registries/index.tsx · .reg-empty
Loading
reading the registries…
No match
no rows match that filter
Load-more control
States exactly how many more rows the next press will add and where you currently are: load 60 more · 60 of 214. It disappears once the page holds everything. not virtualised — at 1,610 rows this is a real scaling limit, tracked on the issues page.
ui/src/views/registries/index.tsx · PAGE = 60
More available
Last page
📑
RowDrawer
The full statement, its facets, its detail paragraph, the provenance chain as clickable well://source/ permalinks, its outbound [[id]] links (which jump between rows without leaving the drawer), and a jump into the Constellation node if the row has one.
ui/src/views/registries/RowDrawer.tsx
Open
Decisions · decision

D-001

Locked: the confidential firewall — ruling holds until the next review.

activebizinternal
last touched
Jul 19, 2026
registry
D
Provenance chain
Links · and the empty case

no outbound [[id]] links

02

Sources

Grouped by connector, because "how stale is Slack" is a more useful question than "how stale is source 47". Consent state and classification live on the source, so they are inherited by every downstream atom and survive synthesis — which is why they are shown here rather than only on rows.

Source totals
Sources, items, chunks — the three levels of the ingest spine, summed live from the connector groups so they cannot disagree with the table underneath.
ui/src/views/Sources.tsx · .src-totals
Current corpus
188 sources1.6k items1.6k chunks
🗄️
Connector group
One collapsible card per connector, with source count, item count, chunk count, and — the number that matters most operationally — how old its sync cursor is. Only one group is open at a time; the first opens on load rather than leaving the page blank.
ui/src/views/Sources.tsx · .src-group
Collapsed · three cursor states
⏱️
Sync-cursor badge
Three bands, thresholded in one line of code: under 6 hours is fresh, under 48 is warm, beyond that is cold. The label unit adapts too — minutes under an hour, hours under two days, days beyond. A stalled connector is meant to be visible without reading a number.
ui/src/views/Sources.tsx · cursorClass / cursorLabel
fresh · warm · cold
cursor 42mcursor 18.4hcursor 6.2d
Source table
Seven columns inside an opened connector: title, external ref, consent, classification, items, chunks, sync age. The external ref is the real thing — a registry path, a channel id, a folder id — because that is what makes a row checkable against the source system.
ui/src/views/Sources.tsx · .src-table
Open group
titleexternal_refconsentclassitemschunkssynced
Source drill-in items
The drawer's item list: title, date, an excerpt, author and chunk count. This is the level at which a human can confirm the pipeline actually parsed something rather than trusting the count above it.
ui/src/views/Sources.tsx · .src-items
Three items
  • D-001 · the confidential firewallJul 19, 2026

    Locked: the confidential firewall — ruling holds until the next review. Classification is stamped at ingest by inheritance, never retrofitted.

    Malkio · 1 chunks
  • D-002 · hot-vein selectionJul 11, 2026

    Narrowed: hot-vein selection. Only material that earns synthesis gets it; everything else stays cheap text.

    Malkio · 1 chunks