Skip to content

feat(council): live observability — status --watch + tail#13

Merged
ExtraToast merged 21 commits into
mainfrom
feat/council-status-watch
Jul 3, 2026
Merged

feat(council): live observability — status --watch + tail#13
ExtraToast merged 21 commits into
mainfrom
feat/council-status-watch

Conversation

@ExtraToast

Copy link
Copy Markdown
Contributor

Adds live, glanceable observability for in-flight runs, built on the durable events the native executor emits — retiring "1 shell running" opacity. 10-task all-codex fanout, 100% line/stmt/func coverage (576 tests), all gates green.

  • RunView projection (pure): folds event stream + supervisor snapshots + DAG into per-task {state, attempt, restarts, tier, detection, duration, wave} + run rollups.
  • council status --watch: polls a run dir, re-projects, renders a compact live table (states, durations, active detections, wave grouping); --json/--once.
  • council tail <task>: follows a worker log from a byte offset with bounded buffer + --since/--lines.
  • Event-driven freshness (event log → supervisor.json fallback → graceful partial degrade); CLI + doctor/self-test/render parity + manifest validation.

All gates green: tsc, eslint (0 warn), dependency-cruiser, vitest 100%, render --check, manifest validate, self-test.

ExtraToast added 21 commits July 3, 2026 21:57
Add a pure tail domain for selecting log bytes and formatting task log output from deterministic inputs: stream, byte offset, bounded buffer size, `--lines`, `--since`, truncation/rotation handling, and follow cursor advancement.
Extend the existing status workflow domain with a pure `projectRunView` function that folds `RunSummary` tasks/waves, runstore lifecycle events, optional supervisor snapshots, worker results, and an injected clock into a deterministic `RunView`. The view must include per-task state, attempt, restarts, model tier, last detection, started/updated timestamps, duration, wave, dependency satisfaction, and run rollups for counts by state, ready set, critical path, and elapsed time.
Close the lifecycle event metadata gap by adding backward-compatible optional output timestamps and log paths to `WorkerOutputPayload`, codec validation, worker trace projection, composition event mapping, and RunView freshness handling.
Build pure renderers for `RunView`: compact human table with deterministic badges/colors, wave grouping, durations, active detections, rollups, and a stable JSON snapshot formatter for machine output.
Add a thin filesystem adapter/port for live status inputs that loads a run directory's normalized summary, durable events, worker supervisor snapshots, and worker results while treating missing optional files as partial data instead of fatal errors.
Implement a thin live status workflow that uses the live run artifact reader, `projectRunView`, and status renderers to support one-shot JSON/table snapshots and watch polling through an injected ticker.
Implement a thin tail workflow that resolves a task log from live run artifacts/result/snapshot/event metadata, reads bytes through an injected log reader, applies the pure tail domain, and supports follow mode through an injected ticker.
Wire live status into `CouncilApp` and `cli/index.ts`: preserve existing `app.status` summary behavior, add an app live-status method, parse `council status --run <dir> --json|--once|--watch [--interval-ms N]`, and route outputs through the status watch workflow.
Wire `council tail <task>` into `CouncilApp` and `cli/index.ts` using the tail follow workflow, removing only the tail placeholder while preserving other unimplemented command placeholders.
Update parity, self-test, render doctor, and manifest validation surfaces so the implemented `status` and `tail` commands are treated as real council command surface, not placeholders.
@ExtraToast ExtraToast merged commit 80a4a88 into main Jul 3, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant