# Epic 8 — Tool System Progress **Plan:** `docs/superpowers/plans/2026-05-11-core-tools.md` ## Done ### Task 1 — Tool shared vocabulary and lifecycle events in `core:events` ✅ - `AnyMapSerializer.kt` — `Map` ↔ JSON bridge via JsonElement - `ToolRequest.kt`, `ToolReceipt.kt` — shared vocabulary data classes - `ToolInvocationId` typealias added to `IdentityTypes.kt` - 5 lifecycle event classes: `ToolInvocationRequestedEvent`, `ToolExecutionStartedEvent`, `ToolExecutionCompletedEvent`, `ToolExecutionFailedEvent`, `ToolExecutionRejectedEvent` - All 5 registered in `Serialization.kt` polymorphic block - 8 tests passing including polymorphic round-trip ### Task 2 — `core:tools` contract types and build config ✅ - `Tool.kt` — plain `interface` (not sealed; infrastructure implements it) - `ToolCapability.kt` — enum: FILE_READ, FILE_WRITE, NETWORK_ACCESS, SHELL_EXEC, PROCESS_SPAWN - `ValidationResult.kt` — sealed interface: `Valid` / `Invalid(reason)` - `build.gradle` — deps: `core:events`, `core:approvals`, `core:sessions` - 3 tests passing ## Remaining (nothing is done, clean plate) ### Task 3 — `core:tools` state model - `ToolInvocationStatus` enum: REQUESTED, STARTED, COMPLETED, FAILED, REJECTED - `ToolInvocationRecord` data class (holds one invocation's full lifecycle) - `ToolState` data class: `invocations: List` ### Task 4 — `core:tools` reducer, projector, repository - `ToolReducer` interface + `DefaultToolReducer` (applies 5 lifecycle events to ToolState) - `ToolProjector` (implements `Projection`) - `DefaultToolRepository` (wraps `EventReplayer`) ### Task 5 — Mock tools in `testing:fixtures` - `EchoTool` (T0, always Valid) - `FailingTool` (T2, always Invalid) - `RejectedTool` (T4, always Valid) - `testing/fixtures/build.gradle` gains `:core:tools` dep ## Resume Instructions 1. Open this session in `/home/kami/Programs/correx` 2. Read `docs/superpowers/plans/2026-05-11-core-tools.md` for full task specs 3. Continue from **Task 3** 4. Model selection: Haiku for implementers, Sonnet for reviewers 5. No git repo in this project — skip all commit steps in the plan