Skip to content

sync: merge dev into main (post-rebrand hotfix reconciliation)#214

Merged
mzargham merged 353 commits into
mainfrom
sync/dev-to-main
May 15, 2026
Merged

sync: merge dev into main (post-rebrand hotfix reconciliation)#214
mzargham merged 353 commits into
mainfrom
sync/dev-to-main

Conversation

@mzargham
Copy link
Copy Markdown
Contributor

Summary

Standard dev → main release-style merge to reconcile after the rebrand hotfix (#213) landed directly on main. Brings dev's accumulated feature work and final rebrand URL choices into main.

What lands on main

Feature additions from dev:

  • gds-viz: bode/nyquist/nichols/root-locus and step/impulse/response visualization modules (lazy-loaded under [plots] / [control] extras)
  • gds-analysis: linear systems analysis (eigenvalues, stability margins, LQR/Kalman) + step-response metrics
  • gds-domains.symbolic: TransferFunction, controllability/observability matrices, ss_to_tf, sensitivity, poles/zeros

Rebrand URL finalization (dev's choices win where they differ from #213):

Preserved from main's rebrand hotfix:

  • gds-interchange 0.2.0 with OWL namespace at gds.dynamicalsystemsgroup.com
  • CodeQL-clean URL assertions in test_export.py (use g.subjects() not substring-match on serialized strings)
  • "Dynamical Systems Group" (with space) prose form in attribution
  • Ruff-clean line wrapping for the longer DSG identifiers
  • CI lint-as-advisory + the 4 CodeQL alert fixes (jinja2 autoescape, URL substring)

Conflict resolution summary

46 conflicts resolved:

  • Dev side: docs/READMEs (rebrand URLs), all CLAUDE.md, gds-viz/__init__.py & gds-analysis/__init__.py & gds-domains.symbolic/__init__.py (feature additions), docs.yml (newer artifact action), gds-viz/pyproject.toml (new extras)
  • Main side: test_export.py files (CodeQL fixes), test_namespace.py files (ruff format), gds-interchange/__init__.py (0.2.0), gds-framework/__init__.py & crosswalk/model.py (prose with space + line wrap)

Test plan

  • uv sync --all-packages succeeds on the merge result
  • All 8 CI-matrix test packages pass locally: gds-framework, gds-domains, gds-sim, gds-continuous, gds-analysis, gds-interchange, gds-viz, gds-examples
  • CI on the PR confirms green across all required checks
  • After merge: fast-forward dev from main so the two branches realign

🤖 Generated with Claude Code

Add a prominent Installation section to docs landing page with pip install
commands for all packages, a PyPI-to-import-name mapping table, and a
developer setup section. Also update getting-started guide prerequisites
with explicit install commands.

Closes #60
Add a guide showing practical GDS patterns for production systems:
ETL data pipeline, order state machine, human-in-the-loop approval,
and large enum type organization. Closes #58.
…overability

Rewrites CLAUDE.md with package identity disambiguation (not Neo4j GDS,
not GDSFactory), quick API reference for all public imports, typed
constructor signatures, minimal complete example, and architecture
summary. Adds parameter descriptions to all convenience helper
docstrings in helpers.py (typedef, state_var, entity, space, interface).

Addresses #61.
Add rendered Mermaid diagrams to the gds-viz documentation pages:
- getting-started.md: full quick start with SIR model walkthrough and
  rendered output for Views 1-3, integration workflow diagram
- guide/views.md: complete gallery of all 6 views with rendered Mermaid
  output, reading guides, option tables, and cross-DSL compatibility
- guide/theming.md: side-by-side theme comparison with neutral, dark,
  and forest rendered examples, full color palette reference
- index.md: add sample canonical diagram to overview landing page

Closes #59
- Fix tokenization description everywhere: splits on ` + ` and `, `,
  NOT on plain spaces. "Heater Command" is one token, not two.
- Add note that FeedbackLoop does not enforce CONTRAVARIANT (unlike
  TemporalLoop which enforces COVARIANT)
- Fix temporal loop example: Mechanism needs forward_out for the loop
  source port
- Fix SystemIR schema: hierarchy is Optional, add missing fields
- Fix formula() output: uses Unicode (θ, →, ∘), not ASCII
- Fix severity note: semantic checks emit INFO on pass, not ERROR
- Document G-001 empty-port failure mode and InputIR skip condition
- Document G-003 empty-backward-ports failure mode
- Remove dead code from ETL pattern (validated_space, SuccessFlag)
- Add block_to_mermaid to theming guide's function list
- Add gds-stockflow and gds-control to Packages table
- Fix report.passed -> report.errors == 0 in CLAUDE.md example
- Annotate check_reachability's unique 3-param signature
- Fix test commands to use --package flag for monorepo root
docs: comprehensive documentation improvements
Six diagram types (DFD, state machine, component, C4, ERD, dependency)
compiled to GDS specifications with 27 verification checks and 223 tests.
Each diagram type follows the standard DSL pattern: elements, model,
compiler (GDSSpec + SystemIR), and domain-specific checks.
Demonstrates gds-software DFD DSL with a classic order processing
scenario — 2 external entities, 3 processes, 2 data stores, 11 data
flows. Includes 46 tests covering model, compilation, verification,
canonical decomposition, and query API.
Alias duplicate imports with underscore prefixes so marimo treats them
as cell-private. Fixes "was defined by another cell" errors in the
verification and visualization guide notebooks.
Three diagram types compiling to GDS role blocks and composition trees:

- CLD (Causal Loop Diagrams): stateless signal relay, h = g
- SCN (Supply Chain Networks): stateful inventory dynamics, h = f ∘ g
- VSM (Value Stream Maps): partially stateful process chains

11 domain verification checks (CLD-001..003, SCN-001..004, VSM-001..004),
verification engine with union dispatch, 175 tests at 95% coverage.
Package overview, getting started tutorial, diagram types guide,
verification guide, and 16 auto-generated API reference pages.
Updated mkdocs.yml nav and ecosystem index.
feat: add gds-business package — business dynamics DSL
Merge pull request #74 from BlockScience/dev
…+ interoperability guide

Adds an iterated Prisoner's Dilemma example inspired by Nicky Case's
"The Evolution of Trust", with 8 strategies, round-robin tournaments,
and evolutionary dynamics built on the same OGS game structure used
by the Nash equilibrium example.

New files:
- games/evolution_of_trust/ — OGS model (R=2,T=3,S=-1,P=0), 8 strategies,
  tournament engine, evolutionary dynamics, 71 tests
- guides/evolution_of_trust/ — marimo notebook with plotly charts
  (Nicky Case color palette, stacked area evolution, stat scoreboards)
- docs/guides/interoperability.md — guide demonstrating GDS specs as an
  interoperability layer for game theorists, simulation engines, and
  software teams

Also updates pyproject.toml (plotly dep, wheel includes) and mkdocs nav.
Generates /llms.txt (index) and /llms-full.txt (full content) from the
existing nav structure on every mkdocs build. All 162 doc pages across
11 sections are included. No external services or API keys required —
the plugin converts rendered HTML back to Markdown at build time.
docs: expand documentation site and add llms.txt generation
rohan and others added 29 commits April 3, 2026 21:52
Version bumps:
- gds-framework 0.2.3 → 0.3.0
- gds-owl 0.1.0 → 0.2.0
- gds-psuu 0.2.0 → 0.2.1
- gds-stockflow 0.1.0 → 0.1.1
- gds-control 0.1.0 → 0.1.1
- gds-games 0.3.1 → 0.3.2
- gds-software 0.1.0 → 0.1.1
- gds-business 0.1.0 → 0.1.1

All packages now require gds-framework>=0.3.0.
chore: bump versions and changelog for Tier 0 + Tier 1 release
…tries

- Add docs/changelog.md mirroring root CHANGELOG.md for the docs site
- Add "For AI Agents and LLMs" section to landing page pointing to llms-full.txt
- Add changelog to mkdocs nav and llmstxt plugin sections
- Reorganize Design & Research nav into sub-sections (Design Documents, Research, Roadmaps)
- Add 5 previously orphaned docs to nav: gds-deepdive, v0.2-design, entity-redesign proposal, representation-gap, formal-representability
All CI checks passed. Merging to trigger docs rebuild.
Implements the package consolidation plan from issue #143, reducing the
monorepo from 14 independently published packages to 8.

New packages:
- gds-domains v0.1.0: merges stockflow, control, business, software,
  games, symbolic into subpackages with optional extras
- gds-interchange v0.1.0: replaces gds-owl as a broader interchange hub
  with OWL functionality at gds_interchange.owl

Merged:
- gds-psuu absorbed into gds-analysis as gds_analysis.psuu subpackage

All 8 old packages publish v0.99.0 shims that re-export from new
locations with DeprecationWarning (removal planned for v0.3.0).

Updates all imports in gds-examples, gds-framework cross-DSL tests,
documentation (75+ API stubs, 44+ guide pages), mkdocs.yml, CLAUDE.md,
and root pyproject.toml.

3,104 tests passing across all 8 packages.
- Fix __getattr__ in gds_domains/games/__init__.py: was importing from
  deprecated ogs shim instead of gds_domains.games (circular dep bug)
- Update CI test matrix to match new 8-package structure
- Remove duplicate ogs CLI entry point from gds-games shim pyproject.toml
- Replace ogs/equilibrium.py full duplicate with thin re-export shim
- Add explicit .j2 and py.typed inclusion rule in gds-domains build config
- Update issue template dropdowns to match new 8-package structure
- Remove dead source code from all 8 shim packages (only __init__.py
  shims remain, reducing noise for contributors)
gds-analysis 0.1.1 is already on PyPI without the psuu subpackage.
Bump to 0.1.2 so the shim gds-psuu can depend on the version that
actually contains gds_analysis.psuu.
Implements the package consolidation plan from issue #143, reducing the
monorepo from 14 independently published packages to 8.

New packages:
- gds-domains v0.1.0: merges stockflow, control, business, software,
  games, symbolic into subpackages with optional extras
- gds-interchange v0.1.0: replaces gds-owl as a broader interchange hub
  with OWL functionality at gds_interchange.owl

Merged:
- gds-psuu absorbed into gds-analysis as gds_analysis.psuu subpackage

All 8 old packages publish v0.99.0 shims that re-export from new
locations with DeprecationWarning (removal planned for v0.3.0).

Updates all imports in gds-examples, gds-framework cross-DSL tests,
documentation (75+ API stubs, 44+ guide pages), mkdocs.yml, CLAUDE.md,
and root pyproject.toml.

3,104 tests passing across all 8 packages.
- Fix __getattr__ in gds_domains/games/__init__.py: was importing from
  deprecated ogs shim instead of gds_domains.games (circular dep bug)
- Update CI test matrix to match new 8-package structure
- Remove duplicate ogs CLI entry point from gds-games shim pyproject.toml
- Replace ogs/equilibrium.py full duplicate with thin re-export shim
- Add explicit .j2 and py.typed inclusion rule in gds-domains build config
- Update issue template dropdowns to match new 8-package structure
- Remove dead source code from all 8 shim packages (only __init__.py
  shims remain, reducing noise for contributors)
gds-analysis 0.1.1 is already on PyPI without the psuu subpackage.
Bump to 0.1.2 so the shim gds-psuu can depend on the version that
actually contains gds_analysis.psuu.
…up (#170)

Bumps the actions group with 1 update: [actions/deploy-pages](https://github.com/actions/deploy-pages).


Updates `actions/deploy-pages` from 4 to 5
- [Release notes](https://github.com/actions/deploy-pages/releases)
- [Commits](actions/deploy-pages@v4...v5)

---
updated-dependencies:
- dependency-name: actions/deploy-pages
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…invariant proof verification

Extracts the domain-agnostic proof engine from crypto-econ-dynamics-skill
into gds-core as the ninth workspace package. Any object satisfying
ProofableBlock/ProofableModel can use it without importing GDS types.

Capabilities:
- Deterministic SHA-256 model identity (hash_model, hash_proof)
- 5-strategy symbolic implication prover (analyze_invariants)
- 3-layer predicate-guarded reachability (analyze_reachability)
- User-authored multi-lemma ProofScript with independent verification
- Canonical srepr serialization for third-party evidence exchange

112 tests, 95% coverage, zero lint errors.

Ref: gds-proof-spec.md (extraction specification)
See also: #192 (mechanism_name → block_name rename)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add gds-proof subpackage
gds-proof was a standalone package with no GDS dependencies, using
protocol-only types (ProofableBlock/ProofableModel). This refactor
makes it a proper Layer 1 package that depends on gds-framework and
integrates with the existing verification infrastructure.

Changes:
- Add gds-framework>=0.3.0 dependency
- Rename ProofableBlock -> SymbolicBlock, ProofableModel -> SymbolicModel
- Add adapter.py: GDSSymbolicBlock/GDSSymbolicModel bridge GDS types
  to proof engine, auto-deriving state symbols from Mechanism.updates
- Add findings.py: convert proof results to Finding/VerificationReport
  with PROOF-001 check ID and exportable_predicate population
- Rename reachability -> inductive_safety to avoid naming collision
  with gds_analysis.reachability (simulation-based)
- Add docs/proof/ with overview and getting-started guide
- Add changelog entries for v0.1.0 and v0.2.0
- 130 tests pass (18 new), 92% coverage, zero lint errors

Deprecated aliases maintained for backward compatibility until v1.0.0.
Bumps the actions group with 1 update: [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact).


Updates `actions/upload-pages-artifact` from 4 to 5
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](actions/upload-pages-artifact@v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
* feat: add classical control theory analysis stack (#198)

Add six new modules across four packages implementing the control theory
capabilities identified in the MATLAB tech talk gap analysis:

gds-domains/symbolic:
  - transfer.py: transfer functions (ss_to_tf), poles/zeros,
    controllability/observability, Gang of Six sensitivity (#199)
  - delay.py: Padé approximation for time delay modeling (#200)

gds-analysis:
  - linear.py: eigenvalue stability, frequency response, gain/phase
    margins, discretization (Tustin/ZOH/Euler), LQR/DLQR, Kalman
    filter, gain scheduling (#201)
  - response.py: step/impulse response computation and time-domain
    metrics (rise time, settling time, overshoot, SSE) (#202)

gds-proof/analysis:
  - lyapunov.py: Lyapunov candidate verification, quadratic Lyapunov
    (A'P+PA), Lyapunov equation solver, passivity certificates (#203)

gds-viz:
  - frequency.py: Bode, Nyquist, Nichols, root locus plots (#204)
  - response.py: annotated step/impulse response plots

Zero new third-party dependencies — all capabilities fit within
existing optional extras ([symbolic], [continuous], [phase]/[control]).
78 new tests, all existing tests unaffected.

* fix: test coverage, docs, and cleanup for control theory stack

Quick wins from the post-implementation audit:

Tests:
- Add 26 viz tests: Bode, Nyquist, Nichols, root locus, step/impulse
  response plots, compare_responses, metric annotations
- Add gain_margin numerical verification (35.6 dB for third-order system)
- Add phase_margin with finite margin (integrator: PM = 90 deg)
- Add MIMO transfer function tests (2x2, DC gains, nonzero D feedthrough)
- Add Gang of Six DC value verification (S(0), T(0), CS(0))
- Add gain_schedule test (spring-mass at 3 operating points)
- Add LQR with cross-term N test
- Add backward_euler discretization test

Fixes:
- Remove unimplemented n_circles parameter from nichols_plot
- Fix stale docstring in lyapunov.py (no longer claims to delegate
  to the five-strategy prover)
- Document _find_crossing_time duplication between gds-viz and
  gds-analysis (intentional: avoids hard dependency)

Docs:
- Add CHANGELOG entry for the full control theory stack
- Update root CLAUDE.md with symbolic→analysis→viz data flow
- Update gds-symbolic CLAUDE.md with transfer.py and delay.py
- Update gds-analysis CLAUDE.md with linear.py and response.py
- Update gds-viz CLAUDE.md with frequency/response plot sections
- Update gds-proof CLAUDE.md with Lyapunov module documentation

* feat: add DC motor control tutorial — 8 lessons, beginner to advanced

Progressive tutorial using a DC motor position controller to teach
classical control theory concepts with GDS. Each lesson is standalone
(repeats motor parameters), builds on the same physical system, and
exercises the new control theory analysis stack from #198.

Lessons:
  1. lesson1_plant — SymbolicControlModel, ODE simulation, phase portrait
  2. lesson2_p_control — P controller, StepMetrics, gain sweep
  3. lesson3_pid_transfer — PID, linearize, transfer functions, Bode
  4. lesson4_disturbance — feedforward, Gang of Six sensitivity analysis
  5. lesson5_delay — Pade approximation, gain/phase margins, Nyquist
  6. lesson6_lqr — LQR vs PID, Kalman filter, gain scheduling
  7. lesson7_discrete — Tustin/ZOH discretization, gds-sim execution
  8. lesson8_lyapunov — Lyapunov proof, passivity certificate

31 tests in test_control_tutorial.py, 884 total gds-examples tests pass.

* fix: resolve lint issues in control theory test suite

---------

Co-authored-by: rohan <rohan@block.science>
…ctions-903567a242

chore(deps): bump actions/upload-pages-artifact from 4 to 5 in the actions group
Brings dev's feature additions and rebrand finalization into main:

- gds-viz: bode/nyquist/nichols/root-locus and step/impulse/response
  visualization modules (lazy-loaded under [plots]/[control] extras)
- gds-analysis: linear systems analysis (eigenvalues, stability margins,
  LQR/Kalman) and step-response metrics, lazy-loaded
- gds-domains.symbolic: TransferFunction, controllability/observability
  matrices, ss_to_tf, sensitivity, poles/zeros
- Author affiliation link → https://www.dynamicalsystemsgroup.com/
- Blog references → blog.dynamicalsystemsgroup.com
- actions/upload-pages-artifact bumped to v5

Resolutions preserved from main (the rebrand hotfix):
- gds-interchange 0.2.0 (OWL namespace migration)
- CodeQL-clean URL assertions in test_export.py (use g.subjects())
- "Dynamical Systems Group" (with space) prose form in attribution
- Line-wrapped docstrings/asserts that satisfy ruff E501

Verified locally: 8/8 CI-matrix test packages pass.
@mzargham mzargham merged commit 5aa2879 into main May 15, 2026
12 checks passed
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.

3 participants