diff --git a/.github/workflows/AGENTS.md b/.github/workflows/AGENTS.md index ff9c3f4..9c1729a 100644 --- a/.github/workflows/AGENTS.md +++ b/.github/workflows/AGENTS.md @@ -2,7 +2,7 @@ - `gates.yml` is the only workflow. Add a job only when it can run on a hosted runner; live Docker and browser proofs stay local. -- Keep the `gnn conformance (pinned v5.0.3)` job name. It is the required-check +- Keep the `gnn conformance (pinned)` job name. It is the required-check identity, and the pin must come from `gnn/upstream.json`. - The conformance lane must fail, never skip, when the pinned fetch or parser provisioning fails. diff --git a/.github/workflows/README.md b/.github/workflows/README.md index f2fea07..41db831 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -5,7 +5,7 @@ - `gates` — locked sync, Ruff check/format, mypy, curriculum and artifact builds, the provenance/scholarship/manuscript validators, and the test suite with the 90% coverage floor. -- `gnn conformance (pinned v5.0.3)` — fetches the commit in +- `gnn conformance (pinned)` — fetches the commit in [`../../gnn/upstream.json`](../../gnn/upstream.json), provisions its own Python 3.12 environment, validates the specification, and runs `tests/test_gnn_conformance.py`. diff --git a/.github/workflows/gates.yml b/.github/workflows/gates.yml index f470b37..61fe91b 100644 --- a/.github/workflows/gates.yml +++ b/.github/workflows/gates.yml @@ -63,7 +63,7 @@ jobs: # runtime; the strict gate never skips, and tests/test_gnn_conformance.py # fails (never skips) when the explicitly selected GNN_ROOT checkout is # missing or unusable. - name: gnn conformance (pinned v5.0.3) + name: gnn conformance (pinned) runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -102,3 +102,10 @@ jobs: env: GNN_ROOT: ${{ runner.temp }}/gnn run: uv run pytest tests/test_gnn_conformance.py -q + + - name: Report the resolved GNN version + run: | + PIN=gnn/upstream.json + VERSION=$(python3 -c "import json;print(json.load(open('$PIN'))['tag'].removeprefix('v'))") + test -n "$VERSION" + echo "gnn-version=${VERSION}" >> "$GITHUB_STEP_SUMMARY" diff --git a/AGENTS.md b/AGENTS.md index f7c1581..de1af6e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -62,7 +62,7 @@ All logic lives in `src/`; `scripts/` only coordinate I/O. Layers, bottom-up: specification and `src/kernels/active_inference.py` in step: changing either means updating `src/gnn_conformance.py` and `tests/test_gnn_conformance.py` in the same change. CI runs `scripts/validate_gnn_spec.py` and the conformance tests in the - `gnn conformance (pinned v5.0.3)` job, which fetches the pinned revision from the + `gnn conformance (pinned)` job, which fetches the pinned revision from the public upstream repository and provisions its interpreter, so the pin is re-checked on every push and pull request. GNN's [downstream adoption guide](https://github.com/ActiveInferenceInstitute/Generalized_Notation_Notation/blob/main/docs/gnn/integration/downstream_adoption.md) diff --git a/gnn/README.md b/gnn/README.md index ff36917..eff2be4 100644 --- a/gnn/README.md +++ b/gnn/README.md @@ -9,4 +9,4 @@ specification of the discrete-agent kernel's generative model. `scripts/validate_gnn_spec.py` extracts that pinned commit with `git archive` and validates the specification. `tests/test_gnn_conformance.py` checks the specification against [`../src/kernels/active_inference.py`](../src/kernels/active_inference.py). -CI runs both in `gnn conformance (pinned v5.0.3)`. +CI runs both in `gnn conformance (pinned)`.