Adds a framework-free AlignmentCalculator (6 alignment edges, center-spaced
distribution along 2 axes) operating on world-space bounding boxes, plus a
new toolbar row wired to it for the current multi-selection. Completes
Sprint 10's committed scope (13/13 points).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds an additive multi-selection layer alongside the existing single-select
state for both standalone elements and Address Controls: rubber-band drag,
Ctrl/Shift-click toggle, group drag preserving relative offsets, per-item
highlight, and a disabled "N items selected" properties panel. Collapses
back to ordinary single-select whenever 0-1 items remain selected so every
existing code path is unchanged.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Clicking an already-selected element to start a drag fired
SelectionChanged unconditionally, triggering TemplateDesignerForm's
un-gated full RefreshPropertiesPanel() every click (~40-60ms, measured).
Now only raises the event when the selection identity actually changes.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sprint 10 backlog refinement/planning: re-confirmed the epic-4 "rotated
wrap/indicator" story after Sprint 9 shipped rotation composition as a
byproduct; renamed and re-sized it down to the indicator alone (3 pts).
Committed it alongside epic 6's long-deferred multi-select/align pair.
Batch 1 shipped: a live wrap/clip indicator (dashed-orange outline) on the
canvas and preview panel, backed by a new framework-free WrapClipDetector.
Mid-batch, live-build feedback surfaced two real gaps, fixed together:
- No way to delete a placed element or Address Control - added
CanvasElementEditor.RemoveSelected()/TemplateCanvasControl.
RemoveSelectedElement(), wired to Delete/Backspace and a toolbar button.
- The resize handle should control only box width, with font size set
elsewhere - removed the Sprint 8 uniform-font-scale handle behavior
entirely. HasBox now means "Width is set" alone; Height is independent
and optional (new HasHeightClip flag). DebenuPdfRenderer gained a
"Width alone, auto-height, no clip" render path using Debenu's
DrawWrappedText/GetWrappedText+DrawRotatedMultiLineText.
Verified via a real licensed end-to-end CLI render (unrotated and rotated
auto-height wrap, no clipping) and a reflection-driven built-form harness
(real mouse-driven resize drag, real Delete key, real canvas screenshot).
Test suite grew from 476/476 to 488/488.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sprint 8: completed product-owner review and scrum-master retrospective for
whole-Address-Control rotation (13/13 points, sprint goal met in full).
Same-day, outside-ceremony fixes/features:
- Fixed a canvas drag/rotate smoothness bug for dynamic/mixed elements (an
expensive properties-panel refresh was running on every mouse-move tick).
- Added a font-size resize handle for standalone text elements.
- Gathered requirements for adjustable element width/height, resolving the
long-open "Warn on text overflow before render" product question.
Sprint 9: shipped "Add an adjustable width and height with text wrapping to
static and dynamic text elements" (13/13 points). Static/dynamic text elements
can now wrap within a set width and clip content exceeding a set height, using
Debenu's native DrawTextBox/DrawRotatedTextBox (confirmed via a real licensed
vendor-DLL probe) for the CLI render, and GDI+'s native rectangle-bounded
drawing for a design-time canvas/preview approximation. The existing font-size
resize handle became context-sensitive (box mode vs. font-scale mode) rather
than needing a second handle. Completed sprint review and retrospective.
Test suite grew from 433/433 to 476/476 across both sessions of work.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds multi-line address control rendering (CLI + designer), CSV record
navigation, live template preview, grid snapping, and rotation handles,
with corresponding sprint artifacts and backlog updates.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Completes the CSV Integration and Field Mapping epic by collapsing blank
optional address lines (with a visual distinction between blank data and a
mapping error), and delivers text/field rotation end-to-end: a free-form
angle property that rotates about the element's bounding-box center
(verified against the real Debenu DLL with a pixel-centroid regression
test), plus an interactive drag-to-rotate canvas handle. Closes out Sprint 4
with review and retrospective notes, including resolving the prior
retrospective's product-owner review-independence watch item. Also captures
requirements (not yet sized) for a new composite Address Control epic.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Mitigates the high-volume render throughput regression via Debenu document
batching + merge (100k-record benchmark: 315s, ~47.5% under the 10-minute
target), delivers the first CSV field-mapping slice (load headers, bind and
rebind dynamic fields), and closes out Sprint 3 with review and retrospective
notes. Also refines and sizes two new backlog stories for text/field element
rotation, requested mid-sprint.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Delivers the full Template Designer GUI Foundation epic (canvas dimensions,
text placement, properties panel, save/reopen XML templates) plus the
overdue high-volume render benchmark spike, all verified against the actual
built .exe per Sprint 1's DoD edit. The benchmark found the render path
misses the 100k-record/10-minute target by 5x-10x+ (code/BENCHMARK.md),
logged as a new high-priority backlog story and technical debt entry for
Sprint 3. Sprint Review confirmed all 5 stories against acceptance criteria;
Retrospective confirmed full follow-through on all four Sprint 1 actions
with no new kit-level changes needed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>