Sync: wohl-hub CCSDS support and AADL system models#4
Merged
Conversation
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>
6 tasks
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Brings 5 commits from local
maintoorigin/main. These were authoredprior 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
eedce23cc708982a9d531d0845babde0562Why this exists as a separate PR
PR #2 (clippy + fmt cleanup) was opened against
origin/main. Becauseorigin/mainwas 5 commits behind localmain, PR #2's diff bundledthese 5 commits along with the cleanup. Independent reviewers
(
cleanup-reviewer-tester,cleanup-reviewer-architect) flagged thisas 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
authored and validated these commits when they made them
Test plan
cargo test --workspaceon this branch (should match local main state)git log origin/main..HEADmatches the 5 commits abovegit diff --stat origin/main..HEADMerge order
origin/maincatches up to local main state🤖 Generated with Claude Code