8.0 KiB
Text diagnostics: integration evidence and remaining acceptance
This contribution implements issue 12: passive source underlines and hover explanations tied to the exact displayed draft. The corrected Windows replay confirms readable tooltip text, wrapped/scrolled placement, word editing and Undo, actual parser-token/EOF errors, and modal suppression. Source is published at 9fd76aef3ae2810667d3f2b031fc43692fc04c89. The first Windows trial's blank-tooltip failure remains preserved. This report does not accept the newer issue 27 integration, a package, or the full application.
The implementation builds on b4b860f2776aa8251306d83ff58362c0359176ef, including the published Text workspace contribution at 2df7f580aa4bd728a728c83ac10e6ccc956ef069. That predecessor supplies the permanent editor layout, diagnostic publication/visit guards, Find focus preservation and source navigation behavior. The diagnostic captures contain working changes over that base; the base commit alone does not contain this contribution.
Behavior and integration seams
The rendering contract owns the exact authority, geometry and lifecycle rules. Core source discovery and App include completion now preserve diagnostic provenance against the raw returned files and retained draft overlays. A newly assigned publication ID cannot make ranges from different text current. Delayed or mismatched include results must pass their existing context and retained-source checks before publishing.
source_annotations::Index maps primary Error/Warning UTF-8 spans to the existing graphics editor's actual shaped, wrapped and scrolled buffer. It handles repeated text by byte identity, preserves disjoint bidi bands and uses bounded insertion markers for empty/EOF/separator ranges. Related locations stay explanatory. Hover uses those same clipped current bands, names severity/code/message and directs bounded or abbreviated details to Source problems. It does not navigate, edit, focus, consume input, or measure ranges by moving a selection.
The Text view wraps its existing editor in permanent Decorations, inside the existing viewport sensor. It passes app.source_annotation_snapshot() and the existing navigation-availability guard; Problems visibility does not own annotations. Peer integration into the newer chooser/Text UI should preserve this editor/sensor/input topology, snapshot admission and modal/menu hover suppression. Merge the core provenance, App publication/include handling, annotation module, view wrapper and dependency patch together. Do not replace the peer's chooser routing or use retained display diagnostics to authorize a new navigation action. The combined peer revision needs its own mounted lifecycle and native checks; predecessor and branch tests do not establish that union. Gitea contributors run on separate machines: use the published portable archive for handoff, and treat historical absolute paths as provenance rather than accessible shared storage.
Dependency and maintenance
The root Cargo patch selects the repository copy of pinned iced_widget 0.14.2. Its only upstream Rust change is the eight-line read-only Content::with_editor accessor; the graphics editor already exposes its real buffer. This avoids a second text editor or mirror layout. No global registry source is changed.
Retain crates/vendor/iced_widget/ARCADIA-PATCH.md, UPSTREAM-MANIFEST.json, upstream provenance and LICENSE. Source capture must include the local dependency, and notices must identify its actual source and upstream license rather than applying the application license or pretending the modified copy has the registry checksum. On an Iced upgrade, review accessor borrowing, paragraph splitting, cluster/scroll geometry and deferred renderer ownership, then repeat the corresponding evaluators.
Verified evidence and limits
The portable evidence archive provides exact capture references, commands, raw logs, original failures, independent reviews and a read-only verifier. It is the detailed evidence index; this report does not duplicate its hash history.
- Core provenance coverage passed 447 tests, with one ignored. Later UI changes are outside that core execution.
- The tooltip-corrected desktop/CLI suite passed 894 desktop plus 12 CLI tests, with six ignored overall. Two new deferred-Weak tests distinguish surviving post-draw text from the earlier eager recording test's false assurance.
- Actual-layout and mounted tests cover shaped geometry, clipping, selection/input preservation and stale admission. CPU timing experiments cover index construction and visible projection, including long wrapped lines; they do not measure native paint or GPU frame latency.
- Corrected native trial 2 confirms readable missing-include messages, both real overlapping warnings on each declaration, wrapped/scrolled geometry, stale clearing on word replacement and Undo, and actual token/zero-width EOF messages at 33:1 and 33:38. Window reflow and modal cancellation/suppression were exercised. Independent review inspected 22 original JPEGs; the archive retains all 49 observations and 53 JPEGs. The trial closed normally with empty logs, unchanged GUI/DLL and exact original disk fixtures. No Save or Apply was performed.
The blank tooltip resulted from draw-local paragraphs expiring before WGPU upgraded its queued weak references. Widget Tree state now owns the current body/footer paragraphs through deferred preparation and clears/replaces them during each draw. This is render-resource retention, not cached hit or publication authority. The deferred-Weak regression tests and independently reviewed corrected native replay support the correction.
Canonical-LF formatting, strict workspace/all-target Clippy with warnings denied, full desktop/CLI tests (906 passed, zero failed, six ignored), and the Windows GUI/CLI build all passed on the same 604 captured inputs. The input manifest SHA256 is 129607a08fea6f9eeae0d40982111c7513b243f6bb311bea8fd59026ce388076. Gates started before the source commit; their exact captured compilation bytes match the published commit. The replay used the preserved GUI with SHA256 9cff5a094e3015d95a2c5fdb8b1ceaf03aced6a09670de32a4ec5ff8dcc94900. Earlier disk-exhaustion failures are retained alongside recovery records, distinguishing user cache deletion from agent compression and read-only checks.
Native acceptance is deliberately scoped. Triple-click did not establish full-line selection; Back after a Problems visit reported no previous location. The initial scroll and border-resize attempts did not move the content or window; later drawer scrolling and maximize/recovery supply the stated geometry evidence. Restore required recovery after a minimized-window capture failure. Zero-wheel pointer placement does not isolate passive CursorMoved or interaction clocks; mounted widget tests own that evidence. Find Escape was tested, not its Close button separately. Saved CLI spans and disk equality do not establish transient GUI model equivalence. See the archive's corrected-trial observations, acceptance record and independent review for exact limitations.
Reproduction
Use the recorded Windows stable-x86_64-pc-windows-gnullvm toolchain and linker/runtime environment. Relevant commands are cargo clippy --locked --offline --workspace --all-targets -- -D warnings, cargo test --locked --offline -p oa-core, cargo test --locked --offline -p oa-desktop -p oa-cli, cargo fmt --all -- --check, and cargo build --locked --offline -p oa-desktop -p oa-cli. Captured runs add JSON output for artifact/log binding; per-run environment changes, including disabled incremental compilation on disk-recovery retries, belong to their receipts. Offline reproduction requires the pinned dependencies locally available. Linux execution remains explicitly user-paused; no Linux or packaged-launch result is claimed.