Updated: 2026-04-28 (v0.9.1 released; v0.9.2 in progress)
Source: 102 HTML files from OSATE2 (org.osate.help/html/std/)
Toolchain: spar (2759+ tests passing across 18 crates)
| Layer | Status | Score |
|---|---|---|
| Parser (syntax) | Excellent | ~95% — all major constructs parsed, doubled-quote strings |
| ItemTree (declaration capture) | Good | ~85% — modes, prototypes, calls, flow impls, array dims, in_modes, requires_modes |
| Name Resolution | Partial | ~60% — cross-file resolution + naming rules + duplicate package detection + renames resolution |
| Legality Rules (L-rules) | Partial | ~15% — engine scaffold with ~20 rules from 6 categories |
| Naming Rules (N-rules) | Partial | ~25% — duplicate detection, with-clause hygiene, scope uniqueness |
| Instance Model | Good | ~85% — hierarchy + modes + semantic connections + features + extends inheritance + connection patterns + per-SOM analysis |
| Property System | Good | ~75% — typed PropertyExpr (14 variants), text fallback parser, unit conversion, records, nested lists |
| Modes | Good | ~75% — in ItemTree + instance model + requires_modes + modal filtering + per-SOM analysis |
| Predeclared Property Sets | Good | ~90% — 8/8 sets, 102 properties (corrected classifications) |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 4.1 | AADL Specifications | DONE | DONE | PARTIAL — duplicate name detection via naming_rules |
| 4.2 | Packages | DONE | DONE | PARTIAL — with clause hygiene enforced, renames not lowered, private visibility not enforced |
| 4.3 | Component Types | DONE | DONE | PARTIAL — duplicate feature/flow/mode detection, category restriction checks |
| 4.4 | Component Impls | DONE | DONE | PARTIAL — duplicate subcomponent/connection detection, impl-type match check |
| 4.5 | Subcomponents | DONE | DONE | PARTIAL — category restriction checks, in_modes preserved |
| 4.6 | Calls | DONE | DONE | PARTIAL — call sequences lowered to ItemTree |
| 4.7 | Prototypes | DONE | DONE | PARTIAL — lowered to ItemTree, resolution + binding validation |
| 4.8 | Annexes | DONE | PARTIAL | PARTIAL — library only, subclauses dropped |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 5.1 | Data | DONE | DONE | DONE — feature/subcomponent restrictions checked via category_rules |
| 5.2 | Subprogram | DONE | DONE | DONE — parameter restrictions checked |
| 5.3 | Subprogram Group | DONE | DONE | DONE — category restrictions checked |
| 5.4 | Thread | DONE | DONE | PARTIAL — category checked, dispatch protocol not required |
| 5.5 | Thread Group | DONE | DONE | DONE — category restrictions checked |
| 5.6 | Process | DONE | DONE | PARTIAL — category checked, thread requirement not enforced |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 6.1 | Processor | DONE | DONE | DONE — feature restrictions checked |
| 6.2 | Virtual Processor | DONE | DONE | DONE — category restrictions checked |
| 6.3 | Memory | DONE | DONE | DONE — category restrictions checked |
| 6.4 | Bus | DONE | DONE | DONE — category restrictions checked |
| 6.5 | Virtual Bus | DONE | DONE | DONE — category restrictions checked |
| 6.6 | Device | DONE | DONE | DONE — category restrictions checked |
| 6.7 | System | DONE | DONE | DONE — category restrictions checked |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 8.1 | Ports | DONE | DONE | PARTIAL — direction rules enforced for connections |
| 8.2 | Port Groups | DONE | DONE | PARTIAL — feature group expansion utility exists |
| 8.3 | Data Access | DONE | DONE | PARTIAL — provides/requires in ItemTree, access kind tracked |
| 8.4 | Bus Access | DONE | DONE | PARTIAL — access kind tracked |
| 8.5 | Subprogram Access | DONE | DONE | PARTIAL — access kind tracked |
| 8.6 | Feature Groups | DONE | DONE | PARTIAL — expansion with inverse_of, complement not yet validated |
| 8.7 | Abstract Features | DONE | DONE | DONE |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 9.1 | Overview | DONE | DONE | PARTIAL — semantic connection tracing (across), no feature array connections |
| 9.2 | Feature Groups | DONE | DONE | PARTIAL — FG expansion utility exists, not yet integrated into connection instances |
| 9.3 | Port Connections | DONE | DONE | DONE — direction rules enforced (across/up/down classification) |
| 9.4 | Direction Rules | DONE | DONE | DONE — DirectionRuleAnalysis checks in/out/in_out compatibility |
| 9.5 | Access Connections | DONE | DONE | PARTIAL — provides/requires tracked, direction rules applied |
| 9.6 | Bus/Data/Subprogram Access | DONE | DONE | PARTIAL — access kind differentiated |
| 9.7 | Parameter Connections | DONE | DONE | PARTIAL — direction rules applied, call context not validated |
| 9.8 | Connection Patterns | DONE | DONE | PARTIAL — One_To_One + All_To_All patterns implemented; remaining patterns (One_To_All, All_To_One, Next, Previous, Cyclic) not yet |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 10.1 | Flow Specifications | DONE | DONE | PARTIAL — endpoints stored, direction validated by FlowCheckAnalysis |
| 10.2 | Flow Spec Legality | DONE | DONE | PARTIAL — source/sink/path direction checks |
| 10.3 | Flow Implementations | DONE | DONE | PARTIAL — lowered to ItemTree, segment validation exists |
| 10.4 | End-to-End Flows | DONE | DONE | PARTIAL — segments validated, alternation check (flow/conn) |
| 10.5 | Flow Properties | N/A | PARTIAL | MISSING — latency properties defined but not evaluated |
| 10.6 | Latency Analysis | N/A | N/A | MISSING — no analysis |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 11.1 | Property Sets | DONE | DONE | PARTIAL — 8/8 predeclared sets, type defs exist |
| 11.2 | Property Types | DONE | PARTIAL | PARTIAL — PropertyTypeDef enum with 10 type variants |
| 11.3 | Property Expressions | DONE | PARTIAL | PARTIAL — PropertyExpr enum (13 variants), type checking, unit conversion |
| 11.4 | Property Associations | DONE | DONE | PARTIAL — inheritance chain, append support, modal values not fully resolved |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 12.1 | Mode Overview | DONE | DONE | DONE — ModeItem in ItemTree, ModeInstance in instance model |
| 12.2 | Mode Declarations | DONE | DONE | DONE — initial mode validation, uniqueness via naming_rules |
| 12.3 | Mode Transitions | DONE | DONE | DONE — ModeTransitionItem/Instance, trigger validation |
| 12.4 | Modal Configurations | DONE | DONE | PARTIAL — in_modes preserved on connections/subcomponents, not yet filtered |
| 12.5 | Requires Modes | DONE | DONE | MISSING — not yet validated |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 13.1 | System Binding | N/A | N/A | PARTIAL — BindingCheckAnalysis validates processor/memory binding targets |
| Section | Title | Parser | ItemTree | Semantics |
|---|---|---|---|---|
| 14.1 | System Instances | N/A | N/A | DONE — recursive hierarchy expansion |
| 14.2 | Semantic Connections | N/A | N/A | PARTIAL — across connections traced, up/down multi-level pending |
| 14.3 | Binding Instances | N/A | N/A | PARTIAL — binding property validation exists |
| 14.4 | System Lifecycle | N/A | N/A | MISSING |
| 14.5 | Mode Instances/SOMs | N/A | N/A | PARTIAL — mode instances exist, SOM computation pending |
| 14.6 | System Operation Modes | N/A | N/A | PARTIAL — mode instances populated |
| 14.7 | Mode Transition Semantics | N/A | N/A | PARTIAL — transitions instantiated, runtime semantics not modeled |
| 14.8 | Tool Requirements | N/A | N/A | PARTIAL |
| Section | Title | Status |
|---|---|---|
| 15.1 | Character Set | PARTIAL — ASCII only, no Unicode identifier_letter |
| 15.2 | Delimiters | DONE — all compound/single delimiters |
| 15.3 | Identifiers | DONE — minor: accepts __ and trailing _ |
| 15.4 | Numeric Literals | DONE — decimal, based, real, exponents |
| 15.5 | String Literals | PARTIAL — missing "" doubled-quote escape |
| 15.6 | Comments | DONE |
| 15.7 | Reserved Words | DONE — all 76 keywords |
| Appendix | Title | Status |
|---|---|---|
| A | Predeclared Property Sets | DONE — 8/8 sets (104 properties): Timing, Communication, Memory, Thread, Deployment, Programming, Modeling, AADL_Project |
| B | Glossary | N/A (informative) |
| C | Syntax Summary | N/A (informative) |
| D | Graphical Notation | MISSING (normative but optional for textual tools) |
| E | XML/AAXL2 Meta Model | MISSING — no OSATE interop serialization |
| F | UML Profile | N/A |
| G | Profiles/Extensions | MISSING |
| Gap | Title | Status | Notes |
|---|---|---|---|
| G1 | Semantic Connection Instances | Partially closed | Across connections traced; up/down multi-level tracing in progress |
| G2 | Port Direction Rules | Closed | DirectionRuleAnalysis enforces across/up/down direction compatibility |
| G3 | Property Type System | Partially closed | PropertyExpr (13 variants) + PropertyTypeDef (10 types) + type checking + unit conversion; CST→PropertyExpr lowering in progress |
| G4 | Modes in HIR | Closed | ModeItem/ModeTransitionItem in ItemTree; ModeInstance/ModeTransitionInstance in instance model; ModeCheckAnalysis validates |
| G5 | Legality Rule Engine | Partially closed | LegalityEngine scaffold with ~20 rules across 6 categories (naming, category, direction, binding, flow, hierarchy) |
| G6 | Feature Group Expansion | Partially closed | Expansion utility with inverse_of; not yet integrated into connection instance resolution |
| Gap | Title | Status | Notes |
|---|---|---|---|
| G7 | ItemTree Information Loss | Mostly closed | Modes, prototypes, call sequences, flow impls, array dims, in_modes, access kind all lowered |
| G8 | Naming Rule Validation | Partially closed | Duplicate detection (features, subcomponents, connections, modes, properties), with-clause hygiene |
| G9 | Category Restrictions | Closed | Static restriction tables for all 14 categories + CategoryCheck analysis pass |
| G10 | Flow Implementation Lowering | Closed | FlowImplItem in ItemTree + FlowCheckAnalysis validates direction and segments |
| G11 | Binding Analysis | Closed | BindingCheckAnalysis validates processor/memory binding targets |
| G12 | Predeclared Property Sets | Closed | 8/8 sets, 104 properties matching AS5506 Appendix A |
- Complete multi-level semantic connection tracing (up/down patterns through hierarchy)
- Complete CST→PropertyExpr lowering (currently property values still lower as strings)
- SOM computation (cartesian product of modes across modal subcomponents)
- LSP server for IDE integration
- Feature group expansion integration into connection instance resolution
in_modesfiltering of connections and properties at runtimerequires_modesvalidation- Scheduling analysis (RMA, processor utilization)
- Latency analysis (end-to-end flow latency)
- Resource budget analysis (memory, MIPS, bandwidth)
- Bus load analysis
- ARINC 653 partition scheduling
- Connection array patterns
- AAXL2/XML serialization for OSATE interop
- Private section visibility enforcement
renamesresolution
Headline release for the v0.7.x line. Tagged v0.7.1. Binary release
artifacts at github.com/pulseengine/spar/releases/tag/v0.7.1.
Track A — IRQ-aware RTA (4/4 commits delivered)
- Foundation (#145):
Spar_Timing::{ISR_Priority, ISR_Execution_Time, Interrupt_Latency_Bound, Bottom_Half_Server}andSpar_Trace::{Probe_Point, Expected_BCET, Expected_WCET, Expected_Mean}property sets land as non-standard predefined sets, resolvable via the same idiom as AS5506 standard sets. - Hierarchical RTA (#147): two-tier analysis — ISR layer steals CPU capacity first; residual feeds task RTA.
Dispatch_Jitterwoven into the Tindell-Clark recurrence.Compute_Execution_Time's Time_Range consumed as(BCET, WCET). Five new diagnostic kinds:IrqResponseBudget,IrqBudgetViolated,IsrOverloadedCpu,MissingBottomHalfServer,ResponseBand. Non-regression gate (no_isrs_matches_classical_rta) verifies models withoutSpar_Timing::*produce byte-identical RTA output. - Lean convergence (#148):
proofs/Proofs/Scheduling/RTAJittered.leanproves monotonicity, zero-jitter degeneration to classicalrtaStep, and least-fixed-point convergence indeadline + 1iterations. Three core theorems plus two helper lemmas, nosorry. - Close-out (this commit): COMPLIANCE wording, COMPLIANCE-side acknowledgement of out-of-scope items.
Out of scope for v0.7.0, deferred to v0.7.1+: priority inheritance (PIP) / priority ceiling (PCP) blocking; multi-processor ISR migration; cache-aware interference inflation (research-grade, v1.0+).
Track B — Variants foundation
- Variant binding contract v1 (#144):
docs/contracts/rivet-spar-variant-v1.md— rivet owns the PLE truth (feature model, variant configs, bindings, SAT), spar consumes a JSON context blob and filters HIR. - spar-variants consumer crate (#162): reads the v1 context blob, applies intersection-semantics binding rules, exposes
keep_in_variantpredicate.
v0.7.x infrastructure
- Kani harnesses for spar-solver and spar-codegen invariants (#141, closes #136).
- cargo-fuzz scaffolding for parser, solver, codegen-roundtrip targets (#142, closes #138).
- Criterion benchmarks for scheduling solver and codegen (#143, closes #137).
- Lean / Bazel / proptest CI gates (#151, closes #135) — Lean proofs now machine-checked in CI for the first time.
- Track D and Track E research design docs (#152, #153) and Track F engagement strategy (#160) anchoring v0.8.0+ scope.
Commit 1 of 5 — α(0) = 0 causality fix + first MinPlus sorry discharge
The 12-persona Wave 3 audit (Lean reviewer) flagged a real spec/impl
mismatch in the arrival curve at t = 0:
- The Lean spec in
proofs/Proofs/Network/MinPlus.leangaveα(0) = min(σ + ρ·0, p·0) = min(σ, 0) = 0for the peak-capped branch, andα(0) = σ + ρ·0 = σfor the affine-only branch — an internal inconsistency. - The Rust impl in
crates/spar-network/src/curves.rs::ArrivalCurve::atshort-circuitedt_ps == 0to returnσfor both branches — pre-mature optimisation that violated causality (a zero-length window cannot admit any bytes).
v0.9.2 reconciles toward the causal answer (α(0) = 0 for all
arrival curves):
- Rust:
ArrivalCurve::atnow short-circuitst_ps == 0to0, notσ. Doc comment + module-level doc updated. The peak-capped branch would give 0 bymin(σ, 0)natively; the affine-only branch needs the explicit short-circuit becauseσ + ρ · 0 = σ. - Lean:
ArrivalCurve.atadds a matchingif t_ps = 0 then 0short-circuit so the affine-only branch also returns 0. Thearrival_at_monoproof is updated to case-split on the short-circuit; structurally identical otherwise. - The 5th tracked sorry in
proofs/Proofs/Network/MinPlus.lean(arrival_at_zero_is_burstpeak-rate branch) is discharged. Theorem renamedarrival_at_zero_is_zero(statement nowα.at 0 = 0), proof isunfold ArrivalCurve.at; simp. The Rust testarrival_curve_at_zero_is_burstis renamedarrival_curve_at_zero_is_zeroand assertsα.at(0) == 0for both branches. - No
WcttBoundnumbers change: the Network Calculus bounds (backlog_bound,delay_bound,output_bound,residual_service) use closed-form expressions in σ and ρ directly; none of them callα.at(0). The fix is therefore semantically scoped to the readout convention and does not perturb any wctt fixture or test bound.
Sorry count delta: proofs/Proofs/Network/MinPlus.lean is now down to
4 tracked sorrys (was 5 in v0.9.1). The remaining four
(backlog_bound_classical, delay_bound_classical,
output_dominates_input, compose_delays_dominates) all require the
Le Boudec & Thiran integer-arithmetic horizontal-distance arguments
and remain scoped to v0.10 / v1.0.0.
proofs/README.md § "Known sorrys" updated; the 5th entry moved to a
new "Discharged in v0.9.2" sub-section.
Wave 3 Tier A #1 — honest "fail on sorry" gate (.github/workflows/proofs.yml)
The 12-persona Wave 3 audit (Lean reviewer + build engineer) confirmed that lake build does NOT fail the job on sorry warnings without explicit warningAsError configuration in lakefile.toml. Despite the workflow comment asserting otherwise, CI was passing green even though proofs/Proofs/Network/MinPlus.lean carried five active sorrys on load-bearing theorems. The README implied these proofs back the WCTT bounds; they did not. The previous gate was decorative.
The v0.9.1 fix adds a post-build "fail on sorry" gate: a grep over proofs/Proofs/ that turns CI red on any line that is bare sorry (modulo a same-line -- TODO comment exemption that none of the five tracked sorrys use). The grep is a deliberately Lean-version-independent enforcement that does not depend on threading warningAsError flags through Lake.
Network calculus closed-form bounds in MinPlus.lean carry 5 unsorried theorems; tracked as TODO(v1.0.0) per file. The Lean tree is load-bearing for RTA / RTAJittered / EDF / RMBound but informational for NC bounds at v0.9.1. The five tracked sorrys are listed in proofs/README.md § "Known sorrys (tracked in COMPLIANCE.md)" with file:line + one-line context each:
Proofs/Network/MinPlus.lean:169—backlog_bound_classical(closed-formB = σ + ρ·T)Proofs/Network/MinPlus.lean:199—delay_bound_classical(closed-formD = T + σ/R)Proofs/Network/MinPlus.lean:240—output_dominates_input(α'(t) ≥ α(t))Proofs/Network/MinPlus.lean:293—compose_delays_dominates(naive serial-chain composition)Proofs/Network/MinPlus.lean:318—arrival_at_zero_is_burst(peak-rate branch; real spec/impl mismatch —min(σ, 0) = 0per Lean spec vsσper Rust short-circuit)
Discharging the five sorrys is scoped to a separate v0.10 PR. The math is non-trivial Le Boudec & Thiran ch. 1 closed-form reasoning in min-plus algebra, and the arrival_at_zero_is_burst peak-rate branch needs spec-vs-impl reconciliation before a proof is even meaningful.
Until the discharge lands, the v0.9.1 gate is expected to fail on main — that is the point: the previous green CI was decorative; the new red CI is honest. The Rust crates/spar-network/src/curves.rs integer-arithmetic implementation remains the load-bearing artifact for NC bounds at v0.9.1 and is validated by unit tests against published worked examples.
Track D — TSN/Ethernet WCTT analysis, Phase 2 (5/5 commits delivered)
Phase 2 wires the TSN-shaped service curves the v0.8.0 close-out had explicitly deferred. The four-way dispatch in crates/spar-analysis/src/wctt.rs now selects the per-hop service curve based on bus + stream properties, with a deterministic precedence (TAS → CBS → preemption → deferred) so a model that only carries one shaping property gets the matching arm and nothing else.
- Foundation:
Spar_TSNproperty set (Stream_ID,Class_of_Service,Gate_Control_List,Max_Frame_Size,Frame_Preemption) +spar-network::tsnskeleton (#177). - TAS (802.1Qbv) gate-window service curve (#180):
GateScheduleparser for the Gate_Control_List string,tas_residual_serviceclosed form (R_K = R_link · open_fraction(K),T_K = max_closed_window(K) + max_frame / R_link), andWcttTasGatedInfo diagnostic carrying open fraction + worst-case gate latency. Wctt dispatch routes streams whose source declaresClass_of_Servicematching a window in the bus's GCL. - CBS (802.1Qav) credit-pool service curve (#182):
CbsReservation::new(validates idle/link rates, computessendSlope = idleSlope − linkRate),cbs_residual_serviceper Le Boudec/Thiran §1.4.3 + Lim et al., andWcttCbsShapedInfo diagnostic carrying idle slope + service latency in ns. New propertySpar_TSN::Bandwidth_Reservation. Wctt dispatch routes streams whose source declares the reservation when no GCL is active. - Frame preemption (802.1Qbu) blocking term (#181):
preemption_blocking_term_psclosed form (legacymax_frame / Rvs. preempted(MIN_FRAGMENT + PREEMPTION_HEADER) / R),is_express_streamresolver (explicitFrame_Preemptionoverrides defaultCoS >= 6), andWcttPreemptionAppliedInfo diagnostic carrying both the legacy and preempted blocking terms in ns. Wctt dispatch routes express streams when the bus hasFrame_Preemption => true. - Integration close-out (this commit): single-instance integration test in
crates/spar-analysis/tests/tsn_integration.rsthat exercises all three dispatch arms in oneWcttAnalysis::analyzerun (three sub-systems, one per shaping path; assertsWcttTasGated,WcttCbsShaped, andWcttPreemptionAppliedco-exist and carry plausible numeric values; asserts noWcttDeferredslips through). COMPLIANCE.md + design-doc Phase 2 status block updated. Total predeclared property count: 128 (Spar_TSN: 6 properties).
Deferred to v0.8.x (research-grade follow-ups, not blockers for the close-out):
- Piecewise-affine NC composition: the v0.8.1 service curves are rate-latency closed forms; multi-class TAS schedules and chained CBS classes both benefit from the more general piecewise-affine min-plus convolution that v0.8.0 deliberately scoped to v0.9.0.
- Multi-stream sharing of a CBS class: today the CBS service curve is treated as exclusive to the tagged stream (other-class blocking is absorbed into the latency term). Same-class residual decomposition lands when the second CBS-shaped stream model arrives.
- Advanced TAS guards: GCL gap detection across cascaded switches (the "no-wait packet scheduling" problem) and modal GCL transients are scoped to v0.9.0.
Test count delta: v0.8.0 closed at ~2200+ tests across 18 crates; v0.8.1 Phase 2 lands at 2759 passing tests across 18 crates (delta ~+550 tests, dominated by the new spar-mcp / spar-insight surfaces from the v0.9.0 foundations and the TSN unit + integration tests under spar-network::tsn and spar-analysis::wctt).
Track D — TSN/Ethernet WCTT analysis, Phase 1 (6/6 commits delivered)
- Foundation:
Spar_Network::{Switch_Type, Queue_Depth, Forwarding_Latency, Output_Rate}property set +spar-networkcrate skeleton (#155). - NetworkGraph extraction from SystemInstance (#157).
- Network Calculus primitives (#161):
ArrivalCurve,ServiceCurve,backlog_bound,delay_bound,residual_service,output_bound. All values inu64picoseconds / bytes / bits-per-second — no floating-point drift. WcttAnalysispass (#168): per-stream end-to-end traversal-time bounds. New diagnosticsWcttBound,WcttExceedsBudget,WcttUnservable,WcttSwitchOverloaded. NewSpar_Network::WCTT_Budgetproperty.- Lean theorems for NC primitives (#169):
proofs/Proofs/Network/MinPlus.leanmirrors classical NC closed-forms with monotonicity proved +sorry-with-TODO(v1.0.0)for the universally-quantified arithmetic statements. latency.rsintegration (#171): RTA-derived WCET on compute hops alternates with WCTT-derived bounds on network hops, end-to-end, replacing the placeholderBus_Properties::Latencyscalar whenSpar_Network::*is annotated. Models withoutSpar_Network::*keep the scalar — non-regression.
Phase 2 (TSN-shaped service curves: TAS, CBS, frame preemption) is v0.8.x scope.
Track E — Frozen-platform / mobile-application + hypothetical-rebinding oracle (6/8 commits delivered)
- Foundation:
Spar_Migration::{Frozen, Mobile, Allowed_Targets, Pinned_Reason}property set +is_frozen/is_mobilehelpers (#156). BindingOverlay(#164): HIR-level overlay so any analysis can run on a hypothetical binding without mutating the SystemInstance. Validates against Frozen / Allowed_Targets returning structuredFrozenViolation/AllowedTargetsViolationdiagnostics.spar moves verify(#166): CLI command — first user-facing surface of the migration oracle. Builds aBindingOverlay, runs validation + analyses, returns structured pass/fail JSON with violations. Exit codes 0/1/2 distinguish ok / analysis-error / binding-violation.spar moves enumerate(#170): CLI command — design-space exploration. Lists every valid hypothetical rebinding target for a component withinAllowed_Targets(or every processor ifAllowed_Targetsis absent), each with verification status and an optional ranking metric.- Multi-objective enumeration ranking (#174): replaces the simple slack metric with a configurable score across
max-response | total-load | total-power | total-weight | balanced. AddsSpar_Power::Power_Budgetproperty. Score uses the same RTA + property-accessor machinery as direct verification, so verify/enumerate stay consistent. - Rivet variant integration (#173):
spar moves verify --variant NAMEand--variant-context PATHaccepted by bothverifyandenumerate. Variant filter applies before overlay validation; non-variant components dropped from the analysis surface per the v1 contract's intersection semantics.
Remaining v0.8.0 work:
- Commit 7 (this commit): documentation + COMPLIANCE close-out narrative
- Commit 8 (v0.9.0 territory): MCP tool surface (
spar.verify_move,spar.enumerate_moves) — read-only / idempotent only, deterministic apply stays CLI-exclusive
Track F — SysML v2 / KerML community engagement (strategy doc on main)
docs/designs/track-f-sysml-kerml-engagement.md(#160): research-backed engagement plan for the OMG SysML v2 ecosystem. Anchors on theSystems-Modeling/SysML-v2-AADL-Releaserepo + named contacts at Galois/CMU-SEI/Ellidiss. Includes verified spar-sysml2 audit (production-grade with full requirements roundtrip) + Rust ecosystem positioning (syster,Sysand,tree-sitter-sysml).
v0.8.0 release readiness criteria
- Track D Phase 1 complete ✅
- Track E commits 1-6 complete ✅
- Track E commit 7 (docs + this close-out) ⏳ in this commit
- Track E commit 8 (MCP) deferred to v0.9.0
- Tag
v0.8.0once Track E commit 7 lands and Phase 2 TSN scope is decided.
- Track E commit 8: MCP tool surface (
spar.verify_move,spar.enumerate_moves) per Track E research §6.5. Read-only and idempotent only; deterministic apply stays CLI-exclusive. LLM agents propose moves; spar deterministically verifies; certification chain stays in spar. - spar-insight (statistical discrepancy assistant): rules-based first; Lean-foundation statistical methods (proof-assistant choice still parked per project memory). Per Track F's R2/R1 discussion.
- Track D Phase 2 if user demand surfaces: TSN-shaped service curves (TAS, CBS, frame preemption).
- syster license-clarification issue (per Track F amendments) — minimum-viable engagement only, conditional on strategic value.
- Parser coverage is excellent (~95%). All major AADL constructs parse correctly.
- CST is lossless — every byte preserved via Rowan red-green trees.
- ItemTree captures ~85% of parsed constructs including modes, prototypes, flows, properties.
- Cross-file name resolution works with case-insensitive lookup.
- Property system has typed expressions, type checking, unit conversion, and inheritance.
- Instance model expands hierarchy with features, connections, modes, and semantic connections.
- 10 analysis passes cover connectivity, hierarchy, completeness, direction, binding, flow, mode, category, naming, and legality.
- Category restriction tables enforce feature/subcomponent rules for all 14 categories.
- Mode support spans ItemTree through instance model with validation.
- Annex system supports EMV2 + Behavior Annex sublanguage parsing.
- Salsa integration provides incremental recomputation foundation.
- 104 predeclared properties across all 8 standard property sets.