Skip to content

Demo Walkthrough

This page explains the current OrbitFabric demo mission:

examples/demo-3u/

The demo is synthetic and clean-room. It is not based on a real spacecraft, private mission, proprietary bus map, private payload or operational log.


1. Demo purpose

The demo-3u mission demonstrates the OrbitFabric vertical slice:

Define once. Validate. Simulate. Test. Document. Integrate.

The goal is not to model a real CubeSat.

The goal is to show how a Mission Data Contract can define mission data and operational behavior once, then reuse it across linting, documentation, deterministic scenario execution, runtime-facing contract bindings, ground-facing integration artifacts, Core-owned introspection surfaces, entity index surfaces, relationship manifest surfaces, golden signatures and v1.0 compatibility governance references.


2. Demo structure

The demo lives under:

examples/demo-3u/
├── mission/
│   ├── spacecraft.yaml
│   ├── subsystems.yaml
│   ├── modes.yaml
│   ├── telemetry.yaml
│   ├── commands.yaml
│   ├── events.yaml
│   ├── faults.yaml
│   ├── packets.yaml
│   ├── policies.yaml
│   ├── payloads.yaml
│   ├── data_products.yaml
│   ├── contacts.yaml
│   └── commandability.yaml
└── scenarios/
    ├── battery_low_during_payload.yaml
    ├── nominal_payload_acquisition.yaml
    └── payload_data_flow_evidence.yaml

The mission/ directory contains the Mission Model.

The scenarios/ directory contains executable host-side operational scenarios.


3. Mission Model files

The Mission Model defines the synthetic spacecraft, subsystems, modes, telemetry, commands, events, faults, packets and policies.

It also defines contract domains:

payloads.yaml          -> synthetic IOD payload contract
data_products.yaml     -> synthetic payload data product contract
contacts.yaml          -> synthetic contact/downlink assumptions
commandability.yaml    -> synthetic commandability/autonomy assumptions

The key declared data product is:

payload.radiation_histogram
        producer: demo_iod_payload
        type: histogram
        estimated size: 4096 bytes
        priority: high
        storage class: science
        retention: 7d
        overflow policy: drop_oldest
        downlink policy: next_available_contact

The key declared downlink path is:

primary_ground_contact
        link: uhf_downlink_nominal
        window: demo_contact_001
        flow: science_next_available_contact
        eligible data product: payload.radiation_histogram

The key commandability slice is:

ground_operator
        -> payload.start_acquisition commandability rule

onboard_autonomy
        -> stop payload on low/critical battery faults
        -> recovery intents toward DEGRADED and SAFE

These are contract assumptions only. They do not implement live uplink, operator authentication, real onboard storage, real downlink queues, real contact scheduling, RF behavior, ground operations or recovery execution behavior.


4. Scenarios

The demo includes:

examples/demo-3u/scenarios/battery_low_during_payload.yaml
examples/demo-3u/scenarios/nominal_payload_acquisition.yaml
examples/demo-3u/scenarios/payload_data_flow_evidence.yaml

battery_low_during_payload.yaml demonstrates a degraded recovery path.

nominal_payload_acquisition.yaml demonstrates a nominal payload lifecycle path.

payload_data_flow_evidence.yaml demonstrates the contract-level data-flow evidence path.


5. Scenario: battery low during payload operation

The battery-low scenario demonstrates this host-side sequence:

payload.start_acquisition
-> payload.acquisition_started
-> NOMINAL -> PAYLOAD_ACTIVE
-> battery voltage degradation
-> eps.battery_low
-> PAYLOAD_ACTIVE -> DEGRADED
-> payload.stop_acquisition AUTO_DISPATCHED
-> payload.acquisition_stopped
-> payload.acquisition.active = false
-> SCENARIO PASSED

This remains a deterministic host-side operational scenario.

It does not execute storage, downlink, live uplink or autonomy runtime behavior.


6. Scenario: payload data-flow evidence

The data-flow evidence scenario demonstrates the contract chain:

payload.start_acquisition
-> payload.acquisition_started
-> payload lifecycle ACQUIRING
-> payload.acquisition.active = true
-> DATA_PRODUCT payload.radiation_histogram CONTRACT_EVIDENCE_RECORDED
-> DATA_FLOW payload.radiation_histogram EXPECTATION_MET
-> payload.stop_acquisition
-> payload.acquisition_stopped
-> payload lifecycle READY
-> payload.acquisition.active = false
-> SCENARIO PASSED

The scenario checks that the command-declared data product effect is traceable to:

payload.start_acquisition
        -> payload.radiation_histogram
        -> storage intent declared
        -> downlink intent declared
        -> science_next_available_contact
        -> demo_contact_001

This is deterministic contract-level evidence generated from the Mission Model and scenario expectations.

It is not real payload file generation, onboard storage, downlink queue execution or contact scheduling.


7. Export Core-owned structured surfaces

The stable Core-owned structured surface chain is:

model_summary.json          -> What contract domains are present?
entity_index.json           -> What contract entities are defined?
relationship_manifest.json  -> How are indexed contract entities related?

Export the model summary:

orbitfabric export model-summary examples/demo-3u/mission/ \
  --json generated/reports/model_summary.json

Export the entity index:

orbitfabric export entity-index examples/demo-3u/mission/ \
  --json generated/reports/entity_index.json

Export the relationship manifest:

orbitfabric export relationship-manifest examples/demo-3u/mission/ \
  --json generated/reports/relationship_manifest.json

For demo-3u, the relationship manifest emits 46 relationship records across 17 emitted relationship families.

The stable v1.0 relationship manifest surface admits 19 deliberately narrow relationship families documented in docs/reference/relationship-manifest-surface.md.

These reports are read-only Core-owned structured surfaces.

They do not expose relationship graph behavior, dependency graph behavior, plugin APIs, plugin execution, runtime behavior, ground behavior or Studio-specific APIs.


8. Review stability and compatibility references

v1.0.0 defines the stable Mission Data Contract posture through these references:

Stability and Compatibility Contract
Mission Model Stability Contract
CLI Contract v1
Generated Surfaces Stability
Lint Rule Code Stability
JSON Report Compatibility
Scenario Evidence Stability
Release Compatibility Policy
v1.0 Stable Surface Decision
v1.0 Demo Evidence Chain
v1.0 Compatibility and Migration Notes
Golden Output and Regression Confidence Policy
Extensibility Boundary Contract

These references classify the current Mission Model, CLI, JSON reports, lint diagnostics, generated surfaces, scenario evidence and release compatibility expectations.

They do not add Mission Model semantics, YAML fields, generated surfaces, CLI behavior, report fields, lint diagnostics, scenario behavior, runtime behavior, ground behavior or plugin execution.


9. Generate runtime-facing contract bindings

Generate runtime-facing contract bindings for the same demo-3u Mission Model:

orbitfabric gen runtime examples/demo-3u/mission/

Generated files:

generated/runtime/cpp17/
├── runtime_contract_manifest.json
├── CMakeLists.txt
├── include/orbitfabric/generated/
│   ├── mission_ids.hpp
│   ├── mission_enums.hpp
│   ├── mission_registries.hpp
│   ├── command_args.hpp
│   └── adapter_interfaces.hpp
└── src/
    └── orbitfabric_runtime_contract_smoke.cpp

The generated C++17 files expose the contract surface as deterministic identifiers, metadata registries, command argument structs and abstract adapter interfaces.

They do not implement command dispatch, telemetry polling, scheduling, HAL, drivers, storage, downlink or flight behavior.

They remain public preview disposable generated artifacts in v1.0.0.


10. Validate the generated C++17 host-build smoke target

After generating runtime bindings, run:

cmake -S generated/runtime/cpp17 -B generated/runtime/cpp17/build
cmake --build generated/runtime/cpp17/build

This confirms that the generated contract-binding surface is syntactically valid and host-buildable as C++17.

It does not validate flight behavior.


11. Generate ground-facing integration artifacts

Generate ground-facing integration artifacts for the same demo-3u Mission Model:

orbitfabric gen ground examples/demo-3u/mission/

Generated files:

generated/ground/generic/
├── ground_contract_manifest.json
├── README.md
├── dictionaries/
│   ├── telemetry_dictionary.json
│   ├── command_dictionary.json
│   ├── event_dictionary.json
│   ├── fault_dictionary.json
│   ├── data_product_dictionary.json
│   └── packet_dictionary.json
├── csv/
│   ├── telemetry_dictionary.csv
│   ├── command_dictionary.csv
│   ├── event_dictionary.csv
│   ├── fault_dictionary.csv
│   ├── data_product_dictionary.csv
│   └── packet_dictionary.csv
└── ground_dictionaries.md

These artifacts expose the mission data contract to ground-side review and downstream integration workflows.

They remain public preview disposable generated artifacts in v1.0.0.

They do not implement a ground segment, decoder, telemetry archive, database, operator console, command uplink service, Yamcs integration, OpenC3 integration or XTCE-compliant mission database.


12. Run the scenarios

Battery-low recovery:

orbitfabric sim examples/demo-3u/scenarios/battery_low_during_payload.yaml

Payload data-flow evidence:

orbitfabric sim examples/demo-3u/scenarios/payload_data_flow_evidence.yaml

Expected result:

Result: PASSED

13. Generate scenario outputs

Battery-low recovery outputs:

orbitfabric sim examples/demo-3u/scenarios/battery_low_during_payload.yaml \
  --json generated/reports/battery_low_during_payload_report.json \
  --log generated/logs/battery_low_during_payload.log

Data-flow evidence outputs:

orbitfabric sim examples/demo-3u/scenarios/payload_data_flow_evidence.yaml \
  --json generated/reports/payload_data_flow_evidence_report.json \
  --log generated/logs/payload_data_flow_evidence.log

Generated files:

generated/reports/battery_low_during_payload_report.json
generated/logs/battery_low_during_payload.log
generated/reports/payload_data_flow_evidence_report.json
generated/logs/payload_data_flow_evidence.log

14. Generate mission documentation

orbitfabric gen docs examples/demo-3u/mission/

Generated files:

generated/docs/
├── telemetry.md
├── commands.md
├── events.md
├── faults.md
├── modes.md
├── packets.md
├── payloads.md
├── data_products.md
├── contacts.md
├── commandability.md
└── data_flow.md

A dedicated generator is also available:

orbitfabric gen data-flow examples/demo-3u/mission/ \
  --output-file generated/docs/data_flow.md

None of these pages describes runtime behavior.


15. What the simulator checks

During execution, OrbitFabric checks that:

  • commands exist in the Mission Model;
  • commands are allowed in the current mode;
  • expected command effects are applied;
  • payload lifecycle preconditions are respected;
  • events are emitted;
  • telemetry injections update simulation state;
  • fault conditions are evaluated;
  • mode transitions occur;
  • auto-dispatched recovery commands are recorded;
  • command-declared data product effects record data-flow evidence;
  • data-flow expectations match recorded evidence;
  • storage intent declaration is inspectable;
  • downlink intent declaration is inspectable;
  • eligible downlink flow evidence is inspectable;
  • matching contact window evidence is inspectable;
  • scenario expectations pass.

The simulator does not execute real storage, real downlink, live uplink, contact scheduling or autonomy runtime behavior.


16. Expected final state

At the end of the battery-low scenario:

mode = DEGRADED
payload lifecycle = READY
payload.acquisition.active = false
scenario_status = PASSED

At the end of the data-flow evidence scenario:

mode = PAYLOAD_ACTIVE
payload lifecycle = READY
payload.acquisition.active = false
data_flow_evidence contains payload.radiation_histogram
scenario_status = PASSED

The important contract-level behavior is the evidence path:

command accepted
  -> payload lifecycle and telemetry effects applied
  -> data product evidence recorded
  -> storage/downlink/contact intent checked
  -> scenario evidence produced
  -> runtime-facing bindings generated from the same model
  -> ground-facing artifacts generated from the same model
  -> model summary exported from the same model
  -> entity index exported from the same model
  -> relationship manifest exported from the same model
  -> v1.0 compatibility governance explains current surface stability

17. Clean-room boundary

This demo is deliberately synthetic.

It must not include:

  • real mission names;
  • private subsystem architectures;
  • private bus maps;
  • private payload protocols;
  • real thresholds from private missions;
  • real operational procedures;
  • real telemetry logs;
  • real anomaly sequences;
  • real payload data;
  • real storage or downlink policies;
  • real ground station details;
  • real RF assumptions.

The demo exists to prove OrbitFabric's architecture, not to approximate a real spacecraft.