User Stories¶
Domains¶
The following domains are derived from the bounded contexts identified in the architecture:
INPUT — Input Parser: reads standard input, parses minefield dimensions and rows, groups them into
Fieldstructures, and stops processing when0 0is encounteredPROC — Field Processor: computes the number of adjacent mines for every safe cell in a field
OUTPUT — Output Formatter: prints annotated fields to standard output using the required
Field #N:headers and blank-line separators
These domains directly map to the bounded contexts defined in the Building Block View (Chapter 5) and are used as the basis for story IDs and traceability.
DDD Building Blocks¶
Architecture reference: Chapter 5 Building Block View, Chapter 12 Glossary
Entities¶
None explicitly identified from the architecture — the system is stateless and processes fields in a single pass with no persistent identity
Aggregates¶
Field— aggregate root groupingrows,cols, andgrid; represents one complete minesweeper field and is the consistency boundary passed between all three pipeline components
Value Objects¶
grid(rows of./*) — immutable sequence of strings representing the raw minefield; defined by its content, not identityAnnotatedGrid(rows of digits /*) — immutable result of processing; each cell is either*or a digit character
Domain Services¶
Input Parser— stateless service that reads anistreamand produces a collection ofFieldaggregates (Chapter 5 Building Block View)Field Processor— stateless service that transforms aFieldaggregate into an annotated grid (Chapter 5 Building Block View)Output Formatter— stateless service that serialises annotated fields to anostream(Chapter 5 Building Block View)
Prioritized Story Inventory¶
Core Stories (Pareto 20%)¶
INPUT-STORY-001AS A user I WANT the program to parse one or more minefields from standard input SO THAT each field can be processed correctlyPROC-STORY-001AS A user I WANT every safe cell to be replaced with the correct adjacent mine count SO THAT the annotated minefield is correctOUTPUT-STORY-001AS A user I WANT each processed field to be printed in the required kata output format SO THAT the result matches the specification exactly
Supporting Stories (Remaining 80%)¶
INPUT-STORY-002AS A user I WANT input processing to stop when0 0is encountered SO THAT the program terminates according to the kata rulesINPUT-STORY-003AS A user I WANT multiple fields to be read sequentially from one input stream SO THAT all provided minefields are processed in one runOUTPUT-STORY-002AS A user I WANT fields to be numbered asField #1,Field #2, and so on SO THAT each output block is clearly identifiedOUTPUT-STORY-003AS A user I WANT blank lines to separate printed fields correctly SO THAT the output formatting matches the kata requirementsPROC-STORY-002AS A developer I WANT the program to compile and run reproducibly as a single C++ binary SO THAT processing logic can be verified consistently
Pareto Prioritization¶
The three core stories represent the minimal viable functionality of the Minesweeper Field Processor kata. They are chosen because:
INPUT-STORY-001— without parsing, no field can enter the pipeline; it unblocks every other storyPROC-STORY-001— the central computation; directly delivers the user-visible value of the kataOUTPUT-STORY-001— without formatted output, no result is observable; closes the pipeline end-to-end
Together they exercise all three architecture components (Input Parser, Field Processor, Output Formatter) and the full pipeline runtime flow described in Chapter 6. All supporting stories are refinements or edge cases of these three.
Progress Tracking¶
📊 Pareto Progress: 3/3 core stories (100%) 🎯 Core functionality coverage: ~80% of 80% target
Story Bundle |
Status |
|---|---|
|
✅ Approved |
|
✅ Approved |
|
✅ Approved |
|
✅ Approved |
|
✅ Approved |
|
✅ Approved |
|
✅ Approved |
|
✅ Approved |