Dashboard › opencode › Distillation
bed5c0f6-3e57-493b-a0a7-d7f6be6bf326["lore_tm_v1_FCD4bjNU21uWxphRw1McAwnPV74_frJEmlgP1E6NYew","lore_tm_v1_9jrdOrZXXBwrduIOD9sXxmY_qSln9icEZur0_RxgmrU","lore_tm_v1_GrVosEWWyBLdtMFyGqA-TXvHwwKyZA9pT3GSH7QnhHY","lore_tm_v1_vte00rhH3anI0rt00-gogYtH1yDlQd9wWdU05Mj8dAs","lore_tm_v1__itIRjSFPysiory-UjvPZ44ImNF8XRGypj7_8d8hNGM","lore_tm_v1_ZPWOYffCVQK4tNAvzBxj8ZhK4CJHsHbiz-iDSlsmM4U","lore_tm_v1_sgpnaMWnL2P7aNQh-PxTM5wDiih6UjxKIPOzO2hBTQQ","lore_tm_v1_Jh6vF9Atjqlj52e5Vzavq0I2NeSMZVzdqaQsSRjIyzY","lore_tm_v1_xvpUExE6gp5Wejs_10WKLlt2IFnT-gtTLOobqjFwPW8","lore_tm_v1_kECI5g4wiaw_qC34dv03xZBivLRn4d4whAxrqDSRChg","lore_tm_v1_XqzbT5EccQJnCBQ9zoeVBRF75ORPkzbYILjOFU3QMv8","lore_tm_v1_K8pxmOfRPVHElipQEs6y9YD4919f8Cv7NC0HsLUl2j4","lore_tm_v1_zhKGcFr2PRebpuTA70AGdmfNN5g_LGJS7eCtR7RSfwg","lore_tm_v1_FaAFOVgS4SoB54Vk9XhUNL8xEghfnAgdfRagAEQgE-c","lore_tm_v1_XwNtKFgfaJa8lurNrdwqZlYUJUIN7CB9h7-S7rdYdfU","lore_tm_v1_omiOVGk9_MGppjm4qu56zS7a1gIJBqiqiIpAVzVYmko","lore_tm_v1_0UXvmBACBAbBnBeBqK4TtQWknXT4JjB9zgmIWveI-7g","lore_tm_v1_JeHLlAXGLe_unlfTeeNeRhI8PZot1M0rjssaOWvyqHY","lore_tm_v1_dL1oulF7OHyTrNpYzZOWdPKcX2rRlYpxG12GonuWS2E","lore_tm_v1_-cZCtjpPfX-0142QJxkq7XWZR2Q-Uw2UNx5_4llS75o","lore_tm_v1_wZeOfxTZGBqt-cvy4Y-7jyk4XYoyoPvo013yaFhM-g8","lore_tm_v1_aWlmS3eQddu-D0pRFyzkqDarlmsRhQx0tvS0SZo383k","lore_tm_v1_N5HF-5zryKeZfYivPOQFNHv8jfk3-7mzJtruo7izYrQ","lore_tm_v1_EUPBttIYsXweWAAIZhapY-CBwUhq2RodoujtF91xLQ4","lore_tm_v1_i6e-eQkyK08nyfcCAI2vwqMXx1qdc2PG6OBYooam2kg","lore_tm_v1_FplasVG8ctuQVqtx8-cHdcsskNAkgQJ-oviqH8aVUeM","lore_tm_v1_UGe80g1IZDf8JdAXX0lK7h2oRrjiGw3K8BjeBaCQQbE","lore_tm_v1_SmRQfCisNB8k9EGqTgvR73f39PIz5RdilAe3KPZi4NA","lore_tm_v1_lmPaOmPlDpOkcMJq4cV0lqV6MU9whYgeLclcBDaFSXw","lore_tm_v1_-pOu1yO4QIE6_1aVSgmYANL3zNEHpAcKQAME-GypUUE","lore_tm_v1_5JgR0EQg26P45YigrGZYfqaKpDpWM1Dk4lVAzNSLwy4","lore_tm_v1_MLUaom_rXfLHltZTOUGzTnB3OaFS3Rc221cjocJyIMQ"]
Date: Sep 15, 2026
/home/byk/Code/opencode/packages/core/test/session-compaction.test.ts, which contains 3 tests: 1. compaction prompt preserves detailed work state and relevant files verifies SessionCompaction.buildPrompt({ context: ["conversation history"] }) starts with the <conversation> wrapper, places </conversation> before Create a new anchored summary, references the history in <conversation> tags, and includes ## Work State, ### Completed, ### Active, ### Blocked, and ## Relevant Files; 2. compaction prompt gives update instructions for a prior summary verifies <conversation> precedes <prior-summary>, the prior-summary closing tag precedes its explanation, and instructions carry forward objectives, constraints, user directives, decisions, and parallel workstreams, move completed work from "Active" to "Completed", and update "Objective" and "Next Move"; 3. compaction describes tool media without embedding base64 verifies text plus a data:image/png;base64,... file named pixel.png serializes exactly as Image read successfully\n[Attached image/png: pixel.png] without the base64 payload.packages/core/test/session-runner.test.ts twice.packages/core/src/system-context/index.ts: empty = context([]); make<A>() decodes, encodes, and compares source snapshots and renders Unchanged, Updated, or Incompatible; combine() preserves context order and calls assertUniqueKeys; observe() loads sources with { concurrency: "unbounded" }; initialize() rejects unavailable source keys with InitializationBlocked and otherwise builds an immutable baseline and durable snapshot through initializeObservation().packages/core/test/session-projector.test.ts twice.packages/core/test/session-runner.test.ts twice and packages/core/test/session-projector.test.ts once.tsgo --noEmit reported 3 TypeScript errors in test/session-runner.test.ts: line 598βs effect body inferred an unsupported unknown environment; line 626 referenced nonexistent SessionExecution.Service.active; line 728 passed a general string to an array typed only for "session.next.tool.failed" | "session.next.tool.success".never dispatches a provider after ownership changes.modelResolveHook, changes the SessionExecutionTable row to { id: "provider-successor", owner_id: "successor", expires_at: 60_000 }, resumes resolution, and expects no provider requests and no new EventTable rows.never publishes streamed output after ownership changes."stale output", changes ownership to { id: "publication-successor", owner_id: "successor", expires_at: 60_000 }, releases the stream, and expects no new events and no persisted assistant message in session.context(sessionID).never starts a local tool after ownership changes.echo tool call with { text: "must not run" }, changes ownership to { id: "tool-successor", owner_id: "successor", expires_at: 60_000 } when SessionEvent.Tool.Called is observed, and expects executions to remain empty with neither SessionEvent.Tool.Success nor SessionEvent.Tool.Failed published.never fails interrupted tools after ownership changes.redrives only the synthetic recovery continuation: it queues an unrelated prompt "unrelated admit-only", publishes SessionEvent.Step.Recovered with executionID: "lost-recovery-wake" and phase: "ready", calls SessionRecovery.recover(), expects the provider requestβs user text to be ["continue"], leaves the unrelated inputβs promoted_seq as null, and clears SessionRecoveryTable.wake_pending to false.packages/core/test/session-runner.test.ts; the subsequent tsgo --noEmit completed without errors.DatabaseMigration > adds final recovery ownership tables to a populated predecessor failed in test/database-migration.test.ts:167 with SQLiteError: near "notnull": syntax error; 2. SessionRunnerLLM > redrives only the synthetic recovery continuation expected ["continue"] but received ["Session execution interrupted by server restart", "continue"]; 3. SessionRunnerLLM > advertises and executes a globally attached application tool expected tool application_context but received only ["echo", "defect"]; 4. SessionExecutionLocal > preserves the claim when its scope closes expected 1 claim after closing the child scope but received 0.application_context through ApplicationTools.Service using Tool.make: description Read application context, input { query: Schema.String }, output { answer: Schema.String }, and an executor that records Tool.Context and returns the uppercased query. Its model response calls application_context with { query: "hello" }, and the request is expected to advertise that tool.packages/core/src/session/execution/local.ts, packages/core/test/database-migration.test.ts, and packages/core/test/session-runner.test.ts to address the 4 failures./home/byk/Code/opencode/packages/core/test/session-run-coordinator.test.ts.packages/core/test/session-run-coordinator.test.ts yielded 15 passes and 1 failure across 16 tests: SessionRunCoordinator > runs a wake registered during interruption cleanup timed out after 5000ms.runs a wake registered during interruption cleanup starts an infinite first drain, blocks its interrupt finalizer on cleanupGate, calls wake("session") during cleanup, releases the gate, and expects a second run with runs === 2; starts a resume registered during interruption cleanup similarly calls run("session") during cleanup and expects drain force flags [false, true]; starts one follow-up when a wake races with failure expects the first joined run to fail with the original Error("failed"), then a second run and runs === 2; does not cancel execution when a joined waiter is interrupted expects interrupting a second waiter not to cancel the shared execution and runs === 1; runs different keys concurrently starts keys "first" and "second" together; trampolines synchronous self-waking execution uses a limit of 20_000.packages/core/src/session/run-coordinator.ts and packages/core/src/session/execution/local.ts for interruption-cleanup and successor-run coordination.SessionExecutionLocal > clears the claim after explicit interruption expected no claims but retained one ready claim with expires_at: 30000; SessionExecutionLocal > settles cancellation before starting a pending successor timed out after 5000ms.packages/core/src/session/execution/local.ts; the next 2-file run produced 24 passes and 1 failure. settles cancellation before starting a pending successor now started the successor and reached runs === 2, but still expected no claims while one ready claim with expires_at: 30000 remained.packages/core/test/session-execution-local.test.ts to align the pending-successor claim expectation with the implemented lifecycle.packages/core/src/database/migration.ts: apply() serializes migration work with Semaphore.makeUnsafe(1), detects non-SQLite internal tables, runs applyOnly(db, migrations) when session exists, dies if a nonempty database lacks session, and otherwise transactionally applies schema.up(tx), creates migration(id TEXT PRIMARY KEY, time_completed INTEGER NOT NULL), and records every generated migration with Date.now().DatabaseMigration.applyOnly() creates the migration journal if absent, loads completed IDs, and supports legacy __drizzle_migrations journals in 2 forms: 1. if a name column exists, copies non-null names with INSERT OR IGNORE; 2. otherwise reads created_at, derives a %Y%m%d%H%M%S prefix with SQLite strftime, matches the first input migration whose ID starts with ${entry.prefix}_, and dies with Legacy migration timestamp ${entry.created_at} does not match any known migration when unmatched. Remaining migrations each run transactionally and are then inserted into the new journal.