Skip to content

Releases: beyond10x/entity-runtime

0.18.1

Choose a tag to compare

@github-actions github-actions released this 10 Sep 20:50
eaf4309
  • 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 in website/package.json and website/package-lock.json.

0.18.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 23:47

Changed

  • Rebuilding an instance from its events (rehydrate) now holds every event to what the kernel would have written for it, in execute's own order. Per event: an operation event's changed must be exactly what the emitting operation's set: 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 one execute call did); a creation event's changed must 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's changed was hand-written or was produced by a definition whose set: 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 one create.emit names, 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's emits in order, and each payload must be what its template resolves to — so an operation with two emits now 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 --store and entity execute --store now run through the shared stored runtime that the generated CLI and the MCP tools already use. execute --store takes an optional --expected-revision N (default: the revision the store holds when the command runs). Repeating an accepted --record-id with 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 as record_conflict; a stale --expected-revision is refused as revision_conflict before the kernel runs. Store refusals now carry a kind field in their JSON, the same vocabulary MCP reports, and execute --store on an id the store does not hold is a store refusal (exit 1, kind: not_found) rather than an invalid invocation (exit 2). --instance and --store now conflict instead of --instance being silently ignored.
  • A before/after operand that is a literal must now be an instant the kernel reads (YYYY-MM-DD or YYYY-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-sqlite builds on rusqlite 0.40.2 (libsqlite3-sys 0.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-cli no longer fails with cannot 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 default build/entity-runtime/<name> — is no longer resolved a second time against itself; --target-dir <build-dir>/target keeps CARGO_TARGET_DIR or a build.target-dir in a parent .cargo/config.toml from moving the build; and the generator installs the executable Cargo reports having built rather than guessing its path, so a CARGO_BUILD_TARGET or build.target that 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

Choose a tag to compare

@github-actions github-actions released this 05 Sep 16:42

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

Choose a tag to compare

@github-actions github-actions released this 03 Sep 22:03

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

Choose a tag to compare

@github-actions github-actions released this 01 Sep 09:19
  • Updated the AEP adoption record, local planning guidance, and gate command to the renamed AEP repository and canonical aep CLI. The byte-pinned lifecycle fixtures remain unchanged at their recorded AEP release.

0.17.4

Choose a tag to compare

@github-actions github-actions released this 01 Sep 06:56
  • Added the AEP outbound-claim lifecycle definition and refreshed the byte-exact AEP fixture to 0.40.0, so the equivalence suite covers every lifecycle AEP ships.

0.17.3

Choose a tag to compare

@github-actions github-actions released this 31 Aug 10:44
  • 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

Choose a tag to compare

@github-actions github-actions released this 31 Aug 10:38
  • 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

Choose a tag to compare

@github-actions github-actions released this 31 Aug 09:05
  • 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

Choose a tag to compare

@github-actions github-actions released this 31 Aug 08:55
  • Added optional provider-neutral, cursor-bound document queries, with memory and PostgreSQL implementations for indexed service reads without whole-store hydration.