You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"Observation may degrade, repair writes must raise" is silent on visibility. In practice a degraded observation is routinely folded into the same value a healthy reading produces — [], {}, None, a green status — so the degrade is invisible at the call site and at every surface above it. This is the single most repeated defect shape in the open backlog; the instances below are all open today, and several past incidents (e.g. a faulted scan reading as "nothing to prune") share it.
Known open instances (each remains tracked in its own issue; listed here as the class)
Doctrine amendment (AGENTS.md engineering doctrine + wherever observe/degrade is documented): a degrade must be countable — either the return shape carries a reason (tri-state, reason field) or the seam journals/warns at the point of folding. Silent coercion to a healthy-empty value at an observation seam is a defect, not tolerance.
Mechanical audit for unfiled instances: sweep the observation seams (adapters/, runs.py, tui/data.py, documents.py, machine.py read paths) for except/nonzero-exit arms returning [] / {} / None / "", and file what falls out as individual issues. (Prove absence in Python, not grep.)
Per-seam fixes stay with their member issues. Observation return shapes are compatibility contracts; where a shape must grow a reason channel, that member issue picks up needs-design.
The member issues above stay open and are tracked individually; this issue owns the doctrine text and the audit.
Problem
"Observation may degrade, repair writes must raise" is silent on visibility. In practice a degraded observation is routinely folded into the same value a healthy reading produces —
[],{},None, a green status — so the degrade is invisible at the call site and at every surface above it. This is the single most repeated defect shape in the open backlog; the instances below are all open today, and several past incidents (e.g. a faulted scan reading as "nothing to prune") share it.Known open instances (each remains tracked in its own issue; listed here as the class)
BaseTmuxBackend.list_window_ids: one nonzero exit covers session-gone / server-error / bad-format / target-resolution failure, all folded to[]. (Transport faults already raiseTmuxError; the exit-code conflation is the residual.)BaseTmuxBackend.session_options: missing binary,SubprocessError/OSError, and nonzero exit all return{}— one failed read makes every session read untagged at once.list_windows:TimeoutExpired/OSErrorfold to the same[]a windowless session returns, so a faulted ctl-candidate scan reportsscan_error: null.tui/data.pyreads state viajournal.load_stateinstead ofdocuments.status_document, sosweeps_refusedreaches every surface except the dashboard.[verify] commandsexecutes and discards (verify_commands_outcome); only the dev leg journals.detail[:2000]truncates the durable record with no truncation marker, reliably dropping the trailing blocker section.adapter.extra_argsreplacesbypass_argsrather than extending it, so setting it for any other flag silently drops the permission bypass #740 — a resolved launch argv containing no permission-bypass token passes load, validate, probe, and run-start without a warning.runs.livenessswallowsProcessHostErrorto"unknown"whileruns.engine_livenessdiverges; whatever consolidation lands should keep the degrade countable, not fold it.Proposed work
adapters/,runs.py,tui/data.py,documents.py,machine.pyread paths) forexcept/nonzero-exit arms returning[]/{}/None/"", and file what falls out as individual issues. (Prove absence in Python, not grep.)The member issues above stay open and are tracked individually; this issue owns the doctrine text and the audit.