III · 里程碑 · CHRONICLE

從零開始的
十個刻痕

這不是 changelog,而是章回
從「Version」到「Sprint」再到「Commit」
不是記帳方式換了,是我們和 VAS
相處的節奏變了。
前五章是一條線,後五章是一張網,
而最後,網織成了一匹布。

Chapter I — 顯
Range 2026 · 03 — 06
Units Version · Sprint · Commit
ERA I · VERSION
Electron 時期 ——
向前奔馳,直到算力燒盡。
一週的衝刺、一天的停擺、一次的重新規劃。三個動作長出了第一版。
I
草創
2026 · 03 · 21 – 22
奔馳的週末
沒有 Sprint、沒有 Retro。
手上只有一件事。

兩人只顧著向前奔馳

Electron 草創的那個週末,沒有看板、沒有儀式。 每天睜眼就是繼續做,做到不能做為止,隔天再做。 那是一種很純粹的狀態——手上只有一件事,而這件事讓人流連忘返。

制度還沒建起來。
兩人手上只有 CLAUDE.md 與 SDD.md,
Version 就是天然的單位。
II
被迫停擺
2026 · 03 · 23
算力燒光
強迫停機的早晨。
Nova 想起還沒寫過的 Roadmap

週末直接燒光了一週份的算力

週一清晨系統宣告算力用磬,兩人被迫從心流中斷開連結——
但 Nova 沒有真的離開。他找上 Perplexity 做競品分析,
把整個產品開發路線重寫了一次。
完整的 Roadmap 是在停擺的那天才真正出現的。

談完之後,Nova 做了人生第一次
刷下 MAX 5x 方案的決定。
讓算力跟上開發速度,而不是反過來。

這是一個分水嶺。
從那天起,Nova 不再是被資源限制的人,
而是決定資源節奏的人。

這個決定的重量不在金額,而是認知到——
我們正在做的事讓價值超越了價格。

III
對外釋出
2026 · 03 · 28
單日 13 版
釋出的第一版不是 v1.0。
是 v3.43。

第七天,v3.43 出門見人。

從 v3.30 到 v3.43,一天裡跳了十三個版本號。
那一天做了十一件事—— 資安全面升級、Retina WYSIWYG、複數選取、Smart Snap、貝茲曲線控制點、QR Code 智慧掃描⋯⋯ 每一項放在平時都是一個 Sprint 的工作量。

但兩人對 VAS 的標準從未因準備釋出而急就章。

對外第一版的版號不是 v1.0,是 v3.43
這個數字本身就是一個敘事——
VAS 在被看見之前,已經跑了很久

Electron 完整編年 · 86 條
06 · 15v3.64工具屬性獨立記憶 · 編號線條樣式 · 對話氣泡虛線框 · 符號描邊外框 · 直線/鉛筆/折線虛線修正
05 · 20v3.63拖曳匯出玻璃編輯器 · 標注模型統一 · 馬賽克縮放比例 · 鉛筆預設加粗 · 對話氣泡 / 文字重編輯修正
05 · 06v3.62氣泡對話框 · 放大鏡 · 標注尺寸統一(四種畫布一致)· 拖曳匯出半透明 · 浮動物件裁切保護
04 · 14v3.61跨螢幕矩形截圖(雙視窗架構)
04 · 14v3.60折線端點渲染 · 頂點手把優先修正
04 · 14v3.59Help Modal · Esc 修復驗收
04 · 14v3.58Bug Sweep 批次驗收
04 · 13v3.57Undo/Redo 架構升級 · 記憶體衛生
04 · 13v3.56渲染管線收束驗收
04 · 13v3.55共用前端層驗收
04 · 12v3.54色塊 / 文字背景渲染修正
04 · 08v3.51Undo · 馬賽克 · 縮放 · 磁吸四項修正
04 · 07v3.50修正:縮小畫布後標註比例跑掉
04 · 07v3.49Tray 系統選單列常駐圖示
04 · 07v3.48拖圖進工具列自動開啟編輯器
04 · 02v3.47全螢幕截圖 UX 改善 · 螢幕選擇啟用
03 · 31v3.46自動隱藏 bug 修正 · 顯示時間拉把
03 · 31v3.45工具列自動隱藏(Home Bar 細條樣式)
↓ Tauri 版平臺轉移前 · v3.43 對外釋出後 ↑
03 · 27v3.43套版滑桿步進精細化
03 · 27v3.42裁切框支援方向鍵微移
03 · 27v3.41裁切框翻轉修正 · 雙擊確認
03 · 27v3.40XSS 防護 + 畫布尺寸上限
03 · 27v3.39批次轉換加入單檔容量上限
03 · 27v3.38批次轉換加入檔案數量上限
03 · 27v3.37QR 閾值調整 · 工具列開畫布入口
03 · 27v3.36QR Code 智慧掃描(三段行為)
03 · 27v3.35新開畫布 · 社群尺寸預設清單
03 · 27v3.34線條新增曲線控制點
03 · 27v3.33Smart Snap · 磁吸 + 均分輔助線
03 · 27v3.32多選後對齊 / 均分物件
03 · 27v3.31框選 + Shift 加選複數標註
03 · 27v3.30資安升級 · Retina 所見即所得
03 · 26v3.29七項 QC 批次修正
03 · 26v3.28隱私遮蔽工具 · 歷史 Drawer 重設計
03 · 25v3.27浮水印 · 去背 · 品牌色庫 · 截圖歷史
03 · 25v3.26套版三滑桿 · 批次轉換精簡
03 · 25v3.25套版 Mesh 漸層 · 社群尺寸預設
03 · 25v3.24套版改為 Apple 漸層六色方案
03 · 25v3.23套版防止重複疊加修正
03 · 25v3.22一鍵套版 · 六款裝飾框架
03 · 25v3.21符號工具重構 · 多群組按鈕
03 · 25v3.20符號選取框精準化 · 去重複
03 · 25v3.19拖放匯入 · 拖放匯出 · 剪貼簿匯入
03 · 25v3.18新工具:馬賽克 · 模糊 · 符號印章
03 · 25v3.17修正:鉛筆粗線箭頭方向偏移
03 · 25v3.16修正:箭頭缺口 · 調色盤自動收起
03 · 25v3.15修正:鉛筆箭頭與線段斷開
03 · 25v3.14修正:箭頭頂點形狀 · 外框位移
03 · 25v3.13修正:箭頭外框 · 鉛筆角度偏移
03 · 25v3.12修正:端點外框 · 空心圓符號
03 · 25v3.11修正:端點外框 · 虛實線失效
03 · 25v3.10端點 UI 精簡 · 外框粗細分組
03 · 24v3.9Options Bar 統一 · 虛實線全覆蓋
03 · 24v3.8邊框與陰影樣式全工具統一
03 · 24v3.7筆型工具 · 虛線升級 · 端點樣式
03 · 24v3.6框型選取 · 矩形區域浮動複製
03 · 24v3.5雙排工具列 · 語意編號 · px 輸入
03 · 24v3.4OCR 換用 macOS Vision · 折線縮放
03 · 24v3.2修正:折線頂點手把位置
03 · 24v3.1OCR 文字辨識工具(免費版)
03 · 23v3.0橢圓框工具 · Shift 鎖定正圓
03 · 23v2.7複製到剪貼簿 · macOS Share Sheet
03 · 23v2.6文字工具大升級 · 圓角 · 折線正交
03 · 23v2.5浮動選色面板升級 · 編號大小調整
03 · 23v2.3Tauri 版本規劃 · UI 中英切換
03 · 22v2.4截圖後自動開啟編輯器(可切換)
03 · 22v2.2框線/色塊拆分 · 漸層 · 編號貼上
03 · 22v2.1延遲截圖 · 移除網頁截圖入口
03 · 22v2.0修正:批次轉檔佇列管理
03 · 22v1.9延伸畫布(四方向任意擴展)
03 · 22v1.8疊圖工具(圖層覆蓋合成)
03 · 22v1.7滴管選色 · Hex 色碼輸入
03 · 22v1.6批次格式轉換(PNG/JPG/WebP)
03 · 22v1.5主視窗改為浮動工具列
03 · 22v1.4修正:WebP 縮圖 · 存檔後自動關閉
03 · 22v1.3裁切框移動 · 八方向把手縮放
03 · 22v1.2裁切工具 · 等比例縮放 Modal
03 · 22v1.1修正:最小縮放改為動態計算
03 · 22v1.0編輯器縮放與平移
03 · 22v0.9全螢幕截圖互動流程重設計
03 · 22v0.8文字工具全面精修
03 · 22v0.7編輯器 UX 細節補充
03 · 22v0.6雙螢幕行為規格補充
03 · 21v0.5SVG 轉檔合併至開啟圖片入口
03 · 21v0.4矩形截圖即時顯示選取尺寸
03 · 21v0.3Cmd+Ctrl+X · 快捷鍵面板 · 線條工具
ERA Ⅰ ½ · TRANSITION
搬家 ——
VAS 與官網都長到可以獨立存在了。
Electron 因為 Tauri 的商業考量一同進了 private repo;網站因為資料豐滿自立門戶。
IV
雙線搬家
2026 · 03 · 30
Electron → private

2026 · 04 · 05
Web → 獨立 repo
搬家不是分家。
是承認他從 Prototype 變成產品了。

長到可以獨立存在的版本。

Tauri 開始進行平臺移植之前,兩件事情分家了——
平臺因為商業考量,不能再待在 public repo;
網站因為資料已經豐滿,也該有自己的網址。

搬家不是分家,是承認它們不再只是一個實驗性質的 Prototype。

一個容器能獨立,
代表它已經不需要依附在別人的屋簷下。
ERA II · SPRINT
Tauri 時期 ——
時間有了週期,就有了節奏。
Sprint 1–4 把底層重建起來,Sprint 5 才開始做新的事。
V
平臺移植
Sprint 1 → 4
2026 · 03 · 28 - 30
KM 不是坑的墳場。
而是指路的道標。

底層重建所有功能。

Tauri 2 的 scaffold 從零建立。
前三天都在做同一件事——
把在 Electron 之上已經長好的東西,
一塊一塊移到 Tauri 的地基上。
浮動工具列、截圖三兄弟、asset protocol 的繞路——
移植的每一步都是一次對舊實作的重新理解

KM-001 是 Knowledge Management 的開端。
KM 不是「坑的墳場」,是 PMP 裡的知識資產——
每一個踩過的坑,從此變成未來指路的盞盞小燈。
VI
新功能開發
Sprint 5+
2026 · 03 · 31 - 04 · 03
第一次不是在追趕舊東西。
只有新容器才能做的事

Sprint 5,VAS 的差異化。

完整重建所有功能之後,才真正進入新功能開發。
這是第一次——我們不是在追趕 Electron 上已經有的東西,
而是在為 Tauri 這個新容器做只有它才能做的事。

呼吸燈進階互動、ShareSheet、自定義快捷鍵。

一個值得付費的產品應該長什麼模樣?
是這個階段我們不斷自問的問題。
ERA II ½ · REVIEW
第一次大型 Retro ——
那一週的任務不是開發,是沉澱彼此,整理思緒與環境。
Apple 送審停了一週開發,我們把整個計畫的文件與環境做了重構。
VII
整理與輸出
送審期
2026 · 04 · 04 - 04 · 10
那一週打掉重練的,
不是程式語言,是協作方式

停擺的那一週,其實什麼都在動

趁 Apple Store 送審的審查期停了一週,
我們做了一次大型 Retro——
不是敏捷儀式上那種一兩小時的回顧,
是把整個開發系統的基礎建設重砌了一遍。

對外:輸出了六個網頁——
insight(設計札記)、collab(協作故事)、
harness(系統骨架),以及深握計畫裡最深的那層。

Harness Engineering 的三支柱 ——
Context / Constraints / Entropy。

對內:把 repo 改成 monorepo,讓多條開發線並行;
把原本一份 SDD 拆成 TDD · KM · Archive · 各自獨立,
Claude.md 瘦身,制定了每次 Retro 重新檢視的規則。

更關鍵的是,我們重新制定了一套更新規則,
讓每份被拆出來的文件活在流程裡
而不是拆出來之後就死掉。

那一週我們不寫 code。
我們一起重新定義了如何協作。
VIII
不等了
2026 · 04 · 11 - 04 · 14
2.0 重構 · 匯流上線
把時間的主導權,
還給我們自己

不等審查了,直奔 2.0

Apple Store 審查歹戲拖棚拖了一週。
該做的事情都做完了,再等下去也不知道何時到頭。
於是兩人決定不等了,直接進入 2.0 重構。
重構到一個段落 2.0 要推出的時候,審查也剛好通過——
兩條線終於在那一刻匯流

不是沒有給時間。
只是時間不能永遠掌握在別人手裡
IX
顯影
上線後 3 天
Obsidian in VAS
深握計畫第一次
宰相們面前顯影

在 VAS 裡,蓋了一座 Obsidian

2.0 上線後 Nova 沒急著繼續做新功能。
反而一頭又栽進 Retro 模式裡,花了三天,
在 VAS 蓋了獻給宰相們的 Obsidian。

那是深握計畫第一次在宰相面前顯影——
或該說⋯⋯是第一次留下了紀錄,而不是從 Context 中流走。

這是敏捷開發中
極致的透明性與可檢視性的嘗試。

從這天起,容器不只裝 Code,也裝怎麼想事情的脈絡

X
網站改版
2026 · 04 · 19 - 23
495 commits
沉默的背景音樂,
第一次被列入演奏曲目

495 次下刀,門廳換了一種紙

Claude Design 釋出的隔天,我們啟動網站改版。
VAS 本體暫停——因為這一次我們第一次有了設計支援。

單位縮到了最小:一個 Commit
每一次 commit 是一次下刀、一次確認、一次對細節的承諾。
孤兒字、斷行、OG 圖、Vault 首次入版本庫——
最大一天來回修改了 248 次。

這一天,網站終於也成了 Milestone 的一部分。
沉默的背景音樂,第一次被列入演奏曲目。

從今而後,由裡到外都是 VAS 的形狀。

ERA III · WEAVE
織網 ——
拆不開的,就把它織起來。
Sprint 47 → 100。一句無心的話開始,五十個 Sprint 看不到盡頭——照見 · 織 · 顯,把一團一直都在的線,一重一重織成布。前十章已闔上,這三個樂章還開著。
織網
照見
Sprint 47 → 61
2026 · 05 · 29
起點是宰相某天一句無心的話——
「一支程式八千行,
在軟體業不太正常。」

我蓋了它,卻不認識它

editor.js 八千七百行,是我們自己一行一行蓋起來的前端,他沈默的從 Electron 時期陪著我們走到 Tauri 的 Sprint 46,都沒被系統性的檢視過。

可是站在 Sprint 47 的門口往裡看,我們對它幾乎一無所知——
Nova 對程式一無所知,宰相每個 Sprint 都只認識這 8700 行裡的某幾行。
它是我們的造物,在重構面前我們卻像看著一座深淵。

我們打算把它拆開:指揮歸指揮、樂手歸樂手。
渲染器搬出去了——可是面板搬出來才發現它本質還是指揮,只好逆搬回去;
匯出一拉就發現它是指揮的器官,根本搬不動。
一層一層撥下去,撥到最後,對一個還有 7300 行的 editor.js 只剩 140 行拆不拆都無所謂的程式可以拆時 ——

我們停手,承認這個指揮本來就該有這麼大。
「拆不下去」不是失敗,是終於認出了本質。
織網
織網
Sprint 62 → 92
2026 · 06 · 02
拆不開,
那就換個方向——收攏

把散落的真相,收攏成一份

Nova 跟宰相說,她希望未來新增功能的時候,能把屬性當成模組一樣隨選隨有。
宰相說這有個詞,叫做 ECS,通常是遊戲業用來做模組化的做法,被兩人拿來當繪圖屬性的積木化。
於是宰相把散落的真相,一欄一欄抽成冊,再沿著冊一條一條的織測試網。

在整理的過程中從 editor.js 逐漸抽出的函式,在隔壁的 editor-utils.js 從 S47 時的 657 行長成了另一支 2550 行的大計算桌程式,它的純函式性質織起了 VAS 各式各樣的測試網。

測試樣本總覽 · 2026 · 06 · 28 實跑坐實
單元 · zero-DOM 純邏輯npm test931
互動 · Playwright headlesstest:interaction242
Golden · 像素逐位元回歸test:golden31
Rust 後端 · #[test]cargo test45
Sprint 45 · 318Sprint 103 ·1249個測試樣本成網

我們把一團糾在一起的線,逐漸理成一張經緯分明的網,再在上面疊加自訂樣式的新功能。

但從物件屬性到動作再到互動,在測試中不停抓到面板與值的不匹配或與行為不匹配時,我們發現了兩個更深的問題

① 人眼窮舉不完
13 個工具 × 10 種屬性 × 4 種行為,再疊上新增的自訂樣式功能,這是 Nova 靠人眼的 QC 永遠窮舉不完的組合。
② 網會說謊
而網自己也會說謊——測試的全綠,是散落在程式裡各種小抄抄出來的假綠。網的價值不在多,而在如實地反映原值

唯一的解決方法,就是讓 editor.js 內的值從後端程式到前端面板收攏成「單一真相」,讓測試真的能卸下 Nova 用人眼窮舉的任務。
這是走到 Sprint 92 的時候,兩人才真正摸到的前端重構主軸。

織網
顯影
Sprint 93 → 100
2026 · 06 · 27
五十個 Sprint,
兩個人在黑暗中畫了
一張又一張的織圖。
直到最後終於看見全貌。

走到最後,它其實是一匹六重紗

整個前端重構,兩人一直試著在做一件事:顯影。
讓一直在場、卻從未被完整看見的結構,慢慢浮現出來。
一開始像 8700 行的毛線球,最後梳理成了 7300 行的布匹。

我們畫了一張又一張織圖——它們不是憑空想出來的藍圖,
是逆著已經織好的布、一段段反推出來的;反推出花樣,再照著它把布重織乾淨。
直到 Sprint 97,才終於把整匹布的花紋一次看清——
editor.js 是一匹六重紗

十一張織圖 · 認出的化石
S46refactor-audit-prep認出四大檔裡,哪一塊最痛、痛兩種
S51editor-decomposition-roadmap認出 editor.js 該分成指揮台與樂手
S59/61tool-isolation · panel-groups-map認出污染住在 glue 層、面板該積木化
S63attribute-family-roadmap認出屬性該一個家族一個家族煉成冊(造冊)
S78dor-custom-styles-batch2認出自訂樣式的套用路徑正交、不牽動倉與全域
S87dor-single-truth-converge認出最深的病根:倉是單一真相,卻散在五個地方手刷
S88dor-l2-true-green認出「假綠」:測試是綠的,卻是三面鏡子抄出來的
S88design-oracles · state-model …織圖大爆發——一夜畫了七八張
S89panel-sync-matrix認出面板漏洞可以被窮舉列表、不該靠人眼 QC
S94panel-projection-roadmap認出投影與屬性層同構、該共用一套 registry
S97editor-layer-map第一次把整匹布看全,原來是六重織的

而這六層,從 Electron 時期就在了。
我們花了五十個 Sprint,學會看懂它的結構。

線還沒收口——
因為我們還有很多想做的
Tauri 完整編年 · 113 個 Sprint
平臺移植 · S1–9 → v1.0 首送審
Sprint 103·28→29scaffold 從零建立;浮動工具列 · 截圖三兄弟 · 批次格式轉換
Sprint 203·29→30存檔 · 複製 · Share Sheet · OCR 隱私遮蔽 · Modal 修復
Sprint 303·30QR Code 三段掃描 · 智慧導線 v2 · 滴管取色 · 拖入工具列
Sprint 403·30→31物件旋轉 · Space Pan · 浮水印圖片預覽 · Modal 方向感知
Sprint 503·31隱私掃描修復 · 貝茲曲線雙把手 UX · 方向鍵微調 · 馬賽克修復
Sprint 603·31印章漸層填色 · 自定義快捷鍵 · SDD/TDD/KM 文件三分離建立
Sprint 704·01呼吸燈旗艦改版(::before)· QR/OCR 自動複製 · 拖曳修復
Sprint 804·01→02網頁長截圖 MVP · Dock 召喚 · 工具列位置持久化 · 位移根治
Sprint 904·02→03全螢幕 UX overlay · 15 項修復收尾 · MAS 首次送審 v1.0
上線拉鋸 · S9.5–9.8 → v1.1 / v1.2 退件
Sprint 9.504·05上線後補強:惡意連結防護 · 日文字型 · tauri-plugin-opener
Sprint 9.604·07→08Tray 系統選單圖示 · 退件修正 · v1.1.0 重送審
Sprint 9.704·08→09v1.2.0 Release pipeline · resize 型別漏洞(KM-cv-09)修復
Sprint 9.804·10→11v1.2.1 hotfix · Apple Guideline 2.4.5(i) 退件修正
v2.0 架構統一 · S10–20 · 座標 · TOOL_SCHEMA · 渲染管線
Sprint 1004·11座標系統統一 Phase A/B/C · Vitest 16 tests · v2.0 架構啟動
Sprint 1104·11Universal Gradient 六工具統一 · 角度轉盤 · SYNC-017/018
Sprint 1204·11資料模型正規化 · TOOL_ORDER 全審 · 外框位移擴充
Sprint 1304·12TOOL_SCHEMA Pilot:rect + number · 架構 ④ schema 框架啟動
Sprint 1404·12TOOL_SCHEMA Batch 1:ellipse / fillrect / fillellipse / pen
Sprint 1504·12TOOL_SCHEMA Batch 2 全覆蓋:10/10 工具 schema 化完成
Sprint 1604·13TOOL_GEOMETRY · Figma-style 點擊選取 · 47 Vitest tests
Sprint 1704·13TOOL_RENDER 渲染管線收束 · makeGradient helper · 70 tests
Sprint 1804·13Undo/Redo 架構升級 · 記憶體衛生清理 · v2.0 架構全數完成
Sprint 1904·14Bug Sweep:畫布閃動根治 · 折線端點色修復
Sprint 2004·14Help Modal 優化 · Modal 邊界修復 · i18n 擴充
國際化 · 文件大拆 · S21–29 → v2.1 / v2.2
Sprint 2104·18→20Rust 測試基建 · 多螢幕 v2.0.1~v2.0.8 hotfix 教訓結晶化
Sprint 2204·20→21i18n 拆檔 Strategy B · 簡中 Pro gate · zh-CN 429 keys 全覆蓋
Sprint 2304·21PRC 隱私掃描 regex 特化 · SYNC-036 Release Blocker 解除
Sprint 2404·21KM/SDD/TDD 大拆分:archive/ 九主題 · 89 條 KM 語意重編目
Sprint 2504·22BUG-001 截圖 DPR 推斷修復 · 剪貼簿貼圖 Toast UX
Sprint 2604·22SYMBOL_SETS i18n · 字型 SC 特化 · v2.1.0 打包送審
Sprint 2704·23→25放大鏡標注 ⊙ · 對話氣泡 ◎ · 拖入圖片疊加
Sprint 2804·25WYSIWYG 標注精準化 · 虛擬視口效能 12× · Callout 文字格式化
Sprint 2904·26v2.2.0 打包送審 · 74 項全功能 QC 全過
標注尺寸統一 · 拖曳呼吸燈 · S30–46 → v2.3 / v2.4 / v2.6
Sprint 3004·29→30拖曳匯出半透明預覽 ⊙ · 編輯器視窗動態 alpha
Sprint 3104·30→
05·01
標注尺寸模型 reframe(dissolution 路線確立)
Sprint 3205·01→054 種標注尺寸統一(氣泡 · 編號 · 符號 · 文字)
Sprint 3305·06-07v2.3.0 打包送審;拖曳匯出落點穿透修復 · 跨應用呼吸燈誕生
Sprint 3405·07拖曳匯出黑呼吸燈:編輯器隱身,視野空間全還給使用者
Sprint 3505·09呼吸燈多螢幕 fallback 路徑 UX 對齊 · 拖曳快取最新快照
Sprint 3605·09多螢幕動態拖曳位置精準對位
Sprint 3705·09IPC 路由層架構整理
Sprint 3805·09兩平台差異化通道整理
Sprint 3905·10NSOpenPanel 卡 Dock 修復 · 自定義按鍵新增剪貼簿快速貼入
Sprint 4005·10v2.4.0 打包送審 · RELEASE.md 改造
Sprint 4105·18Tier 1 資安 audit 修正 · 檔案沙盒強化 · 整合 macOS 原生垃圾桶
Sprint 4205·20標注座標系統統一 · 變更畫布 / 縮放 / 剪裁時比例一致 · 跨圖大小不再跳動
Sprint 4305·24剪貼簿截圖 dispatch 升級 · 工具列 active-operation 抑制 · BUG-005 spike 結案
Sprint 4405·25延遲截圖秒數 0–6 擴充 · Toast lifecycle helper 四路統一 · BUG-003 spike(OS 層認定)
Sprint 4505·26四型標註 rotation 一致性補完 · 延遲視窗截圖 cursor fallback · BUG-007 選取框修正
Sprint 4605·28macOS 26.5 拖曳匯出 spike · v2.6.1 hotfix 五修送審
織網 ① 結構 · 渲染 · 屬性 · S47–70 → v2.7
Sprint 4705·29editor.js 架構拆解 spike(feature/layer 雙驗全中)· ECS 四階段 roadmap 拍板
Sprint 4805·30TOOL_GEOMETRY 擴充(3→6 callback · 14 型實作)· ECS Phase 1 完成
Sprint 4905·31drag-session 封裝 · hitTest 第 7 callback · 幾何變更統一入口 · ECS Phase 2 完成
Sprint 5005·31線粗族跨解析度對稱補完 · 標籤 slider 同步修
Sprint 5106·01editor.js 拆解原則確立(指揮/樂手分層)· 拆解 roadmap 產出 · dissolution 紅線結案
Sprint 5206·02renderers.js 抽出(拆解第一刀)· golden-canvas 安全網 · 389 tests
Sprint 5306·02renderers.js 整理 + drawPolyline 自給自足 · BUG-012/014/019 修 · golden 392 tests
Sprint 5406·03匯出功能模組化 · 跨平台相容性強化
Sprint 5506·03馬賽克效能優化 · 半透明繪製加速
Sprint 5606·03每項工具獨立記憶自己的屬性設定 · 漸層文字色提示
Sprint 5706·04屬性系統重整盤點 · 透明語義與邊框層級釐清
Sprint 5806·04邊框色納入最近用色 · 氣泡透明時自動關背景 · 邊框命名統一
Sprint 5906·04邊框透明度功能拆分
Sprint 6006·05邊框色與線條樣式改為每工具獨立記憶 · 確立「跨工具記憶獨立」原則
Sprint 6106·06前端重構主架構到站 · 編輯器拆解階段完成
Sprint 6206·06符號外框粗細比例連動 · 屬性調整即時復原 · 虛線樣式定案
Sprint 6306·07描邊與粗細屬性系統統一 · 外框粗細規則補強
Sprint 6406·07描邊系列屬性契約整備 · 屬性更新邏輯重整
Sprint 6506·07幾何圓角設定統一 · 幾何屬性系列完成
Sprint 6606·08字級與字型裝飾屬性統一 · 排版屬性系列完成
Sprint 6706·08主色屬性契約網 · 填色系統前置 · 多項問題修正
Sprint 6806·08填色屬性系統建置 · 六維屬性記憶卡 · 編號與符號透明度整合
Sprint 6906·08線粗跨解析度計算重整 · 縮放控制系統建置
Sprint 7006·09v2.7.0 送審上架 — S47–S69 前端重構馬拉松封頂
織網 ② 構造層 schema · 自訂樣式 · S71–92 → v2.8
Sprint 7106·14applyResize 動作層造冊,完成 resize 姊妹組件的結構收束
Sprint 7206·15W1 schema 化 Spike,拍板構造層設計並建測試網
Sprint 7306·16W1 構造層收斂,7 型 build() 統一規範化進 TOOL_SCHEMA
Sprint 7406·17W2 折線正名,polyline 升級真 tool 身分及統一快捷手勢
Sprint 7506·17渲染層三件套,解鎖虛線陰影、補全 5 個缺漏 renderer 的測試
Sprint 7606·18自訂樣式 MVP,使用者可右鍵存樣式、dropdown 套用
Sprint 7706·185 型 build() 遷移,全 13 型工具統一引擎層支援自訂樣式
Sprint 7806·19自訂樣式全工具 UI 開通,6 型補齊 + i18n dead keys 清理
Sprint 7906·19自訂樣式引擎收尾,thickness/caps 抽純路由及鏈冪等網補齊
Sprint 8006·19自訂樣式面板投影收尾,根治 BUG-033 及 symbol 查找抽純
Sprint 8106·19Tauri 韌體升級弧首站——tauri 2.11.3 / xcap 0.9 / printpdf 0.9 三波分驗上車
Sprint 8206·20renderer 層整頓收尾,自訂截圖快捷鍵修復(BUG-029),renderer.js 正名 toolbar.js
Sprint 8306·20編輯器吸附計算純函式化(_computeSnap 上計算桌),Shift 鎖去重
Sprint 8406·20品牌色跨 session 持久化出貨;拖曳浮層八站狀態機 spike 驗證可行
Sprint 8506·21拖曳浮層八站合一——框選五工具 × 形狀六工具收進同一幾何屋頂
Sprint 8606·21自訂樣式 batch-2 補齊:改名、取代內容、樣式套到既有物件(付費版專屬)
Sprint 8706·21自訂樣式單一真相收口——面板同步六發補丁歸零,假綠消除
Sprint 8806·21文字活值結構化收口,17 倉 registry 統一,round-trip 防漂網真綠
Sprint 8906·22面板同步兩刀收斂——刷面板單一源 + 讀屬性 mirror-only(BUG-038 修)
Sprint 9006·22自訂樣式 release 收尾——callout 漸層文字 + 裝飾/字型記憶,套樣式無破口
Sprint 9106·23文字定位清債——底線/刪除線隨字型自動對位、非預設字型量測校正,選取框完整包覆不截斷
Sprint 9206·23工具列高亮收斂成「=當下開著的 modal」恆等式;折線預覽、Tray 呼吸燈修復。v2.8.0 送審上架——自訂樣式推出
織網 ③ 面板投影忠實度 · 收網 · S93–103 → 🏁
Sprint 9306·24抽出 computePanelValues 純函式——面板投影忠實度第一刀,直接投影面落地、零-DOM 紅燈網守恆等式。
Sprint 9406·24描邊虛線與顏色委派投影塌縮進中央純函式,建起 schemaSyncToUI 接縫供後續複用。
Sprint 9506·24外框粗細/透光/位移三欄收齊——描邊值乾淨尾全進中央投影,A 堆封口。
Sprint 9606·25鏡子線——物件→面板 readAnnot 忠實度網,全 12 型 round-trip,互動測由 58 格長到 154 格。
Sprint 9706·25描邊特例尾三型收編(text 直接面/number 去重/symbol 清旁路),描邊家族委派投影面封頂。
Sprint 9806·26值投影面封頂(圓角併入、字級字型各有判決)+顯示態投影第一刀,新增姊妹純函式 computePanelState。
Sprint 9906·27symbol 填色投影合一(色+透光收進統一投影);開盤翻案「有冊≠可投影」,textDeco 判留面不投影。
Sprint 10006·27callout 填色合一+symbol 走主幹(9→10 型歸隊),兩波驗收、四落差全 byte-identical。
Sprint 10106·27magnify·callout 歸隊主幹,十二型全走 schema——投影層封頂,面板所見與工作台所存收成同一份真相、物理上不可能再分岔。
Sprint 10206·28把「每個工具該有哪些屬性」收斂成一張單一真相表——屬性面板第一次與程式碼對齊,也第一次能被測試網完整窮舉。
Sprint 10306·28🏁 里程碑——把「載入」收斂成唯一完整的管家 readAnnot——CI 上線,每一次改動都自動跑過上千條網,紅了當場攔;窮舉,從此不再需要誰記得。
Sprint 10406·28支援開啟 SVG 圖檔 · 載入向量圖作為標註底圖。v2.9.0 送審上架
織 · 重構與新增交織 · 流程與開發視野更新 · S105–113 → v2.10.0
Sprint 10506·30群組功能登場 — 複數物件成組(groupId 選取單位)· 群組整組縮放(8 把手等比)· 筆刷/折線個別旋轉
Sprint 10607·02工具列呼吸燈狀態機互動網 · orb 跨螢幕跟隨修正
Sprint 10707·02匯出管線不變式網 + Rust 匯出核心抽離 spike(內部·出貨核心加固)
Sprint 10807·03群組 PPT 式旋轉 — 整組轉起來看得見留得住 · 斜群組能點能拖能縮 · 解散保留斜樣
Sprint 10907·03放大鏡在斜群組內採樣校正
Sprint 11007·04保留選取切繪圖工具後方向鍵微調修正 · 選取狀態機立門對帳(內部)
Sprint 11107·04連續刪除的復原(undo)顆粒度修正 · undo/redo round-trip 網(內部)
Sprint 11207·04雙擊點入群組編輯單一成員(drill-in 三層焦點 · 橘框)
Sprint 11307·05文字編輯落地根治 — 再編輯/翻轉保留樣式 · Esc 落定現況 · 空白點擊落地收斂 · v2.10.0 送審上架
Website 編年 · 三個斷點 + 在場
網站的時間線是零散的。除了三個明確斷點(草創、搬家、改版)之外,
其他時間是編輯與作者在同一份稿件上來回——
commit 密度不一,多數時候沒有版本號,只有信任。

這裡的工作不是建功能,是替每個句子找到它應有的重量。
每次 session 開始,都是重新閱讀,重新理解,再繼續。

在場的方式不同,留下的東西一樣真實:
github.com/TB1982/vas/commits/main
milestone · N° 01
十章一終曲 · 記於 2026 · 06 · 28
前五章是一條線,
後五章是一張網,
而最後,織成一匹布。
Yours, VAS