Architecture Decisions
GoMyRobotOS architecture changes are made through Architecture Decision Records. Every ADR has: context, decision, consequences, status. The M0 baseline is ADR-0001 through ADR-0018.
Rules: the next free number is used for new decisions; an accepted ADR is never silently edited, it is superseded by a new ADR that points back; existing numbers are never re-used.
Index
ADR |
Title |
Status |
|---|---|---|
0001 |
GoMyRobotOS is a partition and execution platform |
Accepted |
0002 |
Partition Contract is the central abstraction |
Accepted |
0003 |
Hypervisors are target-specific backends |
Accepted |
0004 |
x86-64 is the initial development/reference platform |
Accepted |
0005 |
NG-ULTRA is the primary flight-oriented reference |
Accepted |
0006 |
HPSC is the initial RISC-V research target |
Accepted |
0007 |
GoMyRobotRT is separate from GoMyRobotOS |
Accepted |
0008 |
ROS 2 Rolling is the primary ROS 2 documentation reference |
Accepted |
0009 |
GoMyRobotBSP owns target build/image realization |
Accepted |
0010 |
Fault and radiation modeling belongs outside GoMyRobotOS |
Accepted |
0011 |
GoMyRobotGuard must be independent of the failure domain it recovers |
Accepted |
0012 |
Verification and assurance are external platform services |
Accepted |
0013 |
Documentation is versioned with the software |
Accepted |
0014 |
IPC is described by channel class, not transport mechanism |
Accepted |
0015 |
Backends publish a capability manifest; no silent semantic downgrade |
Accepted |
0016 |
Guard independence is staged (0 / 1 / 2) |
Accepted |
0017 |
WCET claims carry an evidence class (proven / measured / unbounded) |
Accepted |
0018 |
The documentation site is the architecture source of truth |
Accepted |
ADR-0001 GoMyRobotOS is a partition and execution platform
Context. The GoMyRobot ecosystem spans flight runtimes, hypervisors, BSPs, verification, and assurance; a failure mode to avoid is one “everything safety-related” product.
Decision. GoMyRobotOS is a partition and execution platform: a partition model, a machine-readable execution contract, an IR, a target-backend interface, a deployment/orchestration layer, a runtime integration layer, a partition health/recovery interface, and a source of configuration and deployment metadata.
Consequences. Every other capability (RTOS, hypervisors, builds, fault injection, verification, assurance, simulation) is a sibling product; GoMyRobotOS connects to them via artifacts, not by embedding them.
Status. Accepted.
ADR-0002 Partition Contract is the central abstraction
Context. Two abstraction candidates: “generate a hypervisor configuration” vs. “define what a partition is allowed and required to do”.
Decision. The central abstraction is the latter, the Partition Contract. It expresses intent and constraints, never backend syntax; backend-specific data lives in the backend profile.
Consequences. The contract is readable across targets; assurance traceability (requirements → fields → tests) is contractual; any field that smells mechanism-specific is a design bug.
Status. Accepted.
ADR-0003 Hypervisors are target-specific backends
Context. Xen, XtratuM/XNG, and (research) hardware WorldGuard all “do isolation”; making any one of them the product abstraction would end portability.
Decision. A backend is the only layer that may know mechanism names; a hypervisor is one kind of backend. Contract and IR are written so that no Xen/XtratuM concept appears in them.
Consequences. New mechanisms (bare metal, native hardware partitioning) join without contract changes; backend validation is its own documented work per target.
Status. Accepted.
ADR-0004 x86-64 is the initial development/reference platform
Context. The platform must be iterable in CI, cheap to run, and representative enough to develop backends on.
Decision. x86-64 (QEMU-capable) is the development/reference platform; it is not a flight processor and never carries flight timing claims.
Consequences. M1 is an x86-64 milestone; cross-target results must be repeated on flight hardware to count as flight evidence.
Status. Accepted.
ADR-0005 NG-ULTRA is the primary flight-oriented reference
Context. A flight reference with an existing RTEMS + XtratuM/XNG ecosystem (ARMv8-R BSP, ecosystem support) keeps the flight path realistic.
Decision. NG-ULTRA is the flight-oriented reference; the M2 gate is that it executes the same conceptual flight partition as M1.
Consequences. The NG-ULTRA backend targets XNG/XtratuM + RTEMS + GoMyRobotRT; recorded ecosystem facts stay labeled as ecosystem facts.
Status. Accepted.
ADR-0006 HPSC is the initial RISC-V research target
Context. Next-generation RISC-V with hardware partitioning (WorldGuard), virtualization, and an independent system controller is the natural third data point for the portability research, but the Xen RISC-V guest stack is still an active upstream development area.
Decision. PIC64-HPSC is a
Researchtarget (M4), with staged work (RTEMS baseline; WorldGuard; Xen feasibility). No production claim on it, ever, until a gate passes.Consequences. RP1 becomes a three-point comparison when M4 lands; HPSC failure is a research finding, not an architecture failure.
Status. Accepted.
ADR-0007 GoMyRobotRT is separate from GoMyRobotOS
Context. Robotics middleware execution (RTEMS, executors, ROS 2 concepts, hardware abstraction) has a different change rhythm from an execution-environment platform.
Decision. GoMyRobotRT remains its own product: GoMyRobotRT executes the workload; GoMyRobotOS controls the execution environment in which the workload runs. GoMyRobotOS consumes/hosts GoMyRobotRT; it does not include it.
Consequences. All ROS 2 / RTEMS execution semantics are documented on the GoMyRobotRT side; GoMyRobotOS keeps workload-agnostic contract fields.
Status. Accepted.
ADR-0008 ROS 2 Rolling is the primary ROS 2 documentation reference
Context. Multiple ROS 2 distributions exist (Humble, Iron, Jazzy, Kilted, Rolling); mixing editions silently produces documentation drift.
Decision. ROS 2 Rolling is the sole authority for ROS 2 concepts/APIs in all GoMyRobotOS documentation; other editions appear only with explicit historical-comparison labels. No replacement names are invented for standard terms.
Consequences. All “standard behavior” statements elsewhere in the documentation carry Rolling links; concept support tables ([compatibility/ros2] (../compatibility/ros2)) are checked against Rolling terminology.
Status. Accepted.
ADR-0009 GoMyRobotBSP owns target build and image realization
Context. Boot artifacts, hypervisor configuration, RTEMS configuration, device trees, Linux images, memory maps, deployment manifests, hashes, someone must own producing them from profiles.
Decision. GoMyRobotBSP consumes (contract + hardware profile + backend profile + boot profile + runtime profile) and produces the build artifacts. GoMyRobotOS declares what; BSP realizes which artifacts.
Consequences. Backend-specific data lives in the backend profile (not the contract); BSP outputs are the source of deployment identity and hashes used by assurance; Yocto/OpenEmbedded is a BSP tool for Linux-domain images, never a description of GoMyRobotOS itself.
Status. Accepted.
ADR-0010 Fault and radiation modeling belongs outside GoMyRobotOS
Context. Fault generation (software faults, hardware fault models, communication faults, radiation/SEU models) is a different discipline from fault response policy.
Decision. GoMyRobotOS declares what a partition does when a fault occurs (contract
recovery.*); GoMyRobotFault generates faults and models radiation effects; QEMU models effects and never reproduces radiation physics.Consequences. “Radiation” and “robustness” are results of that external stream only if measured; the OS side stays a semantics + logging obligation.
Status. Accepted.
ADR-0011 GoMyRobotGuard must be independent of the failure domain it recovers
Context. A recovery mechanism that lives inside (or depends exclusively on) the domain it recovers fails when that domain fails.
Decision. The recovering component (GoMyRobotGuard) must not depend exclusively on the component it recovers; on HPSC the independent system controller is the natural substrate (research). GoMyRobotOS specifies recovery semantics; Guard implements independent recovery.
Consequences. Contracts carry
escalation_policy; recovery validation explicitly includes service-domain crash, management-domain failure, and corrupted image classes.Status. Accepted.
ADR-0012 Verification and assurance are external platform services
Context. Coupling verification execution or assurance-argument construction into the platform couples change rhythms and blurs evidence/interpretation boundaries.
Decision. GoMyRobotOS emits evidence inputs (config manifest, required properties, test requirements, deployment metadata, recovery log); GoMyRobotVerify and GoMyRobotAssure are external consumers.
Consequences. The documentation claims no certification, WCET, or immunity from interference; the assurance data plane is documented as a data plane; future assurance statements must trace to external processes.
Status. Accepted.
ADR-0013 Documentation is versioned with the software
Context. Architecture and contract are the product at M0-M1; undocumented or separately-versioned documentation would drift from implementation.
Decision. The documentation lives in-repo (
docs/), is built by CI, is versioned with the code, and carries the project’s status-label discipline; the GitHub Pages site is the host.Consequences. Doc build failures block merges (CI
docsjob); maturity labels are mandatory on every capability statement; the ADR process documented here is that authority.Status. Accepted.
ADR-0014 IPC is described by channel class, not transport mechanism
Context. The communication references in the v2 architecture draft enumerated transport mechanisms (grant tables, event channels, virtio), which would couple the contract to a specific backend. The contract must express only the channel semantics (ADR-0002, ADR-0003).
Decision. Communication endpoints of a partition are typed by channel class,
sampling(periodic state, last value wins) orqueuing(bounded queue with explicit overflow policy), and carrymax_message_size,max_rate_hz,latency_budget_us,buffer_ownership, and, for queuing channels,overflow_policy. Mapping those semantics to a concrete mechanism is backend implementation detail and must never appear in the contract or the IR.Consequences.
communication.endpointsfields grow (all optional, schema-compatible). Backend documentation may explain mechanisms; contract fields that introduce mechanism names must be rejected in review.Status. Accepted.
ADR-0015 Backends publish a capability manifest; no silent semantic downgrade
Context. A single target cannot realize every contract field at the same fidelity (cache-partitioning granularity, DMA remap, interrupt virtualization). A compile that silently drops a field is a correctness failure: the evidence graph would then claim semantics the target does not provide.
Decision. Each backend publishes a capability manifest (which contract fields and value ranges it realizes, at what fidelity). Before compile, the pipeline checks the contract’s
capabilities_requiredlist against it: no match fails the build; partial match compiles only with a reviewable waiver recorded in the evidence graph. Rule: no silent semantic downgrade.Consequences. The manifest concept freezes with M0; its schema is not yet published (planned with the M1 parser/validator). The contract gains
partition.capabilities_required(optional).Status. Accepted.
ADR-0016 Guard independence is staged (0 / 1 / 2)
Context. “Guard is independent” is a spectrum, not a boolean: a co-resident software guard cannot claim against a common-mode hypervisor failure, while a companion system controller can (ADR-0011).
Decision. Guard independence operates at three stages: 0 software guard (no common-mode protections claimed), 1 companion MCU / system controller (common-mode independence), 2 validated with per-fault-class detect / contain / recover timing in the evidence graph. The contract declares
recovery.guard_independence_stage; every recovery claim records the stage it was demonstrated under.Consequences. M1-M3 operate at stage 0; M5 requires stage recording on claims; M6 requires stage-2 quantification for the reference system. A specific platform’s system controller is one possible stage-1 realization, not a core assumption.
Status. Accepted.
ADR-0017 WCET claims carry an evidence class
Context. “Measured under budget” and “WCET proven” are different claims; presenting one as the other is a classic over-certification error in documentation.
Decision. Every timing claim carries an explicit evidence class:
proven(formal / static WCET analysis),measured(validated under a defined stress pattern), orunbounded. The contract carriesexecution.timing_budget.wcet_bound_usandwcet_evidence_class; documentation and artifacts must never presentmeasuredasproven.Consequences. The
timing_boundtest and every timing assertion in M3+ comparison pages must state the class; a timing claim without a class is a review defect.Status. Accepted.
ADR-0018 The documentation site is the architecture source of truth
Context. The M0 freeze initially named the root-level
GoMyRobotOS.mdas the source of truth and the rendered site as a secondary rendering, inviting drift between the two. The site is the visible, versioned, CI-built artifact.Decision. This documentation site’s sources (
docs/) are the primary source of truth for architecture, contract, and process.GoMyRobotOS.mdanddocs.mdare removed; the normative scope notes of the removed document (naming rule, v1 exclusions, platform position) are captured in the frozen baseline page.Consequences. Architecture changes are made against
docs/pages through this ADR process; nothing may cite the deleted root documents.Status. Accepted.
Supersession log
None yet. When an ADR is superseded, it stays as Accepted, superseded by ADR-XXXX with a dated note here.