Skip to content

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

Terminal window
# EPIC-008 command-center smoke only
bash .agents/tests/command-center-smoke.sh
# Default readiness gate: smoke + focused command-center tests
bash .agents/tests/run-all.sh
# Optional broad discovery gate for every existing Pester file
bash .agents/tests/run-all.sh --full

run-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

ScenarioAutomated checkExpected result
Empty workspaceostwin rooms --json with an empty temp WARROOMS_DIRJSON parses with room_count: 0; no human prose contaminates JSON stdout.
Active runFixture room-001 in developing with channel, tasks, artifact log, and stale PIDostwin room room-001 shows brief/tasks/latest messages/artifacts/log path.
Failed roomFixture room-002 in failed with QA.md and fail messageostwin room room-002 qa exposes QA evidence.
Manager triageFixture room-003 in triage and triage eventsostwin epic EPIC-003 status --json resolves to triage; timeline includes manager triage.
Inspection commandsrooms, room, epic, events, timeline, inspectHuman output is readable; JSON modes parse cleanly.
Searchostwin search smoke-sentinel --jsonJSON includes the query and bounded runtime matches.
Raw messages/logsostwin room room-001 messages --full; logs paths in room detailFull message body and log evidence remain accessible.
Controls fail closedostwin control pause --reason ... --non-interactive without --yesNon-zero exit and message explaining --yes/--reason requirement.
Audited controlspause, resume, rerun, kill with stale PID, force-transition against temp roomsCommands emit audit events and mutate only temp marker/status/PID files.
CI/plain fallbackCI=true NO_COLOR=1 ostwin run PLAN.md --dry-run --plain --non-interactiveExit 0, no ANSI, dry-run completion summary.
JSON eventsostwin run PLAN.md --dry-run --json-events --non-interactivestdout is NDJSON or empty; no human text on stdout.
Debug outputostwin run PLAN.md --dry-run --debug --non-interactiveExit 0 and remains usable for diagnostics.

Focused regression tests

The default run-all.sh invokes these focused suites when present:

AreaTest 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/ostwin available.
  • Keep a second terminal open for ostwin events --follow or direct file inspection.

Live rendering

  • ostwin run PLAN.md in 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.md removes ANSI styling; state is still understandable from text.
  • ostwin run PLAN.md --plain is linear and screen-reader friendly.
  • ostwin run PLAN.md --json-events produces NDJSON-only stdout or empty stdout for a no-event dry run; diagnostics are on stderr.
  • ostwin run PLAN.md --debug exposes diagnostics without breaking existing raw logs or JSON/script outputs.

Room inspection

  • ostwin rooms and ostwin rooms --json agree 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 --full shows full raw body content that is summarized in the default room card.
  • ostwin epic <EPIC-ID> resolves to the expected room.
  • ostwin events --last 50 and ostwin timeline --last 50 render 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 --yes and a reason.
  • ostwin control pause --reason TEXT --yes writes .paused and emits an operator.plan.pause event.
  • ostwin control resume --yes removes .paused and emits operator.plan.resume.
  • ostwin control stop --reason TEXT --yes writes .stop-requested and does not kill room processes.
  • ostwin control rerun <room-id> --reason TEXT --yes writes the rerun request marker and does not directly alter retry counters or spawn locks.
  • ostwin control kill <room-id> --role ROLE --reason TEXT --yes audits the request before PID mutation; use only stale/temp PIDs during QA.
  • ostwin control force-transition <room-id> --to STATE --reason TEXT --yes validates the target state and appends to audit.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>