622b331de3
Wires the workspace handshake end to end so a session's workspace is bound
from the client's cwd at connect time and is event-sourced for replay.
- Go TUI sends Hello{workingDir=os.Getwd()} as the first WS frame on connect
(protocol.go encoder + client.go connect path; golden test pins the wire
format against the Kotlin discriminator).
- Server adds ClientMessage.Hello, stashes the per-connection workingDir, and
on session start resolves it through WorkspaceResolver's trust pipeline,
emits SessionWorkspaceBoundEvent (invariant #9), and threads the resolved
workspace into OrchestrationConfig for the live run. A Hello after the first
StartSession is ignored (warn); a rejected path binds the resolver fallback.
- Replay derives the workspace from the recorded event: SessionState gains
boundWorkspace, DefaultSessionReducer fills it from SessionWorkspaceBoundEvent,
and ReplayOrchestrator uses it (Path.of only, no filesystem re-query —
invariant #8) with graceful fallback to config for pre-Phase-B logs.
Absent Hello / null resolver degrades to the prior config-workspace behavior.
28 lines
1014 B
Groovy
28 lines
1014 B
Groovy
plugins {
|
|
id 'java-library'
|
|
id 'org.jetbrains.kotlin.jvm'
|
|
id 'org.jetbrains.kotlin.plugin.serialization'
|
|
}
|
|
|
|
dependencies {
|
|
implementation(project(":core:events"))
|
|
implementation(project(":core:kernel"))
|
|
implementation(project(":core:sessions"))
|
|
implementation(project(":core:inference"))
|
|
implementation project(':testing:fixtures')
|
|
|
|
testImplementation "org.jetbrains.kotlin:kotlin-test"
|
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test"
|
|
testImplementation project(':infrastructure:persistence')
|
|
testImplementation project(':core:artifacts')
|
|
testImplementation project(':core:artifacts-store')
|
|
testImplementation project(':core:approvals')
|
|
testImplementation project(':core:context')
|
|
testImplementation project(':core:transitions')
|
|
testImplementation project(':core:validation')
|
|
testImplementation project(':core:risk')
|
|
testImplementation project(':core:tools')
|
|
}
|
|
|
|
tasks.named("koverVerify").configure { enabled = false }
|