sync: merge dev into main (post-rebrand hotfix reconciliation)#214
Merged
Conversation
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
…docs/all-improvements
…ocs/all-improvements
…docs/all-improvements
…cs/all-improvements
- 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
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.
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
Standard
dev → mainrelease-style merge to reconcile after the rebrand hotfix (#213) landed directly onmain. 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 metricsgds-domains.symbolic: TransferFunction, controllability/observability matrices,ss_to_tf, sensitivity, poles/zerosRebrand URL finalization (dev's choices win where they differ from #213):
https://www.dynamicalsystemsgroup.com/blog.dynamicalsystemsgroup.com(replaces theblog.block.scienceURLs rebrand: BlockScience → DynamicalSystemsGroup (unblock GitHub Pages) #213 kept)actions/upload-pages-artifactbumped to v5Preserved from main's rebrand hotfix:
gds-interchange0.2.0 with OWL namespace atgds.dynamicalsystemsgroup.comtest_export.py(useg.subjects()not substring-match on serialized strings)Conflict resolution summary
46 conflicts resolved:
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)test_export.pyfiles (CodeQL fixes),test_namespace.pyfiles (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-packagessucceeds on the merge resultgds-framework,gds-domains,gds-sim,gds-continuous,gds-analysis,gds-interchange,gds-viz,gds-examplesdevfrommainso the two branches realign🤖 Generated with Claude Code