Platform port · S1–9 → v1.0 first review submission
Sprint 103·28→29Scaffold from zero · Floating toolbar · Screenshot trio · Batch format convert
Sprint 203·29→30Save · Copy · Share Sheet · OCR privacy mask · Modal fix
Sprint 303·30QR Code three-mode scan · Smart guide v2 · Color picker · Drag into toolbar
Sprint 403·30→31Object rotate · Space pan · Watermark image preview · Modal orientation
Sprint 503·31Privacy scan fix · Bezier dual-handle UX · Arrow key adjust · Pixelate fix
Sprint 603·31Stamp gradient fill · Custom shortcuts · SDD/TDD/KM document split
Sprint 704·01Breathing light flagship (::before) · QR/OCR auto-copy · Drag fix
Sprint 804·01→02Web long screenshot MVP · Dock invoke · Toolbar position persist · Offset root cause
Sprint 904·02→03Full-screen UX overlay · 15 fix wrap · MAS first v1.0 submission
Launch tug-of-war · S9.5–9.8 → v1.1 / v1.2 rejected
Sprint 9.504·05Post-launch: Malicious link protection · Japanese fonts · tauri-plugin-opener
Sprint 9.604·07→08Tray system menu icon · Rejection fix · v1.1.0 re-submission
Sprint 9.704·08→09v1.2.0 Release pipeline · resize type bug (KM-cv-09) fix
Sprint 9.804·10→11v1.2.1 hotfix · Apple Guideline 2.4.5(i) rejection fix
v2.0 architecture unification · S10–20 · Coordinates · TOOL_SCHEMA · Render pipeline
Sprint 1004·11Coordinate system unified Phase A/B/C · Vitest 16 tests · v2.0 launch
Sprint 1104·11Universal Gradient six tools · Angle dial · SYNC-017/018
Sprint 1204·11Data model normalization · TOOL_ORDER review · Stroke offset expansion
Sprint 1304·12TOOL_SCHEMA Pilot: rect + number · Architecture ④ schema framework launch
Sprint 1404·12TOOL_SCHEMA Batch 1: ellipse / fillrect / fillellipse / pen
Sprint 1504·12TOOL_SCHEMA Batch 2 complete: 10/10 tools schema done
Sprint 1604·13TOOL_GEOMETRY · Figma-style click select · 47 Vitest tests
Sprint 1704·13TOOL_RENDER pipeline convergence · makeGradient helper · 70 tests
Sprint 1804·13Undo/Redo architecture upgrade · Memory cleanup · v2.0 architecture complete
Sprint 1904·14Bug Sweep: Canvas flicker root cause · Polyline endpoint color fix
Sprint 2004·14Help Modal optimize · Modal boundary fix · i18n expand
Internationalization · big document split · S21–29 → v2.1 / v2.2
Sprint 2104·18→20Rust test infrastructure · Multi-screen v2.0.1~v2.0.8 hotfix lessons
Sprint 2204·20→21i18n file split Strategy B · Simplified Chinese Pro gate · zh-CN 429 keys
Sprint 2304·21PRC privacy scan regex specialization · SYNC-036 Release Blocker resolved
Sprint 2404·21KM/SDD/TDD major split: archive/ nine topics · 89 KM entries re-indexed
Sprint 2504·22BUG-001 screenshot DPR inference fix · Clipboard paste toast UX
Sprint 2604·22SYMBOL_SETS i18n · Font Simplified Chinese specialization · v2.1.0 submission
Sprint 2704·23→25Magnifier annotation · Callout bubble · Drag image composite
Sprint 2804·25WYSIWYG annotation precision · Virtual viewport 12× perf · Callout text format
Sprint 2904·26v2.2.0 submission · 74 function QC complete
Annotation size unified · drag breathing light · S30–46 → v2.3 / v2.4 / v2.6
Sprint 3004·29→30Drag export semi-transparent preview · Editor window dynamic alpha
Sprint 3104·30→
05·01Annotation size model reframe (dissolution path set)
Sprint 3205·01→05Four annotation size modes unified (bubble · number · symbol · text)
Sprint 3305·06-07v2.3.0 submission · Drag-export drop-target click-through fix · Cross-app breathing light debuts
Sprint 3405·07Drag-export black breathing light: editor hides, returning the full view to the user
Sprint 3505·09Breathing light multi-screen fallback path UX aligned · Drag cache refreshed to latest snapshot
Sprint 3605·09Multi-screen dynamic drag position precise alignment
Sprint 3705·09IPC routing layer architecture cleanup
Sprint 3805·09Two-platform differentiated channel cleanup
Sprint 3905·10NSOpenPanel Dock stuck fix · Custom shortcut adds clipboard quick-paste
Sprint 4005·10v2.4.0 submission · RELEASE.md overhaul
Sprint 4105·18Tier 1 security audit fixes · File sandbox hardening · Native macOS trash integration
Sprint 4205·20Annotation coordinate system unified · Consistent scaling across canvas / zoom / crop · No more size jumps across images
Sprint 4305·24Clipboard screenshot dispatch upgrade · Toolbar active-operation suppression · BUG-005 spike closed
Sprint 4405·25Timed capture range extended 0–6s · Toast lifecycle helper unified across 4 paths · BUG-003 spike (OS-level confirmed)
Sprint 4505·26Four-type annotation rotation consistency completed · Timed window capture cursor fallback · BUG-007 selection box fix
Sprint 4605·28macOS 26.5 drag-export spike · v2.6.1 hotfix (5 fixes) submitted for review
Weaving ① Structure · Render · Attributes · S47–70 → v2.7
Sprint 4705·29editor.js architecture decomposition spike (feature/layer dual-validation, both hit) · ECS four-phase roadmap finalized
Sprint 4805·30TOOL_GEOMETRY extended (3→6 callbacks · 14 types implemented) · ECS Phase 1 complete
Sprint 4905·31drag-session encapsulated · hitTest 7th callback · Unified geometry-change entry · ECS Phase 2 complete
Sprint 5005·31Line-weight family cross-resolution symmetry completed · Label slider sync fix
Sprint 5106·01editor.js decomposition principle established (conductor/musician layering) · Decomposition roadmap produced · Dissolution red line closed
Sprint 5206·02renderers.js extracted (first cut of decomposition) · golden-canvas safety net · 389 tests
Sprint 5306·02renderers.js cleanup + drawPolyline self-contained · BUG-012/014/019 fixes · golden 392 tests
Sprint 5406·03Export refactored into a module · cross-platform compatibility hardened
Sprint 5506·03Mosaic performance optimised · faster semi-transparent rendering
Sprint 5606·03Each tool remembers its own attribute settings · gradient text-colour hints
Sprint 5706·04Attribute-system overhaul & audit · transparency semantics and border layers clarified
Sprint 5806·04Border colour added to recent colours · auto-hide bubble background when transparent · border naming unified
Sprint 5906·04Border-opacity feature split out
Sprint 6006·05Border colours and line styles now remembered per tool · "independent per-tool memory" principle established
Sprint 6106·06Frontend-refactor core architecture landed · editor-decomposition phase complete
Sprint 6206·06Symbol outline thickness scales proportionally · instant undo on attribute changes · dashed styles finalised
Sprint 6306·07Stroke & thickness attribute systems unified · outline-thickness rules reinforced
Sprint 6406·07Stroke-family attribute contracts completed · attribute-update logic refactored
Sprint 6506·07Geometry corner-radius unified · geometry attribute series complete
Sprint 6606·08Font-size & decoration attributes unified · typography attribute series complete
Sprint 6706·08Primary-colour attribute contract net · fill-system groundwork · multiple fixes
Sprint 6806·08Fill attribute system built · six-dimension attribute memory · number & symbol opacity integrated
Sprint 6906·08Cross-resolution line-width calculation refactored · resize control system built
Sprint 7006·09v2.7.0 submitted to the App Store — capping the S47–S69 frontend-refactor marathon
Weaving ② Construction-layer schema · Custom styles · S71–92 → v2.8
Sprint 7106·14applyResize action-layer inventory — structural consolidation of the resize sibling components
Sprint 7206·15W1 schema-ization spike — construction-layer design finalized, test net built
Sprint 7306·16W1 construction layer converged — 7 tool types' build() unified into TOOL_SCHEMA
Sprint 7406·17W2 polyline promotion — upgraded to a true tool with unified shortcut gestures
Sprint 7506·17Rendering-layer trio — unlocked dashes & shadows, completed tests for the 5 missing renderers
Sprint 7606·18Custom styles MVP — right-click to save a style, apply via dropdown
Sprint 7706·185 tool types' build() migrated — all 13 tools support custom styles at the engine layer
Sprint 7806·19Custom-styles UI opened for all tools — 6 types completed + i18n dead-key cleanup
Sprint 7906·19Custom-styles engine wrap-up — thickness/caps routing extracted, chain-idempotency net completed
Sprint 8006·19Custom-styles panel projection wrap-up — fixed BUG-033 and extracted symbol lookup
Sprint 8106·19Tauri framework upgrade arc, station 1 — tauri 2.11.3 / xcap 0.9 / printpdf 0.9 landed across three verified waves
Sprint 8206·20Renderer-layer cleanup; custom screenshot shortcut fixed (BUG-029); renderer.js renamed to toolbar.js
Sprint 8306·20Editor snapping math refactored into pure functions (_computeSnap); Shift-lock deduplicated
Sprint 8406·20Brand color now persists across sessions; drag-overlay eight-station state machine validated by spike
Sprint 8506·21Drag-overlay eight-station unification — five marquee tools × six shape tools under one geometry roof
Sprint 8606·21Custom Styles batch-2 completed: rename, replace contents, apply a style to existing objects (paid edition)
Sprint 8706·21Custom Styles single-source-of-truth consolidation — six panel-sync patches reduced to zero, false-green eliminated
Sprint 8806·21Text working-state structured and consolidated; 17-store registry unified; round-trip drift net truly green
Sprint 8906·22Two-cut panel-sync convergence — single paint source + read-only attribute mirroring (BUG-038 fixed)
Sprint 9006·22Custom Styles release polish — callout gradient text plus decoration/font memory; styles apply with no gaps
Sprint 9106·23Text-positioning debt cleared — underline/strikethrough auto-align to the font; non-default fonts measured correctly, selection box wraps fully
Sprint 9206·23Toolbar highlight converged to "whichever modal is open"; polyline preview and Tray breathing-light fixed. v2.8.0 submitted to the App Store — Custom Styles ships
Weaving ③ Panel-projection fidelity · Closing the net · S93–103 → 🏁
Sprint 9306·24Extracted the computePanelValues pure function — first cut at panel-projection fidelity; the direct projection surface lands, a zero-DOM red-net conservation identity.
Sprint 9406·24Stroke dash and color delegated-projection collapsed into the central pure function; built the schemaSyncToUI seam for later reuse.
Sprint 9506·24Outline thickness / opacity / offset — three columns gathered; the stroke values' clean tail all into central projection, Stack A sealed.
Sprint 9606·25Mirror line — object→panel readAnnot fidelity net, all 12 types round-trip; interaction tests grew from 58 to 154 cases.
Sprint 9706·25Stroke special-case tail — three types folded in (text direct surface / number dedup / symbol side-path cleared); the stroke family's delegated-projection surface tops out.
Sprint 9806·26Value-projection surface tops out (corner-radius folded in; font-size and font each get their own ruling) + display-state projection first cut; added the sister pure function computePanelState.
Sprint 9906·27symbol fill projection unified (color + opacity into one projection); an opening-bell reversal — "registered ≠ projectable" — textDeco ruled to stay on the surface, not projected.
Sprint 10006·27Callout fill unified + symbol onto the main trunk (9→10 types fall in line); two acceptance waves, all four gaps byte-identical.
Sprint 10106·27magnify·callout fall in line onto the main trunk, all twelve types now run through schema — projection layer topped out; what the panel shows and what the worktable stores converge into one truth, physically impossible to diverge again.
Sprint 10206·28Converged each tool’s attribute set into a single source-of-truth table — the attribute panel aligned with the code for the first time, and for the first time could be exhaustively enumerated by the test net.
Sprint 10306·28🏁 Milestone — Converged the load path into one complete steward, readAnnot — CI went live; every change automatically runs through thousands of nets, red caught on the spot; exhaustive checking no longer needs anyone to remember.
Sprint 10406·28Support for opening SVG files · load vector graphics as the annotation backdrop. v2.9.0 submitted for review.
Weave · refactor and new features interwoven · process and dev outlook renewed · S105–113 → v2.10.0
Sprint 10506·30Groups arrive — multiple objects combine into a group (groupId as the selection unit) · whole-group scaling (8 handles, proportional) · per-object rotation for brush / polyline
Sprint 10607·02Toolbar breathing-light state-machine interaction net · orb cross-screen follow fix
Sprint 10707·02Export-pipeline invariant net + Rust export-core extraction spike (internal · hardening the shipping core)
Sprint 10807·03Group PowerPoint-style rotation — turn the whole group, visible and preserved · tilted groups can be clicked, dragged, scaled · ungrouping keeps the tilt
Sprint 10907·03Magnifier sampling calibrated inside tilted groups
Sprint 11007·04Fix: arrow-key nudge after switching to a drawing tool with the selection kept · selection state-machine gate-and-reconcile (internal)
Sprint 11107·04Fix: undo granularity for consecutive deletions · undo/redo round-trip net (internal)
Sprint 11207·04Double-click to drill into a group and edit a single member (drill-in, three-layer focus · orange frame)
Sprint 11307·05Text editing landed and settled for good — re-edit/flip keep the style · Esc commits the current state · clicking blank space lands and converges. v2.10.0 submitted for review.