Glossary
The UI and the user docs use product terms. The code often uses other names. This page maps one to the other.
The UI never says “field”. The code does: a Field is any one entry in a map’s catalogue,
whether a measure, a tag or a connection type.
| Product term | In the code |
|---|---|
| Measure | A row in network.measure. A node’s value is a row in network.node_measure (node_id, measure_id, value). A Field with valueType: 'numeric', subjectType: 'node'. |
| Tag | A row in network.tag. A node carrying it is a row in network.node_tag (node_id, tag_id, tag_group_id). A Field with valueType: 'boolean', subjectType: 'node'. |
| Tag group | A row in network.tag_group. tag.tag_group_id points to it. Every group is exclusive: a node holds at most one tag per group. Not a Field. |
| Connection type | A row in network.connection_type. A connection’s type is network.connection.metric_id, and its value is connection.value (text). A Field with subjectType: 'connection'. On the client a connection’s type is GraphEdge.fieldId. |
| Field (code only) | The Field interface in types/field.ts, a single view over the three catalogue tables. server/functions/fields.ts builds it (rowToMeasure, rowToTag, rowToConnectionType) and is the only code that knows there are separate tables. |
| (kind of field) | FieldKind = 'measure' | 'tag' | 'connection_type', the table a field lives in. kindFor(subjectType, valueType) derives it. |
| Catalogue, definitions | The map’s measures, tags, tag groups and connection types. Every catalogue row has a map_id; nothing in network has an org_id. |
| Property | A key in the properties jsonb column on network.node or network.connection. Freeform, not in the catalogue. |
| Note (on a connection) | connection.properties.reason. The key is NOTE_PROPERTY_KEY (components/map-editor/inspector/connection-property-options.ts) and the only entry in RESERVED_CONNECTION_PROPERTY_KEYS (types/connection.ts). The Properties list hides it. |
| Undefined connection | A connection with no type (metric_id null) and no properties. isConnectionDefined in graph/definedness.ts decides. The editor lists them under Undefined connections; Visualise drops them before computing weights. A connection with only a note counts as defined. |
| Placed, unplaced | network.node.pos_x/pos_y set or null. getGraph returns both; the editor shows placed nodes and lists the rest under Unplaced. set_node_positions places and unplaces. |
Workspace
Section titled “Workspace”| Product term | In the code |
|---|---|
| Edit, Visualise, Table | MapMode = 'edit' | 'visualise' | 'table' (components/map-workspace/mode.ts), set by the mode search param on the map route. Rendered by MapEditor, MapVisualiser and MapTable, all three mounted at once by MapWorkspace. |
| Workspace panel | The left panel: map-wide lists and settings. InspectorSidebar in Edit (the Elements panel: cards Nodes, Connections, Tags, Measures), VizSidebar in Visualise (tabs Visualisation, Visibility filter, Settings). Built from components/map-workspace/layout/side-panel.tsx. |
| Details panel, entity dock | The right panel for the one selected node or connection. EntityDock (components/map-workspace/layout/entity-dock.tsx), collapsed to a rail labelled Details. |
| Inspector | The contents of the entity dock: NodeInspector or EdgeInspector. Visualise mounts the same components without their editing controls. InspectorSidebar is the Edit workspace panel, not the dock. |
Visualise
Section titled “Visualise”| Product term | In the code |
|---|---|
| Landscape | viz_type: 'topology' |
| Bridges | viz_type: 'betweenness_centrality' |
| Capabilities | viz_type: 'metric_clustering', clustered by cluster_tag_ids |
| Exact, Overlap, Similarity | cluster_method: 'exact' | 'overlap' | 'similarity' |
The labels and what each mode controls are in VIZ_MODES (components/map-visualiser/lib/viz-modes.ts).
Draw the map from sets config.weight_config, a WeightMode (graph/weight.ts). The
control is in components/map-visualiser/panels/connections-panel.tsx.
| UI choice | WeightMode |
|---|---|
| All connection types, Count once | { kind: 'presence', exclude? } (the default) |
| All connection types, Pull closer the more they have | { kind: 'count', exclude? } |
| Leaving types out under All connection types | the exclude list of type ids |
| One connection type, Connected or not | { kind: 'type', fieldId, byValue: false } |
| One connection type, Weighted by its value | { kind: 'type', fieldId, byValue: true, excludeUnvalued? } |
| Custom mix (score each type) | { kind: 'score', scores, byValue?, excludeUnvalued? } |
Visibility filter sets config.filter (types/visualisation.ts). It hides connections
and greys out nodes without changing weights or the layout.
| Key | Meaning |
|---|---|
filter.fieldIds |
Connection types to show. Empty means all. |
filter.valueRanges[typeId] |
{ min?, max?, includeEmpty } for a type that records a value. |
filter.time |
{ from?, to?, asOf?, includeUndated } (TimeFilter in lib/connection-dates.ts). |
filter.nodes |
A NodeCriteria: nodes it doesn’t pick out grey out. |
Nodes (Visualisation tab) sets which nodes the map is drawn from: unplaced ones
while config.include_unplaced_nodes is off, and those config.node_scope (a
NodeCriteria) leaves out, are removed before anything is weighted or laid out.
A NodeCriteria is { tags?: { op: 'any' | 'none', tagIds, includeUntagged? }[], measures?: Record<measureId, ValueRange> }, every condition applying. The rule is
graph/node-criteria.ts, shared by both.
| Product term | In the code |
|---|---|
| Saved view | A row in app.saved_view holding viewport_state, visualisation_config and step. The SavedView type. Reads and writes in server/lib/saved-views.ts, behind the server functions in server/functions/visualisation.ts and the public API’s view routes. |
| Progressive reveal, step | Saved views with a step (1, 2, 3, …), each leaving out some nodes and connections (node_scope, connection_exclusions, leave_out_unconnected). Stepping from one to the next carries the layout on. See Visualisation internals. |
| View parameters | A view’s visualisation_config, described by the zod schema in lib/view-parameters.ts. Edited raw in the hidden panel (Shift + Alt + P), and through the public API. |
| Force parameters | The numbers each lens’s force layout runs on (lib/force-parameters.ts), overridden per view in forces. |
Editing history
Section titled “Editing history”| Product term | In the code |
|---|---|
| Edit session | A row in app.edit_session. Editor changes go into the user’s one active session on the map (ensureActiveSession). An import or API write gets a closed session of its own (recordStandaloneChange). |
| Atomic change | A row in app.atomic_change with event_type, forward and reverse payloads and a stack_index. Written by captureChange (server/lib/change-capture.ts) on every change to a map’s data or layout. Its type is in DATA_EVENT_TYPES or LAYOUT_EVENT_TYPES. |
| Recipe, About this map | A row in app.map_recipe: body_md markdown on how the map’s data was made, shown as Where it comes from. “Out of date” is stale from app.map_recipe_state. “Confirmed” is validated_by/validated_at; the API calls it validated. See Editing internals. |
| Revision | app.revision, a snapshot of a collapsed session. Nothing writes it yet: collapseSession, undoChange, redoChange and the revision reads throw NOT_IMPLEMENTED. |
People and permissions
Section titled “People and permissions”| Product term | In the code |
|---|---|
| Admin | organisation_member.role = 'org_admin' |
| Member | organisation_member.role = 'member' |
| System admin | A row in app.system_admin, global rather than per org. app.user_is_system_admin(), assertSystemAdmin(). assertOrgRole lets a system admin through; the network RLS policies don’t. |
The role enum app.org_role also contains 'system_admin'. Membership rows use only
org_admin and member. See Auth and permissions.
Localities
Section titled “Localities”Comments in server/ name the implementation blueprint’s work areas. They group the
server functions:
| Locality | Area | File |
|---|---|---|
| 01 | Manual editing | server/functions/manual-editing.ts |
| 02 | Data upload and ingestion | server/functions/data-upload.ts |
| 03 | Network visualisation | server/functions/visualisation.ts |
| 04 | Network storage and revision | server/functions/revision.ts |
| 05 | Workspace and permissions | server/functions/workspace.ts |
| 06 | Maintenance | server/lib/maintenance.ts |
fields.ts, profile.ts and setup.ts carry no locality number.