Dashboard › opencode › Distillation
Distillation
ID: efc7b913-6233-4b1f-b1bb-e7bbd8e77b8c
Generation: 0
Tokens: 1220
R_compression: 10.024
C_norm: 0.000
Archived: No
Created: 2026-09-15 00:50:08
Source IDs:
["lore_tm_v1_ldL564XJzABq_jF8dD2z3Fihd-cGiPodq8fZ0yVmMLE","lore_tm_v1_6-I-F0oStIngyAhVDjsStSFFjsF_RlL7BbnxIdeHbP4"]
Observations
Date: Sep 14, 2026
- 🔴 (23:24) User directed that supervisor event loops always process PTY events before system-bus events. Equal or bus-first priority can report lifecycle completion before buffered terminal output drains; exit must be emitted only after both output descriptors reach EOF.
- 🔴 (23:24) User directed that PTY transient-unit names always use 128 random bits and the strict grammar
opencode-pty-[0-9a-f]{32}.service; clients must never supply names. Random supervisor-owned names were chosen over bus-derived or caller-provided names because caller control enables injection and unsafe cleanup, while predictable shared identities increase collision and targeting risk.
- 🔴 (23:24) User directed that child-process exit status always be stored in the typescript data and the structured API exit record, with
script -e used to propagate normal exit status and signals represented by the shell convention 128 + signal. Helper status alone was rejected because systemd-run maps signaled termination generically and collection can remove detailed unit state.
- 🔴 (23:24) User directed that related SolidJS component state use one
createStore rather than multiple createSignal calls because separate signals fragment cohesive state and complicate coordinated updates.
- 🔴 (23:24) User directed that TUI theme tokens always be selected by semantic role rather than current color:
text.feedback and background.feedback are reserved for status/outcome feedback, formfield states for controls, ordinals, and selection markers, and action states for actions.
- 🔴 (23:24) User directed TypeScript code to use direct named imports without aliases and never use star imports or type-position
import("..."). Namespace access should import the canonical exported namespace, such as { Project }, and then use Project.ID.
- 🔴 (23:24) User directed that heavy, Node-only, or startup-sensitive modules be dynamically imported inside the narrowest applicable branch, with bindings destructured near the top of that branch and inline import chains avoided.
node:http must never be evaluated on a workerd path because even an unused top-level import breaks non-Node runtimes.
- 🔴 [enforced-workflow] (23:24) User directed that new branches and worktrees always be based on
v2, or origin/v2 when local v2 is absent; PRs target v2 unless explicitly instructed otherwise. Never assume main exists. Branch names use at most three hyphen-separated words and no slash/type prefix such as feat/ or fix/.
- 🔴 [requested-repository-evidence] (23:24) User directed that repository investigation begin by reading applicable
AGENTS.md files and inspecting all relevant specifications, manifests, schemas, source, storage, handlers, runtime wiring, generated artifacts, configuration, tests, references, and call sites.
- 🔴 [requested-repository-evidence] (23:24) User directed repository analysis to trace behavior across package, protocol, lifecycle, ownership, cleanup, concurrency, and failure boundaries and ground conclusions in exact paths, symbols, line evidence, literals, ordering, optionality, and tested behavior.
- 🔴 [requested-repository-evidence] (23:24) User directed reports to distinguish observed guarantees, absences, gaps, assumptions, legacy behavior, and recommendations; research/review must remain read-only unless implementation is explicitly requested.
- 🔴 [enforced-workflow] (23:24) User directed repository changes to remain necessary and scoped, preserve established layering/contracts, and be validated with repository-prescribed owning-package commands rather than root tests or direct
tsc; incomplete verification and source/artifact mismatches must be reported explicitly.
- 🔴 [requested-repository-evidence] (23:24) User directed codebase investigations to inspect both implementation and targeted regression tests, especially for durability, concurrency, interruption, failure recovery, ordering, and lifecycle boundaries.
- 🔴 [requested-repository-evidence] (23:24) User directed technical reports to include concrete file paths, line ranges, exact test names, inputs, outputs, error messages, and ordering/count assertions rather than broad summaries; related schemas, database indexes, service wiring, and replay/projection behavior should be traced where relevant.
- 🔴 [requested-repository-evidence] (23:24) User directed that incomplete excerpts be identified with the next offset or remaining range needed rather than inferring unseen behavior.
- 🟡 (23:24)
packages/core/src/session/message-updater.ts was changed to handle additional error-state updates: assistant drafts receive event.data.error, error text can be appended from event.data.error.message, and pending/running tool parts are traversed for failure handling while preserving object inputs and converting string inputs to {}.
- 🟡 (23:24) Session-runner assistant-step startup changed from immediately assigning a generated
SessionMessage.ID.create() to creating a local created ID, publishing SessionEvent.Step.Started with explicit sessionID, agent, model, assistantMessageID: created, timestamp, and snapshot, and supplying commit: () => input.startCommit(created); created is returned after publication.
- 🟡 (23:24) Session-runner tool-input validation defects on missing tools (
Tool input end before start: ${event.id}), changed names (Tool input name changed for ${event.id}: ${tool.name} -> ${event.name}), and duplicate endings (Duplicate tool input end: ${event.id}); successful completion calls toolInput.end(event.id).
- 🟡 (23:24) Session-runner assistant ownership remains guarded by
currentAssistantMessageID(), which defects with "Tool event before assistant step start" when a tool event occurs before assistant-step initialization.