Releases: beyond10x/entity-runtime
Releases · beyond10x/entity-runtime
Release list
0.18.1
- No change to the runtime, its CLI or any refusal. The published product guide, README and system model now name 0.18.1 as the release a reader installs and links to.
- The Docusaurus site consumes the shared documentation components at Docs System 0.7.0 (
86cd6c6efd02184c51a37e80012ffe9d3f77d40a), pinned exactly inwebsite/package.jsonandwebsite/package-lock.json.
0.18.0
Changed
- Rebuilding an instance from its events (
rehydrate) now holds every event to what the kernel would have written for it, inexecute's own order. Per event: an operation event'schangedmust be exactly what the emitting operation'sset:writes from the arguments that event records (one operation has to accept the arguments under its argument schema and preconditions and produce the fields, because oneexecutecall did); a creation event'schangedmust equal its recorded fields; then the folded fields are validated against the schema and the invariants evaluated, after each event rather than once at the end. A legacy history that folded before is refused if any event'schangedwas hand-written or was produced by a definition whoseset:has since changed, or if a step falls short of the schema or an invariant; the refusal names the event index, its type, the operation tried and the fields in dispute. An event whose type no operation emits on its transition, and a creation event whose type is not the onecreate.emitnames, are refused outright: an event nothing emits describes no decision. A revision is folded as one decision: its events must agree on transition, arguments and fields, must be exactly the operation'semitsin order, and each payload must be what its template resolves to — so an operation with twoemitsnow folds (its second event was refused as a revision gap before) and a forged payload is refused. Fold your histories before upgrading, and keep an emitter declared for every event type your histories still carry. entity create --storeandentity execute --storenow run through the shared stored runtime that the generated CLI and the MCP tools already use.execute --storetakes an optional--expected-revision N(default: the revision the store holds when the command runs). Repeating an accepted--record-idwith the same operation, arguments, provenance and expected revision returns the original record even after the subject has advanced; the same id with different intent is refused asrecord_conflict; a stale--expected-revisionis refused asrevision_conflictbefore the kernel runs. Store refusals now carry akindfield in their JSON, the same vocabulary MCP reports, andexecute --storeon an id the store does not hold is a store refusal (exit 1,kind: not_found) rather than an invalid invocation (exit 2).--instanceand--storenow conflict instead of--instancebeing silently ignored.- A
before/afteroperand that is a literal must now be an instant the kernel reads (YYYY-MM-DDorYYYY-MM-DDTHH:MM:SS[.fff][Z]). A definition carrying an unreadable literal — an impossible date, an offset-bearing timestamp, a number,null, a list — used to register and then refuse every evaluation as unobservable while naming nothing to observe; it is now refused at registration as an invalid rule naming the operand and the forms that are read. entity-sqlitebuilds onrusqlite0.40.2 (libsqlite3-sys0.38.2, still bundled), up from 0.32.1: the SQLite this provider compiles in moves with it. No API or schema change.- Move the scheduled comparison with current AEP lifecycle documents to Atlas; deterministic fixture and pin checks remain in the local gate. Refresh the fixture from current AEP source and cover the executable-system-specification lifecycle and its conformance evidence requirement.
Fixed
entity generate rust-clino longer fails withcannot open built binary …/release/<name>when Cargo's output location is overridden. The build directory is made absolute before use, so a relative--build-dir— including the defaultbuild/entity-runtime/<name>— is no longer resolved a second time against itself;--target-dir <build-dir>/targetkeepsCARGO_TARGET_DIRor abuild.target-dirin a parent.cargo/config.tomlfrom moving the build; and the generator installs the executable Cargo reports having built rather than guessing its path, so aCARGO_BUILD_TARGETorbuild.targetthat inserts a target-triple component is followed.- The hybrid store's divergence detail for a replica-accepted, authority-refused write no longer carries a run of spaces before the error text.
Documentation
- Added a subsystem and derivation map distinguishing the runtime from ESS and generated domain surfaces. Updated adoption examples to 0.17.7, completed the generated CLI workflow, and clarified exact retries, event/history coverage, optional queries, and trusted-host responsibilities.
0.17.7
Fixed
- File Store serializes concurrent writes across handles and processes, preventing accepted revisions and recorded history from being overwritten. Record-ID caches refresh after another writer changes the root. Upgrade all concurrent writers together to use the locking protocol.
- File Store tolerates abandoned temporary subject files and refuses symlinks in parent paths and the format marker on reads. Initialization publishes its marker atomically.
- Numeric validation and rules correctly compare zero with positive and negative fractions, including arbitrarily large JSON exponents. Memory queries match equivalent numeric JSON representations consistently with PostgreSQL.
- Hybrid catch-up transfers exact decision envelopes and observations instead of discarding provenance through event-only imports. It retains divergences that need explicit history repair, including missing evidence behind an already-advanced destination.
- PostgreSQL session batches roll back their entire prefix when a conflict is caught by the outer callback. Session event reads include recorded history. Concurrent identical decision and observation retries both succeed idempotently.
- The shared stored runtime, generated CLI, and MCP tools return the original accepted operation for an exact retry, even after state has advanced. Changed intent under the same record ID is refused as a record conflict.
- Provider event reads preserve revision order across mixed recorded and unrecorded commits. File Store preserves repeated equal events emitted by one decision.
- Generated MCP schemas accept overlapping definition versions and validate creation fields against the selected version. An explicit unsupported version is refused even when only one version is registered. AsyncAPI schemas accept overlapping event emitters, and generated component identifiers distinguish punctuation, case and composed names.
Portability
- File Store flushes subject contents on every platform and directories on Unix. Windows writes no longer fail by trying to open a directory as an ordinary file; directory-entry persistence across power loss is not promised on Windows.
0.17.6
Fixed
- The File Store no longer reads every subject on every recorded write to check that a record id is unused. A handle builds an index of record ids once — one read of every subject on its first lookup — and keeps it current with its own writes. Measured before the change on 2026-09-03: an import of 517 subjects read 24 GB to write 45 MB. The rule itself is unchanged: a record id reused for different bytes is
RecordConflict, identical bytes are an idempotent success, and both hold across handles opened at different times.
0.17.5
- Updated the AEP adoption record, local planning guidance, and gate command to the renamed AEP repository and canonical
aepCLI. The byte-pinned lifecycle fixtures remain unchanged at their recorded AEP release.
0.17.4
- Added the AEP
outbound-claimlifecycle definition and refreshed the byte-exact AEP fixture to 0.40.0, so the equivalence suite covers every lifecycle AEP ships.
0.17.3
- Fixed PostgreSQL document queries to bind serialized containment predicates as text before casting them to JSONB, so indexed service reads execute instead of failing parameter encoding.
0.17.2
- Fixed PostgreSQL absent-identity locks to hash the namespace and identity as two text values; ordinary lock requests no longer inject a NUL byte that PostgreSQL rejects as invalid UTF-8.
0.17.1
- PostgreSQL command sessions can now reserve transaction-scoped identity ranges and read events; document filters use recursive JSON containment consistently across memory and PostgreSQL.
0.17.0
- Added optional provider-neutral, cursor-bound document queries, with memory and PostgreSQL implementations for indexed service reads without whole-store hydration.