Repository navigation
feat(software): conformance harness — flight host and generated tables vs the pinned model - #28
Merged
devin-ai-integration[bot] merged 7 commits intoOct 23, 2026
Conversation
…forwards to exact deadlines A dispatched item that no active state takes is held (up to 16 per machine) and offered again when a state that names it becomes active, which is how the pinned model routes a transfer to a port: the run keeps it until an accepter takes it. The attitude-control region of TugModes now ends every scenario in the model's state (F-SW1201). The fast-forward deadline search skipped a timer expiring exactly on the frame it was computed in; it now includes it. Co-Authored-By: jason.han <hanhuijun@gmail.com>
… this host's uplink only The sequence render prints six significant digits, so campaign times such as 19880640 reached the host as 19880600; derived times are snapped to the gcd of the driver script's delays. Messages the operations centre sends to the inspector's own uplink are no longer stimuli of the tug host. The attitude-control wildcard is gone: the host agrees with the pinned run. Co-Authored-By: jason.han <hanhuijun@gmail.com>
software/conformance compares, per machine and scenario, the host's --trace state sequences with the model's ExecuteState(trace=true) trace at the pinned OpenSysML: every configuration change with its time, the transitions and accepts, with wall-clock, peak RSS and output size per step. make software-conformance-check compares the outputs byte for byte with software/conformance/expected/. Co-Authored-By: jason.han <hanhuijun@gmail.com>
Contributor
Author
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
Every calc def the software uses is evaluated by the model (Model.eval at the pin) and, where the pin compiles it, by its compiled C and Go programs over a deterministic grid of the model's own values and boundary points, with an explicit tolerance per calc (1e-9 relative for Reals, exact for Integer, Boolean and enumeration results). Each calc lands in one bucket: agree, disagree, does-not-compile-at-pin with the pin's reason, or not-driveable with what covers it instead. The power margin (11.9 % against 15 %) and the bus slots by mode (36 of 64 against the 32 reserve) come out of the model and the generated tables identical and failing. The compile steps run in parallel; the pin has no Python target. Co-Authored-By: jason.han <hanhuijun@gmail.com>
The five planned flightSoftwareInTheLoop cases of the software VCRM run on the flight host, the model through sysml-grpc and the ground suite, each with an evidence file under software/conformance/evidence/ (inputs, both sides' outputs, the case's own pass criterion, tool pin): final targeting (Earth-impact exclusion abort), thrust arc (string restart and the relay rule), capture sequence (fire when armed, hold when inhibited), fault detection (latency and the safe configuration) and the ground two-step (second approval and the flight-rule refusal). Two conformance scenarios drive the host for them; the trace rebuild prefers the run's own machine instance when a scenario traces two. Co-Authored-By: jason.han <hanhuijun@gmail.com>
next_deadline() polled only the state machines' timers, so a --fast-forward skip jumped over an on-board sequence step and the step items fired on the first frame after the skip (the inspector release steps hours late). The sequence engine's next step is a deadline too. CI job software-conformance-check runs make software-conformance-check after the flight job. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…cation cases pass The five flightSoftwareInTheLoop cases of TethysSoftwareAssurance that the conformance harness ran move from planned to pass with their evidence paths; the VCRM and test-plan documents and the assurance counts are re-recorded. software/conformance/README.md, docs/coverage/WP-SW-13.md, docs/findings/WP-SW-13.md (F-SW1301 to F-SW1310, with the F-SW1305 probe) and one paragraph in software/README.md. Co-Authored-By: jason.han <hanhuijun@gmail.com>
devin-ai-integration
Bot
merged commit Oct 23, 2026
f58929c
into
integration/phase-6c
5 checks passed
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
software/conformance/is the conformance harness: it proves the Argent flight host, the generated tables and the Meridian ground suite agree with the Tethys model as the pinned OpenSysML (5cd37f288) executes and evaluates it, and turns the software VCRM's planned flight-software-in-the-loop cases into as-run evidence.make software-conformance-check(rootMakefileinclude after the flight include, CI jobsoftware-conformance-checkafter the flight job) builds the host, startssysml-grpcfrom the pin, runs three tiers and compares every output byte for byte withsoftware/conformance/expected/andsoftware/conformance/evidence/;make software-conformance-updaterewrites them. Whole gate ≈ 50 s wall-clock,sysml-grpc≈ 0.83 GB peak, so one tier — no fast/full split.Counts
sw-*runs +vc-final-targeting,vc-thrust-arc) × machines = 149 machine-runs compared, 146 agree, 3 adjudicated divergences (F-SW1304 ×2, F-SW1305 ×1), 348 configuration changes, 434 model transitions, 282 model accepts compared.plannedcase is at levelmodelInTheLoop.F-SW1201 adjudication. The pinned run is right and the host was wrong: the model keeps a transfer routed to a port until an accepter takes it (SysML v2 §7.17.8 — an accept action accepts a payload received by its receiver; §7.18.3 — a transition fires when its accepter can accept an incoming transfer), so
attitudeControllater takes the earlierProximityOperationsGo/DockingGofromwheels.sm_runnernow holds unaccepted items and offers them again;attitudeControlagrees in every run and the wildcard incompare_runs.pyis gone. The model's own design point (rows that consume stale items) stays visible in the pinned run.Flight-side edits the comparison forced (nothing under
software/ground/,software/gen/,software/generated/):software/flight/sm/sm_runner.[ch]— held items (F-SW1301), unit testtest_held_items.software/flight/host/argent_host.c— fast-forward stopped one frame short of an exact deadline (F-SW1302) and skipped the sequence engine's next step (F-SW1306).software/flight/tests/compare_runs.py+ regeneratedsoftware/flight/scenarios/*.stim— exact campaign times instead of the render's six significant digits, and only this host's uplink (F-SW1303).Model edit (
model/88-software-assurance.sysml, runs re-recorded withmake runs,make checkgreen): for the five cases that ran,verdict = VerificationVerdict::planned; evidence = "not yet run"→verdict = VerificationVerdict::pass; evidence = "software/conformance/evidence/<case>.txt"—finalTargetingFlightSoftwareInTheLoop,thrustArcFlightSoftwareInTheLoop,captureSequenceFlightSoftwareInTheLoop,faultDetectionFlightSoftwareInTheLoop,groundTwoStepIntegration. Run diff:sw-assurance-passed10 → 15 rows (PassedCases),sw-assurance-vcrm/sw-assurance-vcrm-documentandsw-doc-test-plancarry the five verdicts and evidence paths, the VCRM and test-plan documents (runs/documents*/…SoftwareVcrmDocument,…SoftwareTestPlan) andrender-documents-*.txtre-rendered — 10 files, nothing else moved. IV&V status, SA-001/SA-002 untouched.Findings (
docs/findings/WP-SW-13.md): F-SW1301 host dropped unaccepted items (fixed); F-SW1302 fast-forward off-by-one (fixed); F-SW1303 scenario derivation rounding/uplink (fixed); F-SW1304 host sequence-3 step items have no model source (open, adjudicated divergence); F-SW1305ExecuteStateover gRPC traces twoFdirSupervisorinstances inearthImpactScenario(pin; probesoftware/conformance/probes/F-SW1305-duplicate-fdir-instance.py); F-SW1306 fast-forward skipped sequence steps (fixed); F-SW1307 no Python-compiletarget; F-SW1308-compilerefuses quantity/record inputs and package constants; F-SW1309 clienteventsare untimed and payload-less; F-SW1310-compilecost (parallelised).Decisions / alternatives rejected. Retention semantics fixed in the host rather than wildcarded or tolerated per machine; exact stimulus times derived by snapping to the driver script's delay gcd rather than hand-editing the shipped files or loosening the time comparison; the model side of every run is a scenario part (the client cannot inject timed payloads, F-SW1309) rather than CLI fallbacks; the duplicate FDIR instance is worked around by rebuilding the run's own usage and recorded, not hidden; compile steps parallelised rather than moved to a slower tier; calcs the pin cannot compile are bucketed with the reason rather than re-implemented by hand.
Coverage:
docs/coverage/WP-SW-13.md. How to read a divergence and add a case:software/conformance/README.md.Link to Devin session: https://nasa-jpl-demo.devinenterprise.com/sessions/a18b635f8fa84ae5848db4d43bbfb422
Open in Devin Desktop: https://nasa-jpl-demo.devinenterprise.com/desktop/session/a18b635f8fa84ae5848db4d43bbfb422?variant=devin
Requested by: @HuiJun