Story
As an operator,
I want to receive the final position and heading of every rover after all commands have run,
so that I know where each rover ended up.
Architecture Reference: 05-building-blocks.md — OutputFormatter adapter; 01-introduction.md — FR-5; 03-context.md — System → Operator interface (stdout)
Backend Sub-Story
Story ID: CLI-BE-002.1
As a developer I want a thin OutputFormatter adapter so that rover state serialisation is isolated from domain logic and easily testable.
Architecture Reference: 05-building-blocks.md — OutputFormatter; 04-solution-strategy.md — Hexagonal architecture (adapter layer)
Scenarios:
Frontend Sub-Story
Story ID: CLI-FE-002.1
As an operator I want to read rover positions from stdout so that I can capture or redirect the output in shell scripts.
Architecture Reference: 03-context.md — System → Operator interface; 07-deployment.md — single-process CLI
Scenarios:
SCENARIO 1: Output is readable from terminal or shell redirection
Scenario ID: CLI-FE-002.1-S1
GIVEN
WHEN
THEN
The output is plain text on stdout — one line per rover. No UI component required.
Infrastructure Sub-Story
Story ID: CLI-INFRA-002.1
As a developer I want the output formatting functionality to be containerized and testable so that rover position reporting works consistently across environments.
Architecture Reference: 07-deployment.md — deployment topology; 01-introduction.md — FR-5
SCENARIO 2: Container handles missing or invalid rover data gracefully
Scenario ID: CLI-INFRA-002.1-S2
GIVEN
WHEN
THEN
Error is logged to stderr with descriptive message
Container exits with non-zero exit code
No partial or invalid output is produced