36 lines
2.1 KiB
Markdown
36 lines
2.1 KiB
Markdown
# Diagnostics
|
|
|
|
## Insight run sweeper (`[insight-sweeper]`)
|
|
|
|
The dashboard insight router runs stale-run recovery sweeps for `project_insight_runs` rows stuck in `pending`/`running` without a live controller owner.
|
|
|
|
- Recovery writes `terminalCause: "orphaned_active_run_recovered"` and lifecycle failure metadata (`failureClass: "non_retryable"`, `retryable: false`).
|
|
- Recovery appends both `warning` and `status_changed` events on `project_insight_run_events` with `metadata.recovery = "orphaned_active_run"`.
|
|
- `metadata.recoverySource` indicates where recovery occurred: `startup`, `periodic`, `drive_by`, or `manual`.
|
|
|
|
## Dependency-blocked Todo backlog health (`[dependency-blocked-todo]`)
|
|
|
|
Self-healing now runs `surface-dependency-blocked-todos` during both startup recovery and periodic maintenance.
|
|
|
|
- Normal path emits a workflow insight titled `Backlog health: dependency-blocked todos YYYY-MM-DD`.
|
|
- Fallback path (insight store unavailable) writes a per-task log entry prefixed with `[dependency-blocked-todo]` against the top blocker task.
|
|
- Reporter summary warnings include group count, total blocked Todo count, and top blocker IDs.
|
|
|
|
Operator interpretation:
|
|
- `ageBucket: "fresh"` → expected dependency queueing.
|
|
- `ageBucket: "aging"` → review blocker progress.
|
|
- `ageBucket: "stale"` → emerging stall; escalate/unblock blocker.
|
|
|
|
## Self-healing surfacing passes (`[self-healing]`)
|
|
|
|
- `surface-in-review-stalls`
|
|
- Log prefix: `In-review stall surfaced [`
|
|
- Purpose: reason-driven in-review stall detector (`merge-blocker`, retry exhaustion, no-worktree, transient merge-status orphaning).
|
|
- `surface-in-review-stalled`
|
|
- Log prefix: `In-review stalled surfaced [in-review-stalled]: quiet ...`
|
|
- Purpose: time-quiet detector for unpaused in-review tasks beyond `inReviewStalledThresholdMs`.
|
|
- Non-overlap: skipped when reason-driven `In-review stall surfaced [` is fresh, and skipped for paused tasks (owned by stale-paused-review).
|
|
- `surface-stale-paused-reviews`
|
|
- Log prefix: `Stale paused review surfaced [stale-paused-review]: paused ...`
|
|
- Purpose: paused in-review backlog-health detector gated by `stalePausedReviewThresholdMs`.
|