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
68 changes: 68 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,74 @@ version 2: its `{{ … }}` sequences become substitution points, and its

## OVOS-SESSION-2 — Session Lifecycle and State Ownership

### 2

Version 2 is **not compatible with version 1**. Version 1 left
the write model under-determined: the two write paths onto the
default session were not distinguished, no ordering was defined
across the four in-utterance write paths, and `ovos.session.sync`
was simultaneously required to reach terminal events (§2.7) and
forbidden to mutate session mid-utterance (§2.6). An
implementation built against version 1 can satisfy version 1 and
violate version 2.

- §2.6 — `ovos.session.sync` carved out of the
incidental-bus-event rule that previously contradicted §2.7.
The visibility split is now stated: a merged sync reaches
terminal-event snapshots and any matcher or hook not yet run,
and never revises a snapshot a consumer already holds.
- §2.6 — the handler-boundary in-place path is bounded to fields
the handler owns and cites OVOS-MSG-1 §4.1's owned-field
allowance as what makes it conformant. The
`Match.updated_session` commit mechanic is now cited to
PIPELINE-1 §4.2 rather than restated.
- §2.7 — field replacement stated as the default merge rule,
with claiming specifications permitted to define a finer
intra-field merge; `session.intent_context` named as the one
such field at this version (OVOS-CONTEXT-1 §5.3).
- §2.7 — a sync on a named session with no utterance in flight
is an orchestrator no-op; the owning client still consumes it.
Nested lifecycles bind the innermost lifecycle in flight
(PIPELINE-1 §6.5).
- §2.8 (new) — normative write-ordering timeline across the
inbound merge, transformer hooks, match-phase writes,
dispatch-time orchestrator writes and handler/sync writes,
plus last-writer-wins resolved **per field**, its two
exceptions, and the statement that unorderable ties have no
defined winner.
- §3.2 — "latest received" retired as a client policy: the bus
guarantees no order. Adoption at `ovos.utterance.handled` is
RECOMMENDED; incremental adoption stays a MAY, with an
explicit staleness warning and a SHOULD to converge at §3.3.
- §5.1 — the omitted-field-leaves-stored-value rule is owned as
a deliberate deviation from SESSION-1 §2.1, confined to writes
into the default-session store; the false attribution of the
rule to SESSION-1 §2.1 is dropped.
- §5.1 — default-store write acceptance: the orchestrator merges
a session-less inbound Message into the store only from a
local source, with OVOS-BRIDGE-1 §3.4 named as the enforcement
point for relayed traffic. SESSION-1 §2.4 field tolerance
stated as applying at store-write.
- §5.1 — the match-pathway wholesale replacement now says a
field absent from `Match.updated_session` **reverts to the
deployment default at consumption**, not that it is deleted,
and carves out the PIPELINE-1 §7.1 `active_handlers` push and
the OVOS-CONTEXT-1 §5.3 entry-level `intent_context` merge.
- §5.4 folded into §7 as a non-normative deployment note; the
end-marker citation is pinned to PIPELINE-1 §9.5 throughout.
- RFC 2119 usage — "MUST NOT be expected to" reworded as
behaviour required of a named actor (§2.2, §2.4, §2.6, §6.4).
- Descriptive passages in §2.3, §2.4, §2.5, §4.3 and §5.2 marked
informative.
- §2.4 / §6.3 — clarified that only a specification claims a
field (SESSION-1 §2.2); a component projecting into an
unclaimed field rides SESSION-1 §2.4 tolerance and gets no
normative reading from anyone else.
- Citations — SESSION-1 registry claims corrected to §2.2 (§2.4,
§7); restart-loss citation corrected to §5.2; companion-spec
count corrected to six; CONTEXT-1/CONVERSE-1 field attribution
in the intro untangled.

### 1

- The state-ownership model (stateless bus, stateless orchestrator for
Expand Down
Loading