Dashboard › opencode › Distillation
428bc8bb-a910-4c48-97c8-5ff4ceb9634a["lore_tm_v1_KZsH9lyMrIa94sxtZFu9XqQe-5abzcDnhowPkRlomLI","lore_tm_v1_TvH2YWRSWQ9ZhUKzJlkOHeqNzkBNNWvz_An5pTw9dGM","lore_tm_v1_GoNYkMWjWqEn17fOIIjVKuIk4L6Bb6TCtcHNMW8OG5M","lore_tm_v1_pcoqLH5UvTN0lny8VwKrbdvVq1LN45qy8pvfyQZtAac","lore_tm_v1_IkVOyxb15Krvx4l28lsW-ATtokPVKdsWca9wif6hfs0","lore_tm_v1_llgiaKZUqJw-s0-nkjzM1j1V1lFp8LmBL_LwZN7t5ho","lore_tm_v1_XgYWW-fh237w7dXSHKDgcvW4PwB3wPZZuWcGbOJsrIw","lore_tm_v1_PXPLN9J2bg5fmkbF9U-51mJF4bQCwEDNOR75ZC9mkpU","lore_tm_v1_07pBk3Uy-gCxwTaiZJsqKARdp5lBmHBYq2JltYgpECA","lore_tm_v1_opq-H_RAzEfwPPD4XHEr1vRsC_u3F541zIZq4hyyXug","lore_tm_v1_BRT2CNMbA2E6Wi4nIB0CZmUYaRqkqjVtDl190971Vtk","lore_tm_v1_NQIvThF4PvCb1AuNQJCSsw1_1Rz3qs3Icd88w5jHko8","lore_tm_v1_3kv0gSSFU7XrrDG4jIapUF1-F8JGGs5ROonN4FoY1I8","lore_tm_v1_Cbi86q9rR1Ubl2wcpk4XdJF87rAnU5DfQQCLJkXL84w","lore_tm_v1_khW2vc-R0vYaQUIm7YoLOsBMYRZbZIPhW_fqmfW41-E","lore_tm_v1_IqTeWoB4DpYTr-kE-mx-ClvtUcOI-me6FfORNYfpAXA","lore_tm_v1_xHaKocP5QrzxGxg27DwM9lRfrACuKgnmIYLSYzS1f90","lore_tm_v1_njGDLPGJJI2rwVs3clJVJU42LvAv4OuniKjn1klHnO8","lore_tm_v1_tHl_iPchkfD7QITnmV-pCvUJldVwVRByDjsq9YveBNY","lore_tm_v1_Ga8bPV1bwPl0OermAP7FEsAiayB4ZLcm4YcdPqanJ2I","lore_tm_v1_OsT4KiyHAgBxdnY4p-KAwPqGMeqNbvLJH7GPRNF_CEc","lore_tm_v1_Yk0EoaSh3qBR_kTyzPg3X_lDRsaaXXBmSExMe1IPrkc","lore_tm_v1_BM81Du79os5S6YpAcPm9-cMrr1Qxq7xCdunBjiVFEJw","lore_tm_v1_V-tfJY_Ubp_e9gkHO0bNt6W1XjO8Aog_wspP3eT1aQA","lore_tm_v1_S5kL6L4MJ64j-uAZbrONpgSSv3DAah-Cez3_YDcs-Yc","lore_tm_v1_M2_-xuJLbXRR14ZIKwV-VuBDN467Oix1aYxsb404HlQ","lore_tm_v1_PaPzCafz923KBQSwM5me7-dKOe8FErP0q4RUiQkABx0"]
Date: Sep 15, 2026
tsgo --noEmit completed successfully.packages/core/src/session/input.ts and packages/core/src/session/recovery.ts.packages/core/test/session-prompt.test.ts, packages/core/test/session-projector.test.ts, packages/core/test/session-runner.test.ts, and packages/core/test/database-migration.test.ts.158 pass, 2 fail, and 447 expect() calls out of 160 tests in 15.46s.SessionV2.prompt > durably records execution intent before advisory wake failed at packages/core/test/session-prompt.test.ts:308: wakeCalls contained ["ses_prompt_test", "ses_prompt_test"] instead of the expected ["ses_prompt_test"]; the test otherwise expected the stored SessionInputTable row to have wake_pending: true and promoted_seq: null.DatabaseMigration > adds final recovery ownership tables to a populated predecessor initially failed with SQLite error no such column: promoted_seq while preparing the predecessor database.packages/core/test/session-prompt.test.ts and packages/core/test/database-migration.test.ts, the same prompt test still had the duplicate wake call, while the migration test advanced to a new failure: INSERT INTO session_input (id) VALUES ('msg_input') failed with EffectDrizzleQueryError.packages/core/test/session-prompt.test.ts found 9 existing wakeCalls.length = 0 resets at lines 114, 147, 228, 284, 329, 456, 591, 605, and 623; the failing test beginning at line 294 lacked a reset after setup.wakeCalls; migration fixture corrections were also completed. The focused suite then passed with 160 pass, 0 fail, and 453 expect() calls across 4 files in 15.01s./tmp/opencode-core-migration-check-1rVuDX/full/20260915160449_schema/migration.sql.34 pass, 0 fail, and 70 expect() calls across 5 files in 2.06s; subsequent tsgo --noEmit checks also completed successfully.1913 insertions(+), 517 deletions(-). Modified files were .lore.md, AGENTS.md, packages/core/schema.json, packages/core/src/database/migration.gen.ts, packages/core/src/database/migration/20260914170650_session-recovery.ts, packages/core/src/database/schema.gen.ts, packages/core/src/session.ts, packages/core/src/session/compaction.ts, packages/core/src/session/context-epoch.ts, packages/core/src/session/execution/local.ts, packages/core/src/session/input.ts, packages/core/src/session/message-updater.ts, packages/core/src/session/projector.ts, packages/core/src/session/recovery.ts, packages/core/src/session/run-coordinator.ts, packages/core/src/session/runner/index.ts, packages/core/src/session/runner/llm.ts, packages/core/src/session/runner/publish-llm-event.ts, packages/core/src/session/sql.ts, packages/core/test/database-migration.test.ts, packages/core/test/session-execution-local.test.ts, packages/core/test/session-projector.test.ts, packages/core/test/session-prompt.test.ts, packages/core/test/session-runner-recorded.test.ts, packages/core/test/session-runner-tool-events.test.ts, packages/core/test/session-runner.test.ts, and packages/schema/src/session-event.ts.packages/core/src/database/migration/20260914214636_session-execution.ts and packages/core/src/database/migration/20260914222526_session-execution-phase.ts; untracked files were packages/core/src/session/execution/claim.ts, packages/core/src/session/recovery-id.ts, perf.data, and perf.data.old.packages/core/src/session/recovery.ts defines BATCH_SIZE = 100 and valid execution phases through Schema.Literals(["ready", "safe", "unknown"]).SessionRecovery.recover scans at most 100 session_execution rows where expires_at <= scanTime and recovery_error IS NULL, ordered by time_created then id; it acquires each expired execution via a compare-and-swap update matching execution ID, session ID, prior owner ID, expiration, and null recovery error, then assigns a fresh crypto.randomUUID() owner and extends the lease by SESSION_EXECUTION_LEASE_MS.recovery_error to Invalid execution phase: ${String(claim.phase)} only while the recovery owner still holds a live lease; failure to retain the claim causes Effect.die("Recovery execution claim changed: ...").SessionMessageTable.seq; phase "safe" claims and claims whose assistant_message_id is superseded by a different latest assistant are cleared through SessionExecutionClaim.clear(db, recoveryClaim) without publishing a continuation.SessionEvent.Step.Recovered with sessionID, timestamp, executionID, optional assistantMessageID, and phase; the publish commit callback clears the execution claim. A publish defect is treated as already committed only if a matching (session_id, execution_id) row exists in SessionRecoveryTable; otherwise the defect is rethrown.SessionRecoveryTable rows with wake_pending = true, ordered by time_created and execution_id. It calls execution.wake(row.sessionID) only when continuation_message_id === continuation(executionID); otherwise it logs "Invalid recovery continuation identity".SessionInputTable where wake_pending = true and promoted_seq IS NULL, ordering groups by minimum time_created, minimum input id, then session_id, and waking at most 100 sessions serially.concurrency: 1; per-claim, recovery-redrive, and ordinary-input wake failures are logged with session/execution annotations rather than terminating the batch.session-recovery node repeats recover() every "10 seconds" via Schedule.spaced("10 seconds"), forks it scoped, and depends on Database.node, EventV2.node, SessionProjector.node, and SessionExecution.node.packages/core/src/session/recovery.ts and packages/core/src/session/input.ts after reviewing the recovery scan and wake-redrive logic.packages/core/test/session-runner.test.ts setup resets runner state including response, system-context flags/hooks, currentModel, skillBaselines, stream controls, tool-execution gates/counters, and sets toolExecutionsReady = 5; it ensures the global project exists at /project before inserting session ses_runner_test.setupOverflowRecovery runs the standard setup, records an earlier response, prompts with "Earlier question ".repeat(700) using resume: false, resumes the session, switches currentModel to recoveryModel, clears requests, and returns the session.packages/core/test/session-runner.test.ts, the expanded suite passed with 195 pass, 0 fail, and 525 expect() calls across 9 files in 15.91s./tmp/opencode-core-migration-check-AEBy9p/full/20260915160750_schema/migration.sql; final tsgo --noEmit checks completed successfully.