Change Ledger · CHANGELOG
A diary written in Sprints,
atomic-habit iteration.
← Milestones Want to read how we walked this road? That narrative lives here.
← LatestEarliest →
TRACK · TAURI
App Store Edition ——
from v1.0 to now, recorded Sprint by Sprint.
from v1.0 to now, recorded Sprint by Sprint.
Platform port, architecture unification, front-end refactor, weaving the test net, new-feature development.
Real user feedback × UI redesign × Hotfix · thank you, foreglint · S131–135 → v2.12.0
Sprint 13507·18Redesigned the screen-capture permission-granting UI · v2.12.0 submitted for review.
Sprint 13407·18Redesigned the selection mental model
Sprint 13307·18Fixed OCR · auto privacy masking · QR scanning — three features rooted out for the App Store sandbox build · v2.11.3 hotfix submitted for review.
Sprint 13207·16Global shortcuts for long screenshot · color picker · ruler, plus a menu-bar tray menu · fixed ruler drift on Retina
Sprint 13107·13Experiment: fixing the ghosting from pinned elements in long screenshots (Spike)
Spike × weaving the net × new-feature build · feeling our way through the unknown · S114–130 → v2.11.0
Sprint 13007·12Clean up the faint white rectangle left by the pin-to-top / back-to-top buttons in long screenshots (Spike). v2.11.0 submitted for review.
Sprint 12907·12Toolbar default layout rearranged + delay switched to a button group, fixing the copy-paste lockup.
Sprint 12807·11Ruler measurement upgrade — point-to-point distance, select-and-delete, undo/redo.
Sprint 12707·11Ruler edge-snap precision polish — hug the true edge, don’t bite into the text.
Sprint 12607·11Erase the repeated fixed elements inside long screenshots (back-to-top, day/night toggle…).
Sprint 12507·11Long-screenshot wrap-up — fill in the page footer, long-image view in the editor, button changed to “find browser” for one-click access.
Sprint 12407·11Long-screenshot auto-scroll engine formalized, seam stitching settled for good.
Sprint 12307·11Auto-scroll via the Accessibility permission — even pages that require login can be captured.
Sprint 12207·11Fix the breathing-light shadow left behind during capture.
Sprint 12107·10Long screenshot goes live.
Sprint 12007·10Scrolling-capture stitching feasibility check (Spike).
Sprint 11907·10Ruler debut — drag a box, it auto-snaps to edges, measures the pixel distance, bakes it into the image.
Sprint 11807·09Pixel-ruler feasibility check — laying the foundation for a measurement tool (Spike).
Sprint 11707·08Full-screen color picker goes live + icon-only toolbar redesign — the eyedropper grabs the exact hex of any pixel, recent colors shared across windows.
Sprint 11607·08Cross-screen rectangle capture — trying to drag a box across multiple displays (Spike).
Sprint 11507·07Freeze-frame capture — rectangle capture freezes the screen instantly; the loupe magnifies the frozen pixels, release to drop straight into the editor.
Sprint 11407·06Crop magnifier — a loupe zooms in as you drag the capture box, so you see every pixel.
Weave · refactor and new features interwoven · process and dev outlook renewed · S105–113 → v2.10.0
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.
Sprint 11207·04Double-click to drill into a group and edit a single member (drill-in, three-layer focus · orange frame)
Sprint 11107·04Fix: undo granularity for consecutive deletions · undo/redo round-trip net (internal)
Sprint 11007·04Fix: arrow-key nudge after switching to a drawing tool with the selection kept · selection state-machine gate-and-reconcile (internal)
Sprint 10907·03Magnifier sampling calibrated inside tilted groups
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 10707·02Export-pipeline invariant net + Rust export-core extraction spike (internal · hardening the shipping core)
Sprint 10607·02Toolbar breathing-light state-machine interaction net · orb cross-screen follow fix
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
Weaving ③ Panel-projection fidelity · Closing the net · S93–104 → 🏁
Sprint 10406·28Support for opening SVG files · load vector graphics as the annotation backdrop. v2.9.0 submitted for review.
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 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 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 10006·27Callout fill unified + symbol onto the main trunk (9→10 types fall in line); two acceptance waves, all four gaps byte-identical.
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 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 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 9606·25Mirror line — object→panel readAnnot fidelity net, all 12 types round-trip; interaction tests grew from 58 to 154 cases.
Sprint 9506·24Outline thickness / opacity / offset — three columns gathered; the stroke values' clean tail all into central projection, Stack A sealed.
Sprint 9406·24Stroke dash and color delegated-projection collapsed into the central pure function; built the schemaSyncToUI seam for later reuse.
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.
Weaving ② Construction-layer schema · Custom styles · S71–92 → v2.8
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
Sprint 9106·23Text-positioning debt cleared — underline/strikethrough auto-align to the font; non-default fonts measured correctly, selection box wraps fully
Sprint 9006·22Custom Styles release polish — callout gradient text plus decoration/font memory; styles apply with no gaps
Sprint 8906·22Two-cut panel-sync convergence — single paint source + read-only attribute mirroring (BUG-038 fixed)
Sprint 8806·21Text working-state structured and consolidated; 17-store registry unified; round-trip drift net truly green
Sprint 8706·21Custom Styles single-source-of-truth consolidation — six panel-sync patches reduced to zero, false-green eliminated
Sprint 8606·21Custom Styles batch-2 completed: rename, replace contents, apply a style to existing objects (paid edition)
Sprint 8506·21Drag-overlay eight-station unification — five marquee tools × six shape tools under one geometry roof
Sprint 8406·20Brand color now persists across sessions; drag-overlay eight-station state machine validated by spike
Sprint 8306·20Editor snapping math refactored into pure functions (_computeSnap); Shift-lock deduplicated
Sprint 8206·20Renderer-layer cleanup; custom screenshot shortcut fixed (BUG-029); renderer.js renamed to toolbar.js
Sprint 8106·19Tauri framework upgrade arc, station 1 — tauri 2.11.3 / xcap 0.9 / printpdf 0.9 landed across three verified waves
Sprint 8006·19Custom-styles panel projection wrap-up — fixed BUG-033 and extracted symbol lookup
Sprint 7906·19Custom-styles engine wrap-up — thickness/caps routing extracted, chain-idempotency net completed
Sprint 7806·19Custom-styles UI opened for all tools — 6 types completed + i18n dead-key cleanup
Sprint 7706·185 tool types' build() migrated — all 13 tools support custom styles at the engine layer
Sprint 7606·18Custom styles MVP — right-click to save a style, apply via dropdown
Sprint 7506·17Rendering-layer trio — unlocked dashes & shadows, completed tests for the 5 missing renderers
Sprint 7406·17W2 polyline promotion — upgraded to a true tool with unified shortcut gestures
Sprint 7306·16W1 construction layer converged — 7 tool types' build() unified into TOOL_SCHEMA
Sprint 7206·15W1 schema-ization spike — construction-layer design finalized, test net built
Sprint 7106·14applyResize action-layer inventory — structural consolidation of the resize sibling components
Weaving ① Structure · Render · Attributes · S47–70 → v2.7
Sprint 7006·09v2.7.0 submitted to the App Store — capping the S47–S69 frontend-refactor marathon
Sprint 6906·08Cross-resolution line-width calculation refactored · resize control system built
Sprint 6806·08Fill attribute system built · six-dimension attribute memory · number & symbol opacity integrated
Sprint 6706·08Primary-colour attribute contract net · fill-system groundwork · multiple fixes
Sprint 6606·08Font-size & decoration attributes unified · typography attribute series complete
Sprint 6506·07Geometry corner-radius unified · geometry attribute series complete
Sprint 6406·07Stroke-family attribute contracts completed · attribute-update logic refactored
Sprint 6306·07Stroke & thickness attribute systems unified · outline-thickness rules reinforced
Sprint 6206·06Symbol outline thickness scales proportionally · instant undo on attribute changes · dashed styles finalised
Sprint 6106·06Frontend-refactor core architecture landed · editor-decomposition phase complete
Sprint 6006·05Border colours and line styles now remembered per tool · "independent per-tool memory" principle established
Sprint 5906·04Border-opacity feature split out
Sprint 5806·04Border colour added to recent colours · auto-hide bubble background when transparent · border naming unified
Sprint 5706·04Attribute-system overhaul & audit · transparency semantics and border layers clarified
Sprint 5606·03Each tool remembers its own attribute settings · gradient text-colour hints
Sprint 5506·03Mosaic performance optimised · faster semi-transparent rendering
Sprint 5406·03Export refactored into a module · cross-platform compatibility hardened
Sprint 5306·02renderers.js cleanup + drawPolyline self-contained · BUG-012/014/019 fixes · golden 392 tests
Sprint 5206·02renderers.js extracted (first cut of decomposition) · golden-canvas safety net · 389 tests
Sprint 5106·01editor.js decomposition principle established (conductor/musician layering) · Decomposition roadmap produced · Dissolution red line closed
Sprint 5005·31Line-weight family cross-resolution symmetry completed · Label slider sync fix
Sprint 4905·31drag-session encapsulated · hitTest 7th callback · Unified geometry-change entry · ECS Phase 2 complete
Sprint 4805·30TOOL_GEOMETRY extended (3→6 callbacks · 14 types implemented) · ECS Phase 1 complete
Sprint 4705·29editor.js architecture decomposition spike (feature/layer dual-validation, both hit) · ECS four-phase roadmap finalized
Annotation size unified · drag breathing light · S30–46 → v2.3 / v2.4 / v2.6
Sprint 4605·28macOS 26.5 drag-export spike · v2.6.1 hotfix (5 fixes) submitted for review
Sprint 4505·26Four-type annotation rotation consistency completed · Timed window capture cursor fallback · BUG-007 selection box fix
Sprint 4405·25Timed capture range extended 0–6s · Toast lifecycle helper unified across 4 paths · BUG-003 spike (OS-level confirmed)
Sprint 4305·24Clipboard screenshot dispatch upgrade · Toolbar active-operation suppression · BUG-005 spike closed
Sprint 4205·20Annotation coordinate system unified · Consistent scaling across canvas / zoom / crop · No more size jumps across images
Sprint 4105·18Tier 1 security audit fixes · File sandbox hardening · Native macOS trash integration
Sprint 4005·10v2.4.0 submission · RELEASE.md overhaul
Sprint 3905·10NSOpenPanel Dock stuck fix · Custom shortcut adds clipboard quick-paste
Sprint 3805·09Two-platform differentiated channel cleanup
Sprint 3705·09IPC routing layer architecture cleanup
Sprint 3605·09Multi-screen dynamic drag position precise alignment
Sprint 3505·09Breathing light multi-screen fallback path UX aligned · Drag cache refreshed to latest snapshot
Sprint 3405·07Drag-export black breathing light: editor hides, returning the full view to the user
Sprint 3305·06-07v2.3.0 submission · Drag-export drop-target click-through fix · Cross-app breathing light debuts
Sprint 3205·01→05Four annotation size modes unified (bubble · number · symbol · text)
Sprint 3104·30→
05·01Annotation size model reframe (dissolution path set)
05·01Annotation size model reframe (dissolution path set)
Sprint 3004·29→30Drag export semi-transparent preview · Editor window dynamic alpha
Internationalization · big document split · S21–29 → v2.1 / v2.2
Sprint 2904·26v2.2.0 submission · 74 function QC complete
Sprint 2804·25WYSIWYG annotation precision · Virtual viewport 12× perf · Callout text format
Sprint 2704·23→25Magnifier annotation · Callout bubble · Drag image composite
Sprint 2604·22SYMBOL_SETS i18n · Font Simplified Chinese specialization · v2.1.0 submission
Sprint 2504·22BUG-001 screenshot DPR inference fix · Clipboard paste toast UX
Sprint 2404·21KM/SDD/TDD major split: archive/ nine topics · 89 KM entries re-indexed
Sprint 2304·21PRC privacy scan regex specialization · SYNC-036 Release Blocker resolved
Sprint 2204·20→21i18n file split Strategy B · Simplified Chinese Pro gate · zh-CN 429 keys
Sprint 2104·18→20Rust test infrastructure · Multi-screen v2.0.1~v2.0.8 hotfix lessons
v2.0 architecture unification · S10–20 · Coordinates · TOOL_SCHEMA · Render pipeline
Sprint 2004·14Help Modal optimize · Modal boundary fix · i18n expand
Sprint 1904·14Bug Sweep: Canvas flicker root cause · Polyline endpoint color fix
Sprint 1804·13Undo/Redo architecture upgrade · Memory cleanup · v2.0 architecture complete
Sprint 1704·13TOOL_RENDER pipeline convergence · makeGradient helper · 70 tests
Sprint 1604·13TOOL_GEOMETRY · Figma-style click select · 47 Vitest tests
Sprint 1504·12TOOL_SCHEMA Batch 2 complete: 10/10 tools schema done
Sprint 1404·12TOOL_SCHEMA Batch 1: ellipse / fillrect / fillellipse / pen
Sprint 1304·12TOOL_SCHEMA Pilot: rect + number · Architecture ④ schema framework launch
Sprint 1204·11Data model normalization · TOOL_ORDER review · Stroke offset expansion
Sprint 1104·11Universal Gradient six tools · Angle dial · SYNC-017/018
Sprint 1004·11Coordinate system unified Phase A/B/C · Vitest 16 tests · v2.0 launch
Launch tug-of-war · S9.5–9.8 → v1.1 / v1.2 rejected
Sprint 9.804·10→11v1.2.1 hotfix · Apple Guideline 2.4.5(i) rejection fix
Sprint 9.704·08→09v1.2.0 Release pipeline · resize type bug (KM-cv-09) fix
Sprint 9.604·07→08Tray system menu icon · Rejection fix · v1.1.0 re-submission
Sprint 9.504·05Post-launch: Malicious link protection · Japanese fonts · tauri-plugin-opener
Platform port · S1–9 → v1.0 first review submission
Sprint 904·02→03Full-screen UX overlay · 15 fix wrap · MAS first v1.0 submission
Sprint 804·01→02Web long screenshot MVP · Dock invoke · Toolbar position persist · Offset root cause
Sprint 704·01Breathing light flagship (::before) · QR/OCR auto-copy · Drag fix
Sprint 603·31Stamp gradient fill · Custom shortcuts · SDD/TDD/KM document split
Sprint 503·31Privacy scan fix · Bezier dual-handle UX · Arrow key adjust · Pixelate fix
Sprint 403·30→31Object rotate · Space pan · Watermark image preview · Modal orientation
Sprint 303·30QR Code three-mode scan · Smart guide v2 · Color picker · Drag into toolbar
Sprint 203·29→30Save · Copy · Share Sheet · OCR privacy mask · Modal fix
Sprint 103·28→29Scaffold from zero · Floating toolbar · Screenshot trio · Batch format convert
TRACK · ELECTRON
Free Download Edition ——
it had been running a long time before anyone saw it.
it had been running a long time before anyone saw it.
The first public version was v3.43. This line stops at v3.65, giving way to the Tauri platform port.
Seven-day sprint · v0.3 → v3.43Before public release · each bar is the versions shipped that day
After public release · v3.44 → v3.65 · sporadic updates giving way to Tauri
06 · 28v3.65SVG support — drag in or open SVG files, auto-rasterized to PNG at 1920px (toolbar / Open Image / screenshot overlay) · Text annotation attributes now stick after re-editing · Border-thickness panel refreshes instantly · Front-end refactor for stability
06 · 15v3.64Per-tool attribute memory · Number line style · Callout dashed border · Symbol stroke outline · Line / Pencil / Polyline dashed fix
05 · 20v3.63Drag-export glass editor · Annotation model unified · Mosaic scaling ratio · Pencil default thicker · Callout / text re-edit fix
05 · 06v3.62Callout bubbles · Magnifier · Annotation size unified (four canvas modes) · Drag export semi-transparent · Floating object crop protection
04 · 14v3.61Cross-screen rectangle capture (dual-window architecture)
04 · 14v3.60Polyline endpoint render · Vertex handle priority fix
04 · 14v3.59Help Modal · Esc fix verification
04 · 14v3.58Bug Sweep batch review
04 · 13v3.57Undo/Redo architecture upgrade · Memory cleanup
04 · 13v3.56Render pipeline convergence verification
04 · 13v3.55Shared frontend layer review
04 · 12v3.54Color block / text background render fix
04 · 08v3.51Undo · Pixelate · Scale · Snap four-item fix
04 · 07v3.50Fix: annotation scale offset after canvas shrink
04 · 07v3.49Tray system menu persistent icon
04 · 07v3.48Auto-open editor when dragging image into toolbar
04 · 02v3.47Full-screen capture UX improvement · Screen selection enabled
03 · 31v3.46Auto-hide bug fix · Display time slider
03 · 31v3.45Toolbar auto-hide (Home Bar minimal style)
Before public release · v0.3 → v3.43 · sixty-plus versions in seven days
03 · 27v3.43Template slider step refinement
03 · 27v3.42Crop frame arrow key micro-adjustment
03 · 27v3.41Crop frame flip fix · Double-click confirm
03 · 27v3.40XSS protection + canvas size limit
03 · 27v3.39Batch conversion per-file size limit
03 · 27v3.38Batch conversion file count limit
03 · 27v3.37QR threshold adjust · Toolbar new canvas entry
03 · 27v3.36QR Code smart scan (three modes)
03 · 27v3.35New canvas · Social media size presets
03 · 27v3.34Line curve control points added
03 · 27v3.33Smart Snap · Magnetic guides + distribution
03 · 27v3.32Multi-select align / distribute objects
03 · 27v3.31Marquee + Shift multi-select annotations
03 · 27v3.30Security upgrade · Retina WYSIWYG
03 · 26v3.29Seven-item QC batch fix
03 · 26v3.28Privacy masking tool · History drawer redesign
03 · 25v3.27Watermark · Background removal · Brand color kit · Screenshot history
03 · 25v3.26Template three sliders · Batch convert simplify
03 · 25v3.25Template mesh gradient · Social size presets
03 · 25v3.24Template Apple gradient six-color scheme
03 · 25v3.23Template prevent duplicate layering fix
03 · 25v3.22One-click template · Six decorative frames
03 · 25v3.21Symbol tool refactor · Multi-group buttons
03 · 25v3.20Symbol selection precision · Remove duplicates
03 · 25v3.19Drag-drop import · Drag-drop export · Clipboard import
03 · 25v3.18New tools: Pixelate · Blur · Symbol stamp
03 · 25v3.17Fix: Pencil thick arrow direction offset
03 · 25v3.16Fix: Arrow notch · Color palette auto-close
03 · 25v3.15Fix: Pencil arrow disconnected from line
03 · 25v3.14Fix: Arrow vertex shape · Stroke offset
03 · 25v3.13Fix: Arrow stroke · Pencil angle offset
03 · 25v3.12Fix: Endpoint stroke · Hollow circle symbol
03 · 25v3.11Fix: Endpoint stroke · Dash pattern failure
03 · 25v3.10Endpoint UI simplify · Stroke weight groups
03 · 24v3.9Options Bar unified · Dash full coverage
03 · 24v3.8Border and shadow styles unified across tools
03 · 24v3.7Pen tool · Dash upgrade · Endpoint styles
03 · 24v3.6Box select · Rectangle floating copy
03 · 24v3.5Dual toolbar · Semantic numbering · px input
03 · 24v3.4OCR switch to macOS Vision · Polyline scale
03 · 24v3.2Fix: Polyline vertex handle position
03 · 24v3.1OCR text recognition (free version)
03 · 23v3.0Ellipse frame tool · Shift lock circle
03 · 23v2.7Copy to clipboard · macOS Share Sheet
03 · 23v2.6Text tool major upgrade · Corners · Polyline orthogonal
03 · 23v2.5Floating color panel upgrade · Number size adjust
03 · 23v2.3Tauri version planning · UI language toggle
03 · 22v2.4Auto-open editor after capture (toggle)
03 · 22v2.2Stroke / fill split · Gradient · Number paste
03 · 22v2.1Delayed capture · Remove web capture entry
03 · 22v2.0Fix: Batch convert queue management
03 · 22v1.9Extend canvas (four-direction expansion)
03 · 22v1.8Layer overlay tool (composite)
03 · 22v1.7Color picker · Hex color input
03 · 22v1.6Batch format convert (PNG / JPG / WebP)
03 · 22v1.5Main window to floating toolbar
03 · 22v1.4Fix: WebP thumbnail · Auto-close after save
03 · 22v1.3Crop frame move · Eight-direction handle resize
03 · 22v1.2Crop tool · Aspect ratio lock modal
03 · 22v1.1Fix: Minimum zoom dynamic calculation
03 · 22v1.0Editor zoom and pan
03 · 22v0.9Full-screen capture interaction redesign
03 · 22v0.8Text tool comprehensive refinement
03 · 22v0.7Editor UX detail completion
03 · 22v0.6Dual-screen behavior spec completion
03 · 21v0.5SVG convert merged into open image entry
03 · 21v0.4Rectangle capture real-time size display
03 · 21v0.3Cmd+Ctrl+X · Shortcuts panel · Line tool
TRACK · WEBSITE
The Website ——
no version numbers, only trust.
no version numbers, only trust.
Apart from three clear breakpoints, the rest is editor and author working back-and-forth on the same manuscript.
Website Chronicle · Three Breakpoints + Presence
The website's timeline is scattered. Apart from three clear breakpoints (founding, migration, redesign),
the rest is editor and author working back-and-forth on the same manuscript ——
commit density varies; most of the time there is no version number, only trust.
The work here is not building features, but finding the right weight for each sentence.
Each session begins with re-reading, re-understanding, then continuing.
The way we show up is different, but what remains is just as real:
github.com/TB1982/vas/commits/main
the rest is editor and author working back-and-forth on the same manuscript ——
commit density varies; most of the time there is no version number, only trust.
The work here is not building features, but finding the right weight for each sentence.
Each session begins with re-reading, re-understanding, then continuing.
The way we show up is different, but what remains is just as real:
github.com/TB1982/vas/commits/main