Dashboard › opencode › Distillation
f811764a-b363-4443-b972-5935a8837c91["lore_tm_v1_x9EsQEFimnwUpFfDABXLZJJzY_KdwbXh5SwgRZGBw7U","lore_tm_v1_lAk3IrW24HfA-_KBIPP0qZT588aschyuzgAOElBESaA","lore_tm_v1_VKZbVR0COlkKDfpd5xXZWV8eq8Zbzhfl8-2McXQ9Pvo","lore_tm_v1_pMK6NKf5YakNQmBbBCqWTdylpqDNZpxHLg4nyekcf8g","lore_tm_v1_z0MFrlxvjcIbJzs6gbOOGZFNpFKhpGiYf9xqtIdToKg","lore_tm_v1_PiuYrmN_eezuLPJ9qJzHxIm_h-aDtkE3yf71wFl_0KA","lore_tm_v1_H8cAbmYCWUWVaM_eMauNu_IF4gL9oA1X_kALMeJMvgY","lore_tm_v1_yWhNb5HnXWgaFRKiwHHUURtcHe6ei3dNdlpkyXBvGEE","lore_tm_v1__-zqksTZxtza78bmHHLaLTCVCVUA4PU6CuQ8USz08k0","lore_tm_v1_auPi0fSNkaCeYHCzCbMtCrBzorEl0qZ9l8roedjiqug","lore_tm_v1_zzXLcQn7pyPKkc3lHMGjiYEtJVZxFbJadIGzABQaxrk","lore_tm_v1_47LO6vR4DxbFNbcH84jPTuNESkCTShAKHVvHvH2SEpU","lore_tm_v1_y-pdM1LKyvL_ScsfatVLbU8kUogyo3oj1Ztojv6R6Co","lore_tm_v1_BUWmyMYnFwkx-w58ZpjQjYXr4sMHB_le8fOibGwad8g","lore_tm_v1_eWN34-z1ipyOGgFgGZe04UxIKYISJ-m15R6tCLEKGno","lore_tm_v1_mnxcW19Vfht_KhmlMMICHls_8ER3g_WnwaWb5ZRv9gU","lore_tm_v1_fF9gRpIsrEB-Jd187ssUThcnLRpcDwXNEDbyb1OkmrU","lore_tm_v1_-xvoZwrk13JQYkn0igIYD7zpw9D1TgdI6lthwA4xbtc","lore_tm_v1_qNvp4Vn5PsIiv5Z8wsBlRD7zxhZrt8L_ovwPVUMjops","lore_tm_v1_V5XYQHi-AReZInPD6l3d9HmOhbywKhrgeYGbs7axK2E","lore_tm_v1_Elp3XZxHFV_vQUv4bZSZMn3Ig2TfWmdQuLWDVhISEPE","lore_tm_v1_VkY73KXx4cn3CC89glhGSpnjBRPEZpnzkm-diKMHAGQ","lore_tm_v1_bfcD23EMa7wU1molUFTLIR1-FX47u0yK6zD1DQw0Z2s","lore_tm_v1_tXOSCyFBONuUAe54jpivPC0chNcRbsSyu81FKosqzc0","lore_tm_v1_aB6kAHd9Rmk0-x9oVPPl2wBV0w024so0v7uSszifodo","lore_tm_v1_gk05B5YrA5w8W6fEusWKyX56QOW9jGMwo6DVvE85ytM","lore_tm_v1_Ui2cOYugrMA4CS_1eHvapUJ3FxoAZQUf-VbRRjvM4DQ","lore_tm_v1_qZ4_F0048nc1c1u3_Qm6HP4os_YpsoehqFla5nVKLh8","lore_tm_v1_tWwDVMSOQsKtVALUjCV04M46XdZtTWsGlHjYD5wEh_A","lore_tm_v1_9_KFCBXkl0d6kuoGZilLXhbzC4Ib_QJSVSM4E8Ms4r8","lore_tm_v1__n7Am-vr7U9yS_bYPUERz2tJmIGxrkASqBCkPPu99lM","lore_tm_v1_d5_30R8hwTeo5TFuVhoFd1r8s3Pl_deDyH1SI8WqjmA","lore_tm_v1_OsyBvvwAYLLumeMXjp3b1-vxSYKrPhCQ63-nDB2nGvc","lore_tm_v1_qG6r3MiKVm8-CvE0JHNRldAxLec2Z7pJb3ABgL5H128"]
Date: Sep 17, 2026
SessionExecutionLocal cleanup fallback as an exact durable transaction executed only after coordinator.interrupt() joins the runner and its finalizers: a terminal assistant settles and clears the claim; an incomplete durable assistant gets exactly one Step.Interrupted publication with cancelling → cancelled, then the claim is cleared; a claim with no assistant is cleared directly.packages/core/src/session/run-coordinator.ts:99-125 confirmed interrupt(key, cleanup) marks the active entry as stopping, clears pendingWake, calls Fiber.interrupt(owner), executes and captures cleanup before deleting the active entry or starting a pending successor, completes entry.done, propagates cleanup failure, and runs the sequence as Effect.uninterruptible.Fiber.interrupt(owner) and before any pending successor starts; began centralizing exact cancellation finalization in packages/core/src/session/execution/local.ts with event access added to the execution adapter.SessionExecutionLocal creates only a Core-to-Core dependency; SessionExecutionLocal already owns durable claim lifecycle, EventV2/SessionEvent remain Schema/Core, and no Server dependency enters Core.packages/core/src/session/execution/local.ts to add the coordinator-cleanup cancellation fallback.tsgo --noEmit after the fallback failed in packages/core/src/session/execution/local.ts: line 140 had TS2769 from an invalid SQLite column overload; line 153 had TS2322 because (Session.Message.ID | null) was assigned where non-null Session.Message.ID was required; line 154 had TS2322 because number was assigned to Utc. Numerous packages/core/test/session-execution-local.test.ts errors also showed low-level execution tests unexpectedly requiring EventV2.Service, with EventV2.Service confused with Database.Service in inferred environments.EventV2 access in SessionExecutionLocal.make() unnecessarily forced every low-level execution test to provide EventV2. Fix in packages/core/src/session/execution/local.ts: make event access optional at construction and require it only for the incomplete-assistant fallback; tighten phase/null narrowing; use the event schema’s Utc timestamp type.tsgo --noEmit completed without a reported error, but the targeted runner suite had 4 passing, 105 filtered out, 1 failing test, and 18 expect() calls across 1 file in 5.65s. Failure: SessionRunnerLLM > retains cancellation ownership when interrupted tool publication defects at packages/core/test/session-runner.test.ts:3938; the test expected Exit.isFailure(interrupted) === true, but received false.session.interrupt() succeeds rather than leaving a stranded "cancelling" claim. Planned replacement assertions: interruption succeeds, durable tool/step interruption is projected, and the execution claim is removed; a separate regression continues proving ownership remains retained until cleanup can finish.packages/core/test/session-runner.test.ts:3906-3948 showed the stale regression creates SQLite trigger fail_interrupted_tool_publication, aborting inserts where NEW.type = 'session.next.tool.failed.1' with message "crash before interrupted tool publication". The test streamed LLMEvent.stepStart({ index: 0 }), then tool call call-interrupt-publication-failure, and previously expected a failed interrupt, runner failure, a remaining phase: "cancelling" claim, and a projected running tool.Step.Interrupted, whose projector atomically reconciles unresolved tools, so successful cleanup does not require the failed per-tool session.next.tool.failed.1 event. Updated the regression to require successful interrupt, no remaining claim, and tool call-interrupt-publication-failure projected with error status.packages/core/test/session-runner.test.ts with the revised publication-defect regression expectations.tsgo --noEmit reported no error; targeted runner tests had 5 pass, 105 filtered out, 0 fail, and 21 expect() calls across 1 file in 4.24s; execution-adapter lifecycle tests had 12 pass, 0 fail, and 23 expect() calls across 1 file in 3.74s.session_execution_recovery_scan_idx exists in four synchronized artifacts: packages/core/schema.json:2306; packages/core/src/database/schema.gen.ts:289 with CREATE INDEX \session_execution_recovery_scan_idx` ON `session_execution` (`recovery_error`,`expires_at`,`time_created`,`id`); packages/core/src/database/migration/20260914170650_session-recovery.ts:49 with the same columns; and packages/core/src/session/sql.ts:240./tmp/opencode-core-migration-check-R4opKj/incremental.config.ts and found no schema changes/no incremental migration; full-schema check read /tmp/opencode-core-migration-check-R4opKj/full.config.ts and generated /tmp/opencode-core-migration-check-R4opKj/full/20260917011442_schema/migration.sql.packages/client: bun run script/build.ts.packages/client/src/generated/types.ts contains readonly requestExecution?: boolean at lines 778 and 1272, event type "session.next.prompt.execution_requested" at lines 784 and 1278, and event type "session.next.step.recovered" at lines 908 and 1402.packages/client/src/generated-effect/index.ts, packages/client/src/generated-effect/client.ts, packages/client/src/generated-effect/client-error.ts, and packages/client/src/generated-effect/.httpapi-codegen.json.packages/client/src/generated-effect/index.ts showed it exports { ClientError } from ./client-error and * as OpenCode from ./client.packages/client/src/generated-effect/client.ts:1-60 confirmed it is generated by @opencode-ai/httpapi-codegen, imports ClientApi from ../contract, defines RawClient = HttpApiClient.ForApi<typeof ClientApi>, maps HttpClientError, schema errors, and Sse.Retry into ClientError, and adapts generated endpoint groups including health, location, agent, and session endpoints.requestExecution, PromptExecutionRequested, Step.Interrupted, and Step.Recovered; the Effect client consumes the generated contract instead of duplicating event unions.Effect.onInterrupt reconciliation attempt from packages/core/src/session/runner/llm.ts, leaving coordinator cleanup as the single guaranteed cancellation fallback rather than retaining two competing finalizers.