Dashboard › opencode › Distillation
18cfa045-fa54-4676-9454-e03e1e41799d["lore_tm_v1_1WGlScWma1_4Sxzn-gi5JuQ5SWNCvKhShjBr1c8czik","lore_tm_v1_rpX1YkaDgwNSwYe8aul36oUfKoTy9ywUT-ayRPPwnZE","lore_tm_v1_8pL-FrA4iP0wZEdO8eFZJg7jX-Pho1MMnRQO3Cdm7Uw","lore_tm_v1_diH5dh8jAIRYcfBmv5bw8bCct8lRNuLVZtn0cQx3_bI","lore_tm_v1_LAJ3tBeoaa2h5bGPBf1n_stAKXMl55bTQsx0I849HVU","lore_tm_v1_wg5mLl0rIDrVQZKp9gIXEW4xy52YALekZw3SwswKp8E","lore_tm_v1_loO3rcDluVCEvFCyVUuNPnkosa4FThzE2FFwEYUTs5s","lore_tm_v1_J5dleplLmuhVx4AtFEYUYD8XZJeHnW5Qci_DJmRWWCA","lore_tm_v1_C8B3yV68Gal2udIOTtgSycA52KLOGc74p3351OQ9vF0","lore_tm_v1_lGO7huUOOoGYvq_50cnbXUKtNs5kTfZrUY92_QW-hKI","lore_tm_v1_zppRwDStMfY-WaWzlljhpPmRPyiOmyluvIJJRAn3iBo","lore_tm_v1_N-JtHB70vXtMLMuCNjNdhWrwyPVgfCJ8R82Qyi2aa0Y","lore_tm_v1_ovpeWD_X88linEvqxPZqwUf9riknePyAFqfLMvaZNj8","lore_tm_v1_fVFXJWL70FlNz7hojfotvGXEJgscgC_X_VZqaT_h1mA","lore_tm_v1_aE2q8VUkebqKddUApjI96dk7EfGFupgAsEPE0hxz2qU","lore_tm_v1_9IL35XfwitYz3BxZSHwBE8B3Mqy7FyMMLZPDK4-Sxis","lore_tm_v1_-S2EXTGv5e4t-DQwMJ7RQL0GwU9hzDs7JdbiTuR4At4","lore_tm_v1_Vzv1OUfk4J-PxhiUyLO0WWJbOi5PuSVKC7tBj33aOLQ"]
Date: Sep 15, 2026
/home/byk/Code/opencode, without recall, while preserving unrelated files and performing no commit, build, service operation, or full-suite run.resume:false; an exact retry of A with resume:true causes SessionInput.requestExecution to no-op because A is promoted, but SessionV2.prompt unconditionally calls execution.wake(), allowing the runner to promote B.SessionInput.admit must return both the admitted row and whether the current invocation should issue the advisory wake; SessionV2.prompt must call execution.wake() only when shouldWake is true.requestExecution=true durably projects wake_pending=true and returns shouldWake=true; 2. new resume:false returns false; 3. exact unpromoted retry upgrading falseβtrue via durable PromptExecutionRequested returns true; 4. exact input already having wake_pending=true may return true to re-drive the advisory wake; 5. exact promoted input returns false even with resume:true; 6. conflicts fail before mutation or wake; 7. defect, idempotence, and concurrent paths derive shouldWake from durable stored state and never wake promoted input.resume:false + retry A resume:true,β proving no execution wake occurs and B remains unpromoted, plus direct semantics coverage if needed.packages/core/src/session.ts: after SessionInput.admit(...), SessionV2.prompt called execution.wake(admitted.sessionID) whenever input.resume !== false, independently of whether the admitted input had already been promoted.packages/core/src/session/input.ts: an exact existing admission invoked requestExecution(...) when requested but returned only the existing Admitted; requestExecution returned without signaling a result when promoted_seq was non-null or wake_pending was already true.SessionInput.admit result contract in packages/core/src/session/input.ts as { admitted, shouldWake }. Existing exact admissions now calculate shouldWake through durable execution state; new admissions return the admitted value plus wake eligibility.SessionInput.requestExecution in packages/core/src/session/input.ts to return false for a promoted row, true for an unpromoted row already having wake_pending=true, and after publishing deterministic event ID evt_prompt_execution_${input.id}, re-read durable state to determine whether execution remains pending.SessionInput.executionPending in packages/core/src/session/input.ts; it reads session_id, promoted_seq, and wake_pending, dies with SessionInput.LifecycleConflict for a missing or mismatched row, and returns promoted_seq === null && wake_pending.packages/core/src/session/input.ts: it re-reads the stored row, checks equivalence before execution mutation, returns shouldWake:false when execution was not requested, and otherwise derives the result through requestExecution.packages/core/src/session.ts so SessionV2.prompt receives the admission object, performs prompt equivalence against admission.admitted, and calls execution.wake(...) only when admission.shouldWake is true.SessionInput.admit call sites in packages/core/test/session-runner.test.ts and packages/core/test/session-projector.test.ts to use the new { admitted, shouldWake } return shape where the admitted row is needed.packages/core/test/session-prompt.test.ts for the revised wake contract, including the promoted-A/pending-B retry scenario requested by the user.packages/core/test/session-prompt.test.ts run completed with 5 pass, 24 filtered out, 0 fail, and 24 expect() calls in 1.68s.153 pass, 0 fail, and 466 expect() calls in 10.51s.tsgo --noEmit failed at src/session/input.ts:80 with TS18048: 'event.durable' is possibly 'undefined'.TS18048 durable-event narrowing issue in packages/core/src/session/input.ts.153 pass, 0 fail, and 466 expect() calls in 12.21s; the following tsgo --noEmit completed successfully.153 pass, 0 fail, and 466 expect() calls in 11.50s; final tsgo --noEmit completed successfully.packages/core/src/session/input.ts, packages/core/src/session.ts, packages/core/test/session-runner.test.ts, packages/core/test/session-projector.test.ts, and packages/core/test/session-prompt.test.ts.