Snap editor records one Undo step per keystroke and per slider tick
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
Start with the change() and undo() logic in ImageWorkspaceEditing.swift (around lines 103-118 and 110), then the updateSelected calls for the caption and sliders in SnapEditorView.swift (lines 94, 103, 109). Compare with the canvas drag commit in ImageWorkspaceCanvas.swift (lines 212-213). Done means the acceptance cases pass under --check-image-workspace: 150 keystrokes make one undo step, and undo order is text, mark, then crop.
索引モデルが issue の本文から書いたものです。
説明
Outcome: typing a caption or dragging Text size or Line width makes one Undo step, so earlier crops and marks stay undoable.
Evidence (main edc15df)
- The text binding and the sliders call
updateSelectedon every change (SnapEditorView.swift:94, :103, :109). change()pushes every edit and trims to 100 entries (ImageWorkspaceEditing.swift:103-118). A caption of about 100 characters therefore drops the crop from history.undo()clears the selection (:110), which closes the inspector.- Canvas drags already commit once (ImageWorkspaceCanvas.swift:212-213).
- docs/snap.md:22 promises Undo for crop, text and marks.
Change
- Add a coalescing key (mark id plus property). Consecutive edits with the same key replace the top entry.
select,undoandredoreset the key.- After undo or redo, reselect the mark if it still exists.
Acceptance
In --check-image-workspace:
- 150 keystrokes make one step.
- Undo order is text, then the mark, then the crop.
- Redo restores.
- A fontSize run is one step.
- A selection change or an unkeyed edit splits runs.
- An edit after undo starts a new step.
Value before scope
- Outcome: Undo works on the capture-to-deck path. Evidence: the traced stack.
- Simpler route: none.
- Owner: ImageWorkspaceEditing.
- Complexity: one key.
- Verified by: source checks.
Grammar: Quality.
Refs #154
Build-ready record from the overnight lead session of 15 Oct 2026, verified against main edc15df by an independent skeptic per item. Implementation follows on a claude/* branch; this issue closes only after native acceptance.
- 主要言語
- Swift
- スター
- 0
- フォーク
- 1
- 平均マージ
- 8時間 5分
- マージ済み PR(30日)
- 215
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Ship-Work/workbench のほかの issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
メンテナーはふだん 1 日以内に返信
-
documentation good first issue help wanted
難易度 2/5 半日 初心者へのやさしさ 74/100
Ship-Work/workbench#29 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 55/100
メンテナーはふだん 1 日以内に返信
Ship-Work/workbench の issue をすべて見る
似ている issue
-
type: cleanup
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
googleapis/google-cloud-swift#1477 ·
メンテナーはふだん 1 日以内に返信
-
product / auth product / console product / databases product / messaging product / self-hosted product / sites product / storage
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
P1 status: first-line-handled status: needs-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
a2ui-project/a2ui#3282 · コメント 1 件 ·
メンテナーはふだん 2 日以内に返信
-
binding:web core docs p3
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
RunanywhereAI/runanywhere-sdks#1123 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
omacom/try-omarchy#359 ·
メンテナーはふだん 1 日以内に返信