9.9 KiB
status, system, created, updated, owners
| status | system | created | updated | owners | |
|---|---|---|---|---|---|
| active | platform | 2026-08-23 | 2026-09-05 |
|
Expected runtime log severity Requirements
Overview
Expected runtime conditions and forwarded child logs can use the wrong severity. This behavior obscures actionable errors and makes diagnostic bundles harder to triage.
Requirements
REQ-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001: Expected runtime log severity
Intent: Normal review and first-launch timing conditions currently look like backend failures in the logs. This obscures actionable errors and makes diagnostic bundles harder to triage.
Acceptance criteria
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.1: A
workspace.file.getrequest for a path that is absent from the current checkout returns the existingnot_foundWebSocket error code and records a debug entry. It does not record an error entry. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.2: A
workspace.file.getfailure that is not a missing-file condition keeps the existinginternal_errorresponse and error-level log entry. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.3: When initial worktree materialization runs before its task environment exists, the typed
ErrEnvironmentNotResolvedcondition records a debug entry. The physical worktree remains available and the existing launch transaction still owns persistence of its record. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.4: Other worktree persistence failures keep their existing return, cleanup, and logging behavior.
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.5: GIVEN an active session and an absent current-checkout path, WHEN
workspace.file.getrequests that path, THEN the response has thenot_founderror code and exactly one debug-level missing-file entry is emitted. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.6: GIVEN an active session and a dependency failure unrelated to a missing file, WHEN
workspace.file.getrequests a path, THEN the response has theinternal_errorerror code and an error-level entry is emitted. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.7: GIVEN a physical worktree has been materialized before its task environment row exists, WHEN worktree persistence receives
ErrEnvironmentNotResolved, THEN the call succeeds, emits a debug-level deferred-persistence entry, and does not remove the physical worktree. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.8: GIVEN worktree persistence receives any other store error, WHEN the manager handles it, THEN the existing error and cleanup behavior remains unchanged.
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.9: The launcher shall preserve a recognized child log level from Zap console records and Go
slogtext records. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.10: The launcher shall record unrecognized child stderr at warning level so that unstructured panics and tracebacks remain visible.
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.11: A missing task environment referenced by a session shall use the existing task fallback without a warning entry.
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.12: A task-environment lookup error that is not a typed not-found condition shall retain its warning entry.
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.13: GIVEN a child emits a recognized
INFOrecord, WHEN the launcher forwards stderr, THEN the parent records the line at info level. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.14: GIVEN a child emits unstructured stderr, WHEN the launcher forwards the line, THEN the parent records it at warning level.
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.15: GIVEN a session references a missing task environment, WHEN workspace information is loaded, THEN the task fallback succeeds without a warning entry.
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.16: GIVEN a task-environment lookup returns another error, WHEN workspace information is loaded, THEN the existing fallback and warning behavior remains unchanged.
- AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.17: GIVEN an open page detects a changed backend
boot_id, WHEN its recovery report is accepted, THEN the backend records one info-level reload entry. It records nofrontend error toasterror entry. - AC-PLATFORM-EXPECTED-RUNTIME-LOG-SEVERITY-001.18: GIVEN Sonner or the legacy toast provider displays an error toast, WHEN its report is accepted, THEN the backend records one
frontend error toasterror entry.
Migrated source detail
Why
Normal review and first-launch timing conditions currently look like backend failures in the logs. This obscures actionable errors and makes diagnostic bundles harder to triage.
What
- A
workspace.file.getrequest for a path that is absent from the current checkout returns the existingnot_foundWebSocket error code and records a debug entry. It does not record an error entry. - A
workspace.file.getfailure that is not a missing-file condition keeps the existinginternal_errorresponse and error-level log entry. - When initial worktree materialization runs before its task environment exists,
the typed
ErrEnvironmentNotResolvedcondition records a debug entry. The physical worktree remains available and the existing launch transaction still owns persistence of its record. - Other worktree persistence failures keep their existing return, cleanup, and logging behavior.
- Forwarded child stderr keeps recognized Zap and Go
sloglevels. Unknown stderr stays at warning level. - A missing session task environment uses the existing task fallback without a warning. Other lookup errors keep their warning.
API surface
The existing workspace.file.get WebSocket action keeps its request and
response shapes. Only the response classification for a missing current file
is made explicit as not_found; no new action or payload field is added. The
agentctl file-content endpoint carries this classification with HTTP 404 and a
typed client sentinel. Other file-content failures keep their existing error
status and message path.
Failure modes
- Missing files are expected during deleted-file review and stale diff requests. They are handled as not-found results and are not promoted to application failures.
- Permission, transport, malformed-response, and other non-missing failures remain internal errors and continue to be logged at error level.
- A worktree store that reports
ErrEnvironmentNotResolvedis a normal launch ordering condition. The manager skips that persistence attempt and does not remove the newly created physical worktree. - Any other worktree store failure remains an actual persistence failure and follows the current cleanup and retry boundary.
- The launcher accepts only anchored child log formats. Unrecognized stderr remains visible at warning level.
- A typed missing task environment is an expected stale-reference condition. The task fallback remains authoritative for workspace information.
- Other task-environment lookup errors can indicate a storage problem and remain warnings.
- A changed backend generation is an expected lifecycle condition. Its browser report remains diagnostic evidence, but it is not an error-toast report.
- Actual error toasts keep their error-level records.
Persistence guarantees
This repair changes log severity and missing-file classification only. The agentctl file-content transport now distinguishes missing files with HTTP 404; it does not change task-environment ownership, worktree creation, launch persistence, or cleanup behavior across backend restarts.
Scenarios
- GIVEN an active session and an absent current-checkout path, WHEN
workspace.file.getrequests that path, THEN the response has thenot_founderror code and exactly one debug-level missing-file entry is emitted. - GIVEN an active session and a dependency failure unrelated to a missing
file, WHEN
workspace.file.getrequests a path, THEN the response has theinternal_errorerror code and an error-level entry is emitted. - GIVEN a physical worktree has been materialized before its task
environment row exists, WHEN worktree persistence receives
ErrEnvironmentNotResolved, THEN the call succeeds, emits a debug-level deferred-persistence entry, and does not remove the physical worktree. - GIVEN worktree persistence receives any other store error, WHEN the manager handles it, THEN the existing error and cleanup behavior remains unchanged.
- GIVEN a child emits a recognized
INFOrecord, WHEN the launcher forwards stderr, THEN the parent records the line at info level. - GIVEN a child emits unstructured stderr, WHEN the launcher forwards the line, THEN the parent records it at warning level.
- GIVEN a session references a missing task environment, WHEN workspace information is loaded, THEN the task fallback succeeds without a warning entry.
- GIVEN a task-environment lookup returns another error, WHEN workspace information is loaded, THEN the existing fallback and warning behavior remains unchanged.
- GIVEN an open page detects a changed backend
boot_id, WHEN its recovery report is accepted, THEN one info entry records the event and nofrontend error toasterror entry is emitted. - GIVEN an actual error toast is displayed, WHEN its report is accepted,
THEN the existing
frontend error toasterror entry remains unchanged.
Out of scope
- Changing frontend diff rendering or review-file status behavior.
- Changing worktree ownership, task-environment transactions, cleanup policy, or startup reconciliation.
- Reclassifying integration failures, raw ACP frames, host-utility idle repair, network disconnects, or authentication warnings.
- Changing backend-restart detection, the reload-required state, or the reload alert.