Skip to content

Sync: wohl-hub CCSDS support and AADL system models#4

Merged
avrabe merged 5 commits into
mainfrom
sync/local-main-aadl-ccsds
May 19, 2026
Merged

Sync: wohl-hub CCSDS support and AADL system models#4
avrabe merged 5 commits into
mainfrom
sync/local-main-aadl-ccsds

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented May 19, 2026

Summary

Brings 5 commits from local main to origin/main. These were authored
prior to today's PR-flow / branch-protection decision and have been the
working state of the repo locally, but were never pushed to origin.
Branch protection now blocks direct pushes to main, so they need a PR.

This PR contains no new work — every commit is already in the local
working tree and was committed in April. The PR is a sync, not authorship.

Commits in this PR

SHA Commit
eedce23 wohl-hub: accept CCSDS sensor packets via --ccsds
cc70898 Wohl AADL hardware models: specific parts, nodes, deployed home
2a9d531 Wohl AADL: add firmware threads, OTA subsystem, full port wiring
d0845ba Wohl AADL: hub monitor software, MiniPC variant, zone metadata
bde0562 Wohl AADL: fix PacketRouter port kinds for periodic sensors

Why this exists as a separate PR

PR #2 (clippy + fmt cleanup) was opened against origin/main. Because
origin/main was 5 commits behind local main, PR #2's diff bundled
these 5 commits along with the cleanup. Independent reviewers
(cleanup-reviewer-tester, cleanup-reviewer-architect) flagged this
as a blocking scope-mismatch: PR #2 promises mechanical cleanup but
its diff includes ~1500 lines of AADL/CCSDS work it didn't author.

Splitting these commits into PR #4 lets PR #2's diff shrink to just the
cleanup commits, restoring the promised PR shape. PR #2 cannot be
finalized until PR #4 merges.

What this PR is not

  • Not a behavior change beyond what was already in your local tree
  • Not subject to the new clippy/fmt gate (that lands in PR Bring workspace to clippy-clean + fmt-clean baseline #2 → PR 1b)
  • Not opinionated about the AADL/CCSDS work — assumes the architect already
    authored and validated these commits when they made them

Test plan

  • cargo test --workspace on this branch (should match local main state)
  • Inspect git log origin/main..HEAD matches the 5 commits above
  • Confirm no surprise files via git diff --stat origin/main..HEAD

Merge order

  1. This PR (Sync: wohl-hub CCSDS support and AADL system models #4) merges firstorigin/main catches up to local main state
  2. PR Bring workspace to clippy-clean + fmt-clean baseline #2's diff auto-updates to show only the cleanup commits
  3. PR Bring workspace to clippy-clean + fmt-clean baseline #2 reviewers re-approve (already conditionally approved on this sequencing)
  4. PR Bring workspace to clippy-clean + fmt-clean baseline #2 merges
  5. Future PR 1b: CI workflow + README + CLAUDE.md fix

🤖 Generated with Claude Code

avrabe and others added 5 commits April 19, 2026 12:32
Binary input mode reading 14-byte Wohl sensor packets from stdin, matching
the format Wohl sensor nodes emit. Translates SENSOR_TEMP/WATER/CONTACT/
CO2/POWER to SensorEvent; JSON mode unchanged. 6 new tests, 28 total.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Four new files under spar/:
- wohl_properties.aadl — custom property set (current, battery, radio, Zephyr binding)
- wohl_hardware.aadl — part library: nRF52840, ESP32-S3, RPi4, SHT30, BMP280, SCD41, SPS30, BH1750, reed, PIR, water probe
- wohl_nodes.aadl — DoorWindowNode/ClimateNode/AirQualityNode/HubNode impls
- wohl_home.aadl — StarterHome.Deployed wiring 3 door + 1 climate + 1 air + hub

Passes `spar parse`, `spar instance` (48 components), `spar analyze` (fault
tree correctly flags the hub as SPoF). Every sensor carries a
Zephyr_Binding for devicetree generation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds wohl_firmware.aadl with DoorFirmware/ClimateFirmware/AirFirmware
threads and NodeBootloader + OTAManager threads (the gale-boot and OTA
placeholders). Node systems now expose packet_out/image_in/attest_out
ports and wire sensor devices through the firmware process to the
radio bus. StarterHome.Deployed wires all 5 nodes to the hub for
sensor packets, OTA images, and attestation reports.

Spar instance: 62 components. Analyze: sensor data flow, OTA distri-
bution, and attestation paths are modeled. Thread→processor binding
warnings are a pre-existing Spar limitation with nested-path bindings
that also affects wohl_system.aadl.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Adds HubMonitorProcess with PacketRouter + 5 monitor threads +
  AlertDispatcher, wired inside HubNode.RPi.
- New IntelN100 processor type and HubNode.MiniPC alternate
  implementation (GMKtec/Beelink/Minisforum-style mini PC) for ML/
  local-LLM headroom when RPi is outgrown.
- Zone_Id / Zone_Name / Location / Role properties on
  DoorWindowNode/ClimateNode/AirQualityNode subcomponents in
  StarterHome.Deployed, so the model carries the sensor-to-room
  mapping today consumed from wohl.toml.
- StarterHome.DeployedMiniPC deployment mirrors Deployed with the
  MiniPC hub substituted.

(Spar instance JSON currently drops the property values — filed as
pulseengine/spar#129.)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New Spar build's connection_rules checker caught temp_out/air_out/
power_out being event data ports while the monitor inputs are data
ports. Matched: periodic sensors route through data ports, sporadic
(water, contact) through event data ports.

Spar analyze is now clean on both StarterHome.Deployed and
StarterHome.DeployedMiniPC.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@avrabe avrabe merged commit 709f45f into main May 19, 2026
@avrabe avrabe deleted the sync/local-main-aadl-ccsds branch May 19, 2026 07:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant