---
name: "Core Sessions Submodule Spec"
description: "Specification for :core:sessions – lifecycle FSM and projection"
depth: 2
links: ["../index.md", "../architecture/replay-model.md", "./core-module-spec.md"]
---

# :core:sessions module specification

version: 0.1-draft
status: foundational specification

---

# 1. purpose

`:core:sessions` defines the canonical execution lifecycle model for correx sessions.

It is the authoritative subsystem for:

* session lifecycle semantics
* execution ownership
* runtime state transitions
* cancellation semantics
* recovery semantics
* session-scoped coordination
* execution isolation boundaries

A session represents:

* one bounded orchestration lifecycle
* one authoritative execution timeline
* one isolated event stream scope

---

# 2. responsibilities

`:core:sessions` owns:

* session lifecycle FSM
* session identity contracts
* session state semantics
* execution ownership rules
* cancellation semantics
* pause/resume semantics
* recovery semantics
* session projections
* session-scoped concurrency guarantees
* session termination semantics

---

# 3. non-responsibilities

`:core:sessions` MUST NOT own:

* orchestration execution logic
* transition evaluation
* persistence implementations
* websocket session management
* user authentication
* provider lifecycle management
* model execution
* UI session rendering

Implementations belong to other modules.

---

# 4. architectural role

`:core:sessions` acts as:

* execution boundary authority
* lifecycle authority
* session isolation authority
* runtime ownership authority

All workflow execution MUST occur inside a valid session lifecycle.

---

# 5. design principles

## 5.1 sessions are bounded

Sessions are finite execution scopes.

Sessions MUST:

* begin explicitly
* terminate explicitly
* remain replayable
* remain isolated

Infinite implicit execution is forbidden.

---

## 5.2 sessions own orchestration scope

Everything occurring during workflow execution MUST belong to:

* exactly one session

Cross-session mutation is forbidden.

---

## 5.3 lifecycle is deterministic

Session state transitions MUST be:

* explicit
* evented
* replayable
* validated

Hidden lifecycle mutation is forbidden.

---

## 5.4 cancellation is first-class

Cancellation MUST propagate deterministically through:

* orchestration
* inference
* tools
* transitions
* approvals

Zombie execution is forbidden.

---

# 6. session model

## base session contract

```kotlin
sealed interface Session {
    val id: SessionId
    val state: SessionState
    val createdAt: Instant
    val updatedAt: Instant
    val correlationId: CorrelationId
}
```

---

# 7. session states

Mandatory lifecycle states:

```text
CREATED
INITIALIZING
ACTIVE
PAUSED
AWAITING_APPROVAL
CANCELLING
CANCELLED
FAILED
COMPLETED
RECOVERING
```

---

# 8. lifecycle guarantees

## required guarantees

Sessions MUST:

* have exactly one active lifecycle state
* emit events for all state transitions
* terminate deterministically
* preserve replay consistency

---

## forbidden behavior

Forbidden:

* silent state mutation
* implicit recovery
* orphaned execution
* detached execution scopes
* state mutation without events

---

# 9. lifecycle transition rules

Example lifecycle graph:

```text
CREATED
  ↓
INITIALIZING
  ↓
ACTIVE
  ├──→ PAUSED
  ├──→ AWAITING_APPROVAL
  ├──→ FAILED
  ├──→ CANCELLING
  └──→ COMPLETED
```

Recovery paths MUST be explicit.

Invalid transitions MUST fail validation.

---

# 10. session ownership model

A session owns:

* execution scope
* orchestration scope
* workflow scope
* event stream scope
* approval scope
* context synthesis scope

Everything executed within a session MUST reference:

* sessionId
* correlationId

---

# 11. session projections

Mandatory projections:

```text
SessionStateProjection
SessionLifecycleProjection
SessionExecutionProjection
SessionApprovalProjection
SessionFailureProjection
```

Projections MUST remain:

* rebuildable
* disposable
* deterministic

---

# 12. concurrency model

## required guarantees

Within a session:

* execution ordering MUST remain deterministic
* cancellation MUST propagate transitively
* lifecycle transitions MUST be atomic

---

## session isolation

Sessions MUST remain isolated from each other.

Forbidden:

* shared mutable orchestration state
* cross-session context mutation
* shared execution ownership

---

# 13. cancellation semantics

Cancellation MUST:

* emit events
* propagate recursively
* terminate child execution scopes
* interrupt pending orchestration safely

Cancellation MUST support:

* graceful cancellation
* forced termination
* timeout escalation

---

# 14. pause/resume semantics

Paused sessions MUST:

* preserve replay integrity
* preserve event ordering
* suspend active execution safely

Resuming MUST emit explicit lifecycle events.

---

# 15. approval suspension semantics

When awaiting approval:

* execution MUST suspend
* transition scheduling MUST pause
* inference MUST stop

Only approval decisions may resume execution.

---

# 16. recovery semantics

Recovery MUST be event-driven.

Recovery MAY occur after:

* crash
* restart
* provider failure
* infrastructure interruption

Recovery MUST NOT require:

* original process state
* in-memory orchestration state
* active model residency

---

# 17. replay guarantees

Session replay MUST support:

* lifecycle reconstruction
* transition reconstruction
* cancellation reconstruction
* approval reconstruction
* failure reconstruction

Replay MUST deterministically reproduce:

* session state
* projections
* orchestration decisions

---

# 18. observability requirements

`:core:sessions` MUST expose telemetry hooks for:

* lifecycle transitions
* session duration
* cancellation propagation
* failure timelines
* replay reconstruction
* approval waiting time
* execution suspension timing

---

# 19. failure semantics

Session failures MUST:

* emit structured failure events
* preserve historical integrity
* preserve replayability
* preserve partial execution history

Failures MUST NOT:

* corrupt event streams
* bypass lifecycle transitions
* silently terminate execution

---

# 20. timeout semantics

Sessions MAY define:

* execution timeout
* inactivity timeout
* approval timeout
* recovery timeout

Timeout expiration MUST emit lifecycle events.

---

# 21. security boundaries

Sessions define execution isolation boundaries.

Session isolation MUST apply to:

* orchestration
* context synthesis
* approvals
* tools
* inference execution

Unauthorized cross-session access is forbidden.

---

# 22. extension model

Extensions MAY:

* define additional session metadata
* define custom projections
* define lifecycle observers

Extensions MUST NOT:

* bypass lifecycle validation
* mutate session state directly
* bypass cancellation semantics
* introduce hidden execution state

---

# 23. forbidden patterns

Forbidden:

* global orchestration state
* implicit session resurrection
* detached execution
* hidden lifecycle mutation
* orphaned child scopes
* mutable session history
* replay-dependent lifecycle behavior

---

# 24. persistence expectations

Persistence implementations MUST support:

* durable session lifecycle history
* replay-safe reconstruction
* snapshot-compatible recovery
* deterministic session rebuild

Persistence mechanics belong to infrastructure modules.

---

# 25. testing requirements

`:core:sessions` MUST support deterministic testing for:

* lifecycle transitions
* cancellation propagation
* pause/resume behavior
* timeout handling
* recovery flows
* replay reconstruction
* concurrency isolation

---

# 26. philosophy summary

`:core:sessions` exists to provide deterministic execution boundaries around orchestration workflows.

Reliability emerges from:

* explicit lifecycle ownership
* bounded execution
* deterministic cancellation
* replayable state transitions
* isolated execution scopes

not from long-lived mutable runtime state.
