Skip to content

Special cases

This ledger records conditionals that exist because an external system presents one particular situation. A conditional that applies a dreamcatcher rule is not a special case: lifecycle states, validation results and protocol event kinds belong to the rules that own them.

Every entry names the external cause that prevents the case from dissolving into a more general dreamcatcher rule.

Where Particular situation External cause
claude._read_system_event Reject a session identifier that is not text. Claude owns the streamed JSON shape, so dreamcatcher must defend its command-line session boundary when that external value has the wrong type.
codex._CodexHarnessAdapter._read Reject a session identifier that is not text. Codex owns the streamed JSON shape, so dreamcatcher must defend its command-line session boundary when that external value has the wrong type.
claude._read_system_event Treat a task_notification as a subagent report only when it carries usage. Claude uses the same event subtype for a completed subagent and a completed background command; only the subagent event carries usage.
claude._read_assistant_block Omit a subagent's text block from the feed. Claude sends those words again in the subagent's report, so rendering both events would duplicate one external message.
codex._CodexHarnessAdapter._read Render the error from turn.failed, but not the earlier error event. Codex streams the same turn failure twice, first as an error and then as the failed turn's reason.
commands.refuse_unquotable, commands._build_subprocess_command and commands._quote_windows_argument Refuse command-line text that cmd.exe acts on, and quote batch-file invocations for both cmd.exe and the child program. On Windows, npm-installed harnesses are batch files, and Python passes those invocations through cmd.exe rather than directly to the program.
teardown Use Job Objects on Windows and process groups on POSIX. The operating systems expose different primitives for containing and terminating a child process tree.
teardown.end_process_tree Read a permission error from ending a process group as a group with nothing left in it. macOS answers EPERM for a group whose only member has exited and not yet been waited for, where Linux answers that the group is gone.
github.InlineReviewComment._fall_back_to_the_original_lines Use an inline comment's original line positions when its current positions are absent. GitHub clears current positions after later commits move or remove the commented code, while retaining the positions the comment was written against.