entropy-table 1.0.1__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.
- entropy_table-1.0.1/.gitattributes +2 -0
- entropy_table-1.0.1/.github/workflows/ci.yml +81 -0
- entropy_table-1.0.1/.github/workflows/release.yml +49 -0
- entropy_table-1.0.1/.gitignore +29 -0
- entropy_table-1.0.1/.pre-commit-config.yaml +12 -0
- entropy_table-1.0.1/CHANGELOG.md +312 -0
- entropy_table-1.0.1/CONTRIBUTING.md +33 -0
- entropy_table-1.0.1/LICENSE +21 -0
- entropy_table-1.0.1/Makefile +115 -0
- entropy_table-1.0.1/PKG-INFO +124 -0
- entropy_table-1.0.1/POLICY.md +28 -0
- entropy_table-1.0.1/README.md +95 -0
- entropy_table-1.0.1/VERSIONING.md +41 -0
- entropy_table-1.0.1/atlas/bibliography/refs.yaml +131 -0
- entropy_table-1.0.1/atlas/cases/01_physics/overdamped-langevin-st/case-overdamped-fokker-planck-baseline.yaml +24 -0
- entropy_table-1.0.1/atlas/claims/01_physics/ctmc-schnakenberg/claim-schnakenberg-ep-rate-definition.yaml +20 -0
- entropy_table-1.0.1/atlas/claims/01_physics/ctmc-seifert/claim-seifert-ep.yaml +20 -0
- entropy_table-1.0.1/atlas/claims/01_physics/overdamped-langevin-st/claim-ep-nonnegative-isothermal.yaml +30 -0
- entropy_table-1.0.1/atlas/claims/01_physics/overdamped-langevin-st/claim-overdamped-anomalous-ep-limitation.yaml +23 -0
- entropy_table-1.0.1/atlas/claims/README.md +33 -0
- entropy_table-1.0.1/atlas/domains/00_golden/proxy-other.yaml +86 -0
- entropy_table-1.0.1/atlas/domains/00_golden/subsystem-langevin.yaml +119 -0
- entropy_table-1.0.1/atlas/domains/00_golden/supersystem-network.yaml +108 -0
- entropy_table-1.0.1/atlas/domains/01_physics/biochemical-cme.yaml +171 -0
- entropy_table-1.0.1/atlas/domains/01_physics/ctmc-schnakenberg.yaml +202 -0
- entropy_table-1.0.1/atlas/domains/01_physics/domain_ctmc_seifert.yaml +125 -0
- entropy_table-1.0.1/atlas/domains/01_physics/overdamped-langevin-st.yaml +228 -0
- entropy_table-1.0.1/atlas/domains/01_physics/overdamped-nonisothermal-langevin.yaml +154 -0
- entropy_table-1.0.1/atlas/domains/01_physics/quantum-lindblad.yaml +158 -0
- entropy_table-1.0.1/atlas/domains/01_physics/underdamped-langevin-st.yaml +218 -0
- entropy_table-1.0.1/atlas/relations/00_golden/coarsegrain-super-to-proxy.yaml +28 -0
- entropy_table-1.0.1/atlas/relations/00_golden/composition-sub-to-super.yaml +43 -0
- entropy_table-1.0.1/atlas/relations/00_golden/coupling-proxy-to-sub.yaml +26 -0
- entropy_table-1.0.1/atlas/relations/01_physics/biochemical-cme-to-ctmc.yaml +78 -0
- entropy_table-1.0.1/atlas/relations/01_physics/ctmc-coarsegraining-hidden-variables.yaml +58 -0
- entropy_table-1.0.1/atlas/relations/01_physics/ctmc-to-diffusion-limit.yaml +94 -0
- entropy_table-1.0.1/atlas/relations/01_physics/overdamped-nonisothermal-anomalous-ep.yaml +62 -0
- entropy_table-1.0.1/atlas/relations/01_physics/quantum-lindblad-to-ctmc-classical-limit.yaml +64 -0
- entropy_table-1.0.1/atlas/relations/01_physics/underdamped-to-overdamped-limit.yaml +53 -0
- entropy_table-1.0.1/atlas/schema/domain.schema.json +330 -0
- entropy_table-1.0.1/atlas/schema/relation.schema.json +224 -0
- entropy_table-1.0.1/conftest.py +33 -0
- entropy_table-1.0.1/dist/packs/.gitkeep +0 -0
- entropy_table-1.0.1/docs/atlas_graph.mmd +36 -0
- entropy_table-1.0.1/docs/cases_conventions.md +59 -0
- entropy_table-1.0.1/docs/claims.md +127 -0
- entropy_table-1.0.1/docs/composition_integrity.md +86 -0
- entropy_table-1.0.1/docs/compute.md +93 -0
- entropy_table-1.0.1/docs/compute_cases.md +95 -0
- entropy_table-1.0.1/docs/contract.md +20 -0
- entropy_table-1.0.1/docs/contribution.md +10 -0
- entropy_table-1.0.1/docs/developer-guide.md +77 -0
- entropy_table-1.0.1/docs/effective-closure.md +10 -0
- entropy_table-1.0.1/docs/gen_pages.py +4 -0
- entropy_table-1.0.1/docs/index.md +40 -0
- entropy_table-1.0.1/docs/ingestion_checklist.md +14 -0
- entropy_table-1.0.1/docs/metrics.md +37 -0
- entropy_table-1.0.1/docs/releases.md +50 -0
- entropy_table-1.0.1/docs/schema.md +56 -0
- entropy_table-1.0.1/docs/schema_rfc_pr14.md +108 -0
- entropy_table-1.0.1/docs/variant_domain_pattern.md +29 -0
- entropy_table-1.0.1/docs/workflow_staging_and_extraction.md +51 -0
- entropy_table-1.0.1/mkdocs.yml +65 -0
- entropy_table-1.0.1/pyproject.toml +54 -0
- entropy_table-1.0.1/ruff.toml +2 -0
- entropy_table-1.0.1/setup.cfg +4 -0
- entropy_table-1.0.1/src/entropy_table/__init__.py +0 -0
- entropy_table-1.0.1/src/entropy_table/_version.py +34 -0
- entropy_table-1.0.1/src/entropy_table/cli.py +147 -0
- entropy_table-1.0.1/src/entropy_table/commands/__init__.py +0 -0
- entropy_table-1.0.1/src/entropy_table/commands/analyze_health.py +214 -0
- entropy_table-1.0.1/src/entropy_table/commands/build_index.py +169 -0
- entropy_table-1.0.1/src/entropy_table/commands/extract_domain_from_template.py +125 -0
- entropy_table-1.0.1/src/entropy_table/commands/freeze_guard.py +18 -0
- entropy_table-1.0.1/src/entropy_table/commands/ingest.py +201 -0
- entropy_table-1.0.1/src/entropy_table/commands/manage_cases.py +367 -0
- entropy_table-1.0.1/src/entropy_table/commands/metrics.py +210 -0
- entropy_table-1.0.1/src/entropy_table/commands/query.py +348 -0
- entropy_table-1.0.1/src/entropy_table/commands/query_claims.py +131 -0
- entropy_table-1.0.1/src/entropy_table/commands/release.py +323 -0
- entropy_table-1.0.1/src/entropy_table/commands/render.py +83 -0
- entropy_table-1.0.1/src/entropy_table/commands/report_claims.py +127 -0
- entropy_table-1.0.1/src/entropy_table/commands/scaffold.py +101 -0
- entropy_table-1.0.1/src/entropy_table/commands/snapshot.py +168 -0
- entropy_table-1.0.1/src/entropy_table/commands/validate.py +176 -0
- entropy_table-1.0.1/src/entropy_table/commands/validate_bibliography.py +200 -0
- entropy_table-1.0.1/src/entropy_table/commands/validate_claims.py +273 -0
- entropy_table-1.0.1/src/entropy_table/commands/validate_composition.py +397 -0
- entropy_table-1.0.1/src/entropy_table/commands/validate_math.py +141 -0
- entropy_table-1.0.1/src/entropy_table/commands/visualize.py +351 -0
- entropy_table-1.0.1/src/entropy_table/compute/__init__.py +6 -0
- entropy_table-1.0.1/src/entropy_table/compute/case_runner.py +250 -0
- entropy_table-1.0.1/src/entropy_table/compute/cli.py +68 -0
- entropy_table-1.0.1/src/entropy_table/compute/ctmc_ep.py +111 -0
- entropy_table-1.0.1/src/entropy_table/compute/diffusion_ep_1d.py +47 -0
- entropy_table-1.0.1/src/entropy_table/compute/report.py +225 -0
- entropy_table-1.0.1/src/entropy_table/core/__init__.py +0 -0
- entropy_table-1.0.1/src/entropy_table/core/bindings.py +32 -0
- entropy_table-1.0.1/src/entropy_table/core/common.py +27 -0
- entropy_table-1.0.1/src/entropy_table.egg-info/PKG-INFO +124 -0
- entropy_table-1.0.1/src/entropy_table.egg-info/SOURCES.txt +155 -0
- entropy_table-1.0.1/src/entropy_table.egg-info/dependency_links.txt +1 -0
- entropy_table-1.0.1/src/entropy_table.egg-info/entry_points.txt +2 -0
- entropy_table-1.0.1/src/entropy_table.egg-info/requires.txt +22 -0
- entropy_table-1.0.1/src/entropy_table.egg-info/top_level.txt +1 -0
- entropy_table-1.0.1/staging/README.md +5 -0
- entropy_table-1.0.1/staging/intake/README.md +3 -0
- entropy_table-1.0.1/staging/intake/drafts/README.md +3 -0
- entropy_table-1.0.1/staging/intake/raw/README.md +3 -0
- entropy_table-1.0.1/templates/case_template.yaml +20 -0
- entropy_table-1.0.1/templates/domain_template.yaml +100 -0
- entropy_table-1.0.1/tests/fixtures/fail/domain_invalid_enum.yaml +158 -0
- entropy_table-1.0.1/tests/fixtures/fail/domain_missing_closure_notes.yaml +157 -0
- entropy_table-1.0.1/tests/fixtures/fail/domain_missing_must_fail_tests.yaml +143 -0
- entropy_table-1.0.1/tests/fixtures/fail/relation_dangling_endpoint.yaml +37 -0
- entropy_table-1.0.1/tests/fixtures/fail/transitive_channels/domains/atom.yaml +6 -0
- entropy_table-1.0.1/tests/fixtures/fail/transitive_channels/domains/molecule.yaml +6 -0
- entropy_table-1.0.1/tests/fixtures/fail/transitive_channels/relations/comp.yaml +8 -0
- entropy_table-1.0.1/tests/fixtures/pass/domain_valid.yaml +106 -0
- entropy_table-1.0.1/tests/fixtures/pass/relation_valid.yaml +31 -0
- entropy_table-1.0.1/tests/test_analyze_health.py +99 -0
- entropy_table-1.0.1/tests/test_bibliography.py +122 -0
- entropy_table-1.0.1/tests/test_build_index.py +50 -0
- entropy_table-1.0.1/tests/test_case_runner.py +94 -0
- entropy_table-1.0.1/tests/test_claim_case_binding.py +87 -0
- entropy_table-1.0.1/tests/test_compute_ctmc.py +31 -0
- entropy_table-1.0.1/tests/test_compute_diffusion.py +20 -0
- entropy_table-1.0.1/tests/test_contract.py +56 -0
- entropy_table-1.0.1/tests/test_extract_template.py +40 -0
- entropy_table-1.0.1/tests/test_ingest.py +82 -0
- entropy_table-1.0.1/tests/test_manage_cases.py +304 -0
- entropy_table-1.0.1/tests/test_metrics.py +32 -0
- entropy_table-1.0.1/tests/test_query.py +41 -0
- entropy_table-1.0.1/tests/test_relation_schema_pr14.py +79 -0
- entropy_table-1.0.1/tests/test_release.py +30 -0
- entropy_table-1.0.1/tests/test_report_scan.py +167 -0
- entropy_table-1.0.1/tests/test_schema_version.py +137 -0
- entropy_table-1.0.1/tests/test_snapshot_determinism.py +87 -0
- entropy_table-1.0.1/tests/test_validate_claims.py +111 -0
- entropy_table-1.0.1/tests/test_validate_composition.py +277 -0
- entropy_table-1.0.1/tests/test_validate_composition_pr14.py +186 -0
- entropy_table-1.0.1/tests/test_visualize.py +213 -0
- entropy_table-1.0.1/tools/__init__.py +1 -0
- entropy_table-1.0.1/tools/analyze_health.py +12 -0
- entropy_table-1.0.1/tools/build_index.py +6 -0
- entropy_table-1.0.1/tools/extract_domain_from_template.py +6 -0
- entropy_table-1.0.1/tools/metrics.py +11 -0
- entropy_table-1.0.1/tools/query.py +6 -0
- entropy_table-1.0.1/tools/release.py +6 -0
- entropy_table-1.0.1/tools/render.py +6 -0
- entropy_table-1.0.1/tools/scaffold.py +6 -0
- entropy_table-1.0.1/tools/validate.py +6 -0
- entropy_table-1.0.1/tools/validate_bibliography.py +6 -0
- entropy_table-1.0.1/tools/validate_claims.py +6 -0
- entropy_table-1.0.1/tools/validate_composition.py +6 -0
- entropy_table-1.0.1/tools/visualize.py +16 -0
- entropy_table-1.0.1/uv.lock +1536 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test-and-validate:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
|
|
13
|
+
- name: Install uv
|
|
14
|
+
uses: astral-sh/setup-uv@v5
|
|
15
|
+
with:
|
|
16
|
+
enable-cache: true
|
|
17
|
+
cache-dependency-glob: "uv.lock"
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.11"
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: uv sync --extra dev --extra docs
|
|
26
|
+
|
|
27
|
+
- name: Activate venv
|
|
28
|
+
run: echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH
|
|
29
|
+
|
|
30
|
+
- name: Cache DOI validations
|
|
31
|
+
uses: actions/cache@v4
|
|
32
|
+
with:
|
|
33
|
+
path: cache/valid_dois.json
|
|
34
|
+
key: doi-cache-${{ hashFiles('atlas/bibliography/refs.yaml') }}
|
|
35
|
+
restore-keys: |
|
|
36
|
+
doi-cache-
|
|
37
|
+
|
|
38
|
+
- name: Run all tests (via Makefile)
|
|
39
|
+
run: make test
|
|
40
|
+
|
|
41
|
+
- name: Validate complete Atlas (via Makefile)
|
|
42
|
+
run: make validate-all
|
|
43
|
+
|
|
44
|
+
- name: Analyze atlas health (strict CI mode)
|
|
45
|
+
run: uv run entropy-table health --ci-check
|
|
46
|
+
|
|
47
|
+
- name: Generate Atlas Graph
|
|
48
|
+
run: make visualize
|
|
49
|
+
|
|
50
|
+
- name: Build documentation
|
|
51
|
+
run: uv run mkdocs build --strict
|
|
52
|
+
|
|
53
|
+
- name: Upload Graph Artifact
|
|
54
|
+
uses: actions/upload-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: atlas-graph-mermaid
|
|
57
|
+
path: docs/atlas_graph.mmd
|
|
58
|
+
retention-days: 14
|
|
59
|
+
|
|
60
|
+
deploy-docs:
|
|
61
|
+
needs: test-and-validate
|
|
62
|
+
if: github.ref == 'refs/heads/main'
|
|
63
|
+
runs-on: ubuntu-latest
|
|
64
|
+
permissions:
|
|
65
|
+
contents: write
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@v4
|
|
68
|
+
with:
|
|
69
|
+
fetch-depth: 0
|
|
70
|
+
|
|
71
|
+
- name: Install uv
|
|
72
|
+
uses: astral-sh/setup-uv@v5
|
|
73
|
+
with:
|
|
74
|
+
enable-cache: true
|
|
75
|
+
cache-dependency-glob: "uv.lock"
|
|
76
|
+
|
|
77
|
+
- name: Install docs dependencies
|
|
78
|
+
run: uv sync --extra docs
|
|
79
|
+
|
|
80
|
+
- name: Deploy to GitHub Pages
|
|
81
|
+
run: uv run mkdocs gh-deploy --force
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
contents: write
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
|
|
19
|
+
- name: Install uv
|
|
20
|
+
uses: astral-sh/setup-uv@v5
|
|
21
|
+
with:
|
|
22
|
+
enable-cache: true
|
|
23
|
+
cache-dependency-glob: "uv.lock"
|
|
24
|
+
|
|
25
|
+
- name: Set up Python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.11"
|
|
29
|
+
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: uv sync --extra dev --extra math
|
|
32
|
+
|
|
33
|
+
- name: Run tests
|
|
34
|
+
run: uv run pytest --tb=short
|
|
35
|
+
|
|
36
|
+
- name: Run math validation
|
|
37
|
+
run: uv run entropy-table validate-math
|
|
38
|
+
|
|
39
|
+
- name: Build distribution
|
|
40
|
+
run: uv build
|
|
41
|
+
|
|
42
|
+
- name: Publish to PyPI
|
|
43
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
44
|
+
|
|
45
|
+
- name: Create GitHub Release
|
|
46
|
+
uses: softprops/action-gh-release@v2
|
|
47
|
+
with:
|
|
48
|
+
files: dist/*
|
|
49
|
+
generate_release_notes: true
|
|
@@ -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
|