Algol Terminology¶
Canonical reference for terms and concepts used throughout the Algol platform. Referenced by CLAUDE.md and README.md.
Platform Overview¶
Algol Platform - The whole universe of Algol: devices, cloud, ideas, algorithms, etc.
Algol Cloud - Analytics and device management for field-deployed Algol devices.
Algol Software - The software running on the device.
RET (Rail Edge Telemetry) - A device series deployed in the field, typically for sensor measurement and recording.
RAR (Robust Automotive Router) - A device series deployed in the field, typically for gateway and remote-access roles.
Multi-Tenancy¶
Tenant - Top-level isolation boundary per customer.
Workspace - A logical partition within a tenant for organizing data, devices, and configurations (like a project). A tenant can have multiple workspaces.
Devices & Identity¶
Device - A physical device deployed in the field (RET, RAR, or similar), identified by a unique device ID (e.g. mobgpx181).
User key - A person's identity on the device bus: a key, carrying a label and a role (RFC-034 D2). A CLI user's laptop key, a script's key, a web user's key, and the boot's root key are each one. Its counterpart is a module key, which names a module rather than a person and carries no role; the two are published as nats.userkeyinfo.<key> and nats.modulekeyinfo.<key>, and which one answers for a key is what decides whether a write is checked against a role at all.
The word operator in this repo means the human working on the device, not their key - "an operator plugs in a stick", "operator intent". It named the key class until 2026-09-05, which is why older prose may still read that way.
Role - A named set of rights a person holds, on both doors (the CLI and the web UI). Two are built in and reserved:
keymaster- everything, including the auth verbs that change the identity registry (algol nats ls | enrol | revoke). It holds the keys, which is what the name says. Host root is one every boot.superuser- everything except those verbs.
Every other role is a cfg.role.<name> config naming what its holders may read, patch and write (RFC-035). admin and operator are not built in - they are ordinary configured names, deliberately left free for a deployment to use for its own roles and logins.
Component System¶
All addressable entities in Algol are identified by a Component Reference.
Component - A uniquely addressable unit identified by a three-part dot-separated reference:
Example:gps.channel.position, adc.channel.ain2, bbc.bcapp.main
ComponentGroup - A partial component reference identifying a module + component type, without a specific instance:
Example:gps.channel, adc.channel
ModuleId - The top-level system or module identifier (e.g., adc, gps, bbc).
ComponentName - The component type within a module (e.g., channel, app, sensor).
ComponentId - The specific instance identifier within a component type (e.g., ain2, position, main).
Attribute - A named field within a component, identified by appending the field name to a component reference:
Example:gps.channel.position.lat, adc.channel.ain2.value
Measurement System¶
Measurement - A data collection with a precise start time and eventually an end time. Triggered (and extended when needed) on the device by certain conditions (e.g. gps.channel.direction.speed > 0.2).
Measurement ID - Unique identifier for a measurement (e.g. FfdbMaYBcRVZBPHYVKSdaKYKZe).
Sequence Number - A monotonically increasing counter per device per measurement, independent of time (e.g. 0000JVXdECy).
Recording - A persisted segment of a measurement, split by (device, measurement id, channel, part), stored in a specific format (e.g. parquet).
Data Concepts¶
Sensor - A physical or logical sensor managed by a Data Source. Examples: GPS module, IMU, pressure sensor, magnetic field sensor.
Data Source - Responsible for managing its sensors/channels and publishing data. Samples from a single Data Source share a common timestamp per sampling cycle. A Data Source advertises its channels periodically.
Data Stream - A continuous flow of time-stamped data.
Data Frame - A batch of samples, typically with time information attached.
Data Channel - A named, typed bundle of Data Columns from a Data Stream. Managed and advertised by a Data Source. Identified by a Component Reference (e.g. gps.channel.position).
A channel requires at least one columnSelector processor. Processors handle transformations, resampling, and validation of incoming Data Frames. Channels can be (re-)configured at runtime.
Channel Type - Classifies the shape and semantics of a channel's columns:
- Scalar - Numeric values (default)
- GeographicCoordinate - GPS position data (lat, lon, alt)
- GPSVelocity - GPS direction data (speed, track, climb)
- CartesianCoordinate - Cartesian coordinates (x, y, z - e.g. gyro, accelerometer)
- MonoPCMAudio16 - PCM 16-bit mono audio
Channel Column - A single named column within a channel. Columns within the same channel share a timestamp (that's the reason for bundling them). Also referred to as subchannel in some contexts. Example: lat, lon from the gps.channel.position channel.
Channel Reference (ChannelRef) - The Component Reference of a Data Channel (e.g., adc.channel.ain2, gps.channel.position).
AggChannelColumn - A channel column with an aggregation function applied (e.g., adc.channel.ain2.value:min).
Channel Examples¶
| ChannelRef | Type | Columns |
|---|---|---|
gps.channel.position |
GeographicCoordinate |
lat (deg, float64), lon (deg, float64), alt (m, float64) |
gps.channel.direction |
GPSVelocity |
speed, track, climb |
adc.channel.ain0 |
Scalar |
ain0 (raw, uint32) |
pressure.sensor.main |
Scalar |
pres (mbar, float64), temp (degC, float64) |
Data Processing¶
Aggregation - Statistical operation applied to time-series data. Supported: min, max, count, sum.
Unified Data Format¶
All data sources publish data in a columnar, batched format over NATS, supporting: - Column-based data with named typed columns - Meta information (stats, row count, column names, types, sampling rate) - Batching (e.g. 10k samples per message)
Supported column types: float64, int32, uint32, unix nanosecond timestamp.
Advertisement¶
Advertisement - A periodic broadcast of a component's configuration (channel config, trigger config, etc.) over NATS to ensure other components have up-to-date knowledge before they need it (e.g. before starting a measurement or applying reconfiguration).
Trigger System¶
Trigger - A rule consisting of a match condition and an action. When the match is satisfied, the action executes (e.g. start a measurement, run a command). Triggers advertise their configuration periodically.
Events¶
Event - A discrete one-time occurrence on the event2 context (local.<module>.event2.<eventName>.<entityId>). An event announces that something just happened; current state lives on config status or periodic telemetry. Events are not durable. See Events.
Configuration¶
Configuration Store - The central service for managing component configurations (owned by the configurer). Key operations: - Update - updates the running configuration for a given component - Commit - persists the latest intent of non-read-only configurations to disk for use on next startup, whether or not the module has answered it
Bundle - The per-config attribution and exclusivity key, carried next to managedBy on the config record and startup file: a name one Bundle Variant at a time occupies. It has no file of its own and no config-store presence; it exists while a variant of it is installed or a running config carries its stamp. Set only by the bundle verbs: an activation stamps the members it places or adopts, and bundle update --adopt stamps the refs it adds (taking one over from another bundle only with --force) and unstamps the refs it removes. See RFC-014.
Bundle Variant - One installed set of configs of a Bundle, stored as one file (/var/algol/cfg/bundles/<bundle>@<variant>.json), installed inert and activated explicitly. Several variants of one Bundle may be installed and activating one evicts what another placed; "active" is derived per variant from the content, never stored. Variants are unordered - retx@v1 / retx@v2 are alternatives, bcapp@1.0 / bcapp@1.1 succeed one another, and only the author's naming says which.
Bundle Address - <bundle>@<variant>, how a Bundle Variant is named on the command line, in a manifest key and in a file name (retx@v2). A bare bundle addresses every variant of it, which some verbs accept. Unrelated to component addressing: a variant is not a component ref part and never appears in a component ref or a NATS subject.
Manifest - The transport artifact for configuration: bundle variants + an ordered activation intent + optionally plain device config. The only artifact that travels (a single variant ships as a one-variant manifest); also the backup/restore form. Distinct from the usbexport destination manifest (RFC-024).
Unattributed - A config no bundle placed (no bundle stamp). The default state of every config, and the state bundle update --remove --adopt returns a member to; invisible to teardown (config delete --bundle) and claimable only via explicit adoption (bundle activate --adopt, bundle update --add --adopt).
Key Modules¶
| Module | Role |
|---|---|
board-controller |
Controls the MCU on board |
configurer |
Configuration management (disk persistence) |
gps |
GPS module control, positional data |
nats |
Central NATS communication broker |
trigger |
Trigger management |
sys |
System management (network, GSM, DNS, ...) |