feat(note): rebuild note editor on the pen-first canvas
Some checks failed
CI / Windows build (push) Has been cancelled

Notes now use the single performant inking engine (PenCanvas) instead of
the old ink_canvas, per "all note features on the pen-first canvas".

- ink_stroke_adapter: pure InkStroke<->PenStroke bridge (normalize against
  a logical note page; drop non-freehand shapes/text). Round-trip tested.
- pen_palette_widgets: shared M3 ToolButton/PaletteDivider/RoundIconButton
  so PDF + note editors use identical chrome (PenEditorScreen migrated to
  them; its private copies deleted).
- PenNoteScreen: PenCanvas over a white logical page, undo/redo, title,
  save -> Note.strokes (+ local OCR for search). Pressure curve, eraser
  size/mode and palm rejection all inherited from the shared canvas.
- Route home (new/open) + search note hits -> PenNoteScreen; remove the
  now-redundant "Pen Canvas (beta)" spike button; delete the dead old
  note_editor_screen.

Tests: ink_stroke_adapter (5) + pen_note_screen widget (load + commit, 2).
flutter analyze: 0 issues. Full suite: 265/265.
This commit is contained in:
2026-06-23 10:21:40 +08:00
parent 3507e929b1
commit dfe5f2a477
12 changed files with 8769 additions and 418 deletions

View File

@@ -0,0 +1,33 @@
# PUA Loop — status (BadNote 整体重构)
## Oracle: `flutter analyze lib/editor && flutter test` → GREEN, exit 0, 145/145.
## Delivered this loop (all committed + pushed, 6829076..eedb52d)
P0 completion + P0.5 automatable layer + bonus pure cores:
- 6829076 zoom absolute-snapshot fix + pen streamline (P0/live)
- a48c0e7 input_arbiter (P0 step4)
- d500872 export single-source recipe / R7 (P0 step7)
- f64e656 SaveScheduler tests (P0 step8)
- eca5141 live canvas → revision-gated ui.Picture cache (P0 step3)
- 07b543f PageTileCache DPI-bucketed (P0.5)
- 1a3d106 PageStackMetrics windowing (P0.5)
- 6b7cc14 PageDocumentSource + fit-to-width glue (P0.5)
- c03513d PdfrxPageDocumentSource + API source-pin (P0.5 step12/SF4)
- c31bfd3 navigation math current-page/scroll-clamp (P0.5)
- 852eb38 双链 link_graph pure core (F7)
- eedb52d pressure curve floor+gamma (F5)
## THE BLOCKER (honest)
The refactor's CRITICAL PATH is device validation, which only the user's Surface
can provide and which the plan ITSELF gates on:
- P0 step9: pen/palm/pinch on Surface (build eedb52d).
- P0.5 exit: crisp-at-4× + 60fps profile — no automatable acceptance test exists.
The remaining work (page_tile renderer, page_viewport WIDGET, perf bench) is
device/GPU-gated; writing it blind = a claim with no acceptance evidence.
## Options for the user
1. Device-test eedb52d (zoom/pen/render/export) → I wire the P0.5 pure pieces
into the viewport widget and push the P0.5 device gate.
2. Tell me to keep PRE-BUILDING unwired pure cores (F6 page-map, F8 snippet
extraction, more F5/F7) — real + tested, but NOT on the blocked critical path.
3. /pua:cancel-pua-loop to end the loop.

View File

@@ -0,0 +1,3 @@
{"iteration":0,"status":"init","verify_command":"flutter analyze","timestamp":"2026-06-23T01:25:48Z"}
{"iteration":1,"status":"continue","timestamp":"2026-06-23T01:57:58Z"}
{"iteration":2,"status":"continue","timestamp":"2026-06-23T02:07:19Z"}