Command Center Smoke Matrix
Use this page before releasing command-center changes. It pairs an automated fixture-based smoke script with manual live-TUI checks that require a real terminal.
Canonical commands
# EPIC-008 command-center smoke onlybash .agents/tests/command-center-smoke.sh
# Default readiness gate: smoke + focused command-center testsbash .agents/tests/run-all.sh
# Optional broad discovery gate for every existing Pester filebash .agents/tests/run-all.sh --fullrun-all.sh is macOS Bash 3.2 compatible and skips missing optional groups
instead of failing on stale paths. The command-center smoke script creates only
temporary fixtures. Set OSTWIN_KEEP_SMOKE_TMP=1 if you need to inspect the
generated war-room tree after a failure.
Automated smoke matrix
| Scenario | Automated check | Expected result |
|---|---|---|
| Empty workspace | ostwin rooms --json with an empty temp WARROOMS_DIR | JSON parses with room_count: 0; no human prose contaminates JSON stdout. |
| Active run | Fixture room-001 in developing with channel, tasks, artifact log, and stale PID | ostwin room room-001 shows brief/tasks/latest messages/artifacts/log path. |
| Failed room | Fixture room-002 in failed with QA.md and fail message | ostwin room room-002 qa exposes QA evidence. |
| Manager triage | Fixture room-003 in triage and triage events | ostwin epic EPIC-003 status --json resolves to triage; timeline includes manager triage. |
| Inspection commands | rooms, room, epic, events, timeline, inspect | Human output is readable; JSON modes parse cleanly. |
| Search | ostwin search smoke-sentinel --json | JSON includes the query and bounded runtime matches. |
| Raw messages/logs | ostwin room room-001 messages --full; logs paths in room detail | Full message body and log evidence remain accessible. |
| Controls fail closed | ostwin control pause --reason ... --non-interactive without --yes | Non-zero exit and message explaining --yes/--reason requirement. |
| Audited controls | pause, resume, rerun, kill with stale PID, force-transition against temp rooms | Commands emit audit events and mutate only temp marker/status/PID files. |
| CI/plain fallback | CI=true NO_COLOR=1 ostwin run PLAN.md --dry-run --plain --non-interactive | Exit 0, no ANSI, dry-run completion summary. |
| JSON events | ostwin run PLAN.md --dry-run --json-events --non-interactive | stdout is NDJSON or empty; no human text on stdout. |
| Debug output | ostwin run PLAN.md --dry-run --debug --non-interactive | Exit 0 and remains usable for diagnostics. |
Focused regression tests
The default run-all.sh invokes these focused suites when present:
| Area | Test path |
|---|---|
| Event stream schema/timeline | .agents/tests/lib/EventStream.Tests.ps1 |
| Runtime state and read-only inspection | .agents/tests/lib/RunState.Tests.ps1 |
| Live/plain/no-color renderer behavior | .agents/tests/lib/Console.Tests.ps1 |
| Message card/full-body rendering | .agents/tests/lib/AgentMessageRenderer.Tests.ps1 |
| Control confirmation/audit helpers | .agents/tests/lib/Control.Tests.ps1 |
| Manager pause/stop control gates | .agents/tests/roles/manager/OperatorControl.Tests.ps1 |
| Run flag filtering and output modes | .agents/tests/plan/Start-Plan.Tests.ps1 |
| Console stdout/JSON boundaries | .agents/tests/test_console_output_boundaries.py |
Manual QA checklist for live TUI and controls
Run these in a real terminal, not through redirected CI output.
Setup
- Use a disposable plan or temp workspace; do not run destructive controls against production work.
- Start from a clean shell with
pwsh,python3, and the repo-local.agents/bin/ostwinavailable. - Keep a second terminal open for
ostwin events --followor direct file inspection.
Live rendering
-
ostwin run PLAN.mdin a normal 120-column terminal shows a stable command center header, plan overview, war-room table, live agent flow, and inspect footer. - Resize to ~80 columns; lines remain bounded and key labels are still readable.
- Resize below the supported threshold or use
TERM=dumb; output falls back to plain instead of corrupting the screen. -
NO_COLOR=1 ostwin run PLAN.mdremoves ANSI styling; state is still understandable from text. -
ostwin run PLAN.md --plainis linear and screen-reader friendly. -
ostwin run PLAN.md --json-eventsproduces NDJSON-only stdout or empty stdout for a no-event dry run; diagnostics are on stderr. -
ostwin run PLAN.md --debugexposes diagnostics without breaking existing raw logs or JSON/script outputs.
Room inspection
-
ostwin roomsandostwin rooms --jsonagree on room count. -
ostwin room <room-id>lists the correct room directory, log path, brief/tasks/QA/message/artifact sections, and does not mutate file mtimes. -
ostwin room <room-id> messages --fullshows full raw body content that is summarized in the default room card. -
ostwin epic <EPIC-ID>resolves to the expected room. -
ostwin events --last 50andostwin timeline --last 50render manager triage, failed room, and operator control events when present. -
ostwin search <query>finds matches from brief, tasks, QA, channel, logs, artifact metadata, and events where fixture data contains the query.
Controls
- In non-interactive mode, risky controls fail without
--yesand a reason. -
ostwin control pause --reason TEXT --yeswrites.pausedand emits anoperator.plan.pauseevent. -
ostwin control resume --yesremoves.pausedand emitsoperator.plan.resume. -
ostwin control stop --reason TEXT --yeswrites.stop-requestedand does not kill room processes. -
ostwin control rerun <room-id> --reason TEXT --yeswrites the rerun request marker and does not directly alter retry counters or spawn locks. -
ostwin control kill <room-id> --role ROLE --reason TEXT --yesaudits the request before PID mutation; use only stale/temp PIDs during QA. -
ostwin control force-transition <room-id> --to STATE --reason TEXT --yesvalidates the target state and appends toaudit.log.
Result template
### Command Center Smoke Result- Automated: `bash .agents/tests/run-all.sh` — PASS/FAIL- Terminal: normal/no-color/plain/json/debug — PASS/FAIL- Inspection/search: rooms/room/epic/events/timeline/inspect/search — PASS/FAIL- Controls: non-interactive fail-closed + audited temp controls — PASS/FAIL- Notes: <screenshots/log paths/gaps>