Dashboard › opencode › Distillation
37586ab8-eb20-4a8f-8658-e567b39309a1["lore_tm_v1_DvLnZgzLJCNdJy72NBjvnVJmE71PfwEiKKmfbwpojzs","lore_tm_v1_HPgb92IcgzUoM8wVkbXyyEpro3UpdX5Tr49W7Jmg_uI","lore_tm_v1_yRd4DUKj3hRn6aZvqgoOZKjwCGP-kRK09uUe2KdNCig","lore_tm_v1_n36kBmOlSsHarqGhxgtJZXlT_hk4NQJlf31hSphStpg","lore_tm_v1_G03el0N6ZX1h1AcGBShMa586YeqFaE6u9wLhqYI7ztg","lore_tm_v1_wZU5bOipW8AoPKb6QF_XsmOFzKSUqvkEeGL6ksFLO4U"]
Date: Sep 17, 2026
Interface exposes durable streaming by { aggregateID, after? }; durable publishing derives the aggregate ID from the configured durable.aggregate data field, validates durable events, assigns aggregate-local sequence numbers, persists event metadata, and notifies subscribers.ownerID; when strictOwner is enabled, publication rejects a stored row whose ownerID differs from the supplied owner. The implementation contains a TODO to bind durable projectors to exact event type+version before allowing incompatible historical payloads.pubsub.all during service teardown, and defines the defect tag "EventV2.SubscriberOverflow".packages/core/schema.json has prevIds containing "d4ff43d2-c4f9-442c-bada-a7d488b42fd2".session_execution, session_input, session_message, and session_recovery. session_execution.assistant_seq defaults to -1; session-related foreign keys use ON DELETE CASCADE.session_input_session_promoted_seq_idx on (session_id, promoted_seq), session_message_session_type_seq_idx on (session_id, type, seq), session_message_time_created_idx on (time_created), and session_recovery_wake_pending_error_attempts_created_execution_idx on (wake_pending, recovery_error, wake_attempts, time_created, execution_id).permission_project_action_resource_idx as a unique index on (project_id, action, resource), part_message_id_id_idx on (message_id, id), and todo_session_idx on (session_id).SessionExecutionTable, SessionInputTable, SessionMessageTable, SessionRecoveryTable, SessionExecutionClaim, and SessionEvent. It checks the latest assistant-message sequence against a claimed assistant_seq, clears recovery execution claims through SessionExecutionClaim.clear(db, recoveryClaim), and processes recovery work sequentially with Effect.forEach(..., { discard: true, concurrency: 1 }).wake_pending, recovery_error, wake_attempts, time_created, execution_id, and continuation_message_id; they join recovery rows to session inputs through SessionRecoveryTable.continuation_message_id = SessionInputTable.id.