entropy-table 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. entropy_table-0.3.0/.gitattributes +2 -0
  2. entropy_table-0.3.0/.github/workflows/ci.yml +63 -0
  3. entropy_table-0.3.0/.github/workflows/release.yml +79 -0
  4. entropy_table-0.3.0/.gitignore +29 -0
  5. entropy_table-0.3.0/.pre-commit-config.yaml +12 -0
  6. entropy_table-0.3.0/CHANGELOG.md +312 -0
  7. entropy_table-0.3.0/CONTRIBUTING.md +33 -0
  8. entropy_table-0.3.0/LICENSE +21 -0
  9. entropy_table-0.3.0/Makefile +115 -0
  10. entropy_table-0.3.0/PKG-INFO +127 -0
  11. entropy_table-0.3.0/POLICY.md +28 -0
  12. entropy_table-0.3.0/README.md +95 -0
  13. entropy_table-0.3.0/README_QUICKSTART.md +52 -0
  14. entropy_table-0.3.0/VERSIONING.md +41 -0
  15. entropy_table-0.3.0/atlas/bibliography/refs.yaml +131 -0
  16. entropy_table-0.3.0/atlas/cases/01_physics/overdamped-langevin-st/case-overdamped-fokker-planck-baseline.yaml +24 -0
  17. entropy_table-0.3.0/atlas/claims/01_physics/ctmc-schnakenberg/claim-schnakenberg-ep-rate-definition.yaml +20 -0
  18. entropy_table-0.3.0/atlas/claims/01_physics/ctmc-seifert/claim-seifert-ep.yaml +20 -0
  19. entropy_table-0.3.0/atlas/claims/01_physics/overdamped-langevin-st/claim-ep-nonnegative-isothermal.yaml +30 -0
  20. entropy_table-0.3.0/atlas/claims/01_physics/overdamped-langevin-st/claim-overdamped-anomalous-ep-limitation.yaml +23 -0
  21. entropy_table-0.3.0/atlas/claims/README.md +33 -0
  22. entropy_table-0.3.0/atlas/domains/00_golden/proxy-other.yaml +86 -0
  23. entropy_table-0.3.0/atlas/domains/00_golden/subsystem-langevin.yaml +119 -0
  24. entropy_table-0.3.0/atlas/domains/00_golden/supersystem-network.yaml +108 -0
  25. entropy_table-0.3.0/atlas/domains/01_physics/biochemical-cme.yaml +171 -0
  26. entropy_table-0.3.0/atlas/domains/01_physics/ctmc-schnakenberg.yaml +202 -0
  27. entropy_table-0.3.0/atlas/domains/01_physics/domain_ctmc_seifert.yaml +125 -0
  28. entropy_table-0.3.0/atlas/domains/01_physics/overdamped-langevin-st.yaml +228 -0
  29. entropy_table-0.3.0/atlas/domains/01_physics/overdamped-nonisothermal-langevin.yaml +154 -0
  30. entropy_table-0.3.0/atlas/domains/01_physics/quantum-lindblad.yaml +158 -0
  31. entropy_table-0.3.0/atlas/domains/01_physics/underdamped-langevin-st.yaml +218 -0
  32. entropy_table-0.3.0/atlas/relations/00_golden/coarsegrain-super-to-proxy.yaml +28 -0
  33. entropy_table-0.3.0/atlas/relations/00_golden/composition-sub-to-super.yaml +43 -0
  34. entropy_table-0.3.0/atlas/relations/00_golden/coupling-proxy-to-sub.yaml +26 -0
  35. entropy_table-0.3.0/atlas/relations/01_physics/biochemical-cme-to-ctmc.yaml +78 -0
  36. entropy_table-0.3.0/atlas/relations/01_physics/ctmc-coarsegraining-hidden-variables.yaml +58 -0
  37. entropy_table-0.3.0/atlas/relations/01_physics/ctmc-to-diffusion-limit.yaml +94 -0
  38. entropy_table-0.3.0/atlas/relations/01_physics/overdamped-nonisothermal-anomalous-ep.yaml +62 -0
  39. entropy_table-0.3.0/atlas/relations/01_physics/quantum-lindblad-to-ctmc-classical-limit.yaml +64 -0
  40. entropy_table-0.3.0/atlas/relations/01_physics/underdamped-to-overdamped-limit.yaml +53 -0
  41. entropy_table-0.3.0/atlas/schema/domain.schema.json +330 -0
  42. entropy_table-0.3.0/atlas/schema/relation.schema.json +224 -0
  43. entropy_table-0.3.0/conftest.py +33 -0
  44. entropy_table-0.3.0/dist/packs/.gitkeep +0 -0
  45. entropy_table-0.3.0/docs/atlas_graph.mmd +36 -0
  46. entropy_table-0.3.0/docs/cases_conventions.md +59 -0
  47. entropy_table-0.3.0/docs/claims.md +127 -0
  48. entropy_table-0.3.0/docs/composition_integrity.md +86 -0
  49. entropy_table-0.3.0/docs/compute.md +93 -0
  50. entropy_table-0.3.0/docs/compute_cases.md +95 -0
  51. entropy_table-0.3.0/docs/contract.md +20 -0
  52. entropy_table-0.3.0/docs/contribution.md +10 -0
  53. entropy_table-0.3.0/docs/developer-guide.md +77 -0
  54. entropy_table-0.3.0/docs/effective-closure.md +10 -0
  55. entropy_table-0.3.0/docs/gen_pages.py +4 -0
  56. entropy_table-0.3.0/docs/index.md +40 -0
  57. entropy_table-0.3.0/docs/ingestion_checklist.md +14 -0
  58. entropy_table-0.3.0/docs/metrics.md +37 -0
  59. entropy_table-0.3.0/docs/releases.md +50 -0
  60. entropy_table-0.3.0/docs/schema.md +56 -0
  61. entropy_table-0.3.0/docs/schema_rfc_pr14.md +108 -0
  62. entropy_table-0.3.0/docs/variant_domain_pattern.md +29 -0
  63. entropy_table-0.3.0/docs/workflow_staging_and_extraction.md +51 -0
  64. entropy_table-0.3.0/mkdocs.yml +65 -0
  65. entropy_table-0.3.0/pyproject.toml +61 -0
  66. entropy_table-0.3.0/ruff.toml +2 -0
  67. entropy_table-0.3.0/setup.cfg +4 -0
  68. entropy_table-0.3.0/src/entropy_table/__init__.py +0 -0
  69. entropy_table-0.3.0/src/entropy_table/_version.py +24 -0
  70. entropy_table-0.3.0/src/entropy_table/cli.py +147 -0
  71. entropy_table-0.3.0/src/entropy_table/commands/__init__.py +0 -0
  72. entropy_table-0.3.0/src/entropy_table/commands/analyze_health.py +214 -0
  73. entropy_table-0.3.0/src/entropy_table/commands/build_index.py +169 -0
  74. entropy_table-0.3.0/src/entropy_table/commands/extract_domain_from_template.py +125 -0
  75. entropy_table-0.3.0/src/entropy_table/commands/freeze_guard.py +18 -0
  76. entropy_table-0.3.0/src/entropy_table/commands/ingest.py +201 -0
  77. entropy_table-0.3.0/src/entropy_table/commands/manage_cases.py +367 -0
  78. entropy_table-0.3.0/src/entropy_table/commands/metrics.py +210 -0
  79. entropy_table-0.3.0/src/entropy_table/commands/query.py +348 -0
  80. entropy_table-0.3.0/src/entropy_table/commands/query_claims.py +131 -0
  81. entropy_table-0.3.0/src/entropy_table/commands/release.py +323 -0
  82. entropy_table-0.3.0/src/entropy_table/commands/render.py +83 -0
  83. entropy_table-0.3.0/src/entropy_table/commands/report_claims.py +127 -0
  84. entropy_table-0.3.0/src/entropy_table/commands/scaffold.py +101 -0
  85. entropy_table-0.3.0/src/entropy_table/commands/snapshot.py +168 -0
  86. entropy_table-0.3.0/src/entropy_table/commands/validate.py +176 -0
  87. entropy_table-0.3.0/src/entropy_table/commands/validate_bibliography.py +200 -0
  88. entropy_table-0.3.0/src/entropy_table/commands/validate_claims.py +273 -0
  89. entropy_table-0.3.0/src/entropy_table/commands/validate_composition.py +397 -0
  90. entropy_table-0.3.0/src/entropy_table/commands/validate_math.py +141 -0
  91. entropy_table-0.3.0/src/entropy_table/commands/visualize.py +351 -0
  92. entropy_table-0.3.0/src/entropy_table/compute/__init__.py +6 -0
  93. entropy_table-0.3.0/src/entropy_table/compute/case_runner.py +250 -0
  94. entropy_table-0.3.0/src/entropy_table/compute/cli.py +68 -0
  95. entropy_table-0.3.0/src/entropy_table/compute/ctmc_ep.py +111 -0
  96. entropy_table-0.3.0/src/entropy_table/compute/diffusion_ep_1d.py +47 -0
  97. entropy_table-0.3.0/src/entropy_table/compute/report.py +225 -0
  98. entropy_table-0.3.0/src/entropy_table/core/__init__.py +0 -0
  99. entropy_table-0.3.0/src/entropy_table/core/bindings.py +32 -0
  100. entropy_table-0.3.0/src/entropy_table/core/common.py +27 -0
  101. entropy_table-0.3.0/src/entropy_table.egg-info/PKG-INFO +127 -0
  102. entropy_table-0.3.0/src/entropy_table.egg-info/SOURCES.txt +156 -0
  103. entropy_table-0.3.0/src/entropy_table.egg-info/dependency_links.txt +1 -0
  104. entropy_table-0.3.0/src/entropy_table.egg-info/entry_points.txt +2 -0
  105. entropy_table-0.3.0/src/entropy_table.egg-info/requires.txt +22 -0
  106. entropy_table-0.3.0/src/entropy_table.egg-info/top_level.txt +1 -0
  107. entropy_table-0.3.0/staging/README.md +5 -0
  108. entropy_table-0.3.0/staging/intake/README.md +3 -0
  109. entropy_table-0.3.0/staging/intake/drafts/README.md +3 -0
  110. entropy_table-0.3.0/staging/intake/raw/README.md +3 -0
  111. entropy_table-0.3.0/templates/case_template.yaml +20 -0
  112. entropy_table-0.3.0/templates/domain_template.yaml +100 -0
  113. entropy_table-0.3.0/tests/fixtures/fail/domain_invalid_enum.yaml +158 -0
  114. entropy_table-0.3.0/tests/fixtures/fail/domain_missing_closure_notes.yaml +157 -0
  115. entropy_table-0.3.0/tests/fixtures/fail/domain_missing_must_fail_tests.yaml +143 -0
  116. entropy_table-0.3.0/tests/fixtures/fail/relation_dangling_endpoint.yaml +37 -0
  117. entropy_table-0.3.0/tests/fixtures/fail/transitive_channels/domains/atom.yaml +6 -0
  118. entropy_table-0.3.0/tests/fixtures/fail/transitive_channels/domains/molecule.yaml +6 -0
  119. entropy_table-0.3.0/tests/fixtures/fail/transitive_channels/relations/comp.yaml +8 -0
  120. entropy_table-0.3.0/tests/fixtures/pass/domain_valid.yaml +106 -0
  121. entropy_table-0.3.0/tests/fixtures/pass/relation_valid.yaml +31 -0
  122. entropy_table-0.3.0/tests/test_analyze_health.py +99 -0
  123. entropy_table-0.3.0/tests/test_bibliography.py +122 -0
  124. entropy_table-0.3.0/tests/test_build_index.py +50 -0
  125. entropy_table-0.3.0/tests/test_case_runner.py +94 -0
  126. entropy_table-0.3.0/tests/test_claim_case_binding.py +87 -0
  127. entropy_table-0.3.0/tests/test_compute_ctmc.py +31 -0
  128. entropy_table-0.3.0/tests/test_compute_diffusion.py +20 -0
  129. entropy_table-0.3.0/tests/test_contract.py +56 -0
  130. entropy_table-0.3.0/tests/test_extract_template.py +40 -0
  131. entropy_table-0.3.0/tests/test_ingest.py +82 -0
  132. entropy_table-0.3.0/tests/test_manage_cases.py +304 -0
  133. entropy_table-0.3.0/tests/test_metrics.py +32 -0
  134. entropy_table-0.3.0/tests/test_query.py +41 -0
  135. entropy_table-0.3.0/tests/test_relation_schema_pr14.py +79 -0
  136. entropy_table-0.3.0/tests/test_release.py +30 -0
  137. entropy_table-0.3.0/tests/test_report_scan.py +167 -0
  138. entropy_table-0.3.0/tests/test_schema_version.py +137 -0
  139. entropy_table-0.3.0/tests/test_snapshot_determinism.py +87 -0
  140. entropy_table-0.3.0/tests/test_validate_claims.py +111 -0
  141. entropy_table-0.3.0/tests/test_validate_composition.py +277 -0
  142. entropy_table-0.3.0/tests/test_validate_composition_pr14.py +186 -0
  143. entropy_table-0.3.0/tests/test_visualize.py +213 -0
  144. entropy_table-0.3.0/tools/__init__.py +1 -0
  145. entropy_table-0.3.0/tools/analyze_health.py +12 -0
  146. entropy_table-0.3.0/tools/build_index.py +6 -0
  147. entropy_table-0.3.0/tools/extract_domain_from_template.py +6 -0
  148. entropy_table-0.3.0/tools/metrics.py +11 -0
  149. entropy_table-0.3.0/tools/query.py +6 -0
  150. entropy_table-0.3.0/tools/release.py +6 -0
  151. entropy_table-0.3.0/tools/render.py +6 -0
  152. entropy_table-0.3.0/tools/scaffold.py +6 -0
  153. entropy_table-0.3.0/tools/validate.py +6 -0
  154. entropy_table-0.3.0/tools/validate_bibliography.py +6 -0
  155. entropy_table-0.3.0/tools/validate_claims.py +6 -0
  156. entropy_table-0.3.0/tools/validate_composition.py +6 -0
  157. entropy_table-0.3.0/tools/visualize.py +16 -0
  158. entropy_table-0.3.0/uv.lock +1536 -0
@@ -0,0 +1,2 @@
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
@@ -0,0 +1,63 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: ["main", "master", "claude/**"]
6
+ pull_request:
7
+ branches: ["main", "master"]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ lint:
15
+ name: Lint (ruff + mypy)
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - uses: actions/setup-python@v5
20
+ with:
21
+ python-version: "3.11"
22
+ - name: Install dev dependencies
23
+ run: pip install -e ".[dev]"
24
+ - name: Run ruff
25
+ run: ruff check src tests
26
+ - name: Run mypy
27
+ run: mypy src
28
+
29
+ test:
30
+ name: Tests (Python ${{ matrix.python-version }})
31
+ runs-on: ubuntu-latest
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ python-version: ["3.10", "3.11", "3.12"]
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+ - uses: actions/setup-python@v5
39
+ with:
40
+ python-version: ${{ matrix.python-version }}
41
+ - name: Install dependencies
42
+ run: pip install -e ".[dev]"
43
+ - name: Run pytest with coverage
44
+ run: pytest --cov=src --cov-report=xml
45
+ - name: Upload coverage
46
+ if: matrix.python-version == '3.11'
47
+ uses: codecov/codecov-action@v4
48
+ with:
49
+ token: ${{ secrets.CODECOV_TOKEN }}
50
+ files: coverage.xml
51
+
52
+ docs:
53
+ name: Docs (mkdocs --strict)
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - uses: actions/checkout@v4
57
+ - uses: actions/setup-python@v5
58
+ with:
59
+ python-version: "3.11"
60
+ - name: Install dev dependencies
61
+ run: pip install -e ".[dev]"
62
+ - name: Build docs
63
+ run: mkdocs build --strict
@@ -0,0 +1,79 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*.*.*"
7
+
8
+ permissions:
9
+ contents: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ build:
14
+ name: Build distribution
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ with:
19
+ fetch-depth: 0
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.11"
23
+ - name: Install build tools
24
+ run: pip install build
25
+ - name: Build wheel and sdist
26
+ run: python -m build
27
+ - name: Upload artifacts
28
+ uses: actions/upload-artifact@v4
29
+ with:
30
+ name: dist
31
+ path: dist/
32
+
33
+ publish-pypi:
34
+ name: Publish to PyPI
35
+ needs: build
36
+ runs-on: ubuntu-latest
37
+ environment:
38
+ name: pypi
39
+ steps:
40
+ - uses: actions/download-artifact@v4
41
+ with:
42
+ name: dist
43
+ path: dist/
44
+ - name: Publish to PyPI
45
+ uses: pypa/gh-action-pypi-publish@release/v1
46
+
47
+ github-release:
48
+ name: Create GitHub Release
49
+ needs: publish-pypi
50
+ runs-on: ubuntu-latest
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+ - uses: actions/download-artifact@v4
54
+ with:
55
+ name: dist
56
+ path: dist/
57
+ - name: Create GitHub Release
58
+ uses: softprops/action-gh-release@v2
59
+ with:
60
+ files: dist/*
61
+ generate_release_notes: true
62
+ draft: false
63
+ prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
64
+
65
+ publish-zenodo:
66
+ name: Publish to Zenodo
67
+ needs: github-release
68
+ runs-on: ubuntu-latest
69
+ steps:
70
+ - uses: actions/checkout@v4
71
+ - name: Upload to Zenodo
72
+ run: |
73
+ echo "Zenodo upload triggered for tag ${{ github.ref_name }}"
74
+ echo "Configure ZENODO_TOKEN secret and zenodraft/action for automatic upload."
75
+ # Replace with actual zenodo-upload action when token is configured:
76
+ # uses: zenodraft/action@main
77
+ # with:
78
+ # concept-doi: 10.5281/zenodo.XXXXXXXX # <- enter your concept DOI
79
+ # token: ${{ secrets.ZENODO_TOKEN }}
@@ -0,0 +1,29 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .pytest_cache/
4
+ .venv/
5
+ outputs/
6
+ outputs/atlas_health.md
7
+ outputs/claims_report.md
8
+ *.egg-info/
9
+
10
+ cache/
11
+
12
+ # metrics artifacts
13
+ outputs/metrics.*
14
+ cache/metrics.json
15
+
16
+ # staging artifacts
17
+ staging/**/*.pdf
18
+ # release artifacts
19
+ dist/*
20
+ !dist/packs/
21
+ dist/packs/*.zip
22
+ dist/packs/*.tar.gz
23
+ !dist/packs/.gitkeep
24
+ outputs/snapshots/
25
+ outputs/manifests/
26
+ src/entropy_table/_version.py
27
+
28
+ # MkDocs build output
29
+ site/
@@ -0,0 +1,12 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.6.9
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
8
+ - repo: https://github.com/pre-commit/mirrors-mypy
9
+ rev: v1.11.2
10
+ hooks:
11
+ - id: mypy
12
+ additional_dependencies: [types-PyYAML, types-jsonschema]
@@ -0,0 +1,312 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
+ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [v1.0.0] – 2026-03-08
11
+
12
+ ### Summary
13
+
14
+ v1.0.0 marks the first stable, production-ready release of the Entropy Table.
15
+ Three post-v0.4.0 sprints deliver a proper installable Python package with a
16
+ full Typer CLI, a MkDocs Material documentation website with GitHub Pages
17
+ deployment, and a SymPy-powered math validator — all wired into an automated
18
+ PyPI + GitHub Release workflow.
19
+
20
+ ---
21
+
22
+ ### Added
23
+
24
+ - **Installable Python package** (`src/` layout, `setuptools_scm` versioning):
25
+ all tools migrated from `tools/*.py` into `src/entropy_table/commands/` as a
26
+ proper package; `conftest.py` provides backward-compatible flat imports so
27
+ the existing test suite runs unchanged. (PR #74)
28
+
29
+ - **Full Typer CLI** (`entropy-table`): unified entry point with subcommands
30
+ `validate`, `validate-all`, `validate-math`, `scaffold`, `visualize`,
31
+ `render`, `health`, `metrics`, `build-index`, `release`. The `tools/`
32
+ wrappers remain for Makefile / subprocess-based tests. (PR #74)
33
+
34
+ - **Code quality toolchain**: `ruff.toml` + `.pre-commit-config.yaml`
35
+ (Ruff linter + mypy) integrated into the pre-commit hook and CI. (PR #74)
36
+
37
+ - **MkDocs Material documentation website** (`mkdocs.yml`, `docs/`):
38
+ landing page, schema tutorial ("Add a new domain in 5 min"),
39
+ full CLI developer guide, Mermaid.js diagram support, and
40
+ `mkdocstrings` API autodoc. (PR #75)
41
+
42
+ - **GitHub Pages CI deploy** (`.github/workflows/ci.yml`): `deploy-docs` job
43
+ triggers on every push to `main` via `mkdocs gh-deploy`. (PR #75)
44
+
45
+ - **`CONTRIBUTING.md`**: contributor workflow with `uv sync`, pre-commit,
46
+ test, and PR checklist. (PR #75)
47
+
48
+ - **`validate-math` command** (`src/entropy_table/commands/validate_math.py`):
49
+ checks `entropy_accounting` structural completeness, `production_term`
50
+ non-negativity annotation, `must_fail_tests` integrity, and best-effort
51
+ SymPy LaTeX parse probe across all domains. Integrated into `validate-all`.
52
+ (PR #76)
53
+
54
+ - **`sympy` optional dependency** (`[math]` extra) + `pytest-cov>=5.0` dev
55
+ dependency added. (PR #76)
56
+
57
+ - **Automated release workflow** (`.github/workflows/release.yml`): on every
58
+ `v*` tag push — builds the wheel/sdist, runs the full test suite, publishes
59
+ to PyPI, and creates a GitHub Release with auto-generated notes. (PR #76)
60
+
61
+ ---
62
+
63
+ ### Changed
64
+
65
+ - **Makefile**: added `validate-math`, `docs`, `docs-build`, `docs-deploy`
66
+ targets; all existing targets updated to use `uv run entropy-table …`
67
+ where appropriate. (PR #74, #75, #76)
68
+
69
+ - **CI pipeline** (`.github/workflows/ci.yml`): installs `--extra docs`,
70
+ builds MkDocs in the test job, uploads the generated graph artefact.
71
+ (PR #75)
72
+
73
+ - **`pyproject.toml`**: src layout, `setuptools_scm` dynamic version, `docs`
74
+ and `math` optional extras, CLI entry point
75
+ `entropy-table = "entropy_table.cli:app"`. (PR #74, #75, #76)
76
+
77
+ ---
78
+
79
+ ### Merged Pull Requests
80
+
81
+ | # | Title |
82
+ |---|---|
83
+ | #76 | Add SymPy math validator and automated release workflow |
84
+ | #75 | MkDocs Material website + GitHub Pages CI + CONTRIBUTING |
85
+ | #74 | Packaging Sprint 1 – src layout, Typer CLI, Ruff + pre-commit |
86
+
87
+ ---
88
+
89
+ ## [v0.4.0] – 2026-03-08
90
+
91
+ ### Summary
92
+
93
+ v0.4.0 closes the last major integrity gap in the composition layer: physical
94
+ exchange channels can no longer silently disappear when subsystems are grouped
95
+ into a supersystem. The release introduces a two-mode channel-inheritance
96
+ validator that is grounded in the absorption / coarse-graining semantics of the
97
+ atlas schema.
98
+
99
+ ---
100
+
101
+ ### Added
102
+
103
+ - **Transitive channel-inheritance validation**
104
+ (`validate_transitive_channels` in `tools/validate_composition.py`):
105
+ automatically enforces that every `exchange_channel` of a subsystem is
106
+ accounted for in its supersystem. Two modes are implemented:
107
+
108
+ * **Explicit filter (absorption semantics):** when a composition relation
109
+ declares a `channels` (or `exchange_channels` / `coupling_channels`) field,
110
+ that list acts as a coarse-graining filter. The validator checks that every
111
+ listed channel appears in *both* `boundary.exchange_channels` of the source
112
+ and target domain; channels absent from the list are treated as internally
113
+ absorbed and are not required to surface in the supersystem.
114
+
115
+ * **Implicit transitive inheritance:** when no `channels` field is present,
116
+ the validator computes the set-difference
117
+ `source.exchange_channels − target.exchange_channels`. Any non-empty
118
+ difference is reported as an `integrity error` naming the missing channels,
119
+ the subsystem, and the supersystem — preventing exchange streams from
120
+ vanishing unintentionally during mere grouping operations.
121
+
122
+ Legacy heuristic composition signals (coupling relations carrying a `parts`
123
+ list) emit a `WARNING` and are skipped by the strict transitive check for
124
+ backwards compatibility.
125
+
126
+ - **Failure-fixture suite** (`tests/fixtures/fail/transitive_channels/`):
127
+ three minimal YAML fixtures (`atom.yaml`, `molecule.yaml`, `comp.yaml`)
128
+ demonstrate the canonical failing case (subsystem declares `information`;
129
+ supersystem only declares `heat`).
130
+
131
+ - **5 new tests** in `tests/test_validate_composition.py` covering:
132
+ transitive mismatch (text + JSON output), superset-passes, explicit-filter
133
+ passes, and legacy-heuristic warning.
134
+ Full suite: **114 tests**, all passing. (PR #72)
135
+
136
+ ---
137
+
138
+ ### Merged Pull Requests
139
+
140
+ | # | Title |
141
+ |---|---|
142
+ | #72 | Add `validate_transitive_channels` for composition integrity |
143
+
144
+ ---
145
+
146
+ ## [v0.3.0] – 2026-03-08
147
+
148
+ ### Summary
149
+
150
+ v0.3.0 consolidates the infrastructure of the atlas into a stable, production-ready
151
+ foundation. The sprint introduces strict schema versioning, an automated case
152
+ management layer, interactive scaffolding for new domains, and verified DOI
153
+ caching — all wired into the existing `make` workflow and the CI pipeline.
154
+
155
+ ---
156
+
157
+ ### Added
158
+
159
+ - **Case Management Tool** (`tools/manage_cases.py`): two subcommands —
160
+ `create` scaffolds a case file from `templates/case_template.yaml` (with
161
+ optional `--claim-file` to infer domain and category automatically);
162
+ `validate` cross-checks every claim's `evidence.cases` list against actual
163
+ files in `atlas/cases/`, reporting dangling references (hard error) and
164
+ orphaned cases (soft warning, promoted to error with `--strict`).
165
+ Wired into `make new-case`, `make validate-cases`, and the `validate-all`
166
+ target so CI detects referential breaks automatically.
167
+ 17 new tests; full 103-test suite passes. (PR #68)
168
+ - **Scaffolding** (`tools/scaffold.py`, `make new-domain`): stamps out a new
169
+ domain YAML from `templates/domain_template.yaml` with the correct `id`
170
+ field injected and every other field left as an explicit `<TODO:…>`
171
+ placeholder. Prevents the "copy-and-forget-to-change-the-id" class of
172
+ contributor errors; enforces kebab-case for entity IDs and the
173
+ digit-prefixed underscore convention (e.g. `01_physics`) for category
174
+ names. Interactive prompt fires when `ID` is omitted. (PR #67)
175
+ - **DOI Caching & Network Verification** (`--verify-network` flag on
176
+ `validate_bibliography.py`): persistent DOI cache at
177
+ `cache/valid_dois.json` with exponential backoff on transient HTTP errors;
178
+ placeholder DOIs (`10.0000/…`) are silently skipped so golden fixtures
179
+ never trigger false CI failures. Cache wired into `actions/cache@v4`,
180
+ keyed on the hash of `refs.yaml`, so it refreshes automatically when
181
+ citations change. (PR #66)
182
+
183
+ ### Changed
184
+
185
+ - **Schema Versioning** (`atlas/schema/domain.schema.json`,
186
+ `atlas/schema/relation.schema.json`): `schema_version` is now a required,
187
+ enum-enforced field (`"1.0.0"`) across every domain and relation YAML.
188
+ `tools/validate.py` emits a clear `VersionConflict` pre-check error (with
189
+ declared vs. expected versions) before falling through to jsonschema,
190
+ eliminating redundant enum noise in error output. All 10 domain YAMLs
191
+ and 9 relation YAMLs migrated; `templates/domain_template.yaml` seeds
192
+ the correct value so `scaffold.py` output is valid out of the box.
193
+ 8 new schema-version tests; 111 tests total. (PR #69)
194
+
195
+ ---
196
+
197
+ ### Merged Pull Requests
198
+
199
+ | # | Title |
200
+ |---|---|
201
+ | #69 | Add `schema_version` v1.0.0 to domain and relation schemas |
202
+ | #68 | Add case management tool with `create`/`validate` subcommands |
203
+ | #67 | Add scaffold tool and `make new-domain` Makefile target |
204
+ | #66 | Skip placeholder DOIs and add network verification with DOI caching |
205
+
206
+ ---
207
+
208
+ ## [v0.2.0] – 2026-03-07
209
+
210
+ ### Summary
211
+
212
+ This release transforms the *Entropy Table* from a solid prototype into a
213
+ cross-domain, professional scientific data atlas. Alongside a major
214
+ content expansion into quantum systems and biochemistry, v0.2.0 ships a
215
+ fast, fully-reproducible toolchain and a machine-readable validation API.
216
+
217
+ ---
218
+
219
+ ### New Domains
220
+
221
+ | Domain key | Description |
222
+ |---|---|
223
+ | `quantum-lindblad` | GKSL / Lindblad master equation with strict CPTP integrity checks and Spohn's inequality |
224
+ | `biochemical-cme` | Chemical Master Equation (CME) with Wegscheider cycle-affinity consistency conditions |
225
+ | `overdamped-nonisothermal-langevin` | Stochastic thermodynamics with spatially varying temperature fields and anomalous entropy production ($\sigma_\text{anom} \ge 0$) |
226
+
227
+ ### New Relations
228
+
229
+ - **Quantum → Classical limit:** formal limit from `quantum-lindblad` to the
230
+ classical CTMC (Pauli master equation).
231
+ - **CME → Schnakenberg topology:** composition of the Chemical Master Equation
232
+ into the Schnakenberg cycle decomposition.
233
+
234
+ ---
235
+
236
+ ### Toolchain & API
237
+
238
+ - **`--json` flag on all validators** (`validate.py`, `validate_claims.py`,
239
+ `validate_composition.py`, `validate_bibliography.py`): structured,
240
+ machine-parseable error reports for CI integration and downstream tooling.
241
+ Covered by **86 automated tests**.
242
+ - **Automatic knowledge-graph visualisation** (`tools/visualize.py`):
243
+ generates Mermaid.js (`.mmd`) and Graphviz (`.dot`) graphs of the domain
244
+ architecture. Node shapes encode closure type; colours encode epistemic
245
+ status.
246
+ - **Central `Makefile`**: `make validate-all`, `make test`, `make visualize`,
247
+ and `make release` provide a seamless onboarding experience for new
248
+ contributors.
249
+
250
+ ---
251
+
252
+ ### CI / CD & Reproducible Builds
253
+
254
+ - **`uv` package manager**: dependency management migrated to `uv` with an
255
+ exactly-pinned `uv.lock` for deterministic builds.
256
+ - **GitHub Actions upgrade**: the CI pipeline now runs the full, deep
257
+ validation chain on every push, uses `setup-uv` caching (sub-second
258
+ install times), and uploads the generated Mermaid graph as a build
259
+ artefact.
260
+
261
+ ---
262
+
263
+ ### Schema Migration & Cleanup
264
+
265
+ - **PR #49 (golden domains):** proxy-model domains thermodynamically linked
266
+ (Sekimoto / Sagawa-Ueda) via `[heat, information]` channels.
267
+ `regime_shift` relations now use the dedicated semantic block.
268
+ - **README rewrite:** contract-first approach, new features, and the
269
+ `uv` / `make` quickstart prominently documented.
270
+
271
+ ---
272
+
273
+ ### Merged Pull Requests
274
+
275
+ | # | Title |
276
+ |---|---|
277
+ | #63 | Add JSON-feature tests for all validators |
278
+ | #62 | Add `--json` interface to `validate_composition` and `validate_bibliography` |
279
+ | #61 | Refactor validation helpers |
280
+ | #60 | Optimise CI pipeline with `uv` caching and artefact upload |
281
+ | #59 | Structured JSON error output for `validate.py` |
282
+ | #58 | Migrate to `uv` package manager |
283
+ | #57 | Fix CI pipeline |
284
+ | #53 | Repo-analysis feedback and cleanup |
285
+ | #52 | Add `quantum-lindblad` domain (quantum open systems) |
286
+ | #51 | Add `biochemical-cme` domain (biochemical reaction networks) |
287
+ | #50 | Add `overdamped-nonisothermal-langevin` domain |
288
+ | #49 | Link golden proxy-model domains via heat / information channels |
289
+ | #48 | Define channel validation |
290
+
291
+ ---
292
+
293
+ ## [v0.1.0] – initial release
294
+
295
+ Bootstrap of the contract-first atlas skeleton with:
296
+
297
+ - Domain and relation schemas (`atlas/schema/`)
298
+ - CTMC Schnakenberg and overdamped Langevin domains
299
+ - Core validation toolchain (`validate.py`, `validate_claims.py`,
300
+ `validate_composition.py`, `validate_bibliography.py`)
301
+ - Atlas index builder, read-only query CLI
302
+ - Claim layer with evidentiary loop to cases
303
+ - Bibliography layer
304
+ - Graph-health and metrics reporting
305
+ - Release dataset packager (`tools/release.py`)
306
+ - Staging workflow and template-based domain extractor
307
+
308
+ [v1.0.0]: https://github.com/GenesisAeon/entropy-table/releases/tag/v1.0.0
309
+ [v0.4.0]: https://github.com/GenesisAeon/entropy-table/releases/tag/v0.4.0
310
+ [v0.3.0]: https://github.com/GenesisAeon/entropy-table/releases/tag/v0.3.0
311
+ [v0.2.0]: https://github.com/GenesisAeon/entropy-table/releases/tag/v0.2.0
312
+ [v0.1.0]: https://github.com/GenesisAeon/entropy-table/releases/tag/v0.1.0
@@ -0,0 +1,33 @@
1
+ # Contributing to Entropy Table
2
+
3
+ Please read [docs/contribution.md](docs/contribution.md) first — all rules still apply.
4
+
5
+ ## New workflow (Sprint 1+2)
6
+
7
+ ```bash
8
+ # Setup
9
+ uv sync --extra dev --extra docs
10
+ uv run pre-commit install
11
+
12
+ # Add a new domain
13
+ uv run entropy-table scaffold domain my-new-domain
14
+ # ... edit atlas/domains/my-new-domain.yaml ...
15
+ uv run entropy-table validate-all
16
+
17
+ # Check code quality
18
+ uv run pre-commit run --all-files
19
+
20
+ # Preview docs locally
21
+ uv run mkdocs serve
22
+ ```
23
+
24
+ ## What needs a PR?
25
+
26
+ - New or modified domain/relation YAMLs → always requires `validate-all` to pass
27
+ - New CLI commands → add tests in `tests/`
28
+ - Doc changes → `uv run mkdocs build` must succeed
29
+
30
+ ## CI
31
+
32
+ Every push runs: `make test` + `make validate-all` + `entropy-table health --ci-check`.
33
+ Docs are automatically deployed to GitHub Pages on every merge to `main`.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,115 @@
1
+ .PHONY: help validate validate-all validate-math test health render visualize visualize-dot metrics release new-domain new-case validate-cases clean docs docs-build docs-deploy
2
+
3
+ PYTHON := uv run python
4
+ CLI := uv run entropy-table
5
+ TOOLS := tools
6
+ VERSION ?= dev
7
+
8
+ help:
9
+ @echo "entropy-table — available targets:"
10
+ @echo ""
11
+ @echo " validate Validate domain/relation schemas and cross-references"
12
+ @echo " validate-all Run all validation checks (schema + claims + composition + bibliography + math)"
13
+ @echo " validate-math Validate mathematical expressions in atlas domains (SymPy-assisted)"
14
+ @echo " test Run the full pytest test suite"
15
+ @echo " health Analyse atlas health (orphaned domains, unfalsifiable claims, …)"
16
+ @echo " render Render atlas to atlas.md and atlas.tex"
17
+ @echo " visualize Generate Mermaid graph (docs/atlas_graph.mmd)"
18
+ @echo " visualize-dot Generate Graphviz DOT graph (docs/atlas_graph.dot)"
19
+ @echo " metrics Compute operational atlas metrics (JSON + Markdown)"
20
+ @echo " release Build a release pack (set VERSION=vX.Y.Z)"
21
+ @echo " new-domain Scaffold a new domain file (set ID=my-domain)"
22
+ @echo " new-case Scaffold a new case file (set ID=my-case-v01; optional CLAIM= CALCULATOR=)"
23
+ @echo " validate-cases Validate claim↔case cross-references (dangling + orphaned)"
24
+ @echo " clean Remove generated artefacts"
25
+ @echo ""
26
+ @echo " Or use the CLI directly:"
27
+ @echo " uv run entropy-table --help"
28
+
29
+ # ── Validation ────────────────────────────────────────────────────────────────
30
+
31
+ validate:
32
+ $(PYTHON) $(TOOLS)/validate.py
33
+
34
+ validate-all: validate
35
+ $(PYTHON) $(TOOLS)/validate_claims.py
36
+ $(PYTHON) $(TOOLS)/validate_composition.py
37
+ $(PYTHON) $(TOOLS)/validate_bibliography.py
38
+ $(CLI) validate-cases
39
+ $(CLI) validate-math
40
+
41
+ validate-math:
42
+ $(CLI) validate-math
43
+
44
+ # ── Testing ───────────────────────────────────────────────────────────────────
45
+
46
+ test:
47
+ $(PYTHON) -m pytest
48
+
49
+ # ── Atlas health & metrics ────────────────────────────────────────────────────
50
+
51
+ health:
52
+ $(CLI) health
53
+
54
+ metrics:
55
+ $(CLI) metrics --format markdown
56
+
57
+ # ── Rendering ─────────────────────────────────────────────────────────────────
58
+
59
+ render:
60
+ $(CLI) render
61
+
62
+ # ── Visualisation ─────────────────────────────────────────────────────────────
63
+
64
+ visualize:
65
+ $(PYTHON) -m entropy_table.commands.visualize --format mermaid --output docs/atlas_graph.mmd
66
+ @echo "Mermaid graph written to docs/atlas_graph.mmd"
67
+
68
+ visualize-dot:
69
+ $(PYTHON) -m entropy_table.commands.visualize --format dot --output docs/atlas_graph.dot
70
+ @echo "Graphviz DOT graph written to docs/atlas_graph.dot"
71
+
72
+ # ── Release ───────────────────────────────────────────────────────────────────
73
+
74
+ release:
75
+ $(CLI) release --version $(VERSION)
76
+
77
+ # ── Scaffolding ───────────────────────────────────────────────────────────────
78
+
79
+ new-domain:
80
+ @if [ -z "$(ID)" ]; then \
81
+ read -p "Domain ID (kebab-case, e.g. my-new-system): " _id; \
82
+ $(PYTHON) $(TOOLS)/scaffold.py domain "$$_id" --category "$(or $(CATEGORY),01_physics)"; \
83
+ else \
84
+ $(PYTHON) $(TOOLS)/scaffold.py domain "$(ID)" --category "$(or $(CATEGORY),01_physics)"; \
85
+ fi
86
+
87
+ new-case:
88
+ @if [ -z "$(ID)" ]; then \
89
+ read -p "Case ID (kebab-case with optional -vNN, e.g. ctmc-3cycle-v01): " _id; \
90
+ $(CLI) scaffold case "$$_id" --category "$(or $(CATEGORY),01_physics)"; \
91
+ else \
92
+ $(CLI) scaffold case "$(ID)" --category "$(or $(CATEGORY),01_physics)"; \
93
+ fi
94
+
95
+ validate-cases:
96
+ $(CLI) validate-cases
97
+
98
+ # ── Documentation ─────────────────────────────────────────────────────────────
99
+
100
+ docs:
101
+ uv run mkdocs serve
102
+
103
+ docs-build:
104
+ uv run mkdocs build
105
+
106
+ docs-deploy:
107
+ uv run mkdocs gh-deploy --force
108
+
109
+ # ── Cleanup ───────────────────────────────────────────────────────────────────
110
+
111
+ clean:
112
+ rm -f atlas.md atlas.tex docs/atlas_graph.mmd docs/atlas_graph.dot
113
+ rm -rf dist/packs/* dist/snapshots/*
114
+ find . -type d -name __pycache__ -exec rm -rf {} +
115
+ find . -name "*.pyc" -delete