Files
correx/docs/modules/core-sessions-submodule-spec.md

492 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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.