|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## 2026-04-03 — Tier 0 + Tier 1 Complete |
| 4 | + |
| 5 | +Driven by external reviews from Zargham and Jamsheed (Shorish) against the |
| 6 | +GDS paper (Zargham & Shorish 2022). The reviews identified foundational gaps |
| 7 | +in notation alignment, formal property statements, ControlAction semantics, |
| 8 | +temporal agnosticism documentation, and execution contract formalization. |
| 9 | +This release closes all Tier 0 and Tier 1 roadmap items. |
| 10 | + |
| 11 | +### gds-framework v0.3.0 |
| 12 | + |
| 13 | +**Breaking:** `CanonicalGDS.input_ports` now contains only controlled inputs (U_c); |
| 14 | +disturbance-tagged BoundaryAction ports are in the new `disturbance_ports` field. |
| 15 | + |
| 16 | +New capabilities: |
| 17 | +- **ExecutionContract** — DSL-layer time model declaration (`discrete`, `continuous`, |
| 18 | + `event`, `atemporal`) with Moore/Mealy ordering. Attached as optional field on |
| 19 | + GDSSpec. A spec without a contract remains valid for structural verification. |
| 20 | +- **ControlAction canonical projection** — `CanonicalGDS` now extracts output ports |
| 21 | + (Y) and renders the output map `y = C(x, d)` in the formula. |
| 22 | +- **Disturbance input partition** — `disturbance_ports` on `CanonicalGDS` separates |
| 23 | + policy-bypassing exogenous inputs (W) from controlled inputs (U_c) via |
| 24 | + `tags={"role": "disturbance"}` on BoundaryAction. |
| 25 | +- **TypeDef.constraint_kind** — optional named constraint pattern (`non_negative`, |
| 26 | + `positive`, `probability`, `bounded`, `enum`) enabling round-trip export via SHACL. |
| 27 | + |
| 28 | +New verification checks: |
| 29 | +- **SC-010** — ControlAction outputs must not feed the g pathway (Policy/BoundaryAction) |
| 30 | +- **SC-011** — ExecutionContract well-formedness |
| 31 | +- **DST-001** — Disturbance-tagged BoundaryAction must not wire to Policy |
| 32 | + |
| 33 | +Documentation: |
| 34 | +- Formal property statements for all 15 core checks (G-001..G-006, SC-001..SC-009) |
| 35 | +- Requirement traceability markers on all verification tests |
| 36 | +- Tests for SC-005..SC-009 (previously untested) |
| 37 | +- Controller-plant duality design document |
| 38 | +- Temporal agnosticism invariant with three-layer stack diagram |
| 39 | +- Audit of 30+ docs replacing "timestep" with temporally neutral vocabulary |
| 40 | +- Assurance claims document with verification passport template |
| 41 | +- Execution semantics design document with DSL contract mapping |
| 42 | +- Disturbance formalization design document |
| 43 | +- Notation harmonized with Zargham & Shorish (2022) |
| 44 | + |
| 45 | +### gds-owl v0.2.0 |
| 46 | + |
| 47 | +- **SHACL constraint promotion** — `TypeDef.constraint_kind` metadata exports as SHACL |
| 48 | + property shapes (`sh:minInclusive`, `sh:maxInclusive`, `sh:minExclusive`, `sh:in`). |
| 49 | + Constraints with a `constraint_kind` are now R2 round-trippable; those without remain |
| 50 | + R3 lossy. Import reconstructs Python callable constraints from SHACL metadata. |
| 51 | +- New ontology properties: `constraintKind`, `constraintLow`, `constraintHigh`, `constraintValue` |
| 52 | +- New `build_constraint_shapes()` public API |
| 53 | + |
| 54 | +### gds-psuu v0.2.1 |
| 55 | + |
| 56 | +- **Parameter schema validation** — `ParameterSpace.from_parameter_schema()` creates |
| 57 | + sweep dimensions from declared ParameterDef entries. `validate_against_schema()` |
| 58 | + catches missing params, type mismatches, and out-of-bounds sweeps. |
| 59 | +- **PSUU-001 check** following the GDS Finding pattern |
| 60 | +- Sweep runner validates against schema when `parameter_schema` is provided |
| 61 | + |
| 62 | +### gds-stockflow v0.1.1 |
| 63 | + |
| 64 | +- Emit `ExecutionContract(time_domain="discrete")` from `compile_model()` |
| 65 | + |
| 66 | +### gds-control v0.1.1 |
| 67 | + |
| 68 | +- Emit `ExecutionContract(time_domain="discrete")` from `compile_model()` |
| 69 | + |
| 70 | +### gds-games v0.3.2 |
| 71 | + |
| 72 | +- Emit `ExecutionContract(time_domain="atemporal")` from `compile_pattern_to_spec()` |
| 73 | + |
| 74 | +### gds-software v0.1.1 |
| 75 | + |
| 76 | +- Emit `ExecutionContract` from all 6 compilers: `atemporal` for DFD, C4, component, |
| 77 | + ERD, dependency; `discrete` for state machines |
| 78 | + |
| 79 | +### gds-business v0.1.1 |
| 80 | + |
| 81 | +- Emit `ExecutionContract` from all 3 compilers: `discrete` for CLD and supply chain, |
| 82 | + `atemporal` for value stream maps |
| 83 | + |
| 84 | +### gds-analysis v0.1.1 |
| 85 | + |
| 86 | +- Guard `gds-continuous` import in `backward_reachability.py` (previously caused |
| 87 | + ImportError when gds-continuous wasn't installed) |
| 88 | + |
3 | 89 | ## gds-framework v0.2.3 |
4 | 90 |
|
5 | 91 | - Add `StructuralWiring` to public API (compiler intermediate for domain DSL wiring emitters) |
|
0 commit comments