Repository navigation
v3.2.0 — Exemplar Gold Standard
Compare: v3.1.0...v3.2.0
Exemplar Gold Standard. Every exemplar GNN file renders and executes on
every framework that can represent it and is explicitly flaggedunsupported
(not faked, not failed) on the ones that cannot. Continuous-state exemplars
are genuinely continuous (linear-Gaussian) with native JAX / NumPyro /
PyTorch / Stan / RxInfer.jl backends; the Stan renderer is rewritten from a
non-compiling stub into runnable HMM and LGSSM programs with a cmdstanpy
executor; Step 12 summaries merge across input folders; the Julia pre-exec
gate no longer blocks scripts on a toolchain-less launcher.Verified end to end on macOS with Julia 1.12.7 (RxInfer 5.5.0,
ActiveInference.jl 0.1.2), CmdStan 2.39 and an ephemeral torch: 29 files,
249 renders OK / 0 failed / 12 unsupported; 194 executions OK / 0 failed /
55 dependency skips (torch, bnlearn); PyTorch 29/29 via
uv run --with torch; pytest 3120 passed.
Changed (2026-09-01 — exemplar gold standard: continuous models are continuous, Stan is real)
- Continuous exemplars are now genuinely continuous. The three files under
input/gnn_files/continuous/declare only the linear-Gaussian state-space
model (x,y, optionalu,F/H/Q/R,prior_mean/prior_cov, optional
goal_mean/control_gain) — the discretized POMDP stand-ins introduced on
2026-08-03 are gone.continuous_navigationis a closed-loop navigator
(u_t = 0.3 · (goal − μ_t)); the other two are passive. Extractor
(gnn/pomdp_extractor.py) reads dimensions fromF/Hand sets
model_kind = "continuous"; the render processor passes the block through
verbatim instead of building canonical A/B/C/D. unsupportedis a first-class render status. Frameworks that cannot
represent a model kind (PyMDP, ActiveInference.jl, DisCoPy, bnlearn on continuous
models) return{"unsupported": true, "status": "unsupported"}with the
reason "continuous-state model: … supports discrete POMDPs only". They are
excluded from the success denominator, listed under
unsupported_framework_renderings, and never handed to Step 12.
framework_registryentries carrysupports_continuous.- Native continuous backends. JAX, NumPyro, PyTorch and Stan render and
execute the LGSSM (online Kalman filter, Joseph-form update, closed-loop
control) via the shared generatorrender/continuous_script.py; NumPyro
additionally fits the same model with NUTS (mcmc_posterior_means,
mcmc_r_hat_max). RxInfer.jl's existing continuous strategy is reached
without the A/B/C/D canonicalisation guard. Verified end to end on this
machine for all five. - Stan renderer rewritten (
render/stan/stan_renderer.py). The previous
generator emittedtarget ~ normal(source, 1.0)per edge with undeclared
variables and could not compile. Discrete models now render an HMM whose
latent chain is marginalised with the forward algorithm and whose per-state
observation distributions carry Dirichlet priors centred on the declared
A; continuous models render the explicit Kalman marginal likelihood. Each
render emits<stem>_stan.stanplus a cmdstanpy driver<stem>_stan.py.
Newexecute/stan/runner,stanadded to Step 12 discovery and to
utils.framework_availability(skips withuv sync --extra stan), new
optional extrastan = ["cmdstanpy>=1.2"].render_stan()remains as a
declaration-only sketch.
Fixed (2026-09-01)
- Step 12 summary no longer overwritten per input folder.
execute/processor.pymerges the priorexecution_summary.json(details
keyed by script path; counts, per-framework status and overall status
recomputed) so the durable summary covers every folder, mirroring Step 11. - Julia pre-exec gate false positive. A
julialauncher without a
working toolchain madeMeta.parseallreturn a non-zero exit with no
GNN_PARSE_FAILmarker; the gate treated that as malformed code and blocked
every Julia script. The probe now degrades to the advisory regex sweep
unless the parser itself reported a failure. INDEX.mdexcluded from model discovery (gnn/discovery.py), fixing
four tests that counted 30 exemplars instead of 29.- CI hygiene.
ruff formatdrift across 45 files cleared; Bandit B108
(hard-coded/tmpin the CLI models command) replaced with
tempfile.gettempdir(); the two Julia-live test modules now skip when the
committed Julia project environments are not instantiated (CI shipsjulia
without RxInfer/ActiveInference.jl); the framework-availability test honours
toolchain probes; repository-terminology audit clean. - ActiveInference.jl precompile on Julia 1.12.
Distributionspinned to
0.25.100 – 0.25.125insrc/execute/activeinference_jl/Project.toml
(DistributionsAD 0.6.58's ReverseDiff extension breaks against the
@check_argschange in 0.25.126); Manifest re-resolved.