Dashboard › opencode › Distillation
8cd106fa-ff54-42b8-87be-347a7ba5f640["lore_tm_v1_7o2gBhCu4lsW35Mg95E4H_-VkP9NDtnY6ugKcrALunU","lore_tm_v1_qdWUfZQzjqblDR_pP0m0-PZLupfRLUWVknO5FGWKeFY","lore_tm_v1_xd8Yj2gygoTJRF1GmgatayZD2zu_woZkl5qEWkC9_bY","lore_tm_v1_AQO0_vTLYqIZkBVsAbeU0txZQlOGAeJUi0wskxxUoOc","lore_tm_v1_yvXX48-7ESTDyVkJ6uAxKxLvbkk7tCABVbTLbygdkPk","lore_tm_v1_84up7rO8TH-_rBpRzGnZ_7GaAvGdr6p89PyxFt3ee9E","lore_tm_v1_rxoSoSBF5ESVq1pX8ZqYmc5J-mJz4kQ38bqpCljpOSU","lore_tm_v1_EztEBT7qCZ8bBqk31kLfgoho_8OzdKkB4JM66Wa9mG4","lore_tm_v1_NmZnxAie2zpm6nptwXPfrsa7fN4xACiAn1hicdU1EXA","lore_tm_v1_4y-AZksH72Y5jDV3Gr6ULmoR163x-nFIVg0ewX-e0Oc","lore_tm_v1_VfOo8jaA6br0_tpbliI8g139g5wbn6LVziAWHjn8PcA","lore_tm_v1_-r9UeAnMeq6THSEwJ2S-5fjFtGLvxrYW1FLgPqfd79o","lore_tm_v1_5nD1VskTWt_LB96hcotE1_sI5c6jVlg3n97H0BOrYAc","lore_tm_v1_Yjc-AKKcvCt972n8BiY5WruMQr5Z9JEGkpRwt6SAr_M","lore_tm_v1_7U-WzZ5UkdVVNJxkYulYFwf-KJi4nfw0VuQQwnA6v1A","lore_tm_v1_Eb3bOvXoXA9tg7ezKm9u4RCEXWcmVoDednv9qgL0dpw","lore_tm_v1_AJGm470rbZ9f2Ucx20WgPXYoxYTWavW1mxQvgnUaUXs","lore_tm_v1_3zQcevPMfAkvsWL2adyR91N90JdEIqkIlnIccbUOQhM","lore_tm_v1_X-oWtSmWQvYwdPq0JjHFxnAciox9civee-Pw9kgqPac","lore_tm_v1_A1npsODwjzUXrtlktRzCBTurshXgGg3zkVZ862XfXGE","lore_tm_v1_4ZQ4oAnwRsveIL9oQueXvxBVkBdnwSURmJFxRpWxfhI"]
Date: Sep 15, 2026
packages/core/src/session/context-epoch.ts was changed so SessionContextEpoch.initialize() and SessionContextEpoch.prepare() accept a SessionExecutionClaim.Claim; the claim is propagated through initializeOnce() and prepareOnce() to fence Context Epoch writes.packages/core/test/session-projector.test.ts added ownership-fencing regressions, including "never recovers a live execution lease", "never recovers an execution superseded by a newer assistant", and "never advances the Context Epoch after ownership changes".test/session-projector.test.ts had exactly 21 passing and 1 failing test with 67 expect() calls across 22 tests in 2.14 seconds. Failure: "rolls back claim renewal when Context Epoch advance fails" expected expiresAt: 60_000 but received expiresAt: 30_000 at packages/core/test/session-projector.test.ts:779.packages/core/test/session-projector.test.ts was corrected to capture the pre-operation lease as leaseBefore and compare the final SessionExecutionTable.expires_at value against it rather than hard-coding 60_000.test/session-projector.test.ts run passed exactly 22 tests with 0 failures and 67 expect() calls in 2.27 seconds.SessionContextEpoch.prepare() path and verifies stale ownership cannot change the Context Epoch snapshot.expect() calls in 2.39 seconds, revealing that the rollback regression did not yet make lease renewal observably change the expiry.TestClock usage and found 12 matches: packages/core/test/session-execution-local.test.ts lines 3, 173, 176, and 197; packages/core/test/tool-webfetch.test.ts line 276; packages/core/test/integration.test.ts line 282; and packages/core/test/system-context/builtins.test.ts lines 60, 82, 86, 98, 102, and 109.packages/core/test/session-projector.test.ts was updated to advance test time before the forced Context Epoch failure, making a leaked claim renewal observable."rolls back claim renewal when Context Epoch advance fails" expected the unchanged expiresAt: 30_000 but received expiresAt: 31_000; run result was exactly 21 passing, 1 failing, and 67 expect() calls across 22 tests in 1.78 seconds. This demonstrated that claim renewal persisted when performed outside the failed Context Epoch transaction.packages/core/src/session/context-epoch.ts after the mutation check.0d9b296a) run across test/session-projector.test.ts and test/session-runner.test.ts completed with exactly 117 passing, 0 failing, and 354 expect() calls across 2 files in 11.89 seconds.tsgo --noEmit completed without reported errors.packages/core/src/session/context-epoch.ts and packages/core/test/session-projector.test.ts.packages/core/src/session/context-epoch.ts places claim renewal and the Context Epoch snapshot update inside one immediate SessionExecutionClaim.transaction(...), fixing the durable check-then-write gap where renewal could commit even if the epoch update failed.packages/core/test/session-projector.test.ts include: 1. a deterministic takeover regression through the real SessionContextEpoch.prepare() path; 2. a rollback regression proving a failed epoch update also rolls back claim renewal; 3. a mutation check that fails under the original split implementation.insert and replace already use SessionExecutionClaim.transaction; event publication, prompt promotion, recovery wake settlement, and execution-state changes run inside EventV2’s immediate transaction; recovery claim changes use fenced single statements or transactional event commits.packages/core: bun test --printConsoleTrace test/session-projector.test.ts test/session-runner.test.ts passed 117 tests with 0 failures and 354 assertions; bun typecheck passed; git diff --check passed.