# Product Backlog Index of all epics, ordered by priority (top = highest priority). Each epic is its own file under `backlog/epics/`. | Order | Epic | File | Status | |---|---|---|---| | 1 | End-to-End Text Rendering Slice | `epics/01_end_to_end_text_rendering_slice.md` | In Progress (2 of 3 stories Done — Sprint 1) | | 2 | Template Designer GUI Foundation | `epics/02_template_designer_gui_foundation.md` | In Progress (4 of 6 stories Done — 2 new Ready stories added 2026-09-22) | | 3 | CSV Integration and Field Mapping | `epics/03_csv_integration_and_field_mapping.md` | In Progress (3 of 4 stories Done — Sprint 3) | | 4 | CLI Rendering Engine and Debenu Integration | `epics/05_cli_rendering_engine_and_debenu_integration.md` | In Progress (5 of 7 stories Done — Sprint 1-3) | | 5 | Live Preview and Record Navigation | `epics/04_live_preview_and_record_navigation.md` | Ready | | 6 | Layout Efficiency and Operator Tooling | `epics/06_layout_efficiency_and_operator_tooling.md` | Not Started | | 7 | Dynamic and Network Image Handling | `epics/07_dynamic_and_network_image_handling.md` | Not Started | ## Notes - Prioritization favors the requirements document's recommended vertical slicing: deliver a text-only end-to-end workflow first, then layer images, shapes, and operator-efficiency tooling. - The CLI/rendering epic now sits ahead of preview in the ordered backlog because it is a direct dependency for the first demonstrable PDF-generating slice. - The top five epics now contain sprint-ready stories for the first one to two sprints of MVP work. - Open requirement questions that may affect ordering: path strategy for template assets and timeout behavior for slow UNC shares. ### Sprint 1 Review outcome (2026-09-11) - Sprint 1's 5 committed stories are Done; verification detail and any caveats are recorded story-by-story in `backlog/epics/01_end_to_end_text_rendering_slice.md` and `backlog/epics/05_cli_rendering_engine_and_debenu_integration.md`. Full summary: `backlog/sprints/sprint-1.md` (Sprint Review Outcome section). - Recommend pulling "Time-box the first high-volume benchmark" (`epics/05`, 5 points, Ready) early in Sprint 2 refinement/planning alongside whatever else is pulled from epics 2-3 — it's a cheap, high-information risk check that's now overdue (not re-run since Sprint 1 Batch 2) rather than a reason to reorder the epic list itself. - New stories added from this review: "Harden production configuration delivery for CLI runtime settings" (`epics/05`) and "Surface real warning counts in progress and completion reporting" (`epics/07`). Neither is urgent for Sprint 2's likely candidates (epics 2-3 touch neither CLI configuration nor warnings). - The two open impediments (template asset path strategy; UNC timeout/retry behavior, both in `logs/impediment_log.md`) do **not** block Sprint 2's likely candidate epics (2 and 3) — neither of those epics' stories touch images or network asset paths. They only need to be resolved before epic 7 (Dynamic and Network Image Handling) stories are pulled into a sprint; recommend deciding them during backlog refinement once epic 7 nears the top of the backlog, per "delay firm decisions to the last responsible moment," rather than treating them as urgent now. ### Sprint 2 Review outcome (2026-09-18) - Sprint 2's 5 committed stories (the full Template Designer GUI Foundation epic plus the high-volume benchmark spike, 19 points) are Done; verification detail is recorded story-by-story in `backlog/epics/02_template_designer_gui_foundation.md` and `backlog/epics/05_cli_rendering_engine_and_debenu_integration.md`. Full summary: `backlog/sprints/sprint-2.md` (Sprint Review Outcome section). - **Material finding, not a defect in this sprint's delivery:** the benchmark spike found the render path badly misses the product's "100,000 records at 300 DPI in under 10 minutes" hard constraint — throughput degrades from ~399 rec/s to ~15 rec/s and falling at realistic scale, projecting 45-90+ minutes for a full 100k run (5x-10x+ over target), most likely due to Debenu Quick PDF Library 10.13's own document model rather than this repo's code. Full data: `code/BENCHMARK.md`. **Strong recommendation: prioritize the new "Investigate and address high-volume render throughput degradation" story (`epics/05`, Ready, not yet sized) at or near the top of Sprint 3**, ahead of or alongside CSV Integration — this is a High-impact item that directly threatens a hard product constraint (`project_config.md`) and gets worse, not better, the longer higher-volume-dependent feature work (CSV integration at scale, eventual 1M-record ceiling) is built on top of an unfixed render path. - The stretch item ("Load CSV headers and sample rows into the desktop app," epic 3) was not pulled in Sprint 2; it remains the natural first CSV Integration story for Sprint 3. - No changes to the two open impediments (template path strategy; UNC timeout/retry) — still non-blocking for Sprint 3's likely candidates (CSV Integration and the throughput investigation touch neither template image paths nor network shares). ### Sprint 3 planning outcome (2026-09-21) - `scrum-master` facilitated with `dev-team` sizing; committed 18 points against a 19-20 point velocity range: the throughput-degradation story (newly sized at 8 points — see `backlog/epics/05_cli_rendering_engine_and_debenu_integration.md`), then "Load CSV headers and sample rows," "Create a dynamic text token from a CSV column," and "Re-map an existing dynamic field" (epic 3, in backlog order). Full plan: `backlog/sprints/sprint-3.md`. - Not committed (capacity discipline): "Collapse blank optional address lines consistently" (5 pts, would overcommit) and "Harden production configuration delivery for CLI runtime settings" (2 pts, not urgent) — both clean pulls for Sprint 4. ### Sprint 3 Review outcome (2026-09-22) - All 4 committed Sprint 3 stories (18/18 points) are Done; each is verified against its acceptance criteria with real, non-simulated evidence, recorded story-by-story in `backlog/epics/05_cli_rendering_engine_and_debenu_integration.md` (throughput story) and `backlog/epics/03_csv_integration_and_field_mapping.md` (the CSV Integration chain). Full daily detail: `backlog/sprints/sprint-3.md`. - **Sprint goal met in full.** The throughput risk carried in from Sprint 2 review is closed with a confirmed root cause (Debenu's internal document model) and a measured mitigation (batch+merge) — the 100k-record benchmark now completes in 315s, ~47.5% under the 10-minute target, a real completed run rather than an extrapolation. The first slice of CSV field mapping is delivered end-to-end and live-verified against the real built `.exe`: load headers, bind a dynamic field, rebind it, with the mapping honored on the next CLI render. - **One new open technical-debt item carried forward, not a defect in this sprint's delivery:** the throughput mitigation's per-batch font re-embedding cost extrapolates to ~4.5-5 GB in output file size at the product's stated 1,000,000-record ceiling, over the 2 GB constraint (`logs/technical_debt_log.md`, 2026-09-21 entry). No committed story renders anywhere near that scale, so this does not block Sprint 3 or any currently-planned Sprint 4 work, but it should be picked up and resolved before any future story commits to rendering near the 1,000,000-record ceiling — two candidate fixes (count-aware batch sizing; subsetted rather than fully-embedded fonts per batch) are already noted in the debt log. - "Collapse blank optional address lines consistently" (epic 3, 5 points, Ready) is now unblocked — its dependency ("Create a dynamic text token from a CSV column") is Done — and is a clean, natural pull for Sprint 4 alongside "Harden production configuration delivery for CLI runtime settings" (epic 5, 2 points, Ready), both already identified as deliberately-deferred-not-dropped at Sprint 3 planning. - No changes to the two open impediments (template asset path strategy; UNC timeout/retry behavior, both in `logs/impediment_log.md`) — still non-blocking for the Sprint 4 candidates named above. ### New feature added during backlog refinement (2026-09-22) - User requested the ability to rotate text/dynamic field elements at an arbitrary angle. `product-owner` clarified scope directly with the user (angle range, UI interaction, pivot point) before writing the story, then split it into two dependent stories in `epics/02_template_designer_gui_foundation.md` (previously fully Done, now reopened): "Set a rotation angle for text and dynamic field elements" (properties-panel numeric entry, persistence, and render-side rotation about the bounding-box center — 8 points) and "Rotate elements by dragging a handle on the canvas" (interactive drag handle, depends on the first story — 5 points). `dev-team` sized both against real code inspection, confirming the vendor Debenu API (`DrawRotatedText`, `GetTextWidth`/`GetTextAscent`/`GetTextDescent`) supports the underlying capability but has no "rotate about center" primitive, so the center-pivot math is genuine new work, not a pass-through. Both pass the Definition of Ready; recommend against splitting further. - **Placement recommendation (product-owner, not yet ordered into a sprint):** slot these two stories immediately after the two items already flagged as clean Sprint 4 carryover from Sprint 3 planning — "Collapse blank optional address lines consistently" (epic 3, 5 pts) and "Harden production configuration delivery for CLI runtime settings" (epic 5, 2 pts) — rather than ahead of them, since neither carryover item depends on rotation and both were already committed-to in spirit at Sprint 3 planning. Note for Sprint 4 planning: those two carryover items (7 pts) plus both rotation stories (13 pts) sum to exactly 20 points, matching the top of this team's 19-20 point velocity range — scrum-master/dev-team should treat that as a ceiling-level coincidence to watch, not a target to hit, and should still leave normal grooming buffer per `AGENTS.md`'s guidance. This ordering is a recommendation only; the human product owner can reprioritize the rotation stories ahead of the carryover items if rotation is more urgent than sequencing suggests.