Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .zenodo.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
}
],
"license": "other-nc",
"notes": "This repository is under a mixed-license scheme rather than a single SPDX license: original AILM source code (src/, scripts/, tests/, formal/, and the GNN conformance code) is MIT, while the manuscript, documentation, figures, and AILM-authored data (including the GNN model specifications in gnn/) are CC BY-SA 4.0. Several vendored third-party corpora carry narrower terms of their own, unaffected by either AILM license (including a non-commercial-use restriction inherited from the NLTK Brown Corpus package and from UD English-GUM and UD Czech-PDTC, CC BY-NC-SA 4.0). See LICENSE and THIRD_PARTY_NOTICES.md for the full, component-by-component terms; pyproject.toml records this as license = \"LicenseRef-AILM-Mixed\", which has no single Zenodo/SPDX equivalent.",
"notes": "This repository is under a mixed-license scheme rather than a single SPDX license: original AILM source code (src/, scripts/, tests/, formal/, and the GNN conformance code) is MIT, while the manuscript, documentation, figures, and AILM-authored data (including the GNN model specifications in gnn/) are CC BY-SA 4.0. Several vendored third-party corpora carry narrower terms of their own, unaffected by either AILM license (including a non-commercial-use restriction inherited from the NLTK Brown Corpus package and from UD English-GUM and UD Czech-PDTC, CC BY-NC-SA 4.0). See LICENSE and THIRD_PARTY_NOTICES.md for the full, component-by-component terms; pyproject.toml records this as license = \"LicenseRef-AILM-Mixed\", which has no single Zenodo/SPDX equivalent.\n\nPublication preparation: DOI 10.5281/zenodo.22409419 is reserved by the authenticated, unpublished deposition. Its reservation does not establish public archival availability. The GitHub release remains a draft pending acceptance of the final candidate.",
"keywords": [
"active inference",
"Generalized Notation Notation",
Expand Down
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ rationale behind each decision is in [`docs/decisions.md`](docs/decisions.md).

### Added

- A released upstream GNN pin in `gnn/upstream.json` and offline source-custody
verification before parser interoperability. The full profile records and
forwards `AILM_GNN_UPSTREAM`, checks its release identity, and refuses modified
source even when Git index flags hide changes. This integration does not add
a runtime dependency on the upstream pipeline or on FEP_Formal.
Git replacement objects cannot redefine the pinned source inventory.

- A configuration reference (`docs/reference/configuration.md`): the
`LevelConfig` hyperparameters and every `AILM_*` environment variable the
shipped code reads, each with its reader, meaning and unset behavior,
Expand Down Expand Up @@ -104,6 +111,14 @@ rationale behind each decision is in [`docs/decisions.md`](docs/decisions.md).

### Removed

- The duplicated dated script-count table in the agent guide. The checked
per-script table in `scripts/README.md` owns the inventory.

- The dashboard's unused `build_unigram_a` re-export and `MAX_REQUEST_BYTES`
alias. Active callers use `build_letter_transition` and `DashboardConfig`.
Measured-source adapters stay bound to their original evidence until their
required scoring replay; historical decisions and controls remain intact.

- `scripts/generate_case_counts_test.py`, the decision-79 preparation twin of
the Stage 4 case generator. Decision 111's confirmatory run read the whole
UD English EWT test split through `generate_confirmatory_ewt_counts.py`, so
Expand All @@ -115,6 +130,25 @@ rationale behind each decision is in [`docs/decisions.md`](docs/decisions.md).

### Fixed

- The bibliography header no longer contains an entry marker inside its own
comment block, which caused a real BibTeX syntax error despite a completed
PDF. Publication verification now invokes BibTeX against the canonical source
and proves that a deliberately malformed entry fails. Citation fields and
unresolved metadata remain unchanged.

- The dashboard CLI restores Python's interrupt handler when a launcher has
inherited an ignored `SIGINT`. A real exec-based control reproduced the
server ignoring the interrupt before the fix. Worker completion and interrupted
startup also share an idempotent slot release: the former double release
replaced `KeyboardInterrupt` with a semaphore error that the HTTP server
caught, leaving it running. A synchronized real-thread/signal control catches
that race. Embedded server callers keep their own signal policy.

- Availability identifies the Zenodo DOI as reserved for an unpublished
deposition, separately from the public GitHub source. The abstract names
the existing release repository directly. Older acceptance receipts remain
tied to their original source and do not certify the later mainline.

- The protocol companion delivers the HTML provider's own assets (scripts,
styles, fonts and icons) beside the pages that reference them instead of
refusing them as unregistered context sources, so a `docxology/template`
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cff-version: 1.2.0
message: "If you use this work, please cite it as below."
message: "Cite the versioned GitHub source while the reserved Zenodo DOI awaits publication."
title: "Active Inference Language Model: A Fully Explicit Discrete Language System and a Gate-Audit Method"
abstract: >-
AILM is a set of explicit discrete probabilistic language models implemented in
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@ behavioral comprehension claim or general-purpose conversational interface.

## At a glance

The public source is available on [GitHub](https://github.com/ActiveInferenceInstitute/active_inference_language_model).
The `v1.0.0` GitHub release remains a draft. Its Zenodo deposition reserves
[10.5281/zenodo.22409419](https://doi.org/10.5281/zenodo.22409419) but is not yet
published; the DOI does not yet resolve publicly. The retained release
verification describes the earlier frozen candidate. The current manuscript
and companions are prepared for review; replacing the release requires current
source-bound acceptance.

![Two panels: the same example sentence run through the explicit level stack from letter to document position, one row per level with its hidden state, observation, likelihood and dynamics named; and that same stack drawn with its per-level pass/fail gate outcomes and the measured cross-level interventions between them, each labeled helps, harms, or prior-only.](docs/manuscript/cover.png)

The recorded stage results cover discrete levels and separately measured
Expand Down
8 changes: 4 additions & 4 deletions SOURCE_DISTRIBUTION.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# AILM 1.0.0 source distribution and verification scope

This is a curated public export of prepared software build 9ad57480397d2439592b12758702df08416e67d0. Its audited input epoch is 1792176328. Runtime and scientific source bytes match that build. Two AGENTS.md sentences identify the publication repository. The public CI workflow explicitly installs Pandoc for the real portable documentation checks; local quick verification also requires that executable. Private handoff records, private Git ancestry, model-call caches, credentials and local recovery material are excluded.
The initial public export came from prepared software build `9ad57480397d2439592b12758702df08416e67d0`. Later mainline commits improve the software and guidance, so that build's source identity and acceptance do not describe the current checkout. The public CI workflow installs Pandoc for the portable documentation checks. Private handoff records, private Git ancestry, model-call caches, credentials and local recovery material are excluded.

The retained connected-GUM report is included with its ledger-authenticated original bytes. Generated HTML/demo companions remain ignored in source Git. The separate portable manuscript ZIP includes the complete local link dependencies and its own member manifest.

Reports in output/reports describe the prepared build, including ignored documentation and archived render outputs retained on the release workstation. They are not a fresh validation receipt for this curated checkout. The release source-tree manifest describes the shipped tree. Public quick checks the portable surface; publication_context and template_context tests require retained provenance/raw-source proofs or the configured renderer/staged auxiliaries. Full requires those tests and the complete recorder no-op. Missing prerequisites remain failures, not exemptions from full acceptance.
Reports in `output/reports` describe their own recorded source and artifact identities. The historical full verification is not a fresh receipt for this checkout; current rendering and software checks must be recorded separately. The release source-tree manifest describes the shipped tree. Public quick checks the portable surface; publication_context and template_context tests require retained provenance/raw-source proofs or the configured renderer/staged auxiliaries. Full requires those tests and the complete recorder no-op. Missing prerequisites remain failures, not exemptions from full acceptance.

The full software profile ran with the declared retained inputs and toolchain. Those private proof/cache prerequisites are not redistributed; this is not independent scientific replication. Rebuilding full acceptance requires the documented inputs, toolchain and regenerated outputs. Consult the actual release verification and final independent review for their precise scope and limits.
The historical full software profile ran with the declared retained inputs and toolchain. Those private proof/cache prerequisites are not redistributed; this is not independent scientific replication. Rebuilding full acceptance requires the documented inputs, toolchain and regenerated outputs. The new upstream-parser check uses the released source pinned in `gnn/upstream.json`; it does not revalidate or replace historical measurements. Consult each source-bound receipt and independent review for its scope and limits.

Source/output import commits use the audited input epoch for reproducible build semantics; the annotated tag and publication records use their actual creation dates. LICENSE and THIRD_PARTY_NOTICES.md retain the component-specific terms, including non-commercial third-party corpus restrictions. The optional renderer runtime support archive has its own Apache-2.0 license.
Development commits use their actual creation dates. Flat source imports preserve the audited input epoch for reproducible build semantics; the snapshot manifest separately records the actual export time and original source identity. Publication records use the actual publication date. LICENSE and THIRD_PARTY_NOTICES.md retain the component-specific terms, including non-commercial third-party corpus restrictions. The optional renderer runtime support archive has its own Apache-2.0 license.
6 changes: 0 additions & 6 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,6 @@ changes what the paper claims or what the artifact is.

## Minor

- [ ] At the next render, change the abstract's closing sentence from "The
planned release repository is" to "The release repository is": the public
`v1.0.0` tag exists. The edit is deferred rather than applied because
`tests/test_manuscript_crossrefs.py` requires the tracked rendered
provenance to match the authored sources, so a manuscript wording change
ships only with a template Stage 03/04 render.
- [ ] At the next connected re-bind, apply the two source edits that the
connected report's execution inventory blocks today (it binds 76 modules
byte for byte, `src/ailm/claims.py` and `src/ailm/gnn/conformance.py` among
Expand Down
1 change: 1 addition & 0 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ AST/fresh-process tests.
| `ailm/levels/synthetic.py` | The stipulated synthetic letter chain, deterministic corpus generator, independent evaluation-trajectory generator, and order-one comparator used to reduce exact-artifact overlap without asserting external pretraining contents | numpy, `ailm.levels.letter` | `tests/test_synthetic_benchmark.py` |
| `ailm/levels/_stochastic.py` | The one column-stochastic normalizer (`column_stochastic`: counts divided by their axis-0 sums) and the one validator (`validate_column_stochastic`) every level builder shares, so the `[next, current]` orientation is normalized and checked in a single place instead of once per level. The oracle keeps its own copy by contract | numpy | `tests/test_coupling.py`, `tests/test_phoneme.py` |
| `ailm/verification/connected_provenance.py` | Complete execution-input inventory shared by the connected recorder and figure; authenticates exact regular source and artifact files without model inference | stdlib | `tests/test_connected_provenance.py`, `tests/test_connected_gum.py`, `tests/test_figures_connected.py` |
| `ailm/verification/upstream_gnn.py` | Offline verification of the released upstream GNN checkout against its authored tag and commit pin, including actual source bytes and unexpected files before parser import | stdlib, Git executable | `tests/test_gnn_release.py`, `tests/test_gnn_conformance.py` |
| `ailm/verification/oracle.py` | The closed-form HMM instrument: `forward_filter`, `forward_backward`, `viterbi`, `sequence_perplexity`, `markov_chain_perplexity`, `identity_emission`, `word_path_logprob` | **numpy and stdlib only** | `tests/test_oracle.py`, `tests/test_oracle_independence.py`, `tests/test_stage2_gate.py` |
| `ailm/generation.py` | The independent L3→L1g generation seam: next-letter policy selection with lexicon `C` and Brown-bigram habit `E`, scored against gamma-sweep and scrambled-`C` controls. L6 and L5 are absent from this run | pymdp, jax, numpy, `ailm.levels.letter` | `tests/test_generation.py` |
| `ailm/learning.py` | Parameter learning inside pymdp — `infer_parameters` as conjugate counting, and the agreement identity against an external count (decisions 22–23) | pymdp, numpy, `ailm.levels.letter` | `tests/test_learning.py` |
Expand Down
38 changes: 38 additions & 0 deletions docs/decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ Forward-looking guidance on how to *specify* a gate is a separate document:
| [138](#138--operational-continuation-preserve-interrupted-scopes-and-verify-the-current-upstream-checkout-2026-10-07) | OPERATIONAL CONTINUATION: preserve interrupted scopes and verify the current upstream checkout (2026-10-07) |
| [139](#139--operational-selection-amendment-current-gnn-interoperability-after-release-recovery-2026-10-09) | OPERATIONAL SELECTION AMENDMENT: current GNN interoperability after release recovery (2026-10-09) |
| [140](#140--publication-metadata-alignment-institute-release-destination-2026-10-14) | PUBLICATION METADATA ALIGNMENT: Institute release destination (2026-10-14) |
| [141](#141--release-preparation-pinned-gnn-interoperability-and-dashboard-interruption-2026-10-26) | RELEASE PREPARATION: pinned GNN interoperability and dashboard interruption (2026-10-26) |

---

Expand Down Expand Up @@ -9474,3 +9475,40 @@ maintenance, retaining full catalogs at startup and completion and checking ever
recorded model identity periodically. Actual timeout, identity, retention and
terminal catalog controls remain required. Fresh source-bound rendering, package
verification and independent review are required before successor delivery.

## 141 — RELEASE PREPARATION: pinned GNN interoperability and dashboard interruption (2026-10-26)

**Current upstream selection.** The release-verification pin in
`gnn/upstream.json` selects public GNN `v5.0.1` at
`e54813b4197df36f7ae0054d5e79f3ad2d5db0ff`. Decision 139's earlier selection
remains historical evidence. The standalone verifier checks the release tag,
commit and actual source inventory before import; interoperability repeats the
check after use. The full profile records and forwards `AILM_GNN_UPSTREAM`
instead of silently selecting a moving sibling checkout. Real Git/filesystem
controls reject another head, a retargeted tag, altered source hidden by index
flags, unexpected source and symlinks. This is parser interoperability, not a
new linguistic measurement or acceptance of the whole GNN pipeline.
The real parser runs in a fresh interpreter with bytecode writes disabled and
a private empty cache prefix; the parent interpreter's configuration is not
replaced. Its measured results are compared directly with AILM's reader.
FEP_Formal is not a dependency; the local dependency-free Lean layer is retained.

**Observed lifecycle defects.** A real exec-based control established that a
launcher can pass an ignored interrupt disposition to the dashboard. The CLI
now installs its own interrupt handler; callers embedding the server retain
their signal policy. A separate real-thread/signal control reproduced an
interrupted worker start after completion: cleanup released its semaphore slot
again, replacing `KeyboardInterrupt` with a `ValueError` that the HTTP server
caught. Startup and completion now share an idempotent release. The initial
timeouts and failing controls remain evidence beside the corrected checks.
Dashboard capture binding also requires the named checkout root: an
uninitialized directory cannot borrow the HEAD of an enclosing repository.

**Cleanup and publication boundary.** Unused dashboard aliases are removed.
The conformance adapter and other measurement-bound source remain unchanged;
removing them still requires the scoring replay recorded in the open queue.
The scientific ledger, models, corpora and original measurement reports retain
their bytes. The configured Zenodo identifier is authenticated as a reservation
in an unpublished deposition, not an available public archive. Current source
and regenerated outputs require their own acceptance and independent review;
historical full verification cannot be transferred to this candidate.
15 changes: 8 additions & 7 deletions docs/guides/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -515,13 +515,14 @@ already-declared upstream-parser extra:
uv sync --locked --extra gnn-interop
```

Direct upstream interoperability tests accept `AILM_GNN_UPSTREAM`. The full
release’s controlled child environment does not inherit it, so the intended
checkout must resolve through `_UPSTREAM_CANDIDATES` in
`tests/test_gnn_conformance.py`; its first candidate follows the shared checkout
hierarchy. Confirm the actual selected parser path as described in the
[release prerequisites](../method/release_checklist.md#preconditions). A missing
checkout or extra fails the full profile instead of skipping. Returning to
Direct interoperability tests and the full release profile accept
`AILM_GNN_UPSTREAM`, which the runner records and forwards. Select the released
checkout pinned in [`gnn/upstream.json`](../../gnn/upstream.json), rather than a
moving development branch. Follow the [GNN setup](../../gnn/README.md#upstream-release)
and run `.venv/bin/python scripts/verify_gnn_release.py`: the command checks the
tag, commit and actual source bytes offline. Without an explicit selection,
durable sibling discovery applies and the same identity checks follow.
A missing checkout or extra fails the full profile instead of skipping. Returning to
`quick` requires `uv sync --locked` to restore the base dependency set.

`scripts/verify_release.py full` enforces the `pyproject.toml` coverage floor.
Expand Down
2 changes: 1 addition & 1 deletion docs/manuscript/00_abstract.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,5 @@ linguistic inference mechanisms together with an audit method that makes their
failures visible. External neural models serve as supplemental reference probes;
integration with them remains a proposal.

The planned release repository is
The release repository is
<https://github.com/ActiveInferenceInstitute/Active_Inference_Language_Model>.
Loading
Loading