Kaynağa Gözat

Close out Sprint 1: Review and Retrospective

Sprint Review (product-owner): verified all 5 committed stories against
acceptance criteria (goal met, two tracked caveats), updated the backlog
with verification notes and two new follow-up stories, and flagged a
process-improvement item.

Sprint Retrospective (scrum-master): named team-level strengths to keep
(dependency-ordered batch swarming; leave-it-better-than-you-found-it
and honest gap reporting), checked for anti-patterns (none found beyond
one named near-miss), and proposed a Definition of Done edit requiring
verification against the actual built artifact for any story that
changes launch/packaging/config-resolution behavior — directly
addressing how the license-key bug reached "Done" undetected.

User approved the proposed edit; applied to
templates/definition_of_done.md and marked Applied in
logs/process_improvement_log.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
master
Daniel Covington 1 hafta önce
ebeveyn
işleme
7a5cec2611
9 değiştirilmiş dosya ile 165 ekleme ve 11 silme
  1. +8
    -2
      backlog/backlog.md
  2. +7
    -2
      backlog/epics/01_end_to_end_text_rendering_slice.md
  3. +30
    -3
      backlog/epics/05_cli_rendering_engine_and_debenu_integration.md
  4. +14
    -0
      backlog/epics/07_dynamic_and_network_image_handling.md
  5. +74
    -0
      backlog/sprints/sprint-1-retrospective.md
  6. +20
    -0
      backlog/sprints/sprint-1.md
  7. +1
    -0
      logs/process_improvement_log.md
  8. +10
    -4
      state.md
  9. +1
    -0
      templates/definition_of_done.md

+ 8
- 2
backlog/backlog.md Dosyayı Görüntüle

@@ -4,10 +4,10 @@ Index of all epics, ordered by priority (top = highest priority). Each epic is i

| Order | Epic | File | Status |
|---|---|---|---|
| 1 | End-to-End Text Rendering Slice | `epics/01_end_to_end_text_rendering_slice.md` | Ready |
| 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` | Ready |
| 3 | CSV Integration and Field Mapping | `epics/03_csv_integration_and_field_mapping.md` | Ready |
| 4 | CLI Rendering Engine and Debenu Integration | `epics/05_cli_rendering_engine_and_debenu_integration.md` | Ready |
| 4 | CLI Rendering Engine and Debenu Integration | `epics/05_cli_rendering_engine_and_debenu_integration.md` | In Progress (3 of 5 stories Done — Sprint 1) |
| 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 |
@@ -17,3 +17,9 @@ Index of all epics, ordered by priority (top = highest priority). Each epic is i
- 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.

+ 7
- 2
backlog/epics/01_end_to_end_text_rendering_slice.md Dosyayı Görüntüle

@@ -4,7 +4,9 @@

## Stories

### Launch a text-only render from the desktop app - Status: Ready
### Launch a text-only render from the desktop app - Status: Done
**Sprint Review verification (Sprint 1, 2026-09-11):** All 4 acceptance criteria are literally about launch mechanics (collecting inputs, validating them, launching the CLI process, surfacing launch failures) and are met — WinForms shell with three pickers, background-thread launch, launch-failure surfaced via status text and message box, 27 new tests. Conditional caveat: the "actually built and ran the GUI end-to-end" verification for this story used an in-process/dev-shell environment, not the actual built `.exe` launched the way an operator would (no ambient environment variables). That gap is exactly what let the Debenu error-999 license-key bug through undetected past this story and the next, even though it's outside this story's literal AC (this story doesn't test render success/failure, only launch). Treat this story's Done status as valid for its literal scope, but note the verification method itself had a blind spot — see the same-day fix in `logs/technical_debt_log.md` (2026-09-04 entry), which re-verified the real desktop-to-CLI launch path against the actual built `.exe` and closed the gap.

**Card**
As a **print operator**, I want to start a text-only PDF job from the desktop app, so that I can produce a usable envelope run without developer help.

@@ -22,7 +24,10 @@ As a **print operator**, I want to start a text-only PDF job from the desktop ap
**Estimate:** 3 points
**Dependencies:** None

### Show render progress and completion summary - Status: Ready
### Show render progress and completion summary - Status: Done (accepted with a known, tracked gap)
**Sprint Review verification (Sprint 1, 2026-09-11):** The first two acceptance criteria (progress updates displayed while running, at least once/sec) are fully met and well-verified against a live process. The third criterion — "on success, the desktop app shows total records, total pages, elapsed time, and warning count" — is only **partially** met: the summary shows records rendered and elapsed time, but no separately-labeled "total pages" field (in this text-only template model one record always produces one page, so the numbers coincide even though the field itself isn't shown) and, per the story's own investigation, no warning count at all, because no warning concept exists anywhere in the product yet — this was reported as a real, deliberate gap rather than fabricated, which is the right call, but it means this acceptance criterion is not literally satisfied as written. The fourth criterion (failure outcome shown without freezing the UI) is met. Additionally, the evidence for this story is real but thinner than ideal: verification was two real runs (success and forced-failure) described in prose by dev-team, with no screenshot or independently-run artifact, and — per the note under "Launch a text-only render from the desktop app" above — the original verification also did not use the actual built `.exe`; that gap was closed by the same-day license-key fix, which did verify the real success path (392/392 pages, exit 0) against the built app.
**Product Owner decision:** Accept this story as Done given the deliberate, documented reasoning for the warning-count gap and the fact that the underlying desktop-launch path has since been verified for real. Do not reopen this story. Instead, a new follow-up story ("Surface real warning counts in progress and completion reporting," `backlog/epics/07_dynamic_and_network_image_handling.md`) tracks closing the warning-count gap once the product has a real warning concept to report.

**Card**
As a **print operator**, I want to see render progress and completion details, so that I know whether the job succeeded and how long it took.



+ 30
- 3
backlog/epics/05_cli_rendering_engine_and_debenu_integration.md Dosyayı Görüntüle

@@ -4,7 +4,9 @@

## Stories

### Define the CLI render contract - Status: Ready
### Define the CLI render contract - Status: Done
**Sprint Review verification (Sprint 1, 2026-09-11):** All 4 acceptance criteria met and well-verified — 15 passing xUnit tests plus documented manual smoke examples covering both valid and invalid/missing local and UNC argument cases; contract documented in `code/CLI_CONTRACT.md`. No caveats; this is a self-contained, low-risk story and the evidence is convincing.

**Card**
As a **system integrator**, I want a stable CLI contract for template, CSV, and output paths, so that the desktop app can launch renders consistently.

@@ -22,7 +24,9 @@ As a **system integrator**, I want a stable CLI contract for template, CSV, and
**Estimate:** 3 points
**Dependencies:** None

### Emit machine-readable progress during render - Status: Ready
### Emit machine-readable progress during render - Status: Done
**Sprint Review verification (Sprint 1, 2026-09-11):** All 4 acceptance criteria met. The `PROGRESS <kind> elapsedMs=<n> completed=<n> [reason=...]` format is record-based rather than percent-based, which satisfies the AC's "percent **or** record-based" wording. Throttling (>=1/sec) and failure-event behavior (supplementing, not replacing, stderr `ERROR:` output and exit codes) were verified live against the real 392-row sample CSV, 47/47 tests passing. One open caveat carried forward, not an AC failure but a release-quality gap: the 100k-record/300 DPI benchmark was not re-run for this story (judged negligible regression risk at the time) and still has not been re-run since Batch 2 as of this review — see the "Time-box the first high-volume benchmark" story below, which should be prioritized early next sprint to close this out before more work lands on the render hot path.

**Card**
As a **system integrator**, I want machine-readable progress updates from the CLI, so that the desktop app can present accurate job status to the operator.

@@ -40,7 +44,9 @@ As a **system integrator**, I want machine-readable progress updates from the CL
**Estimate:** 3 points
**Dependencies:** Depends on the CLI render contract story

### Render text-only PDFs through Debenu Quick PDF - Status: Ready
### Render text-only PDFs through Debenu Quick PDF - Status: Done
**Sprint Review verification (Sprint 1, 2026-09-11):** All 4 acceptance criteria met and convincingly demonstrated: verified end-to-end against the real 392-row sample CSV producing exact `%PDF-1.4`, 392/392 pages, correct #10 envelope dimensions via `SetPageDimensions` (also caught and fixed a real spurious-blank-leading-page bug along the way). This story's own scope is the CLI/render engine, not the desktop launch path, so verifying via a direct CLI invocation (env var set in the invoking shell) is the right verification method for this story and is not affected by the later license-key/desktop-launch gap described under "Launch a text-only render from the desktop app" in `backlog/epics/01_end_to_end_text_rendering_slice.md`. No caveats for this story specifically.

**Card**
As a **print operator**, I want the system to generate print-ready PDFs using the required library, so that the output works with production machines.

@@ -59,6 +65,8 @@ As a **print operator**, I want the system to generate print-ready PDFs using th
**Dependencies:** Depends on the CLI contract story

### Time-box the first high-volume benchmark - Status: Ready
**Sprint Review note (2026-09-11):** Recommend pulling this early in Sprint 2 refinement/planning rather than leaving it at its current backlog position. It hasn't been re-run since Batch 2 of Sprint 1, and the render path has since gained a progress-reporting hook (Batch 3) and a license-key resolution step (post-sprint fix) — both judged low-risk at the time, but neither has been confirmed against this story's actual 100k/300 DPI target. This is a cheap, high-information risk-reduction check and should not be allowed to keep sliding.

**Card**
As a **development team**, I want an early benchmark of the text-only render path, so that we can reduce performance risk before committing to broader feature scope.

@@ -75,3 +83,22 @@ As a **development team**, I want an early benchmark of the text-only render pat

**Estimate:** 5 points
**Dependencies:** Depends on rendering text-only PDFs through Debenu

### Harden production configuration delivery for CLI runtime settings - Status: Ready
**Card**
As a **system integrator**, I want a deliberate, documented configuration strategy for CLI runtime settings (starting with the Debenu license key), so that desktop-launched and other non-shell invocations of the CLI don't silently fail the way the Sprint 1 license-key gap did.

**Conversation notes**
- Follow-up from a Sprint 1 review finding: the CLI originally read `DEBENU_LICENSE_KEY` only from the process environment, which a double-clicked desktop app never has. `DebenuLicenseKeyResolver` (env var, then `key.txt` walked up from the executable's own directory) was already added and verified as a same-day fix against the real built `.exe` — see `logs/technical_debt_log.md` (2026-09-04 entry) — so this story is not about fixing a live bug, it's about deciding whether that fallback is the accepted long-term production answer.
- Open question for the product owner/team: is a plaintext `key.txt` next to the executable acceptable for however this product is packaged and distributed, or does it need a different mechanism (installer-provided config, per-machine settings file, secure storage) before wider rollout?
- Decide whether the same mechanism should generalize to future CLI configuration values, or stay license-key-specific.
- Not urgent for Sprint 2's likely candidate work (template designer, CSV integration touch neither the CLI nor packaging), but should be resolved before any release/packaging story is taken on.

**Confirmation (Acceptance Criteria)**
- [ ] The product owner and team have explicitly decided whether the `key.txt`-adjacent-to-executable mechanism is the accepted production approach, or replaced it with an alternative.
- [ ] The decision and its rationale are documented in `code/CLI_CONTRACT.md` and/or `project_config.md`.
- [ ] If the mechanism changes, `DebenuLicenseKeyResolver` and its tests are updated to match; if it is kept as-is, no code change is required beyond documenting the decision.
- [ ] Any future packaging/installer story references this decision rather than reopening the question.

**Estimate:** 2 points
**Dependencies:** None

+ 14
- 0
backlog/epics/07_dynamic_and_network_image_handling.md Dosyayı Görüntüle

@@ -33,3 +33,17 @@ As a **print operator**, I want predictable handling for slow or broken network
- [ ] Operator-facing warnings are clear enough to recover without developer help.

**Estimate:** M

### Surface real warning counts in progress and completion reporting - Status: Not Started
**Added at Sprint 1 Review (2026-09-11):** follow-up to a known, accepted gap in "Show render progress and completion summary" (`backlog/epics/01_end_to_end_text_rendering_slice.md`) — that story's completion summary omits a warning count because no warning concept exists anywhere in the product yet. This story closes that gap once this epic's missing-image/placeholder warnings exist to report.

As a **print operator**, I want the render completion summary to show an accurate warning count, so that I know about non-blocking issues like missing images without them being silently dropped.

**Acceptance criteria**
- [ ] The CLI's progress/completion event format is extended to carry a real warning count once the render pipeline can produce warnings (e.g. missing-image placeholders from this epic's other stories).
- [ ] The desktop completion summary displays that warning count instead of omitting it.
- [ ] When zero warnings occur, the count is shown as `0`, not omitted.
- [ ] The "Show render progress and completion summary" story's outstanding acceptance gap is explicitly closed by this change.

**Estimate:** S
**Dependencies:** Depends on this epic's missing-image/placeholder warning stories existing first.

+ 74
- 0
backlog/sprints/sprint-1-retrospective.md Dosyayı Görüntüle

@@ -0,0 +1,74 @@
# Sprint Retrospective

**Sprint:** 1
**Date:** 2026-09-11
**Facilitated by:** `scrum-master`, per `process/05_sprint_retrospective.md`
**Inputs used:** `backlog/sprints/sprint-1.md` (Daily Scrum Log + Sprint Review Outcome), `logs/technical_debt_log.md`, `logs/impediment_log.md`, `logs/process_improvement_log.md`. No live human team to poll in real time this sprint; subjective signals are synthesized from dev-team's own daily-scrum notes and self-reported gaps rather than invented.

## Signals

**Objective:**
- 5/5 committed stories Done, all acceptance tasks checked off; sprint goal assessed "met" at Sprint Review (`backlog/sprints/sprint-1.md`, Sprint Review Outcome).
- Test suite grew from 15 -> 47 -> 74 -> 106 across the sprint's batches, plus 5 more (111 total) added the same day for the post-review license-key fix.
- 1 impediment resolved same-day (Debenu license key access); 2 impediments still open (template asset path strategy, UNC timeout/retry), both assessed by product-owner as non-blocking for Sprint 2's likely candidate epics (2 and 3).
- 3 technical debt items logged: 1 deliberate/paid down same-day (exit code 64 placeholder), 1 unavoidable/resolved one batch later exactly as planned (double-launch guard), 1 unintentional/high-impact/resolved same day post-review (license key resolution — Debenu error 999).
- 1 process-improvement item logged by product-owner (2026-09-11, DoD verification-gap), carried into this retrospective for a decision.

**Subjective (from dev-team's daily-scrum notes):**
- Consistent pattern of finishing a batch, then immediately pulling the next in dependency order, all within a single day.
- Two instances of proactively fixing a bug found while working on an adjacent story rather than deferring it (spurious blank first page in Batch 2; double-launch guard flagged in Batch 4, closed in Batch 5).
- Consistent honesty about gaps rather than papering over them: the "no warning concept exists" finding was reported as a real gap instead of fabricating a counter; the unrun 100k-record benchmark was flagged explicitly in the daily log rather than silently skipped; the thin GUI verification evidence was named explicitly at Sprint Review rather than presented as equivalent to the CLI's much stronger evidence.

## What went well
- The dependency-ordered "Execution Order" batch table (sprint-1.md) let the team swarm one batch at a time, fully completing each vertical slice (design + build + test + verify) before pulling the next, with zero stories split across batches.
- "Leave it better than you found it": two real bugs were caught and fixed inline rather than logged and deferred — the Debenu default-first-page bug (Batch 2) and the Render-button double-launch gap (flagged in Batch 4, resolved in Batch 5 exactly as planned when that story's scope allowed it).
- Honest self-reporting of gaps (missing warning concept, unrun benchmark, thin GUI evidence) at the time they occurred, not discovered later — this is precisely what allowed product-owner's Sprint Review to catch and log the DoD gap instead of it going unnoticed.
- Open impediments and technical debt were tracked with clear status/resolution the whole sprint, not left ambiguous.

## What didn't go well
- A core happy-path bug (license key resolution for the desktop-launched CLI, Debenu error 999) reached "Done" on two stories and let `state.md` advance to Phase 4, because DoD verification for those GUI-launching stories used an in-process/dev-shell test harness rather than the actual built `.exe` an operator would run. It was only caught the same day via a real user report, not by the sprint's own verification step.
- The 100k-record/300 DPI release-quality benchmark was not re-verified after Batch 2, despite two later batches (3 and 5) touching the render/progress hot path. Self-flagged each time, but never re-run before Sprint Review.
- The sole GUI-facing acceptance evidence (Batch 5's completion-summary display) was thin — a prose description of a manual click-through, no screenshot or automated UI check — accepted by product-owner as adequate for this sprint's small surface area, but named as worth tightening.

## Patterns / Insights (prioritized)
1. **(Kit-level — decided below)** The DoD's "runnable in the current local development setup" bar doesn't distinguish "runs under a dev harness" from "runs as the actual shipped artifact the target user launches" — this is the direct, root cause of the license-key bug reaching Done undetected.
2. **(Team-level)** Dependency-ordered batch sequencing + swarming one batch fully before pulling the next is a genuine strength — worth reusing as the default planning pattern, not a one-off.
3. **(Team-level)** "Leave it better than you found it" plus honest gap self-reporting are cultural strengths that directly produced this retrospective's best signal (the DoD gap was visible at all only because the team reported it) — worth explicitly naming so they're preserved, not assumed to continue automatically.
4. **(Team-level, lower priority)** Hot-path-affecting stories should re-trigger relevant release-quality checks (e.g., the benchmark) rather than let them go stale silently across batches within the same sprint.

## Kit-level decision: DoD / verification-gap item (`logs/process_improvement_log.md`, 2026-09-11 row)

**Decision: propose a specific, minimal edit to `templates/definition_of_done.md`.** This meets `AGENTS.md`'s and `process/07_process_improvement.md`'s bar for a kit edit on a single occurrence — not because it recurred (it hasn't, yet), but because this one occurrence was severe: it let a Done story's core happy path silently fail for the actual target user (an operator double-clicking the shipped `.exe`), passed DoD sign-off on two stories, and let `state.md` advance to Phase 4 before a same-day real-user report caught it — the sprint's own verification process did not.

**Proposed edit (not applied — requires the user's explicit go-ahead per `AGENTS.md`'s Process Self-Improvement section and `process/07_process_improvement.md` step 5):**

File: `templates/definition_of_done.md`
Insert immediately after the existing line `- [ ] The change is implemented in working software under \`code/\` and is runnable in the current local development setup.`:

```
- [ ] If the story changes how the product is launched, packaged, or resolves runtime configuration (e.g., a new desktop entry point, a new child-process launch, a new license/config resolution path), verification includes running the actual built artifact the way the target user would run it — not only an in-process test harness or a dev-shell invocation such as `dotnet run`.
```

Kept deliberately narrow: it only fires for stories that change launch/packaging/config-resolution behavior (exactly the class of story that let this bug through), not every story — no blanket new burden on unrelated work.

This has been recorded in `logs/process_improvement_log.md` (Status updated to "Proposed" with this exact wording referenced). The scrum-master has **not** edited `templates/definition_of_done.md` itself.

## Action Items (added to Sprint 2's plan)
- [ ] Reuse the dependency-ordered "Execution Order" batch table as the default planning pattern for Sprint 2's committed stories — owner: dev-team (facilitated by scrum-master) — due: Sprint 2 planning.
- [ ] Until/unless the DoD template edit above is approved and applied, treat it as a working practice now: any Sprint 2 story that changes how the product is launched, packaged, or resolves runtime configuration must include an explicit task/acceptance step verifying against the actual built artifact, not only a dev harness — owner: dev-team — due: whenever such a story is pulled in Sprint 2.
- [ ] Pull "Time-box the first high-volume benchmark" early in Sprint 2 refinement (already flagged by product-owner at Sprint Review) and treat any later batch touching the render/progress hot path as a trigger to re-run it before marking that batch Done — owner: dev-team — due: Sprint 2.
- [ ] Explicitly continue the "leave it better than you found it" and honest-gap-reporting habits — no process change needed, just named as an expectation carried forward — owner: dev-team — due: ongoing.

## Deferred / lower-priority ideas (kept, not discarded)
- Strengthen GUI-facing verification evidence (e.g., a screenshot or a scripted UI check) instead of prose-only descriptions — folded into the DoD-adjacent action item above rather than made a separate Sprint 2 action; revisit if thin GUI evidence causes a problem again.
- Whether `templates/definition_of_done.md`'s release-quality benchmark checklist item needs an explicit re-run trigger (e.g., "re-run if the render/progress hot path changed since last verified") — noted for a possible future kit discussion; not proposed now since this is a single self-caught instance with no severity yet (no bug reached a user because of it).

## Follow-up on previous retro's actions
N/A — this is Sprint 1; no previous retrospective exists.

## Anti-patterns checked
- **No follow-through on prior retro actions:** N/A, no prior retrospective.
- **Blame-focused discussion:** Ruled out. Every log entry (daily scrum, tech debt, impediments) describes causes (env-var-only key resolution, harness scope, missing timeout/retry decision) in terms of the system and process, never attributing fault to an individual.
- **Hidden mini-waterfall within the sprint:** Ruled out. The daily log shows each batch built, tested, and verified together as one vertical slice in the same session — no evidence of design/build/test being split into separate sequential phases across days for a single story.
- **Avoiding an obvious known problem:** Ruled out. The two open impediments and the benchmark gap are actively tracked with explicit status and reasoning, not silently ignored — product-owner assessed both impediments non-blocking for Sprint 2's likely epics with a stated reason, and the benchmark gap has a named backlog story ("Time-box the first high-volume benchmark") flagged for early Sprint 2 pull.
- **Status-theater (near-miss, named explicitly):** Not full status-theater — no report overstated what had actually been done. But the Batch 5 GUI verification's prose-only, unscreenshotted evidence sits adjacent to this risk and is part of what let the DoD gap through undetected; it is addressed via the kit-level decision above and the corresponding Sprint 2 action item rather than logged as a separate anti-pattern instance.

+ 20
- 0
backlog/sprints/sprint-1.md Dosyayı Görüntüle

@@ -45,3 +45,23 @@ Sequenced by dependency, not by story-list order (which happens to match here si
| 5 | Show render progress and completion summary | Needs both Batch 3 (event format to parse) and Batch 4 (a running process to parse events from) — last in the chain regardless of team size. |

**Today's pull:** Batch 5, "Show render progress and completion summary," per the daily scrum above — the last batch in the sprint's execution order.

## Sprint Review Outcome (2026-09-11, `product-owner` per `process/04_sprint_review.md`)

**Sprint goal: met.** As of this review, an operator can select a template/CSV/output path in the WinForms desktop app, launch a render without freezing the UI, watch live progress, and receive a real PDF generated through Debenu Quick PDF 10.13 from a known XML template — demonstrated against the real 392-row sample CSV, including the actual built `.exe` (not just an in-process harness) after the same-day license-key fix. Two things temper an unqualified "yes" without invalidating it: a real Definition-of-Done verification gap in Batches 4-5 let a core-happy-path bug (license key resolution) reach "Done" and `state.md` Phase 4 before being caught and fixed the same day, and one story's acceptance criterion (warning count) is met only by its documented absence rather than a real feature. Neither is a reason to reject the sprint's work; both are tracked below and in the backlog.

**Per-story verification verdicts:**

| Story | Verdict | Notes |
|---|---|---|
| Define the CLI render contract | Met | Fully verified: 15 tests + documented smoke examples, no caveats. |
| Render text-only PDFs through Debenu Quick PDF | Met | Verified end-to-end (392/392 pages, exact `%PDF-1.4`, correct envelope dimensions); this story's scope is CLI-only so the license-key/desktop-launch gap doesn't apply to it. |
| Emit machine-readable progress during render | Met | AC satisfied (record-based status counts as "record-based," which the AC allows). Open release-quality caveat: 100k/300 DPI benchmark not re-run since Batch 2. |
| Launch a text-only render from the desktop app | Met for its literal scope (launch mechanics only) | Demonstration evidence had a blind spot — verified via in-process harness, not the actual built `.exe` — which is exactly what let the license-key bug through; closed by the same-day fix's re-verification against the real `.exe`. |
| Show render progress and completion summary | Accepted as Done with one known, tracked gap | Progress-display ACs fully met. The success-summary AC ("total records, total pages, elapsed time, and warning count") is only partially met: no distinct "total pages" field shown (numerically equal to records in this text-only model) and no warning count at all, because no warning concept exists in the product yet — reported honestly rather than fabricated. Evidence is real (two full runs, success and forced-failure) but thin (prose description, no screenshot/automated UI check). Product Owner decision: accept as-is; do not reopen. Follow-up story tracks the warning-count gap in `backlog/epics/07_dynamic_and_network_image_handling.md`. |

**Demonstration evidence assessment:** dev-team's daily-scrum notes (real CSV renders, real exit codes, real success/failure runs, test counts) stand in for a live demo per `process/04_sprint_review.md` step 2 and are convincing overall — especially the license-key fix's re-verification against the actual built artifact. The thinnest evidence is the Batch 5 GUI click-through, which is described in prose rather than shown (no screenshot, no automated UI test); acceptable for this sprint given the story's small surface area, but worth tightening for future GUI-facing stories (see the process-improvement note logged for the retrospective).

**Backlog changes made at this review:** see `backlog/backlog.md` ("Sprint 1 Review outcome") and the affected epic files (`backlog/epics/01_end_to_end_text_rendering_slice.md`, `backlog/epics/05_cli_rendering_engine_and_debenu_integration.md`, `backlog/epics/07_dynamic_and_network_image_handling.md`) for full detail: all 5 Sprint 1 stories marked Done in their epics with verification notes; two new stories added ("Harden production configuration delivery for CLI runtime settings," "Surface real warning counts in progress and completion reporting"); the existing "Time-box the first high-volume benchmark" story flagged for early pull in Sprint 2 refinement; the two open impediments assessed as non-blocking for Sprint 2's likely candidate epics (2 and 3).

**Carried into retrospective:** the license-key verification gap (DoD/verification process didn't require checking against the actual built artifact for a GUI-launching story) is flagged to `scrum-master` as a candidate process-improvement item — logged in `logs/process_improvement_log.md` for retrospective discussion, not acted on unilaterally here.

+ 1
- 0
logs/process_improvement_log.md Dosyayı Görüntüle

@@ -5,3 +5,4 @@ Append-only log of insights about the **Scrum kit itself** (this repo's `process
| Date | Sprint | Insight | Affected file(s) | Recurrence | Status | Resolution |
|---|---|---|---|---|---|---|
| | | | | 1st time / 2nd time / 3rd+ | Watching / Proposed / Applied / Rejected | |
| 2026-09-11 | 1 | `templates/definition_of_done.md`'s "runnable in the current local development setup" bar let two GUI-launching stories (Sprint 1 Batches 4-5, "Launch a text-only render from the desktop app" and "Show render progress and completion summary") reach Done using an in-process/dev-shell test harness that never exercised the actual built artifact the real target user (an operator double-clicking a shipped `.exe`) would run. This let a real bug (Debenu error 999 — the CLI only read its license key from a process environment variable a double-clicked app never has) through both DoD sign-off and past `state.md` advancing to Phase 4, only caught same-day by a real user report, not by the sprint's own verification. Judged severe enough on its own (per `AGENTS.md`'s "Process Self-Improvement" bar — a single occurrence that visibly broke a Done story's core happy path for the target user) to log now rather than wait for a second occurrence, though `scrum-master` should confirm at the retrospective before any kit edit is proposed. | `templates/definition_of_done.md` (possibly `process/03_sprint_execution.md`'s verification guidance) | 1st time | Applied | Decided at the Sprint 1 retrospective (`backlog/sprints/sprint-1-retrospective.md`, "Kit-level decision" section): this single occurrence meets the severity bar (silently broke a Done story's core happy path for the actual target user and let `state.md` advance to Phase 4 undetected). User approved the proposed edit on 2026-09-11; applied to `templates/definition_of_done.md` as a new bullet immediately after the existing "runnable in the current local development setup" line: "If the story changes how the product is launched, packaged, or resolves runtime configuration (e.g., a new desktop entry point, a new child-process launch, a new license/config resolution path), verification includes running the actual built artifact the way the target user would run it — not only an in-process test harness or a dev-shell invocation such as `dotnet run`." Scoped only to launch/packaging/config-resolution stories, not all stories. |

+ 10
- 4
state.md Dosyayı Görüntüle

@@ -2,16 +2,20 @@

> The single live "where are we right now" file. Read this FIRST at the start of any session that touches this repo - don't infer phase or sprint from conversation history. Updated LAST by whichever agent completes the current step, as documented in `AGENTS.md` under "Automated State-Driven Handoff."

**Phase:** 4 - Sprint review
**Leading agent:** `product-owner`
**Process file:** `process/04_sprint_review.md`
**Phase:** 5 - Sprint retrospective
**Leading agent:** `scrum-master`
**Process file:** `process/05_sprint_retrospective.md`

**Sprint:** 1
**Sprint dates:** 2026-09-08 - 2026-09-11
**Sprint goal:** Prove a thin text-only desktop-to-CLI rendering spine so an operator can select files, launch a job, watch progress, and receive a PDF generated through Debenu from a known XML template.
**Current sprint backlog:** `backlog/sprints/sprint-1.md`

**Next action:** All 5 committed Sprint 1 items are Done (exit criteria for Phase 3 met — see `backlog/sprints/sprint-1.md`). The walking skeleton is real end-to-end: an operator picks template/CSV/output paths in the WinForms desktop app (`EnvelopeRenderer.Desktop`), launches a render without freezing the UI, watches live progress parsed from the CLI's `PROGRESS <kind> ...` stdout stream, and gets a completion summary. Post-Sprint-Review-handoff, the user hit a real bug using the desktop app directly (Debenu error 999): the CLI only read `DEBENU_LICENSE_KEY` from the process environment, which a double-clicked desktop app never has — fixed same-day with `DebenuLicenseKeyResolver` (env var, then a `key.txt` walked up from the executable's own directory), logged in `logs/technical_debt_log.md`, verified against the actual built `.exe` (exit 0, valid 392-page PDF). 111 tests passing. `product-owner` runs Sprint Review next per `process/04_sprint_review.md`. Carry-forward items to raise at review: template-path and UNC-timeout impediments still open (`logs/impediment_log.md`); the 100k-record/300 DPI benchmark hasn't been re-run since Batch 2; no "warning" concept exists in the product yet, so the "warning count" acceptance task for the last story was satisfied by its documented absence rather than a real counter; and the license-key gap above is a signal that Sprint 2 should verify GUI stories against the actual built artifact, not just an in-process harness.
**Next action:** Sprint 1 fully closed out — Review and Retrospective both complete (`backlog/sprints/sprint-1.md` Sprint Review Outcome section; `backlog/sprints/sprint-1-retrospective.md`). Two decisions are pending with the user before Sprint 2 planning starts (a deliberate AGENTS.md pause point):
1. Whether to apply `scrum-master`'s proposed `templates/definition_of_done.md` edit (a new bullet requiring verification against the actual built artifact — not just an in-process harness — for any story that changes launch/packaging/runtime-config-resolution behavior). Proposed wording is in `logs/process_improvement_log.md` (2026-09-11 row, Status: Proposed) and `backlog/sprints/sprint-1-retrospective.md`. Not yet applied to the template.
2. Go-ahead to start Sprint 2 planning (`process/02_sprint_planning.md`, facilitated by `scrum-master`; `product-owner` and `dev-team` participate).

Sprint 2 candidate epics per the backlog (`backlog/backlog.md`): epic 2 (Template Designer GUI Foundation) and epic 3 (CSV Integration and Field Mapping), both Ready; product-owner also flagged pulling "Time-box the first high-volume benchmark" (epic 05) early in refinement. Sprint 1 retrospective's concrete carry-forward actions (regardless of the DoD-edit decision) are listed in `backlog/sprints/sprint-1-retrospective.md`'s "Action Items" section and should inform Sprint 2 planning either way.

## Phase reference

@@ -38,3 +42,5 @@ After phase 5, loop back to phase 1 for the next sprint.
| 2026-09-04 | 2 - Sprint planning | Created Sprint 1 around a conservative desktop-to-CLI text-only rendering spine and recorded the committed backlog in `backlog/sprints/sprint-1.md`. |
| 2026-09-08 | 3 - Sprint execution (in progress) | Held Daily Scrum #1 and turned the sprint backlog into a dependency-ordered execution plan (5 batches) in `backlog/sprints/sprint-1.md`. Still in phase 3 — not a phase transition, just the day's checkpoint. |
| 2026-09-08 | 3 - Sprint execution | All 5 batches Done: CLI render contract, real Debenu text-only rendering, stdout progress events, WinForms desktop launch shell (user-confirmed as the UI framework), and live progress/completion display. 106 tests passing end-to-end. Sprint goal met with real verified runs against the 392-row sample CSV. |
| 2026-09-11 | 4 - Sprint review | `product-owner` verified all 5 stories against acceptance criteria (verdict: sprint goal met, with two tracked caveats — see `backlog/sprints/sprint-1.md`'s Sprint Review Outcome section). Updated `backlog/backlog.md` and epics 01/05/07 with Done notes and two new follow-up stories. Logged one process-improvement item (Watching) for the retrospective re: verifying GUI stories against the actual built artifact, not just an in-process harness — this is exactly what let the license-key bug (fixed same-day, see `logs/technical_debt_log.md`) through undetected. |
| 2026-09-11 | 5 - Sprint retrospective | `scrum-master` ran the retrospective (`backlog/sprints/sprint-1-retrospective.md`). Named two team-level strengths to keep (dependency-ordered batch swarming; "leave it better than you found it" plus honest gap self-reporting) and one lower-priority deferred idea (re-trigger the 100k-record benchmark when hot-path code changes). Decided the DoD/verification-gap item meets the bar for a proposed kit edit (single severe occurrence) and drafted specific wording for `templates/definition_of_done.md`, but did not apply it — awaiting the user's go-ahead per AGENTS.md. Checked all four named anti-patterns; none found (one near-miss on thin GUI evidence named explicitly, addressed via the proposed DoD edit and a Sprint 2 action item rather than swept aside). |

+ 1
- 0
templates/definition_of_done.md Dosyayı Görüntüle

@@ -6,6 +6,7 @@ An item is only **Done** when ALL of the following are true:

- [ ] The story's acceptance criteria are met and the behavior matches the operator workflow described in the requirements.
- [ ] The change is implemented in working software under `code/` and is runnable in the current local development setup.
- [ ] If the story changes how the product is launched, packaged, or resolves runtime configuration (e.g., a new desktop entry point, a new child-process launch, a new license/config resolution path), verification includes running the actual built artifact the way the target user would run it — not only an in-process test harness or a dev-shell invocation such as `dotnet run`.
- [ ] The change is self-reviewed against the story, nearby code, and likely regressions because no separate reviewer process is defined yet.
- [ ] Relevant validation has been performed using representative sample CSV/template data for the feature being changed.
- [ ] If the story affects rendering, validation covers expected PDF output, progress reporting, and failure handling for the touched scenario.


Yükleniyor…
İptal
Kaydet

Powered by TurnKey Linux.