Skip to content

Commit b17d86a

Browse files
authored
Add FlowRouter V0 POC hardware package
Co-authored-by: FlowmemoryAI <283694809+FlowmemoryAI@users.noreply.github.com>
1 parent 2f652d2 commit b17d86a

34 files changed

Lines changed: 2661 additions & 0 deletions
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Decision 0001: FlowRouter V0 Scope
2+
3+
Date: 2026-05-13
4+
5+
## Status
6+
7+
Accepted for V0 research package.
8+
9+
## Context
10+
11+
FlowRouter needs to be concrete enough for hardware, dashboard, services, and field-test agents to share packet shapes and operational assumptions. It also needs strict boundaries so the project does not overclaim internet replacement, production manufacturing, hardware trustlessness, appchain operation, or LoRa bandwidth.
12+
13+
## Decision
14+
15+
FlowRouter V0 is a production-shaped proof-of-concept package built around certified commodity router/radio hardware, Raspberry Pi or mini PC compute, NVMe/local cache, Meshtastic/LoRa control signaling, NFC Memory Cartridge metadata, FlowCore light-pipe status, local dashboard feeds, simulator packets, and controlled field-test plans.
16+
17+
V0 packet schemas and simulator outputs are advisory interfaces for later consumers. They are not production protocol commitments.
18+
19+
## Boundaries
20+
21+
- No ISP replacement claim.
22+
- No broadband over LoRa/Meshtastic.
23+
- No custom RF board or antenna design.
24+
- No production manufacturing commitment.
25+
- No passive income promise.
26+
- No full trustlessness claim.
27+
- No production L1/appchain operation.
28+
- No validator or data availability role for hardware nodes.
29+
- No final CAD until physical measurements are sufficient.
30+
31+
## Consequences
32+
33+
- Hardware work can advance through docs, schemas, fixtures, simulator output, and field-test plans before physical CAD.
34+
- Future services and dashboards can consume deterministic sample feeds without depending on hardware availability.
35+
- Hardware security assumptions remain conservative: physical tampering, spoofing, replay, unauthenticated messages, sidecar bandwidth limits, power/thermal risk, storage failure, and operator key exposure are in scope.

docs/SECURITY_MODEL.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,16 @@ Live V0 registries and schedulers are commitment surfaces, not complete trust sy
117117
- Physical tampering
118118
- Unsafe power or enclosure assumptions
119119
- Overestimating LoRa or Meshtastic bandwidth
120+
- Treat FlowRouter v0 devices as physically exposed research rigs until a later identity and attestation model exists.
121+
- Keep hardware control surfaces local-only by default, and require explicit authentication before any radio message changes local state.
122+
- Treat local caches as stale or replayable unless entries are checked against commitments, receipts, or other verifiable provenance.
123+
- Avoid custom RF, antenna, amplifier, and production enclosure assumptions in v0; use certified commodity hardware within local radio rules.
124+
- Treat replayed LoRa messages as expected adversarial input until sequence, nonce, freshness, and audit rules exist.
125+
- Treat FCC, regional radio, antenna, duty-cycle, and equipment-authorization mistakes as project risks, not just operator mistakes.
126+
- Treat power, brownout, thermal throttling, fan failure, and sealed-enclosure heat buildup as safety and data-integrity risks.
127+
- Treat NVMe, SD card, and removable cartridge failures as cache-integrity risks; local cache is not a permanent source of truth.
128+
- Treat operator keys, channel keys, dashboard credentials, and cartridge labels as sensitive operational material that must not be exposed on displays, NFC tags, logs, or public MQTT.
129+
- Treat simulator packets, packet schemas, and generated fixtures as unsigned advisory test data until a later identity and authentication design exists.
120130

121131
### Supply Chain
122132

hardware/README.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# FlowMemory Hardware
2+
3+
Last updated: 2026-05-13
4+
5+
This directory contains the FlowRouter V0 proof-of-concept hardware package. It is production-shaped but research-safe: the docs, schemas, simulator, and field-test plans are intended to help later dashboard, services, and hardware work consume consistent data without claiming finished hardware.
6+
7+
## Package Map
8+
9+
- `flowrouter/`: FlowRouter V0 scope, BOM, assembly, enclosure, light-pipe, printing, and measurement docs.
10+
- `lora-sidecar/`: Meshtastic/LoRa role, compact control-message inventory, and two-node demo notes.
11+
- `memory-cartridges/`: NFC Memory Cartridge concept and metadata boundaries.
12+
- `simulator/`: deterministic FlowRouter POC packet generator and schema validator.
13+
- `fixtures/`: generated sample packet feeds for tests and future dashboard/service consumers.
14+
- `field-tests/`: field-test plans and logs for controlled hardware experiments.
15+
16+
## V0 Purpose
17+
18+
FlowRouter V0 is a local FlowMemory gateway POC. It can model or test:
19+
20+
- Local node status.
21+
- Artifact cache status.
22+
- Compact receipt relay.
23+
- Heartbeat messages.
24+
- Gateway discovery.
25+
- Local dashboard feed shape.
26+
- Meshtastic/LoRa sidecar status and limits.
27+
- NFC Memory Cartridge metadata.
28+
- FlowCore light-pipe status.
29+
- Enclosure measurement direction.
30+
31+
## V0 Non-Goals
32+
33+
FlowRouter V0 does not:
34+
35+
- Replace ISPs.
36+
- Create global internet from nothing.
37+
- Carry broadband over LoRa or Meshtastic.
38+
- Move model weights, large artifacts, media, or raw memory payloads over LoRa.
39+
- Prove hardware trustlessness.
40+
- Mine tokens or promise passive income.
41+
- Run a production L1 or appchain.
42+
- Define production manufacturing, final CAD, or custom RF boards.
43+
44+
## Validation Entry Point
45+
46+
Generate and validate deterministic simulator output:
47+
48+
```powershell
49+
python hardware/simulator/flowrouter_sim.py --seed 42 --out hardware/fixtures/flowrouter_sample_seed42.json
50+
python hardware/simulator/flowrouter_sim.py --validate-file hardware/fixtures/flowrouter_sample_seed42.json
51+
```
52+
53+
The simulator uses only the Python standard library.

hardware/field-tests/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# FlowRouter Field Tests
2+
3+
Last updated: 2026-05-13
4+
5+
Field tests must stay controlled, reversible, and honest about limitations. The current package includes a two-node Meshtastic plan and simulator-generated packet fixtures for dry runs before hardware is attached.
6+
7+
## Rules
8+
9+
- Use certified router and radio hardware.
10+
- Set the correct LoRa region before transmit.
11+
- Keep public MQTT disabled unless a test explicitly requires and documents a private broker posture.
12+
- Do not send secrets, large artifacts, model data, media, or raw memory over LoRa.
13+
- Do not claim ISP replacement, production mesh, passive income, full trustlessness, or emergency-service reliability.
14+
- Stop on thermal, power, radio-region, interference, or secret-exposure concerns.
15+
16+
## Plans
17+
18+
- `TWO_NODE_MESHTASTIC_FIELD_TEST.md`: two-node heartbeat, discovery, digest, dashboard, and offline-mode plan.
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# Two-Node Meshtastic Field Test
2+
3+
Last updated: 2026-05-13
4+
5+
This plan covers issues #12 and #33 and uses the simulator outputs from `../simulator/` as dry-run packet fixtures before radio transmission.
6+
7+
## Objective
8+
9+
Validate that two FlowRouter-like nodes can exchange compact advisory control packets over Meshtastic while normal FlowMemory data remains on WiFi/Ethernet.
10+
11+
## Hardware
12+
13+
Node A:
14+
15+
- Certified OpenWrt router or lab LAN gateway.
16+
- Raspberry Pi 5 or mini PC.
17+
- NVMe/local cache candidate.
18+
- Meshtastic sidecar in the correct regional variant.
19+
20+
Node B:
21+
22+
- Laptop, Raspberry Pi, or second FlowRouter-like node.
23+
- Meshtastic sidecar in the same region/channel settings.
24+
25+
## Dry Run
26+
27+
Before using radios:
28+
29+
```powershell
30+
python hardware/simulator/flowrouter_sim.py --seed 42 --out hardware/fixtures/flowrouter_sample_seed42.json
31+
python hardware/simulator/flowrouter_sim.py --validate-file hardware/fixtures/flowrouter_sample_seed42.json
32+
```
33+
34+
Review the generated heartbeat, gateway discovery, receipt relay, cache status, sidecar status, dashboard feed, and failure/offline packet.
35+
36+
## Radio Setup
37+
38+
- Confirm region and frequency variant.
39+
- Attach antennas before transmit.
40+
- Record firmware version, modem preset, hop limit, channel name, and MQTT settings.
41+
- Prefer private channel settings.
42+
- Keep public MQTT disabled by default.
43+
- Keep operator command warning packets non-executing.
44+
45+
## Test Sequence
46+
47+
1. Baseline both nodes on normal LAN/internet.
48+
2. Send node heartbeat from Node A.
49+
3. Send gateway discovery from Node A.
50+
4. Send local cache status digest from Node A.
51+
5. Send compact receipt relay from Node A.
52+
6. Disable upstream internet for Node A.
53+
7. Confirm local dashboard feed still reports LAN-local state.
54+
8. Send emergency/offline signal from Node A.
55+
9. Restore upstream internet.
56+
10. Record reconciliation notes and operator confusion points.
57+
58+
## Success Criteria
59+
60+
- Node B receives heartbeat and gateway discovery packets.
61+
- Digest and receipt packets fit the compact schema.
62+
- Offline/failure packet is distinguishable from verified state.
63+
- No heavy payload or secret crosses LoRa.
64+
- Operators can explain local, advisory, and verified status.
65+
66+
## Metrics
67+
68+
- Packet count sent/received.
69+
- RSSI/SNR if available.
70+
- Hop count.
71+
- Delay observations.
72+
- Duplicate/lost packets.
73+
- Node A upstream outage detection time.
74+
- Local dashboard availability.
75+
- Cache status before/during/after outage.
76+
- Sidecar temperature and power notes if available.
77+
78+
## Stop Conditions
79+
80+
- Wrong region, antenna, or transmit configuration.
81+
- Suspected harmful interference.
82+
- Thermal or power instability.
83+
- Secret, credential, channel key, model data, media, raw memory, or large artifact appears in a payload.
84+
- Operator command warning starts to execute privileged behavior.
85+
- Public MQTT exposure is discovered unexpectedly.

0 commit comments

Comments
 (0)