From 1c7051143621ff5d57f5b6c406027326d76e9a33 Mon Sep 17 00:00:00 2001 From: kami Date: Tue, 19 May 2026 12:55:27 +0400 Subject: [PATCH] chore(cleanup): delete confirmed-dead files with no live references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes 6 files audited as fully unused: StageExecutor interface (shadowed by kernel), CyclePolicyResolver and PolicyValidation (deferred cycle policy), ApprovalRoutes (never registered), TuiNavigation (superseded by reducer), and ReplayContractTest abstract class (no concrete subclasses). ArtifactRelationshipType and CyclePolicy were audited but retained — both are actively referenced by production code. --- .../apps/server/routes/ApprovalRoutes.kt | 55 ------------------- .../com/correx/apps/tui/TuiNavigation.kt | 19 ------- .../transitions/execution/StageExecutor.kt | 7 --- .../transitions/policy/CyclePolicyResolver.kt | 12 ---- .../transitions/policy/PolicyValidation.kt | 23 -------- .../projections/ReplayContractTest.kt | 35 ------------ 6 files changed, 151 deletions(-) delete mode 100644 apps/server/src/main/kotlin/com/correx/apps/server/routes/ApprovalRoutes.kt delete mode 100644 apps/tui/src/main/kotlin/com/correx/apps/tui/TuiNavigation.kt delete mode 100644 core/transitions/src/main/kotlin/com/correx/core/transitions/execution/StageExecutor.kt delete mode 100644 core/transitions/src/main/kotlin/com/correx/core/transitions/policy/CyclePolicyResolver.kt delete mode 100644 core/transitions/src/main/kotlin/com/correx/core/transitions/policy/PolicyValidation.kt delete mode 100644 testing/contracts/src/testFixtures/kotlin/com/correx/testing/contracts/fixtures/projections/ReplayContractTest.kt diff --git a/apps/server/src/main/kotlin/com/correx/apps/server/routes/ApprovalRoutes.kt b/apps/server/src/main/kotlin/com/correx/apps/server/routes/ApprovalRoutes.kt deleted file mode 100644 index f3dd35a6..00000000 --- a/apps/server/src/main/kotlin/com/correx/apps/server/routes/ApprovalRoutes.kt +++ /dev/null @@ -1,55 +0,0 @@ -@file:Suppress("MatchingDeclarationName") - -package com.correx.apps.server.routes - -import com.correx.apps.server.approval.ApprovalCoordinator -import com.correx.apps.server.protocol.ApprovalDecision -import com.correx.apps.server.protocol.ClientMessage -import com.correx.apps.server.protocol.ServerMessage -import com.correx.core.events.types.ApprovalRequestId -import com.correx.core.events.types.SessionId -import com.correx.core.utils.TypeId -import io.ktor.http.HttpStatusCode -import io.ktor.server.request.receive -import io.ktor.server.response.respond -import io.ktor.server.routing.Route -import io.ktor.server.routing.post -import io.ktor.server.routing.route -import kotlinx.serialization.Serializable - -@Serializable -data class ApprovalRequest( - val requestId: String, - val decision: String, - val note: String? = null, -) - -fun Route.approvalRoutes(coordinator: ApprovalCoordinator) { - route("/sessions/{id}/approve") { - post { - val id = call.parameters["id"] - ?: return@post call.respond(HttpStatusCode.BadRequest, "Missing session id") - val sessionId: SessionId = TypeId(id) - val body = call.receive() - val requestId: ApprovalRequestId = TypeId(body.requestId) - val decision = when (body.decision.lowercase()) { - "approve" -> ApprovalDecision.APPROVE - "reject" -> ApprovalDecision.REJECT - "steer" -> ApprovalDecision.STEER - else -> return@post call.respond(HttpStatusCode.BadRequest, "Unknown decision: ${body.decision}") - } - val msg = ClientMessage.ApprovalResponse( - requestId = requestId, - decision = decision, - steeringNote = body.note, - ) - val error = coordinator.handleResponse(msg, sessionId) - if (error != null) { - val msg = (error as? ServerMessage.ProtocolError)?.message - call.respond(HttpStatusCode.Conflict, mapOf("error" to msg)) - } else { - call.respond(HttpStatusCode.OK) - } - } - } -} diff --git a/apps/tui/src/main/kotlin/com/correx/apps/tui/TuiNavigation.kt b/apps/tui/src/main/kotlin/com/correx/apps/tui/TuiNavigation.kt deleted file mode 100644 index 70327bbf..00000000 --- a/apps/tui/src/main/kotlin/com/correx/apps/tui/TuiNavigation.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.correx.apps.tui - -import com.correx.apps.tui.state.TuiState - -internal fun navigateUp(state: TuiState): TuiState { - val sessions = state.sessions.sessions - if (sessions.isEmpty()) return state - val idx = sessions.indexOfFirst { it.id == state.sessions.selectedId } - val newIdx = if (idx <= 0) sessions.lastIndex else idx - 1 - return state.copy(sessions = state.sessions.copy(selectedId = sessions[newIdx].id)) -} - -internal fun navigateDown(state: TuiState): TuiState { - val sessions = state.sessions.sessions - if (sessions.isEmpty()) return state - val idx = sessions.indexOfFirst { it.id == state.sessions.selectedId } - val newIdx = if (idx >= sessions.lastIndex) 0 else idx + 1 - return state.copy(sessions = state.sessions.copy(selectedId = sessions[newIdx].id)) -} diff --git a/core/transitions/src/main/kotlin/com/correx/core/transitions/execution/StageExecutor.kt b/core/transitions/src/main/kotlin/com/correx/core/transitions/execution/StageExecutor.kt deleted file mode 100644 index a56b37cf..00000000 --- a/core/transitions/src/main/kotlin/com/correx/core/transitions/execution/StageExecutor.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.correx.core.transitions.execution - -interface StageExecutor { - fun execute( - request: StageExecutionRequest - ): StageExecutionResult -} \ No newline at end of file diff --git a/core/transitions/src/main/kotlin/com/correx/core/transitions/policy/CyclePolicyResolver.kt b/core/transitions/src/main/kotlin/com/correx/core/transitions/policy/CyclePolicyResolver.kt deleted file mode 100644 index 9d51e70a..00000000 --- a/core/transitions/src/main/kotlin/com/correx/core/transitions/policy/CyclePolicyResolver.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.correx.core.transitions.policy - -class CyclePolicyResolver( - private val bindings: Set -) { - - fun resolve(signature: CycleSignature): CyclePolicy? { - return bindings - .firstOrNull { it.cycle == signature } - ?.policy - } -} \ No newline at end of file diff --git a/core/transitions/src/main/kotlin/com/correx/core/transitions/policy/PolicyValidation.kt b/core/transitions/src/main/kotlin/com/correx/core/transitions/policy/PolicyValidation.kt deleted file mode 100644 index 9540494a..00000000 --- a/core/transitions/src/main/kotlin/com/correx/core/transitions/policy/PolicyValidation.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.correx.core.transitions.policy - -class PolicyValidation { - fun validate( - bindings: Set, - knownCycles: Set - ): List { - - val errors = mutableListOf() - - val bound = bindings.map { it.cycle }.toSet() - - val unbound = knownCycles - bound - - if (unbound.isNotEmpty()) { - errors += unbound.map { - "Cycle $it has no policy binding" - } - } - - return errors - } -} \ No newline at end of file diff --git a/testing/contracts/src/testFixtures/kotlin/com/correx/testing/contracts/fixtures/projections/ReplayContractTest.kt b/testing/contracts/src/testFixtures/kotlin/com/correx/testing/contracts/fixtures/projections/ReplayContractTest.kt deleted file mode 100644 index c7c98cc0..00000000 --- a/testing/contracts/src/testFixtures/kotlin/com/correx/testing/contracts/fixtures/projections/ReplayContractTest.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.correx.testing.contracts.fixtures.projections - -import com.correx.core.events.stores.EventStore -import com.correx.core.events.types.EventId -import com.correx.core.events.types.SessionId -import com.correx.core.sessions.projections.replay.EventReplayer -import com.correx.testing.fixtures.EventFixtures.newEvent -import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test - -abstract class ReplayContractTest { - - protected abstract fun store(): EventStore - - protected abstract fun replayer( - store: EventStore - ): EventReplayer - - @Test - fun `rebuild is deterministic`(): Unit = runBlocking { - val store = store() - - repeat(50) { - store.append(newEvent(EventId("e$it"), SessionId("s1"))) - } - - val replayer = replayer(store) - - val state1 = replayer.rebuild(SessionId("s1")) - val state2 = replayer.rebuild(SessionId("s1")) - - assertEquals(state1, state2) - } -} \ No newline at end of file