Record Text integration source review and recovery correction
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# Text integration source review
|
||||
|
||||
The isolated candidate **554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424** combines the
|
||||
compact Text workspace and source diagnostics with the root's newer chooser,
|
||||
selection, rename-preview and navigation boundaries. It is accepted for fresh
|
||||
compilation and interaction checks; **no combined runtime acceptance is claimed**.
|
||||
|
||||
The base is `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f`. Earlier peer production
|
||||
`9fd76aef3ae2810667d3f2b031fc43692fc04c89` is a source comparator, not evidence
|
||||
that this combined candidate passed its tests. Gitea issue27 owns integration
|
||||
and verification. Linux remains deferred by the user.
|
||||
|
||||
## Decisions and review
|
||||
|
||||
- Retain the latest admitted References result across hiding and departure;
|
||||
retention alone must not authorize navigation, reopen a drawer, or replace
|
||||
the current selection. Exact result snapshot bytes and captured interaction
|
||||
context remain necessary for navigation. See the
|
||||
[retention review](text-retained-results-independent-review-20260913.md).
|
||||
- Keep the editor, diagnostic sensor/guard and owned tooltip paragraphs mounted
|
||||
while combining root chooser/input admission. Accepted local Text actions must
|
||||
retire pending diagram navigation and allocation intent; passive scroll reports
|
||||
must remain inert. The [full source review](text-union-final-independent-review-20260913.md)
|
||||
documents exact scope and test-inventory checks.
|
||||
- That review found a recovery defect at immutable `92ff99eb`: filtering a
|
||||
pending-save notice also made previously stale warnings current. Correction
|
||||
`554cfbd` captures the old diagnostic publication's freshness first, retains
|
||||
warning data, and republishes only previously current diagnostics. The
|
||||
[independent correction review](text-recovery-publication-fix-independent-review-20260913.md)
|
||||
accepts the source repair and its two discriminating authored tests.
|
||||
|
||||
The parent inspected the complete recovery diff and both independent reviews.
|
||||
The current/stale controls preserve applied drafts, the accepted Project, source
|
||||
bytes, cursor and history, and exercise a real recovery journal plus an explicitly
|
||||
injected reload-error result. These tests remain unrun at this checkpoint.
|
||||
|
||||
## Verification required
|
||||
|
||||
Obtain the actual desktop listing and reconcile it with the source inventory,
|
||||
then run the Text, diagnostics, local-boundary, lifecycle/recovery and retained
|
||||
root selection/rename checks. Run the combined full desktop suite, changed core
|
||||
include-provenance checks and affected consumers, strict checks and a matching GUI
|
||||
build. Inspect the actual native editor, tooltips, drawers, chooser/rename blocking,
|
||||
stale actions, navigation and recovery workflows. Validate the vendored dependency
|
||||
and notices in the package. Preserve exact ignored-case scope and all failures.
|
||||
|
||||
Old 581/615-input build records do not cover this candidate: the Cargo patch,
|
||||
71 vendored files, scripts and changed core provenance must be included in fresh
|
||||
input capture. Source-level inventory counts are not test results.
|
||||
|
||||
## Preserved records
|
||||
|
||||
`manifest.json` binds the original local review records, handoffs and source
|
||||
inventories copied byte-for-byte into this directory. Original absolute paths or
|
||||
`.local/` references describe the review machine, not a shared filesystem. For a
|
||||
record named in that manifest, use its basename in this directory. Production
|
||||
paths are repository-relative at their explicitly identified source commits.
|
||||
The immutable review of `92ff99eb` intentionally keeps its original repair-required
|
||||
disposition; the later correction review supersedes only that finding.
|
||||
|
||||
These records are reusable source-review evidence, not a live task ledger, a
|
||||
full requirements review or a release. The complete application objective and
|
||||
public source8/analysis work remain unfinished.
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"source": "554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424",
|
||||
"scope": "Source review only; no combined runtime acceptance",
|
||||
"files": [
|
||||
{
|
||||
"path": "text-retained-results-independent-review-20260913.md",
|
||||
"bytes": 11317,
|
||||
"sha256": "22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b",
|
||||
"original": ".local/text-retained-results-independent-review-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "parent-text-union-stage1-review-20260913.md",
|
||||
"bytes": 3805,
|
||||
"sha256": "d5c063005d4dd1a804212e8b7deaae226e7d965cdc1988bd20d165ed23e8dcd9",
|
||||
"original": ".local/parent-text-union-stage1-review-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "text-union-final-independent-review-20260913.md",
|
||||
"bytes": 12728,
|
||||
"sha256": "440f0d8f796d51f67989a3f8a84d096c92cfc1621f432e45a00c601582ac53bd",
|
||||
"original": ".local/text-union-final-independent-review-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "text-union-independent-source-audit-20260913.json",
|
||||
"bytes": 404,
|
||||
"sha256": "a96c27806d9c079e982a5d26806bc9cef24ab8714a58d45d9375599e924a0c13",
|
||||
"original": ".local/text-union-independent-source-audit-20260913.json"
|
||||
},
|
||||
{
|
||||
"path": "text-union-source-handoff-20260913.md",
|
||||
"bytes": 19190,
|
||||
"sha256": "66a56726385e5969751a32c7e3964eed41a52002f4023ace232629d984c69659",
|
||||
"original": ".local/text-union-source-handoff-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "text-union-source-inventory-20260913.json",
|
||||
"bytes": 66595,
|
||||
"sha256": "a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4",
|
||||
"original": ".local/text-union-source-inventory-20260913.json"
|
||||
},
|
||||
{
|
||||
"path": "text-recovery-publication-fix-handoff-20260913.md",
|
||||
"bytes": 4290,
|
||||
"sha256": "c19bd1573e1579df012ec4cff0a03939b8866f282f51b6dba2b8234d86f5f036",
|
||||
"original": ".local/text-recovery-publication-fix-handoff-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "text-recovery-publication-fix-source-manifest-20260913.json",
|
||||
"bytes": 973,
|
||||
"sha256": "b90d42d23601ab415afb5dde1406d66f6ae1c2af0a2076184a870bddb12e741b",
|
||||
"original": ".local/text-recovery-publication-fix-source-manifest-20260913.json"
|
||||
},
|
||||
{
|
||||
"path": "text-recovery-publication-fix-independent-review-20260913.md",
|
||||
"bytes": 5986,
|
||||
"sha256": "e7d5f40b0c4de9d00120088fc4ef86c1cdedfb7e5892dba9971eab1c12a6bc22",
|
||||
"original": ".local/text-recovery-publication-fix-independent-review-20260913.md"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
# Parent review of the first Text integration slice
|
||||
|
||||
2026-09-13. Source review only. Frozen commits inspected: `74542ae2c1b7af3f4f34efcf6a9774822ba4858d` and the separate expectation change `16904398dbddda9c073b3c420807e406086ad2ea`, above `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f`. The later diagnostics working delta was not reviewed through this note. No combined compiler, mounted renderer, native or packaging acceptance follows.
|
||||
|
||||
The parent read the app/controller changes, captured Text command/drawer controller, References view, all three changed retention assertions, relevant lifecycle test setup, and the independent retention report `.local/text-retained-results-independent-review-20260913.md` (SHA256 `22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b`). This is targeted review, not a claim to have read every added test.
|
||||
|
||||
Accepted design: explicit Hide and successive Escape may retain the latest admitted query's exact-current result data and notice. Visibility and permission to navigate are separate. This supports following an engineering investigation across files without repeating the lookup. Accept the three assertion changes in16904398 only together with their preserved hidden drawer, modal/chooser, worker release, selection, actual replacement/Undo, history, whole source and model controls. The decision follows the published interaction contract; compatibility with a peer test alone was not the reason.
|
||||
|
||||
Verified source seams in74542ae:
|
||||
|
||||
- The outer Choose envelope checks the current drawer visit, source key, exact result stamp and exact cached input before root shared reconciliation. Navigation availability retains root diagram chooser/reference-input exclusions and adds the Text menu exclusion.
|
||||
- Completion releases only its matching worker. Display checks the complete captured request, source key, exact returned input, result stamp and action. Navigation adds interaction/raw input, file, cursor and modal admission. Group installation does not reopen or switch the drawer.
|
||||
- The new Text command for diagram usages dispatches the root's captured `SymbolEvent::DiagramUsages`; the peer's empty adapter was not carried over.
|
||||
- Root focus-only source restoration still leaves `source_jump` empty, preserving actual Word/Line selection semantics. Document replacement retains an occupied worker identity without retaining its presentation authority.
|
||||
- Text commands/drawer events are admitted before generic input mutation. Passive References scroll handling stays separate from user intent.
|
||||
|
||||
Remaining review requirements for the next immutable slice:
|
||||
|
||||
1. The745 References view still computes stale/enabled from SnapshotKey alone. Match the early envelope's exact-input check once per view, with an already-displayed row test under same-key active and inactive buffer corruption. Preserve current request, reveal, drawer, chooser, cursor and whole model/source on rejection.
|
||||
2. The author subsequently identified that accepted local Text presentation actions also need the root's pending-navigation/allocation retirement, while rejected intents and passive scroll reports stay inert. Inspect that narrow hook and its current/stale controls before accepting the final composition.
|
||||
3. Inspect diagnostic publication/current-buffer matching, permanent editor/guard topology, include provenance, vendored accessor/notices and the minimal lock-file change in the final frozen commit. The first slice's publication code is not the final diagnostics implementation.
|
||||
|
||||
The feab full desktop gate belongs to the predecessor only:1096 passed,0 failed,3 existing manual ignores on581 unchanged inputs, closed11:37:08Z. It does not validate these Text commits. Root production inputs still440; no Text integration has been published or merged by this review.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Recovery diagnostic publication correction
|
||||
|
||||
Frozen local source `554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424`, parent `92ff99eb54b75a67c6320cad93d11790413bbd8d`, clean `.local/tu`, branch `codex/text-union-956atf-20260913`. Parent owns independent review, integration and compiler/native acceptance. Other worktrees, root, dependencies and targets unchanged.
|
||||
|
||||
The confirmed source defect was `SourceRecovered` filtering `pending_save` and unconditionally stamping every remaining diagnostic with the current source key. A warning retained across a workspace-key departure could thereby acquire fresh action/annotation authority even though recovery had neither recomputed it nor replaced the retained drafts.
|
||||
|
||||
Only `crates/oa-desktop/src/app.rs` and `crates/oa-desktop/src/app/text_workspace/lifecycle_tests.rs` changed: +166/-7. The production change captures publication/source-key equality before filtering. It removes the recovery notice in all matching successful recovery receipts, but republishes the remainder only if they were current beforehand. A previously stale publication remains stale (or absent stays absent). Current warnings get a new generation, so queued old primary/related actions cannot replay. The subsequent existing successful-reload/unapplied-workspace, applied-draft-retention and reload-error branches remain unchanged. This follows the existing `reset_source_navigation_session` freshness guard; no new publication/cache framework or source navigation policy was added.
|
||||
|
||||
[Exact source manifest](text-recovery-publication-fix-source-manifest-20260913.json), SHA256 `b90d42d23601ab415afb5dde1406d66f6ae1c2af0a2076184a870bddb12e741b`, binds both committed blobs, sizes and SHA256s. [Exact source diff](text-recovery-publication-fix-20260913.patch), SHA256 `35b5b224a50aa7e3e7e1b535388e5e7239669719c0fcba8fcacae5323e80442c`.
|
||||
|
||||
Two new test declarations, both UNCOMPILED/UNRUN:
|
||||
|
||||
- `app::text_workspace::lifecycle_tests::recovery_retains_current_warning_authority_with_drafts_and_reload_failure`
|
||||
- `app::text_workspace::lifecycle_tests::recovery_does_not_republish_stale_warnings_after_workspace_key_departure`
|
||||
|
||||
Each runs a successful-load and reload-error receipt arm. The fixture saves a real private temporary source project, writes the established recovery journal format, derives pending-save diagnostics/target through `load_project`/`recovery_target`, dispatches normal `SourceRecover`, calls the actual `recover_snapshot` worker and delivers the matching `SourceRecovered` receipt. Returned App tasks are deliberately not polled, following the existing deterministic lifecycle harness. The error arm explicitly injects `receipt.disk = Err(...)` after successful real journal recovery; it does not claim to provoke an OS reload failure. Tests themselves have not run, so no journal execution/result is claimed by this handoff.
|
||||
|
||||
Both cases retain newer applied-workspace drafts. The positive publishes its warning after the draft edit and requires a current annotation snapshot and fresh primary/related navigation. The negative publishes before `Workspace::edit` advances the source key, preserves the old warning vector while lint is outstanding, and requires no fresh diagnostic message or annotation snapshot afterward. Both require removal of pending_save, consumed recovery ownership, unchanged source key/editor cursor/drawer visit/full raw bundle/accepted Project Arc/revision/Undo-Redo state, exact restored disk bytes, and rejection of captured pre-recovery primary/related actions before source interaction/reveal changes. The negative directly fails the unconditional 92ff republish predicate; the positive prevents a blanket diagnostic-clear workaround. Existing chooser/passive/retention tests and source branches are untouched.
|
||||
|
||||
Completed: standalone rustfmt (edition 2024, skip_children=true) for both owned files; git diff --check; exact two-file scope check; clean status after commit. No Cargo, rustc, build, tests, GUI, target changes or Gitea operations. No test names removed, no ignores added. Parent/fresh critic should inspect this source and run these two cases plus retained lifecycle/diagnostic and root recovery cases when the compiler lease permits. The broader Text union and public release remain unaccepted pending their gates.
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# Independent recovery publication correction review
|
||||
|
||||
**Source acceptance for integration and fresh rerun; no remaining repair-required finding in this bounded correction.** This closes F1 at the source level from [the immutable 92ff review](text-union-final-independent-review-20260913.md). It does not establish test or native acceptance.
|
||||
|
||||
Reviewed `554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424`, exact parent `92ff99eb54b75a67c6320cad93d11790413bbd8d`. Verified clean `.local/tu` at that pin, the entire two-file diff (+166/-7), and both committed blob IDs/byte counts/SHA-256 values against the author's source manifest. No source edits, compiler, GUI, or test execution occurred.
|
||||
|
||||
## Production repair
|
||||
|
||||
At `crates/oa-desktop/src/app.rs:3395–3403`, `SourceRecovered` captures whether the previous diagnostic publication matches the retained source key before filtering `pending_save`. It republishes only when that precondition was true. Thus a stale publication stays stale, absence stays absent, and current retained warnings acquire a new generation that rejects queued old actions.
|
||||
|
||||
The fix does not clear valid warnings as a shortcut, mint authority from span validity, or recompute diagnostics over unrelated disk bytes. Subsequent unapplied reload, applied draft retention, previous-Save-As target handling, and reload-error branches are unchanged. A later destination/session reset uses its existing freshness check, so this guard does not make stale warnings current indirectly through that reset. Filtering the retained vector under a stale generation is safe here: actions and annotations remain rejected by the mismatching source key. The new generation on a current publication also causes annotation/gesture identity to change when the displayed vector changes.
|
||||
|
||||
## Test discrimination and limits
|
||||
|
||||
The two new exact declarations are:
|
||||
|
||||
* `app::text_workspace::lifecycle_tests::recovery_retains_current_warning_authority_with_drafts_and_reload_failure`
|
||||
* `app::text_workspace::lifecycle_tests::recovery_does_not_republish_stale_warnings_after_workspace_key_departure`
|
||||
|
||||
Each exercises successful reload and an explicitly injected `receipt.disk = Err(...)`. The fixture creates a private temporary source project and the real journal format, reads the actual pending-save target, dispatches normal `SourceRecover`, calls `recover_snapshot`, and delivers its matching receipt. Source inspection confirms that worker invokes `recover_project` and then `load_project`. App-returned asynchronous tasks are deliberately not polled. The error arm is a deterministic receipt-branch test after successful journal recovery, not evidence of an actual operating-system reload failure.
|
||||
|
||||
Both controls include newer applied-workspace drafts. The positive publishes the warning after that draft, so the warning is current; the negative publishes before `Workspace::edit` advances the key, preserving the old diagnostic vector while awaiting lint. This directly distinguishes the formerly unconditional republish: at 92ff the negative's publication-equality, missing-annotation and unavailable-action assertions fail. A blanket clear/revoke workaround fails the positive's retained warning, annotation and fresh primary/related navigation assertions.
|
||||
|
||||
The tests also require exact restored disk bytes, removed journal and pending-save notice, consumed recovery ownership, unchanged source key/cursor/drawer visit/raw bundle, exact accepted Project Arc, revision and Undo/Redo state. Captured old primary and related actions must remain inert before interaction/reveal changes; freshly captured current primary and related actions must navigate. The stale test's newly generated action check covers the primary location, while its captured-action loop covers both primary and related locations; both use the same publication admission. No test was removed or ignored.
|
||||
|
||||
This is a focused applied-workspace/key-departure test rather than an end-to-end Create File/Close File or OS failure test. No-publication and unapplied-reload branches receive no new dedicated test, but the simple Option guard handles absence and leaves the existing reload branch intact. These are scope limits, not additional repair requirements identified by this review.
|
||||
|
||||
## Required gates
|
||||
|
||||
Run both new cases and the retained `app::text_workspace::lifecycle_tests` suite, diagnostic/publication/gesture and local-boundary tests on the exact corrected source. Retain the root recovery regressions: `recovery_open_finds_first_save_journal_without_an_entry_file`, `recovery_after_first_save_failure_retains_target_then_retries_without_reentering_path`, `recovery_target_survives_edit_lint_apply_and_rejected_recovery_until_success`, and `recovery_of_previous_save_as_target_does_not_redirect_current_project`.
|
||||
|
||||
The combined Text union still needs fresh actual listing, relevant focused/full/strict gates, core raw-include tests, vendor/notice/package input binding, and native interaction verification described in the original review. This correction adds exactly two authored desktop tests to the prior inventory; it does not convert lexical counts to executed outcomes. All tests remain UNCOMPILED/UNRUN in this review.
|
||||
|
||||
## Evidence bindings
|
||||
|
||||
* Handoff: `text-recovery-publication-fix-handoff-20260913.md`, SHA-256 `c19bd1573e1579df012ec4cff0a03939b8866f282f51b6dba2b8234d86f5f036`.
|
||||
* Exact source manifest: `text-recovery-publication-fix-source-manifest-20260913.json`, SHA-256 `b90d42d23601ab415afb5dde1406d66f6ae1c2af0a2076184a870bddb12e741b`.
|
||||
* Exact diff: `text-recovery-publication-fix-20260913.patch`, SHA-256 `35b5b224a50aa7e3e7e1b535388e5e7239669719c0fcba8fcacae5323e80442c`.
|
||||
* `app.rs` blob `1e80ec40bb23c6c205fb79f5fb9300319a3996da`, 252446 bytes, SHA-256 `d96da53d9d27a32af4a0efa587dc9eded3eb4e8be3abe4eb254c42b0f7d937f1`.
|
||||
* `app/text_workspace/lifecycle_tests.rs` blob `53b62878f2a6f44a5faf2b9981d243b1dac86d8c`, 23909 bytes, SHA-256 `077cb8592297ef04c506abf8a97773cee142078def0ea5428fb859356c7b7206`.
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"source": "554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424",
|
||||
"base": "92ff99eb54b75a67c6320cad93d11790413bbd8d",
|
||||
"files": [
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app.rs",
|
||||
"git_blob": "1e80ec40bb23c6c205fb79f5fb9300319a3996da",
|
||||
"bytes": 252446,
|
||||
"sha256": "d96da53d9d27a32af4a0efa587dc9eded3eb4e8be3abe4eb254c42b0f7d937f1"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app/text_workspace/lifecycle_tests.rs",
|
||||
"git_blob": "53b62878f2a6f44a5faf2b9981d243b1dac86d8c",
|
||||
"bytes": 23909,
|
||||
"sha256": "077cb8592297ef04c506abf8a97773cee142078def0ea5428fb859356c7b7206"
|
||||
}
|
||||
],
|
||||
"new_tests_unrun": [
|
||||
"app::text_workspace::lifecycle_tests::recovery_retains_current_warning_authority_with_drafts_and_reload_failure",
|
||||
"app::text_workspace::lifecycle_tests::recovery_does_not_republish_stale_warnings_after_workspace_key_departure"
|
||||
],
|
||||
"checks": "Standalone rustfmt and git diff --check only. No Cargo/rustc/test/UI execution."
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
# Independent review: retained Text references and navigation authority
|
||||
|
||||
Source-only review, 2026-09-13. Reviewed the published contract at `2df7f580aa4bd728a728c83ac10e6ccc956ef069`, implementation at `9fd76aef3ae2810667d3f2b031fc43692fc04c89`, and affected root tests at `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f`. Read the existing local Text/root integration review as context. No mutable `.local/tu` files, compiler, GUI, source edits, or Gitea writes. New integration commits mentioned below are author reports, not reviewed sources in this note.
|
||||
|
||||
## Decision and user benefit
|
||||
|
||||
Retaining the latest exact-current References data after Hide, a tab switch, file/page departure, or a modal is a justified interaction decision. References are an investigation the user may consult across files; hiding that investigation should not require recomputation or erase its captured subject and grouping. A late completion may finish the investigation, but must not move the caret, revive the old selection, reopen the drawer, select References over another tab, or alter a diagram chooser. Explicitly reopening References is a new visibility action, not renewed permission for the old direct-definition jump.
|
||||
|
||||
This is supported directly by the published `harness/text-workspace-interaction-contract-20260912.md`, sections “Retained results do not retain permission to navigate” and the successive-Escape rule. It is a derived design decision, not a quotation of a user requirement. Its cost is that retained rows can be historical: the captured subject and stale state must remain visible, and row admission must agree with their enabled appearance. The root's previous discard-on-second-Escape behavior is coherent but provides less continuity; retaining data is preferable under this explicit visibility/navigation separation.
|
||||
|
||||
The root expectation changes are justified on that basis, not simply because peer tests expect them. In `app/source_symbols/tests/departure_selection.rs:44`, replace only the second-Escape `results/notice == None` oracle with exact retained Arc and notice, with the drawer still hidden. Preserve the first-Escape Find closure, absence of further Escape subscriptions after second closure, effective Word/Line selection, actual replacement and Undo, whole SourceBundle, revision, history and accepted-snapshot assertions. The two root tests at `app/source_symbols/tests.rs:1539` and `:1586` may likewise expect exact retained completion data while preserving worker release, modal/chooser, no navigation/reveal, cursor, source, and model assertions. A retained Arc alone would be an inadequate oracle.
|
||||
|
||||
## Source findings
|
||||
|
||||
**F1 — conditional P2 in the published version: enabled appearance and early admission trust the key more than the final row handler does.** At `9fd76ae:crates/oa-desktop/src/views/source_symbols.rs:25`, `stale` compares only `SnapshotKey`; enabled rows add only navigation availability. The outer Choose envelope at `app.rs:1205–1220` similarly checks drawer, visit, availability, key and result stamp, but not cache bytes. The later `app/source_symbols.rs:223` Choose arm checks `source_snapshot_matches` and rejects stale bytes. Thus a deliberately changed workspace buffer under the same key can paint as fresh/enabled, enter shared interaction invalidation, and only then refuse navigation. This does not demonstrate a stale jump or model mutation. Normal `SourceEdit` calls Workspace::edit, which advances the revision for changed text (`app.rs:2987`, `source_workspace.rs:233`), so the same-key case is an adversarial invariant violation rather than an established ordinary-user path.
|
||||
|
||||
Required correction for the union's stated exact-byte guarantee: the early Choose envelope must reject a missing/nonmatching exact cache before shared interaction changes, and the visible stale/disabled state must use the same current-source evidence. A single computed view-level validity value suffices; do not repeat whole-input comparison per row or introduce a new parser/index rebuild. Positive control: unchanged bytes/current visit permits the correct original row. Negative control: retain a displayed result, mutate an active or inactive loaded buffer without advancing its key, then assert stale/disabled presentation and that the captured Choose preserves current interaction, request/reveal, drawer/visit, chooser, cursor, source and model. The existing hidden-completion same-key test is necessary but does not cover this already-displayed-row path. Falsifier: a source-level current-byte check at both the view and pre-interaction envelope, with that focused negative control. Arendt reports `74542ae2` already adds the envelope byte check and is examining the view; these reports are not independent verification of those commits.
|
||||
|
||||
**No source finding against the core retention/completion separation.** `source_symbols.rs:373–430` first recognizes the occupied worker's job, releases that slot, and separately evaluates navigation and display ownership. Display requires the exact stored Request, current key, exact source snapshot, result stamp and action. Navigation additionally requires the current interaction token, raw input clock, active path, cursor and current modal/availability admission. `source_interaction` at `:130` revokes request/reveal/jump while leaving display ownership intact. Completion installs result data and initial file groups but never calls drawer visibility or scroll restoration. `text_workspace.rs:271` installs groups only for the matching not-yet-installed presentation; it does not rotate the visit or overwrite later group choices. `show_text_drawer` at `:613` revokes old navigation, rotates the visit, and restores retained scroll only on an explicit References opening.
|
||||
|
||||
Exact-current evidence is more than text equality in one file. `source_navigation/query.rs:769–799` checks key, entry, applied state, complete loaded file count, unique paths, every path's exact bytes, admission and validation evidence. Equal bytes after Undo do not authorize an older key. Document reset (`app.rs:979`) reconstructs presentation state while preserving only the occupied worker identity. Destination/session reset and repair replacement use `clear_source_presentation` (`app.rs:683`), clearing display ownership and Text state while retaining that slot. Therefore the old completion can release its own resource but cannot populate the new document, even when its paths and text happen to match.
|
||||
|
||||
One nuance: the published implementation has one active worker. A second query attempted while it is occupied is explicitly refused with “Navigation is finishing. Try again shortly.” It may explicitly expose References, but is not a newly admitted query and does not replace `display_request`. The old completion may subsequently fill its own captured subject. Describe the guarantee as “latest admitted query wins”; do not claim queueing or supersession of every attempted command. Once a new request is admitted, an old/duplicate completion cannot release its slot or replace its display.
|
||||
|
||||
## Required acceptance invariants and controls
|
||||
|
||||
1. **Visibility:** finish a direct-definition request after Hide, Problems/Status switch, or file/page departure. Release the matching slot and retain the exact result Arc only when source remains current. Drawer/tab/visit, scroll, focus, active file, cursor, effective selection, back history, source bytes and model remain unchanged. Explicit reopening shows the retained subject without replaying direct navigation. Published controls: `delayed_definition_after_hide_or_tab_change_retains_data_without_reopening_or_focus` (:1809), `close_during_busy_retains_hidden_completion_without_reopening_or_navigation` (:590), and `completion_retains_current_display_but_rejects_navigation_after_context_changes` (:506).
|
||||
2. **Freshness:** changed revision, new session, missing/added file or exact-byte mismatch cannot publish a fresh result or navigate. Include an inactive-file change and deliberately unchanged key; unchanged source is the positive control. Published `hidden_completion_checks_exact_bytes_even_when_snapshot_key_was_not_advanced` (:1921) covers the adversarial changed-byte completion. F1 requires the separate existing-row control described above.
|
||||
3. **Worker and query ownership:** unknown job cannot free the current worker; duplicate old completion cannot replace a later admitted request; same job with changed Request envelope cannot publish; matching old job after reset frees only its retained slot and leaves new presentation empty. Published controls at :568, :1337, :1858 and :1893 inspect these cases. Preserve the distinction between a rejected busy attempt and an admitted new request.
|
||||
4. **Union modal admission:** a current completion may populate retained data behind the root diagram chooser, reference input, Text menu or rename modal, but cannot reconcile/replace that chooser, switch page/file, reveal, alter the effective selection, mutate the model, or issue a later autonomous jump when the modal closes. Keep root chooser/reference-input exclusions plus peer Text-menu exclusion in navigation availability. Process completion before generic shared interaction/reconciliation to release the worker without side effects. Peer `None` DiagramUsages adapter is not acceptable for the root union; keep its captured target/chooser semantics.
|
||||
5. **Old UI authority:** hiding/reopening or References→Problems→References rotates visit ownership; an old row click or scroll message cannot mutate the new visit. Choosing a currently visible valid row remains possible. Retained data is not permission for old widgets. Retained stale groups may expand for inspection, but their targets cannot navigate. The contract's persistent input guard is needed for a press/release across coalesced redraws, in addition to message admission.
|
||||
6. **Escape/editing:** menu, Find and drawer close one layer per captured key. Closing Find leaves the existing drawer visit intact. Closing the drawer hides it and revokes navigation while retaining data/notice. Preserve root's real Word/Line insertion and Undo oracle, not only cursor equality: the effective selection can differ from the raw cursor range.
|
||||
|
||||
## Bounds and disposition
|
||||
|
||||
The exact published code and authored controls support the retention decision, with F1's current-byte presentation/early-boundary correction required for the stronger union invariant. I did not find a path in the reviewed completion handler that reopens a hidden panel, restores an old selection, displaces a newer admitted query, or admits a changed-byte successful result. Error completions lack a returned source snapshot and can update only an error notice after owner/key checks; they cannot publish rows or navigate. This is not a claim that an error is exact-byte-validated.
|
||||
|
||||
No tests were run and no integrated/native acceptance is asserted. The peer availability predicate is insufficient by itself for root's additional chooser/reference-input state. The union production commit, its three test-only expectation changes, new gate outcomes, rendered stale cue at minimum width, and real hidden/tab/modal interactions need parent integration review and verification. Parent remains the semantic and publication owner.
|
||||
@@ -0,0 +1,67 @@
|
||||
# Independent Text/root source review — 2026-09-13
|
||||
|
||||
## Disposition and scope
|
||||
|
||||
**Repair required before admitting this source candidate for the combined rerun.** One confirmed P2 freshness defect is described below. The remaining inspected integration seams are consistent with the published Text contract and retained root behavior, subject to actual compilation, tests, notice generation, and native verification. This is a source review, not runtime acceptance.
|
||||
|
||||
Reviewed immutable commit `92ff99eb54b75a67c6320cad93d11790413bbd8d`, relative to root `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f`. The worktree was verified clean at that pin before review; subsequent author corrections are outside this report. Published contract/source comparators are `2df7f580aa4bd728a728c83ac10e6ccc956ef069` and `9fd76aef3ae2810667d3f2b031fc43692fc04c89`, including `harness/text-workspace-interaction-contract-20260912.md`. The parent accepted the three retained-data assertion changes at `16904398dbddda9c073b3c420807e406086ad2ea`; I independently reviewed their meaning rather than treating that acceptance as proof.
|
||||
|
||||
No compiler, application, GUI, package, notice collector, or test execution was performed. No production source was edited. All test descriptions below concern authored assertions. The separate S3 worktree remains frozen.
|
||||
|
||||
## F1 — P2: recovery republishes stale diagnostics as current
|
||||
|
||||
**Source:** `crates/oa-desktop/src/app.rs:3393–3399`, `Message::SourceRecovered`; publication helper at approximately 718. The handler filters `pending_save` from the retained diagnostic vector and unconditionally calls `publish_source_diagnostics`. That helper creates a diagnostic publication stamped with the current `source_key`, regardless of the vector's original publication.
|
||||
|
||||
The vector can legitimately outlive its source key. `create_source_file` (approximately 4297–4361) edits the entry include, discovers a file, changes the workspace/version and requests lint without replacing the old diagnostics immediately. `SourceCloseFile` (approximately 3357–3362) similarly changes workspace membership/version while an old diagnostic vector remains retained. This is safe while the old publication remains stale. Recovery of an applied source workspace is allowed with current drafts and intentionally retains those drafts. Both the applied `Ok(disk)` branch and the `Err(error)` reload branch therefore can reach the unconditional republication without installing source bytes corresponding to the old warning spans.
|
||||
|
||||
The resulting warning/related locations now pass the publication/key check in `app/text_workspace.rs:616–632`, provided their old spans still fit a current file. A valid byte boundary is not evidence that the diagnostic was produced for those bytes. By contrast, `reset_source_navigation_session` already captures whether the old publication was current before deciding whether it can be republished.
|
||||
|
||||
**Required repair:** capture old publication freshness before filtering. Only mint a current publication for retained warnings when the old publication was current for the retained source. Otherwise leave authority revoked/stale or replace the diagnostics with results computed for the current source. Do not change the recovery policy that preserves current model and drafts.
|
||||
|
||||
**Discriminating controls:** start with a warning containing primary and related locations plus a pending-save notice. For a current publication, deliver a matching successful recovery receipt and verify that only the pending-save notice disappears and the current locations remain actionable. For a stale publication after a legitimate workspace/key change, deliver matching recovery and verify that no retained warning or related location becomes actionable, including when the disk reload fails. Preserve full Project, source bundle, drafts, and recovery semantics. Tests must distinguish publication authority, not merely check the displayed warning count.
|
||||
|
||||
Parent independently confirmed this finding and assigned a separate bounded correction. That future repair is not included in this pin's disposition.
|
||||
|
||||
## Verified integration invariants
|
||||
|
||||
### Diagnostics and exact source ownership
|
||||
|
||||
* Ordinary editor mutation and Undo/Redo update workspace/source identity and revoke old diagnostics before requesting lint. Source reset/open paths replace or clear presentation state. Destination/session reset checks whether the previous diagnostic publication was current before restoring it. F1 is the remaining observed exception.
|
||||
* `SourceIncludedLoaded` checks the matching version/entry and exact retained active, inactive, and detached file bytes before installing recovery metadata, discovery, or diagnostics. Newly discovered files are intentionally allowed. `crates/oa-core/src/source_files.rs` now lints the raw reachable bundle instead of publishing post-stabilization compiler spans; this preserves original include/source coordinates. Two authored core tests distinguish missing-ID and legacy cases.
|
||||
* Diagnostic actions require the current Problems drawer visit, exact publication identity, current source key, loaded target file, ordered span, and UTF-8 boundaries before root navigation/interaction changes. Annotation presentation additionally checks that the active editor buffer equals the captured source text. These checks rely on legitimate setter/version ownership; they should not be described as a universal complete-byte witness on every diagnostic event. References have the additional whole-snapshot byte check described below.
|
||||
|
||||
### Retained References and stale input
|
||||
|
||||
* Retained data does not itself reopen the drawer or authorize navigation. Completion separately checks ownership of the in-flight request, the latest admitted display request, snapshot identity and exact bytes. Navigation additionally requires the captured interaction/raw input clock, file/cursor, and availability. Hide/departure retention improves return-to-results workflow without granting permission to reveal the old selection.
|
||||
* `app/source_symbols.rs:32–76` rejects stale Choose envelopes, including cache byte mismatch, before root shared boundaries. `source_results_current` checks key and exact cached snapshot. The visible References view computes that validity once and uses it for both stale summary and row enablement; this fixes the earlier same-key changed-buffer paint/dispatch discrepancy.
|
||||
* The authored `same_key_changed_bytes_mark_retained_rows_stale_before_choice_boundaries` tests both active and inactive buffer mutations with the same key, shaped stale presentation, and preservation of a pending reveal/intent. It is a useful falsifier; it has not been run.
|
||||
* The scoped-Escape assertion change checks the exact retained result Arc and notice after closing References. Word/Line effective selection, actual subsequent replacement and Undo, whole source/model, accepted snapshot, and history assertions remain. The two modal/chooser completion changes likewise require the exact retained completion Arc while retaining navigation, cursor, worker, chooser and model/source checks. The root selection helper and mounted focus-selection test file are byte-identical to the base. Retention is justified under the published contract, not merely for compatibility with peer tests.
|
||||
|
||||
### Root boundaries and permanent widgets
|
||||
|
||||
* Text events enter their own admission before shared root interaction handling. Wrong document/session/visit, stale menu tokens or diagnostic publications, invalid geometry, and blocked commands return before their local mutation boundary. Accepted drawer/menu/diagnostic actions call the existing root pending-navigation and allocation hooks. Source commands dispatch through the existing root update path.
|
||||
* `ReferenceScrolled` updates passive geometry without invoking those hooks or changing interaction; valid `PreviewScrolled` retains the root's early inert return. Existing root reference chooser, Text menu, rename and other modal availability checks are composed rather than replaced with peer-only guards.
|
||||
* The editor is one permanent `text_editor` with the existing content, root identity/bindings/style/highlighter. Decorations, viewport sensor and diagnostic gesture guard remain mounted across diagnostic availability changes. The guard quarantines obsolete pointer terminals and prevents old releases from activating replacement rows. Widget `diff`, layout, operate, update and overlay paths forward to the actual child rather than reconstructing a second editor.
|
||||
* The annotation widget reads geometry from the real editor through the small read-only vendor accessor. It owns tooltip body/footer paragraph objects through deferred rendering, ends editor borrowing before later rendering operations, and bounds tooltip content. Hover is disabled behind blocking chooser/rename state. The inspected mounted/CPU tests do not establish production GPU/native lifetime or rendering success.
|
||||
* Authored positive and negative local-boundary tests preserve complete source/model/history and camera/allocation boundary values where applicable. The positive control retires a real pending destination and allocation epoch; stale contexts preserve them. These assertions give meaningful discrimination beyond testing only a local boolean.
|
||||
|
||||
## Inventory, vendor and test evidence
|
||||
|
||||
The independent audit verifies the exact 107-path change inventory: 22 modified and 85 new files. Base/final Git blob IDs, lengths and SHA-256 values were checked, plus exact peer blob identity for all 71 vendor files: 200 recorded base/final/peer bindings. The lexical test-name additions/removals were independently derived, including `tokio::test` attributes, and agree with the submitted inventory: **91 added, 5 removed; desktop net +84 and core net +2**. These are source counts, not actual test-list membership or successful outcomes.
|
||||
|
||||
The three newly imported existing-peer manual ignores are `final_multi_glyph_cluster_anchor_uses_logical_trailing_advance_edge`, `mixed_direction_omitted_separator_has_one_logical_predecessor_anchor`, and `annotation_projection_cost_distributions`. They remain unexecuted limitations; they must not be counted as passing verification.
|
||||
|
||||
The workspace Cargo change adds the vendor exclusion and iced_widget patch. The lockfile removes that package's registry source/checksum without changing its resolved dependencies; desktop Cargo inputs remain unchanged. All 71 vendored files match the reviewed peer source, including license, upstream metadata and patch rationale. The documented upstream accessor patch is narrow and read-only. `.gitattributes` preserves exact vendor bytes.
|
||||
|
||||
The notice collector distinguishes workspace packages from non-workspace local dependencies, verifies repository containment/reparse constraints, requires the vendored license, records local source hashes/path and includes patch rationale. Registry supplements require actual registry checksum evidence. The imported collector retains this root's desktop/server default scope. Its behavior has been reviewed, not executed. Future gates/package manifests must include the new vendor inputs; old input counts and former core equivalence evidence cannot certify this changed source.
|
||||
|
||||
## Evidence bindings and remaining validation
|
||||
|
||||
* Handoff: `.local/text-union-source-handoff-20260913.md`, SHA-256 `66a56726385e5969751a32c7e3964eed41a52002f4023ace232629d984c69659`.
|
||||
* Submitted exact inventory: `.local/text-union-source-inventory-20260913.json`, SHA-256 `a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4`.
|
||||
* Isolated boundary diff: `.local/text-union-local-mutation-boundary-20260913.patch`, SHA-256 `26d3d86500dd0276c9e276fe8726da4d28b9f39dbdb082cce5108708a9b86fcb`.
|
||||
* Independent source audit: `.local/text-union-independent-source-audit-20260913.json`, SHA-256 `a96c27806d9c079e982a5d26806bc9cef24ab8714a58d45d9375599e924a0c13`.
|
||||
* Parent stage-one context: `.local/parent-text-union-stage1-review-20260913.md`, SHA-256 `d5c063005d4dd1a804212e8b7deaae226e7d965cdc1988bd20d165ed23e8dcd9`.
|
||||
* Earlier independent retention analysis: `.local/text-retained-results-independent-review-20260913.md`, SHA-256 `22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b`.
|
||||
|
||||
Review was concentrated on changed production ownership/lifecycle seams and discriminating tests, with exact inventory verification; it was not a line-by-line independent proof of every imported test or vendored upstream implementation. After F1 is corrected and reviewed, obtain fresh exact-source listing/focused/full/strict evidence, notice/package validation and realistic native Text/graphics workflows. No successful rerun or final Text/native acceptance is asserted here.
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"source": "92ff99eb54b75a67c6320cad93d11790413bbd8d",
|
||||
"base": "feab2020d8e5b6bfdb59c86ab4aee161617b8b6f",
|
||||
"inventory_sha256": "a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4",
|
||||
"changed_paths": 107,
|
||||
"verified_base_final_peer_blob_bindings": 200,
|
||||
"exact_peer_vendor_files": 71,
|
||||
"lexical_test_additions": 91,
|
||||
"lexical_test_removals": 5,
|
||||
"runtime": "UNRUN"
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
# Text workspace and diagnostics union: frozen source handoff
|
||||
|
||||
Local-only source candidate; compilation, tests, native behavior, packaging and integration are UNRUN. Parent owns review, compiler lease, integration and publication. No further source work is active.
|
||||
|
||||
## Immutable inputs and commits
|
||||
|
||||
- Worktree `.local/tu`, branch `codex/text-union-956atf-20260913`; clean after commit and again during handoff readback.
|
||||
- Base `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f` (includes reviewed PreviewScrolled correction).
|
||||
- Workspace peer `2df7f580aa4bd728a728c83ac10e6ccc956ef069`.
|
||||
- Diagnostics peer `9fd76aef3ae2810667d3f2b031fc43692fc04c89`, published evidence `32368713ef15272c697c7e6388dffc8a29bfae3e`; its parent `b4b860f2776aa8251306d83ff58362c0359176ef` has the same crates/scripts/Cargo inputs as 2df. No later defaults/source8 proposal imported.
|
||||
- `74542ae2c1b7af3f4f34efcf6a9774822ba4858d`: workspace composition and captured drawer admission (20 files, +5480/-736).
|
||||
- `16904398dbddda9c073b3c420807e406086ad2ea`: separately reviewable three retained-result assertions (2 files, +20/-3).
|
||||
- FINAL `92ff99eb54b75a67c6320cad93d11790413bbd8d`: diagnostics/provenance/dependency composition, byte-current References presentation and accepted local-boundary hook (98 files, +35959/-208).
|
||||
|
||||
The intermediate first commit deliberately retains three old assertions; gate the coherent final source. Root source, AGENTS, PROJECT_GOAL, native fixtures and package configuration were not edited.
|
||||
|
||||
## Exact source delta and dependency scope
|
||||
|
||||
[Source inventory](text-union-source-inventory-20260913.json) records every base/final Git blob, byte count and SHA256: 107 changed paths, 85 new and 22 modified. Of these, 71 are exact published vendored files; 36 are other files. This is a source delta, not a new admitted compiler input map. SHA256: `a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4`.
|
||||
|
||||
Cargo.toml adds only the iced_widget workspace exclusion and crates.io local patch. Cargo.lock removes only iced_widget 0.14.2 registry source and checksum, leaving root resolution/dependencies intact. Desktop Cargo.toml is unchanged (root already had unicode-segmentation). The 71 vendored files, including license, upstream manifest, patch rationale, original manifests, VCS metadata and SVG asset, match 9fd Git blobs byte for byte. Batch cat-file validation checked headers, sizes and each trailing LF. The published upstream modification is the read-only Content::with_editor accessor. Both Windows notice scripts are imported together. `.gitattributes` preserves exact vendor bytes. CLI change is comment-only; core discovery now derives diagnostics from original reachable bytes before UUID elaboration.
|
||||
|
||||
A new build recorder must cover the actual vendored dependency sources, manifests and included assets; the old 581-file root manifest is not sufficient by assumption. Core provenance production also changed, so old oracle/core equivalence must not be inferred from a version label.
|
||||
|
||||
## Composition and independent-review seams
|
||||
|
||||
The editor remains in permanent strip/Find/editor/drawer/status slots with retained sensor and input guard. Root source-editor palette, dynamic IDs, F2/F12, chooser/reference-input restrictions, KeyboardBoundary subscription partition and valid PreviewScrolled early dispatch remain. Root behavior, diagram, forms, context menu and style trees have no base-to-final diff.
|
||||
|
||||
Drawer Show/Hide/Resize captures document, source session and drawer visit. Rejection occurs before shared root boundaries. Source commands re-enter existing guarded root dispatch. The real compact Diagram Usages command now starts the root captured source query and existing diagram chooser, rather than the peer placeholder.
|
||||
|
||||
Accepted local Text mutations use the existing pending-reveal reconciliation and allocation-before hooks only after their own admission. See [explicit hook and positive-test diff](text-union-local-mutation-boundary-20260913.patch), SHA256 `26d3d86500dd0276c9e276fe8726da4d28b9f39dbdb082cce5108708a9b86fcb`. This is the exact 169-to-92 diff for text_workspace.rs and palette_union.rs; it also contains the annotation-snapshot accessor and debug test cfg changes. Hook call sites: admitted menu open/current dismiss, current Show/Hide, finite changed Resize, admitted ToggleFile, current diagnostic jump and admitted Drawer command. Dispatched commands use App::update; passive reference/preview measurements do not enter the hook. Review whether every accepted-local path should retire allocation/navigation; the positive mounted test explicitly requires this, while stale controls preserve them.
|
||||
|
||||
References exact-cache validity is computed once per visible References view and shared by stale summary and row enabled state. Early Choose also checks exact current source bytes before any source-interaction boundary. The new displayed-row negative changes either active or inactive bytes without advancing SnapshotKey, checks actual shaped Stale feedback, then proves a captured choice preserves pending reveal and other intent. Ordinary Workspace edits advance the key; this is an adversarial identity test, not a claimed observed runtime corruption.
|
||||
|
||||
Raw IncludesLoaded admission compares current entry and all retained file bytes before discovery metadata or diagnostic publication. Diagnostic decorations retain owned current-frame tooltip paragraphs for the deferred renderer. Chooser/modal availability suppresses diagnostic actions/hover details without removing current marks. Publication during rename leaves a real mounted preview report passive.
|
||||
|
||||
## Retention contract and preserved tests
|
||||
|
||||
Primary contract: `2df7f580:harness/text-workspace-interaction-contract-20260912.md`, especially retained results versus navigation permission and the permanent five-slot lifecycle. Independent source review: [retention review](text-retained-results-independent-review-20260913.md), SHA256 `22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b`. Parent accepted the following separate 169 assertions under that contract:
|
||||
|
||||
- `scoped_escape_retains_references_then_closes_them_without_losing_effective_selection`: second Escape hides the drawer, retains the exact result Arc and notice; Word/Line selection, replacement, Undo and exact source/model/history checks remain.
|
||||
- `combined_modal_completion_releases_worker_without_navigation_or_model_changes`: exact current result Arc can finish behind modal; worker release and absence of navigation/source/model effects remain.
|
||||
- `combined_reference_chooser_blocks_navigation_and_completion_precedes_reconciliation`: same retained-data rule, preserving chooser identity, early completion and absence of navigation effects.
|
||||
|
||||
All root 16 selection names remain. Root selection helper and four focus-fixture bytes are unchanged. Four accidentally duplicated peer departure bodies were removed from the parent tests.rs because byte-identical bodies already exist under root `tests/departure_selection.rs`; their hashes are in the inventory. Root child-module registration/paths are retained. No test has been counted twice to inflate the expected listing.
|
||||
|
||||
## Authored union evaluators (all UNRUN)
|
||||
|
||||
The inventory gives exact source path/name pairs. Seven union-specific cases exercise:
|
||||
|
||||
1. Stale captured/mounted drawer controls preserve pending navigation, source/evidence, camera and allocation intent.
|
||||
2. Current Show/mounted Resize/Hide retire pending destination and advance allocation epoch while remaining live.
|
||||
3. Compact Diagram Usages follows actual query completion into the existing captured chooser.
|
||||
4. Independently wrong document/session/visit rejects each drawer action.
|
||||
5. Actual chooser suppresses diagnostic action and mounted hover until closed; old publication remains rejected and a new target works.
|
||||
6. Diagnostic publication during modal rename preserves actual fractional preview report and rounded painted coordinate without interaction/allocation changes.
|
||||
7. Already displayed References with same key but changed active/inactive bytes shows Stale and rejects old Choose before boundaries.
|
||||
|
||||
Mounted annotation bridge uses the actual App snapshot/availability/raw clock and existing CPU graphics Editor/Recorder evaluator, copying Content for the renderer type. It does not claim a native window or the complete production sensor stack. Some mounted fixtures are debug-only, consistently with existing evaluator support.
|
||||
|
||||
Lexical source inventory: 91 added declarations and 5 removed, net +86 across core/desktop; core +2, desktop +89/-5 (net +84). This is NOT an actual Cargo listing. Three imported manual ignored tests are new: both source_annotations anchor witnesses and annotation_projection_cost_distributions. The seven authored union cases have no ignore marker. Existing manual exceptions remain. Future admission must derive exact runtime membership and ignores from the actual binary/configuration.
|
||||
|
||||
Five removed baseline names are explicitly replaced, not silently dropped: the three source_symbols close/completion/Escape tests become retention-contract cases; the two old source-header layout/scroll tests become permanent five-slot and retained editor-scroll tests. Their exact old/new names are listed in the inventory and appendix below.
|
||||
|
||||
## Verification and remaining acceptance
|
||||
|
||||
Completed source-only checks: standalone rustfmt (edition 2024, skip_children=true) for owned changed Rust paths; `git diff --check HEAD -- . ':!crates/vendor/iced_widget/**'`; exact 71-file vendor comparison; protected-path/root test-byte checks; clean Git status after final commit. Vendor formatting is intentionally untouched; upstream doc-comment whitespace is retained. No Cargo, rustc, tests, build, GUI, native, Gitea publication or integration was invoked for this union.
|
||||
|
||||
Parent/fresh critic should review 92ff and the hook/retention seams before issuing a compiler lease. Required next evidence includes actual full test listing/input capture, focused union/selection/rename/diagnostic/geometry tests, affected core provenance and notice tests, full/strict gates, then native compact layout, selection/edit/Undo, chooser/diagnostic hover, held-pointer replacement and Details/Preview continuation. Package notices and artifact pinning must reflect the local Iced dependency. Existing peer/native receipts remain evidence for their own pins only.
|
||||
|
||||
## Exact added/removed declaration names by file
|
||||
|
||||
### crates/oa-core/tests/source_files.rs
|
||||
|
||||
- Added `discovery_diagnoses_legacy_semantics_before_source_rewrite`
|
||||
- Added `discovery_diagnostics_keep_raw_no_uuid_spans`
|
||||
|
||||
### crates/oa-desktop/src/app.rs
|
||||
|
||||
- Added `includes_loaded_diagnostics_use_raw_newly_discovered_bytes`
|
||||
- Added `includes_loaded_diagnostics_use_retained_overlay_and_ignore_old_version`
|
||||
- Added `includes_loaded_rejects_mismatched_retained_bytes_before_publication`
|
||||
- Added `includes_loaded_requires_each_inactive_detached_overlay`
|
||||
|
||||
### crates/oa-desktop/src/app/source_rename/navigation_union_tests/palette_union.rs
|
||||
|
||||
- Added `compact_diagram_usages_command_uses_captured_query_and_existing_chooser`
|
||||
- Added `current_compact_drawer_controls_and_mounted_resize_remain_live`
|
||||
- Added `stale_compact_drawer_controls_preserve_current_navigation_and_evidence`
|
||||
|
||||
### crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs
|
||||
|
||||
- Added `diagnostic_publication_during_rename_keeps_actual_preview_report_passive`
|
||||
|
||||
### crates/oa-desktop/src/app/source_symbols/tests.rs
|
||||
|
||||
- Added `close_during_busy_retains_hidden_completion_without_reopening_or_navigation`
|
||||
- Added `completion_retains_current_display_but_rejects_navigation_after_context_changes`
|
||||
- Added `delayed_definition_after_hide_or_tab_change_retains_data_without_reopening_or_focus`
|
||||
- Added `escape_hides_results_and_cancels_navigation_but_retains_latest_display`
|
||||
- Added `hidden_completion_checks_exact_bytes_even_when_snapshot_key_was_not_advanced`
|
||||
- Added `matching_old_worker_cannot_replace_a_newer_display_owner`
|
||||
- Added `popup_escape_has_no_duplicate_bridge_and_dismissal_preserves_underlying_find_and_drawer`
|
||||
- Added `retained_choices_cannot_replay_after_hide_or_references_problems_references`
|
||||
- Added `same_key_changed_bytes_mark_retained_rows_stale_before_choice_boundaries`
|
||||
- Added `same_worker_with_changed_request_envelope_cannot_publish_or_navigate`
|
||||
- Removed `close_during_busy_hides_panel_and_completion_does_not_reopen_it`
|
||||
- Removed `completion_rejects_file_edit_session_cursor_interaction_and_raw_input_changes`
|
||||
- Removed `escape_dismisses_results_and_cancels_busy_navigation_without_changing_sources`
|
||||
|
||||
### crates/oa-desktop/src/app/text_workspace/lifecycle_tests.rs
|
||||
|
||||
- Added `canceled_or_failed_open_that_installs_nothing_retains_current_presentation_and_diagnostics`
|
||||
- Added `invalid_repair_open_clears_prior_presentation_and_publishes_current_problems_preserving_worker`
|
||||
- Added `saved_new_destination_does_not_revalidate_already_stale_warning_locations`
|
||||
- Added `saved_new_destination_republishes_current_warning_and_refuses_old_primary_and_related`
|
||||
|
||||
### crates/oa-desktop/src/app/text_workspace/tests.rs
|
||||
|
||||
- Added `actual_chooser_blocks_diagnostic_actions_and_mounted_hover_until_closed`
|
||||
- Added `annotation_snapshot_requires_exact_current_bytes_and_publication`
|
||||
- Added `annotation_snapshot_tracks_real_file_round_trips_without_changing_model`
|
||||
- Added `current_diagnostic_target_navigates_but_changed_source_or_clear_refuses_it`
|
||||
- Added `diagnostic_span_must_be_loaded_ordered_and_utf8_exact`
|
||||
- Added `disabled_entry_cannot_become_a_new_action_under_the_same_menu_token`
|
||||
- Added `document_reset_preserves_popup_token_sequence_and_drops_old_menu_authority`
|
||||
- Added `drawer_document_session_and_visit_guards_are_independently_required`
|
||||
- Added `enabled_entry_is_readmitted_at_dispatch_and_blocked_by_busy`
|
||||
- Added `equal_diagnostic_republication_invalidates_primary_and_related_targets`
|
||||
- Added `menu_own_open_invalidation_does_not_stale_find_and_invoke_is_once`
|
||||
- Added `menu_source_caret_document_path_and_interaction_changes_refuse_stale_find`
|
||||
- Added `old_dismiss_and_invoke_do_not_consume_a_newer_menu`
|
||||
- Added `only_valid_explicit_group_and_resize_intent_cancel_pending_navigation`
|
||||
- Added `queued_group_toggle_cannot_mutate_a_reopened_or_rotated_visit`
|
||||
- Added `queued_toolbar_request_cannot_retarget_after_source_change`
|
||||
- Added `reference_groups_and_scroll_survive_tabs_and_reject_old_visits_and_queries`
|
||||
- Added `reset_removes_ui_and_publication_authority_and_resize_rejects_nan`
|
||||
- Added `retained_primary_and_related_targets_cannot_replay_after_hide_or_problems_references_problems`
|
||||
- Added `source_and_property_drafts_keep_find_and_text_undo_without_model_application`
|
||||
- Added `stale_retained_group_can_expand_without_navigating_or_applying_drafts`
|
||||
|
||||
### crates/oa-desktop/src/diagnostic_input/tests.rs
|
||||
|
||||
- Added `already_captured_terminal_cancels_child_without_activation_or_lingering_press`
|
||||
- Added `captured_terminal_cancellation_preserves_same_publication_focusable_child_state`
|
||||
- Added `current_primary_and_related_mouse_clicks_survive_same_publication_diff`
|
||||
- Added `current_touch_activates_primary_and_related_and_cancel_does_not_activate`
|
||||
- Added `fresh_mouse_press_after_missing_stale_release_can_activate_current_row`
|
||||
- Added `hidden_zero_height_scroller_delivers_cancelled_mouse_and_touch_terminals_to_guard`
|
||||
- Added `hidden_zero_size_list_consumes_release_outside_old_bounds_once`
|
||||
- Added `missed_press_is_ignored_and_dragging_release_outside_does_not_activate`
|
||||
- Added `negative_control_iced_button_retargets_a_press_after_plain_tree_diff`
|
||||
- Added `negative_control_plain_focusable_row_migrates_activation_to_replacement`
|
||||
- Added `negative_control_removing_unguarded_rows_exposes_background_release`
|
||||
- Added `outer_scroll_offset_survives_same_and_changed_publications`
|
||||
- Added `replaced_primary_and_related_rows_consume_stale_release_then_accept_new_click`
|
||||
- Added `replaced_touch_consumes_lift_or_cancel_even_when_hidden`
|
||||
- Added `same_publication_missing_terminal_recovers_on_fresh_mouse_or_touch_down`
|
||||
- Added `same_publication_new_visit_cancels_armed_rows_without_a_hidden_tree_frame`
|
||||
- Added `same_publication_preserves_focus_but_replacement_never_inherits_activation`
|
||||
- Added `stale_release_does_not_bubble_to_real_background_controls`
|
||||
- Added `stale_touch_release_does_not_disarm_a_new_current_gesture`
|
||||
- Added `unrelated_finger_or_mouse_release_cannot_complete_another_fingers_press`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/anchor_tests.rs
|
||||
|
||||
- Added `final_multi_glyph_cluster_anchor_uses_logical_trailing_advance_edge`
|
||||
- Added `mixed_direction_omitted_separator_has_one_logical_predecessor_anchor`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/layout_tests.rs
|
||||
|
||||
- Added `combining_cjk_and_bidi_ranges_cover_actual_clusters_without_neighbor_aliases`
|
||||
- Added `empty_eof_and_separator_ranges_follow_real_paragraph_ownership`
|
||||
- Added `mismatched_affected_source_and_bottom_line_without_visible_underline_have_no_bands`
|
||||
- Added `omitted_wrap_space_has_one_preceding_run_anchor_and_none_when_that_run_is_clipped_out`
|
||||
- Added `repeated_alias_marks_only_second_actual_glyph_sequence_and_blank_space_misses`
|
||||
- Added `wrapped_scrolled_multiline_range_uses_actual_visible_runs_and_effective_clip`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/performance_tests.rs
|
||||
|
||||
- Added `annotation_projection_cost_distributions`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/tests.rs
|
||||
|
||||
- Added `empty_source_has_real_zero_width_marker`
|
||||
- Added `exact_path_and_utf8_range_admission_keep_valid_neighbor`
|
||||
- Added `half_open_next_line_excluded_separator_only_and_empty_line_anchored`
|
||||
- Added `mixed_endings_use_actual_paragraphs_and_preserve_eof`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/widget/tests.rs
|
||||
|
||||
- Added `actual_word_and_line_selection_then_typing_survive_hover_and_publication_changes`
|
||||
- Added `deferred_paragraph_renderer_rejects_the_old_local_lifetime`
|
||||
- Added `deferred_tooltip_text_survives_draw_and_only_current_authority_is_retained`
|
||||
- Added `disabled_hover_and_unavailable_cursor_hide_details_without_removing_current_marks`
|
||||
- Added `measured_footer_and_omitted_count_fit_actual_shaped_widths_and_ancestor_clip`
|
||||
- Added `pointer_motion_between_bands_blank_and_leave_is_passive_and_always_redraws`
|
||||
- Added `stationary_pointer_replacement_absence_and_path_switch_use_only_current_index`
|
||||
|
||||
### crates/oa-desktop/src/views.rs
|
||||
|
||||
- Removed `source_header_keeps_editor_bounds_stable_through_lint_and_find_rebuilds`
|
||||
- Removed `source_header_remains_scrollable_and_preserves_offset_across_diagnostic_refresh`
|
||||
|
||||
### crates/oa-desktop/src/views/source_symbols.rs
|
||||
|
||||
- Added `suffixes_distinguish_nested_duplicate_basenames_without_changing_unicode`
|
||||
|
||||
### crates/oa-desktop/src/views/text_workspace.rs
|
||||
|
||||
- Added `drawer_clamps_to_actual_center_allocation_including_oversize_requests`
|
||||
- Added `five_slots_keep_editor_state_and_selection_through_explicit_and_passive_changes`
|
||||
- Added `highlighted_sensor_editor_retains_real_scrolled_buffer_across_panel_rebuilds`
|
||||
- Added `keyboard_resize_uses_effective_height_and_only_exact_open_drawer_shortcut`
|
||||
|
||||
### crates/oa-desktop/src/views/text_workspace/summary_visibility_tests.rs
|
||||
|
||||
- Added `all_reference_exceptions_fit_allocated_width_with_wide_alias_and_large_counts`
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user