Skip to content

ADR-003

Status: Accepted

Date: 2026-07-15

Category: Architecture Decision Record


Runtime Sessions evolve over time.

Operations performed during a Session may:

  • request evolution of Canonical Knowledge Structures;
  • update Runtime operational state;
  • generate diagnostics;
  • create Version History entries;
  • persist committed Runtime state.

These operations must remain deterministic and recoverable.


Without an explicit execution model, Runtime state could be modified incrementally by unrelated operations.

Such an approach complicates:

  • rollback;
  • persistence boundaries;
  • diagnostics;
  • version history;
  • reproducibility.

An explicit coordination mechanism is therefore required.


Every semantic or lifecycle-relevant modification of Session state shall occur through a Runtime Transaction.

Transactions are the exclusive mechanism for coordinated Runtime state transitions.

The reference implementation enforces this rule through the TransactionManager class, which owns the registry of active transactions and provides the sole interface for beginning, committing, rolling back, and aborting them.

Runtime components shall not directly modify Session lifecycle state.


A Transaction coordinates:

  • requested operations;
  • interaction with CKS Core;
  • validation execution;
  • diagnostic collection;
  • operational state transition;
  • commit decision.

A Transaction does not define knowledge semantics.

CKS Core remains responsible for:

  • semantic interpretation;
  • validation rules;
  • evolution semantics.

Every Transaction possesses a Runtime-defined identity.

Transaction identity:

  • is operational;
  • is implementation-independent;
  • is not a canonical identity;
  • shall never replace identities defined by CKS Core.

In the reference implementation, the transaction identity is a UUID generated automatically by RuntimeTransaction.init.


Conceptually:

Session
Begin Transaction
Requested Operations
CKS Core Processing
Validation
Commit / Rollback / Abort
Updated Session State

The reference implementation realises this execution model in the ExecutionPipeline.commit method: it first invokes Core validation via CksCoreAdapter.validate, then either commits the transaction through TransactionManager.commit or rolls it back, depending on the validation outcome.

All lifecycle-relevant state transitions occur inside the Transaction boundary.


A successful Transaction commit:

  • makes the resulting Session state available;
  • enables Version creation;
  • enables persistence.

Transaction commit does not itself create Versions or persist data.

In the reference implementation, the commit flow is orchestrated by ExecutionPipeline.commit, which calls CksCoreAdapter.validate before delegating the final commit to TransactionManager.commit. This ensures that no transaction is committed without prior semantic validation by CKS Core.


The following ownership rules apply:

Responsibility Owner
Transaction coordination Transaction Manager
Semantic evolution CKS Core
Version creation Version Manager
Persistence Storage Manager
Diagnostics aggregation Diagnostics Manager

Positive consequences include:

  • atomic state transitions;
  • deterministic execution;
  • simplified rollback;
  • clear persistence boundaries;
  • clear Version History creation;
  • simplified diagnostics aggregation.

Negative consequences include:

  • additional execution layer;
  • explicit Transaction lifecycle management;
  • more defined component boundaries.

These trade-offs are considered acceptable.


Allow Runtime components to modify Session state directly.

Rejected because operational changes become difficult to reason about and recover.


Allow individual Runtime components to update state independently.

Rejected because ordering and rollback become implementation-dependent.


Treat persistence as the primary state transition mechanism.

Rejected because Runtime state should exist independently of persistence.


Transactions provide a deterministic operational boundary.

Every observable Runtime lifecycle transition becomes explicit.

This simplifies:

  • debugging;
  • replay;
  • persistence;
  • recovery;
  • testing.

This decision is reflected by:

  • SPEC-002 Session Model;
  • SPEC-003 Runtime API;
  • SPEC-005 Transactions;
  • SPEC-006 Storage;
  • SPEC-007 Version History.

Future Runtime specifications shall preserve Transaction-centric execution.


Accepted.

Every conformant Runtime implementation shall evolve Session lifecycle state exclusively through Transactions.