Repository navigation
IGL 1.5.0
The five runtime findings left open by the October 2026 security review are
closed, each with a regression test. The repository now runs a linter and a
type check on every pull request. The model the provisioning service reasons
with is loaded at a pinned revision and its bytes are recorded.
Security
- F-05: the idempotency key is a SHA-256 execution identity over the actor,
boundary, intent and parameters, the context selection, every compute step
with its bound arguments and pinned model version, the declared outputs and
the runtime build digest. Statements that differ in any material input are
different work. Only a durably committed trace can answer an idempotency
check.Interpreter.statementKeys()previews keys without running - F-06: journal records are frozen snapshots; runtimes work on copies. Reuse
of a trace as context is its ownreusejournal event and the counter is
derived by replay, so the chain verifies after reuse, receipts stay valid and
confidence decay survives a restart - F-07: nothing is visible until it is durable. A failed persist leaves no
entry; write-behind entries stay pending untilflush()succeeds and roll
back when it fails;entries()returns durable entries unless asked for
pending ones; the IOS runtime stages traces until durable;FileJournal
fsyncs every append - F-08: checkpoints.
journal.checkpoint(),verify({ checkpoint }), a
checkpointoption onFileJournalandD1Journalthat refuses a truncated
or rewritten history, andSigner.verifyHeadReceipt(..., { extended: true })
so a signed head receipt serves as the anchor - F-09:
Traces=Nonereturns no context. Every refusal or failure is journaled
as afailureevent with privacy-safe fields before anyOnFailhandler runs - Model provenance:
provision/model.mjsloadsXenova/distilgpt2at Hub
commita41c1048, hashes the cached files and recordslabel@revision#digest
as the model version in every AI assertion;IGL_MODEL_LOCAL_ONLY=1refuses
network fetches; health endpoints report the loaded revision and digest UDM.Validaterefuses a named ruleset UDM does not define
(IGL_UNKNOWN_RULESET) instead of validating everything
Added
- Platform: the refusal record. Every deny, and every escalate on a path that
cannot park the work, now produces a signed governance receipt and an entry
in the tenant's hash chain before the 403 leaves, and the 403 names the
decisionIdandreceiptId. EveryAuthorityDecisioncarries
policiesMatched(id, name, version, effect and a SHA-256 of the rule as it
stood) andsubject(action, resource type and id, identity, organization,
roles). Every receipt carriesauditHead, the chain head at issue time, so a
receipt held outside the system is a checkpoint the database cannot rewrite.
Policies are immutable at the schema (triggers): a change is a new version.
Conformance test: a denied investigation is checked the way an auditor would test/audit.test.js: the review's probes, promoted into the suite (18 tests;
169 in all).docs/audit/probes-2026-10.mjsnow prints the properties holding- ESLint (flat config) and
tsc --checkJsoversrc/,provision/,
platform/api/srcandplatform/ops/src;npm run lint,npm run typecheck
andnpm run check; both run in CI before the tests - README: a Start Here section that routes runtime users, application builders
and AI-client integrators to the right quickstart
Fixed
provision/cli.mjshad calledprovisionIdentitywithout the owner that
F-02 made mandatory in 1.3.0, so the documented CLI command failed; it now
acts as the local operator (IGL_CLI_TENANT,IGL_CLI_PRINCIPALto change).
Found by the type check on its first run- Dead imports and variables across the runtime, the platform service and the
tests, found by the linter
Removed
examples/run-vdrpros.jsandexamples/vdrpros-ussh.igl: the one example
that ran against stubbed runtimes (canned inference, constraint checks that
always passed). Every remaining example runs the real runtime against the
pinned modelspec/openapi-v0.1.yamland the served copy: superseded by 0.2.0; the file
is in the repository historyOPEN_SOURCE_CHECKLIST.mdandSECURITY-REVIEW.md: an internal checklist
whose items were done, and scan notes that the audit document supersedes- References in
docs/SPEC.md,docs/SCOPE.mdand source comments to design
documents that are not in the repository now say so instead of linking to them
Changed
- The README status line no longer says experimental. It says what is true:
all nine findings of our own review are closed with tests, and an
independent review has not happened yet - Attestation notes join clauses with a semicolon instead of a middle dot