|
|
@@ -2,29 +2,18 @@ |
|
|
|
|
|
|
|
|
> 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." |
|
|
> 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:** 3 - Sprint execution |
|
|
|
|
|
**Leading agent:** `dev-team` |
|
|
|
|
|
**Process file:** `process/03_sprint_execution.md` |
|
|
|
|
|
|
|
|
**Phase:** 1 - Backlog refinement |
|
|
|
|
|
**Leading agent:** `product-owner` |
|
|
|
|
|
**Process file:** `process/01_backlog_refinement.md` |
|
|
|
|
|
|
|
|
**Sprint:** 10 planned (2026-10-27), not yet executed. |
|
|
|
|
|
**Sprint goal:** Let an operator select multiple canvas elements at once (rubber-band or modifier-click, mixing standalone elements and Address Controls) and align/distribute them together, while also finishing the epic-4 wrap/clip chain's live visual indicator. |
|
|
|
|
|
**Current sprint backlog:** `backlog/sprints/sprint-10.md` |
|
|
|
|
|
|
|
|
**Sprint:** 10 closed (2026-10-27, retrospective complete). Sprint 11 not yet planned. |
|
|
|
|
|
**Current sprint backlog:** `backlog/sprints/sprint-10.md` (closed); Sprint 11 not yet created. |
|
|
|
|
|
|
|
|
**Recent history (Sprint 9, closed 2026-10-27):** Static/dynamic text elements shipped real adjustable width/height with native Debenu wrap/clip (13/13 points, sprint goal met in full); test suite 448/448 -> 476/476. Full detail: `backlog/sprints/sprint-9.md`, `backlog/epics/04_live_preview_and_record_navigation.md`, `backlog/sprints/sprint-9-retrospective.md`. A **Proposed** (not yet applied) process-improvement log entry awaits human review: the project's own Debenu license key (`key.txt`, repo root) was overlooked by at least two prior sprints' searches — logged in `logs/process_improvement_log.md` (2026-10-27). |
|
|
|
|
|
|
|
|
**Recent history (Sprint 10, closed 2026-10-27):** Sprint goal met in full — 13/13 committed points across 3 batches: "Add a live wrap/clip indicator for text elements" (3 pts), "Select multiple elements at once on the canvas" (5 pts), "Align and distribute multiple elements" (5 pts). Test suite grew 364/364 -> 388/388 (Desktop.Tests; CLI.Tests unaffected at 124/124). Two ad-hoc, non-committed live-build fixes handled mid-sprint: a Delete-key/toolbar-button feature plus a resize-handle-width-only correction (mid-Batch-1), and a canvas click-smoothness regression fix (`SelectionChanged` was firing unconditionally on every click) with disclosed before/after timing evidence (~50ms to 0.3ms per click). Two new Low/Open technical debt items logged during verification (Address-Control interaction logic remains untested WinForms-only, now underlying three features; a pre-existing GDI+ selection-highlight measurement cosmetic gap). Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/02_template_designer_gui_foundation.md`, `backlog/epics/04_live_preview_and_record_navigation.md`, `backlog/epics/06_layout_efficiency_and_operator_tooling.md`, `backlog/backlog.md`'s Sprint 10 Review outcome, `backlog/sprints/sprint-10-retrospective.md`. |
|
|
|
|
|
|
|
|
**Sprint 10 backlog refinement (2026-10-27):** Per the Sprint 9 retrospective's own action item, re-confirmed "Support rotated wrapped text and a live wrap/clip indicator for text elements" (previously 8 pts) via real code inspection and a new licensed end-to-end test — found its rotation-composition scope was already delivered as a byproduct of Sprint 9's implementation (confirmed: `DebenuPdfRenderer.AddPage`'s box branch already calls `DrawRotatedTextBox`, and both canvas/preview box-mode draws already run inside the existing rotation transform). Renamed to "Add a live wrap/clip indicator for text elements" and re-sized down to **3 points** — only the passive visual indicator itself remains. Full detail: `backlog/backlog.md`'s Sprint 10 backlog refinement outcome, `backlog/epics/04_live_preview_and_record_navigation.md`. |
|
|
|
|
|
|
|
|
**Sprint 10 retrospective highlights:** named a real, actionable insight — the click-smoothness bug was structurally identical to a Sprint 8 bug already fixed once (an unconditional expensive refresh on a hot UI event), just in a sibling event handler on the same control, and went unnoticed for two sprints; action item added to audit sibling handlers whenever this shape of bug is fixed, not just re-verify the one reported gesture. Also escalated (not just re-carried a third time) the recurring Address-Control-interaction-testability technical debt into a concrete recommendation: actually size and schedule the `AddressControlEditor` extraction as its own Sprint 11 story rather than deferring again. No kit-level edit proposed this sprint; the Sprint 9 retrospective's own **Proposed** license-key-search-depth entry in `logs/process_improvement_log.md` remains awaiting a human decision, unchanged. |
|
|
|
|
|
|
|
|
**Sprint 10 planning (2026-10-27):** Committed 13 points: the now-3-point indicator story plus epic 6's multi-select ("Select multiple elements at once on the canvas," 5 pts) + align/distribute ("Align and distribute multiple elements," 5 pts) dependent pair — finally pulled after being Ready and deferred twice (Sprint 8, Sprint 9) for fresher, more urgent requests; neither reason applies a third time. Pairing the small indicator story with multi-select's genuinely novel selection-model work does not trip the established "two large/novel stories" caution, since only one side of the pairing carries that risk profile. Full reasoning: `backlog/backlog.md`'s Sprint 10 planning outcome note. |
|
|
|
|
|
|
|
|
|
|
|
**Sprint 10 Batch 1 complete (2026-10-27), plus two ad-hoc corrections mid-batch:** "Add a live wrap/clip indicator for text elements" (3/13 points) shipped — a new framework-free `WrapClipDetector` (Desktop.Core) drives a dashed-orange indicator on the canvas and preview panel, drawn inside the existing per-element rotation transform. Mid-batch, the human product owner raised two live-build issues, addressed together before continuing: (1) **no way to delete a placed element or Address Control** — added `CanvasElementEditor.RemoveSelected()`/`TemplateCanvasControl.RemoveSelectedElement()`, wired to Delete/Backspace and a new toolbar button; (2) **the resize handle should control only box width, font size set elsewhere** — removed the Sprint 8 uniform-font-scale handle behavior entirely; `TextElementLayout.HasBox`/`TemplateElement.HasBox` now mean "Width is set" alone, with `Height` independent and optional (new `HasHeightClip` flag), and `DebenuPdfRenderer.AddPage` gained a "Width alone, auto-height, no clip" render path (`DrawWrappedText`/`GetWrappedText`+`DrawRotatedMultiLineText`). Full suite 476/476 -> 488/488. Live-verified: a real licensed end-to-end CLI render (width-only, unrotated and rotated) showed correct auto-height wrap with no clipping; a reflection-driven built-form harness confirmed the real resize handle sets only Width, the real Delete key removes the selection, and a real canvas screenshot shows the wrap indicator correctly appearing. One disclosed caveat: the toolbar Delete button's `PerformClick()` didn't reliably fire in the synthetic harness (a WinForms quirk absent a real shown window) — proven correct via a direct method call instead. Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/02_template_designer_gui_foundation.md`, `backlog/epics/04_live_preview_and_record_navigation.md`. |
|
|
|
|
|
|
|
|
|
|
|
**Post-Sprint-10-Batch-1 user-reported regression fix (2026-10-27, handled outside formal ceremony, mid-Sprint-10):** User reported that clicking on and moving a dynamic placeholder had become "not smooth any more." Root cause found by direct `Stopwatch` instrumentation of `TemplateCanvasControl.OnMouseDown` (not guessed): `SelectionChanged` fired unconditionally on every left-click, including a click on an already-selected element (the normal way to start a drag), and `TemplateDesignerForm`'s handler runs the full un-gated `RefreshPropertiesPanel()` every time — a cost (~40-60ms/click, measured) that only became perceptible once this sprint's added property-panel rows made the refresh heavier. Fixed by only raising `SelectionChanged` when the pre-click and post-click selection identity actually differ (`RaiseSelectionChangedIfDifferent`). Live-verified with the same instrumented harness: an already-selected element's second click dropped from ~50ms to 0.295ms; a genuine selection change still pays the warranted refresh unchanged. Full suite re-run: Desktop.Core 364/364, CLI 124/124 (fix isolated to the WinForms-only `TemplateCanvasControl`). Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/02_template_designer_gui_foundation.md`. |
|
|
|
|
|
|
|
|
|
|
|
**Sprint 10 Batch 2 complete (2026-10-27):** "Select multiple elements at once on the canvas" (5/13 points) shipped — a strictly additive multi-select layer (`CanvasElementEditor.MultiSelected` for standalone elements, `TemplateCanvasControl._multiSelectedAddressControls` for Address Controls) alongside the existing single-selection fields, collapsing back to ordinary single-select whenever 0-1 items end up selected so no existing code path changed behavior. Rubber-band selection and modifier-click toggle both work across a mixed selection of elements and Address Controls; group drag moves the whole set by one shared delta, preserving relative offsets; every selected item is visibly highlighted; the properties panel shows "N items selected" and disables per-item editing. Full suite 364/364 -> 376/376 (Desktop.Core; CLI unaffected). Live-verified via a reflection-driven built-form harness (rubber-band, toggle, group-drag delta math, panel state, a real canvas screenshot) with one disclosed caveat (`Control.ModifierKeys` has no public setter, so modifier-click was verified by calling the same private toggle method directly rather than through a simulated key-press) and one pre-existing, unrelated cosmetic gap found and logged rather than fixed in-scope (a selection highlight border under-wraps a multi-word display string — `logs/technical_debt_log.md`, 2026-10-27). Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/06_layout_efficiency_and_operator_tooling.md`. |
|
|
|
|
|
|
|
|
|
|
|
**Sprint 10 Batch 3 complete (2026-10-27):** "Align and distribute multiple elements" (5/13 points) shipped — Sprint 10's full committed scope (13/13 points) is now Done. New framework-free `AlignmentCalculator` (Desktop.Core) computes position deltas for 6 alignment edges and 2 distribution axes (center-to-center spacing, a documented MVP simplification) from a list of world-space bounding boxes; `TemplateCanvasControl` feeds it a mixed bounds list (standalone elements via a newly-public `CanvasElementEditor.GetWorldBounds`, Address Controls via a new `GetAddressControlWorldBounds` extracted from Batch 2's rubber-band code) and applies the deltas back. A new 8-button toolbar row triggers the operations, enabled only at 2+ selected items. Full suite 376/376 -> 388/388. Live-verified via reflection-driven harness including a **fresh** full-form screenshot (not reused from Batch 2, per this story's own carry-in note). Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/06_layout_efficiency_and_operator_tooling.md`. |
|
|
|
|
|
|
|
|
|
|
|
**Sprint 10 Review complete (2026-10-27):** `product-owner` verified all 3 committed stories against acceptance criteria (verdict: sprint goal met in full, 13/13 points). Independently re-ran the full test suite (388/388 Desktop.Tests, 124/124 CLI.Tests, confirmed directly) and read the actual `CanvasElementEditor`/`TemplateCanvasControl`/`AlignmentCalculator` code rather than trusting dev-team's report alone. Confirmed both mid-sprint ad-hoc items (the click-smoothness fix; two newly-logged technical debt entries) are correctly scoped and non-blocking. No new backlog items required. Full detail: `backlog/backlog.md`'s "Sprint 10 Review outcome" section. |
|
|
|
|
|
|
|
|
**Next action:** This is the automated workflow's designated pause point — confirm with the user before starting Sprint 11. Once resumed, `product-owner` runs Sprint 11 backlog refinement (`process/01_backlog_refinement.md`), folding in Sprint 10's retro action items (see `backlog/sprints/sprint-10-retrospective.md`'s Action Items — notably, sizing the `AddressControlEditor` extraction as a real candidate story) alongside the carried backlog: "Add an adjustable width and height with text wrapping to Address Control lines" (epic 4, 8 pts, deferred from Sprint 10); "Undo and redo layout changes" (epic 6, 13 pts, highest-uncertainty estimate, now the last story in that epic); "Warn on text overflow before render" (epic 4, provisional 5 pts, still blocked); both epic 7 impediments (asset path strategy, UNC timeout/retry, open since 2026-09-04); "Complete the first text-only operator workflow" (epic 1, 5 pts, still flagged stale). |
|
|
|
|
|
|
|
|
**Next action:** Proceed directly into Sprint Retrospective (`scrum-master` leads, `process/05_sprint_retrospective.md`) per the automated state-driven handoff — this is the workflow's next designated pause point (per `AGENTS.md`): stop and wait for the user once the retrospective is written, before starting Sprint 11 planning. Candidates to weigh for Sprint 11, once resumed: "Add an adjustable width and height with text wrapping to Address Control lines" (epic 4, 8 pts, deferred from Sprint 10); "Undo and redo layout changes" (epic 6, 13 pts, now the last story in that epic); "Warn on text overflow before render" (epic 4, provisional 5 pts, still blocked); both epic 7 impediments (asset path strategy, UNC timeout/retry, open since 2026-09-04); "Complete the first text-only operator workflow" (epic 1, 5 pts) remains flagged as stale; the Proposed process-improvement log entry above awaiting a human decision; two technical debt items from Sprint 10's verification (Address-Control interaction logic still untested WinForms-only, growing with each new feature built on it; the selection-highlight width cosmetic gap), both Open/Low and non-blocking. |
|
|
**Next action:** Proceed directly into Sprint Retrospective (`scrum-master` leads, `process/05_sprint_retrospective.md`) per the automated state-driven handoff — this is the workflow's next designated pause point (per `AGENTS.md`): stop and wait for the user once the retrospective is written, before starting Sprint 11 planning. Candidates to weigh for Sprint 11, once resumed: "Add an adjustable width and height with text wrapping to Address Control lines" (epic 4, 8 pts, deferred from Sprint 10); "Undo and redo layout changes" (epic 6, 13 pts, now the last story in that epic); "Warn on text overflow before render" (epic 4, provisional 5 pts, still blocked); both epic 7 impediments (asset path strategy, UNC timeout/retry, open since 2026-09-04); "Complete the first text-only operator workflow" (epic 1, 5 pts) remains flagged as stale; the Proposed process-improvement log entry above awaiting a human decision; two technical debt items from Sprint 10's verification (Address-Control interaction logic still untested WinForms-only, growing with each new feature built on it; the selection-highlight width cosmetic gap), both Open/Low and non-blocking. |
|
|
|
|
|
|
|
|
@@ -103,3 +92,5 @@ After phase 5, loop back to phase 1 for the next sprint. |
|
|
| 2026-10-27 | 3 - Sprint execution (ad hoc, outside formal ceremony) | User reported that clicking on and moving a dynamic placeholder had become "not smooth any more." Root cause found by directly instrumenting `TemplateCanvasControl.OnMouseDown` with `Stopwatch` timers rather than guessing: `SelectionChanged` fired unconditionally on every left-click — including a click on an already-selected element, the normal way to begin dragging it — and `TemplateDesignerForm`'s handler runs the full un-gated `RefreshPropertiesPanel()` every time, a cost (~40-60ms/click, measured) that only became perceptible once this sprint's added property-panel rows made the refresh heavier. Fixed by capturing the pre-click selection identity and only raising `SelectionChanged` when it actually changed (`RaiseSelectionChangedIfDifferent`). Live-verified with the same instrumented reflection harness: an already-selected element's second click dropped from ~50ms to 0.295ms end-to-end in `OnMouseDown`, while a genuine selection change still correctly pays the warranted refresh cost unchanged. Full suite re-run: Desktop.Core 364/364, CLI 124/124 (fix isolated to the WinForms-only `TemplateCanvasControl`, which has no automated test project). Documented in `backlog/epics/02_template_designer_gui_foundation.md` and `backlog/sprints/sprint-10.md`. | |
|
|
| 2026-10-27 | 3 - Sprint execution (ad hoc, outside formal ceremony) | User reported that clicking on and moving a dynamic placeholder had become "not smooth any more." Root cause found by directly instrumenting `TemplateCanvasControl.OnMouseDown` with `Stopwatch` timers rather than guessing: `SelectionChanged` fired unconditionally on every left-click — including a click on an already-selected element, the normal way to begin dragging it — and `TemplateDesignerForm`'s handler runs the full un-gated `RefreshPropertiesPanel()` every time, a cost (~40-60ms/click, measured) that only became perceptible once this sprint's added property-panel rows made the refresh heavier. Fixed by capturing the pre-click selection identity and only raising `SelectionChanged` when it actually changed (`RaiseSelectionChangedIfDifferent`). Live-verified with the same instrumented reflection harness: an already-selected element's second click dropped from ~50ms to 0.295ms end-to-end in `OnMouseDown`, while a genuine selection change still correctly pays the warranted refresh cost unchanged. Full suite re-run: Desktop.Core 364/364, CLI 124/124 (fix isolated to the WinForms-only `TemplateCanvasControl`, which has no automated test project). Documented in `backlog/epics/02_template_designer_gui_foundation.md` and `backlog/sprints/sprint-10.md`. | |
|
|
| 2026-10-27 | 3 - Sprint execution | `dev-team` completed Sprint 10 Batch 2, "Select multiple elements at once on the canvas" (5/13 points). Additive multi-select layer alongside existing single-selection state (`CanvasElementEditor.MultiSelected`, `TemplateCanvasControl._multiSelectedAddressControls`), collapsing to ordinary single-select at 0-1 items so every existing code path is unaffected. Rubber-band selection (rotation-aware AABB intersection) and modifier-click toggle both work across mixed elements/Address Controls; group drag moves the set by one shared delta preserving relative offsets (snapping the delta once, not each item's position independently); every selected item is visibly highlighted; properties panel shows "N items selected," disabled for per-item editing. 12 new Desktop.Core tests, full suite 364/364 -> 376/376. Live-verified via reflection-driven built-form harness including a real canvas screenshot; one disclosed caveat (`ModifierKeys` has no public setter, so modifier-click verified via direct private-method call) and one unrelated pre-existing cosmetic gap found and logged, not fixed in-scope (selection-highlight width under-wrap). Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/06_layout_efficiency_and_operator_tooling.md`. | |
|
|
| 2026-10-27 | 3 - Sprint execution | `dev-team` completed Sprint 10 Batch 2, "Select multiple elements at once on the canvas" (5/13 points). Additive multi-select layer alongside existing single-selection state (`CanvasElementEditor.MultiSelected`, `TemplateCanvasControl._multiSelectedAddressControls`), collapsing to ordinary single-select at 0-1 items so every existing code path is unaffected. Rubber-band selection (rotation-aware AABB intersection) and modifier-click toggle both work across mixed elements/Address Controls; group drag moves the set by one shared delta preserving relative offsets (snapping the delta once, not each item's position independently); every selected item is visibly highlighted; properties panel shows "N items selected," disabled for per-item editing. 12 new Desktop.Core tests, full suite 364/364 -> 376/376. Live-verified via reflection-driven built-form harness including a real canvas screenshot; one disclosed caveat (`ModifierKeys` has no public setter, so modifier-click verified via direct private-method call) and one unrelated pre-existing cosmetic gap found and logged, not fixed in-scope (selection-highlight width under-wrap). Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/06_layout_efficiency_and_operator_tooling.md`. | |
|
|
| 2026-10-27 | 3 - Sprint execution | `dev-team` completed Sprint 10 Batch 3, "Align and distribute multiple elements" (5/13 points) — sprint's full committed scope (13/13) now Done. New framework-free `AlignmentCalculator` (Desktop.Core) computes deltas for 6 alignment edges and center-spaced distribution along 2 axes from world-space bounding boxes; `TemplateCanvasControl` feeds it a mixed elements/Address-Controls bounds list (reusing/extracting Batch 2's rotation-aware AABB code) and applies deltas back as plain position offsets. New 8-button toolbar row enabled only at 2+ selected items, refreshed in lock-step with existing selection-state refresh so it can't drift out of sync. 12 new Desktop.Core tests, full suite 376/376 -> 388/388. Live-verified via reflection-driven harness: exact expected alignment/distribution results, correct button enable/disable at 0/1/2+ selected, and a fresh full-form screenshot (not reused from Batch 2, per this story's own carry-in note) confirming the new toolbar and highlights render correctly together. Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/06_layout_efficiency_and_operator_tooling.md`. | |
|
|
| 2026-10-27 | 3 - Sprint execution | `dev-team` completed Sprint 10 Batch 3, "Align and distribute multiple elements" (5/13 points) — sprint's full committed scope (13/13) now Done. New framework-free `AlignmentCalculator` (Desktop.Core) computes deltas for 6 alignment edges and center-spaced distribution along 2 axes from world-space bounding boxes; `TemplateCanvasControl` feeds it a mixed elements/Address-Controls bounds list (reusing/extracting Batch 2's rotation-aware AABB code) and applies deltas back as plain position offsets. New 8-button toolbar row enabled only at 2+ selected items, refreshed in lock-step with existing selection-state refresh so it can't drift out of sync. 12 new Desktop.Core tests, full suite 376/376 -> 388/388. Live-verified via reflection-driven harness: exact expected alignment/distribution results, correct button enable/disable at 0/1/2+ selected, and a fresh full-form screenshot (not reused from Batch 2, per this story's own carry-in note) confirming the new toolbar and highlights render correctly together. Full detail: `backlog/sprints/sprint-10.md`, `backlog/epics/06_layout_efficiency_and_operator_tooling.md`. | |
|
|
|
|
|
| 2026-10-27 | 4 - Sprint review | `product-owner` verified all 3 Sprint 10 stories against acceptance criteria (verdict: sprint goal met in full, 13/13 points). Independently re-ran the full test suite (388/388 Desktop.Tests, 124/124 CLI.Tests) and read the actual `CanvasElementEditor`/`TemplateCanvasControl`/`AlignmentCalculator` code directly rather than trusting dev-team's report alone. Confirmed both mid-sprint ad-hoc items (the click-smoothness fix; two newly-logged technical debt entries) are correctly scoped and non-blocking. Updated `backlog/backlog.md`'s epic table and added a "Sprint 10 Review outcome" section. Epic 6 (Layout Efficiency and Operator Tooling) now has 3 of 4 stories Done. | |
|
|
|
|
|
| 2026-10-27 | 5 - Sprint retrospective | `scrum-master` ran the retrospective (`backlog/sprints/sprint-10-retrospective.md`). Named a real, actionable insight: the click-smoothness regression was structurally identical to a Sprint 8 bug already fixed once (an unconditional expensive refresh on a hot UI event), just in a sibling event handler (`SelectionChanged`/mouse-down vs. the earlier `ElementsChanged`/mouse-move) on the same control, and went unnoticed for two sprints — new action item to audit sibling handlers whenever this shape of bug is fixed, not just re-verify the one reported gesture. Also named instrumentation-first perf debugging (proved out this sprint) and a minor harness-writing lesson (click inside an element's box, not on its exact edge, in reflection-driven mouse-event tests). Checked all four Sprint 9 retro action items: three show clean follow-through (GUI-smoke discipline, the wrap/clip indicator re-sizing, the built-form-vs-canvas-only smoke rule finally triggered and applied); one (the Address-Control-interaction extraction) triggered for a second consecutive sprint without being done — honestly escalated into a concrete Sprint 11 scheduling recommendation rather than silently re-carried a third time. No kit-level edit proposed. All anti-patterns checked; none found. | |