Combine Text alias rename with guarded diagram navigation

This commit is contained in:
2026-09-12 17:27:08 -07:00
parent 4db1ef543c
commit 208268c8aa
40 changed files with 9766 additions and 19 deletions
@@ -0,0 +1,11 @@
# Exact archived source/provenance/receipt bytes; do not normalize line endings.
/before-details-fix/crates/oa-desktop/src/app/source_rename.rs -text whitespace=cr-at-eol
/before-details-fix/crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs -text whitespace=cr-at-eol
/before-details-fix/manifest.json -text whitespace=cr-at-eol
/details-fix-hashes.json -text whitespace=cr-at-eol
/final-source-hashes.json -text whitespace=cr-at-eol
/formatting.json -text whitespace=cr-at-eol
/import-provenance.json -text whitespace=cr-at-eol
/initial-source-hashes.json -text whitespace=cr-at-eol
/pre-format-source-hashes.json -text whitespace=cr-at-eol
/artifacts.json -text whitespace=cr-at-eol
@@ -0,0 +1,75 @@
# Selective navigation and Text alias rename union
This is prepared source and static review evidence. **The combined union has not been compiled, tested or exercised natively.** Formatting and source-hash checks do not establish those results. The integration owner retains publication and runtime acceptance; peer-owned compact Text layout work is outside this change.
## Pinned inputs and dependency boundary
- Our base is [4db1ef543ced916179194272bf0e65dce73cb107](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/4db1ef543ced916179194272bf0e65dce73cb107), preserving the evidence bytes for navigation production [46b4f3c0d0f04050ad6d705051ee0199138e47a2](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/46b4f3c0d0f04050ad6d705051ee0199138e47a2).
- Peer rename source is [cbc49a7802fb1bba0dd284fd904c700a0703ae70](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/cbc49a7802fb1bba0dd284fd904c700a0703ae70). Its production delta is [dfb6102ba5aec9e26a48cc5472b51a4b349459fd](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/dfb6102ba5aec9e26a48cc5472b51a4b349459fd) plus the mandatory `cbc49a7` scroll correction, against [be7a8cd8d7d63aa18e0196bbd36f9e646764c761](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/be7a8cd8d7d63aa18e0196bbd36f9e646764c761). Intervening `4686d05` contains evidence, not production dependencies.
- [Import provenance](import-provenance.json) records all 24 peer files and 10 corresponding baseline files. All 34 raw downloads were checked against published Gitea Git blob hashes; SHA-256 and sizes are retained.
The union changes 27 source/documentation paths: 25 Rust files and two language documents. Document/query prerequisites were identical to the peer baseline; 14 new files were added and shared App/view/documentation hunks were merged selectively. The entire core tree and the existing `examples/release1` timing fixture match the peer. No core/schema, dependency manifests, lockfile, allocation/Delete semantics, user specification or historical evidence was replaced. Existing camera, lifecycle, repair, exact navigation focus and grapheme behavior remains in the integration base.
## Source review findings and corrections
These findings concern the combination of pinned branches. They do not retroactively assert defects in either branch's isolated acceptance evidence. The initial boundaries were published in [issue 17 comment 717](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/17#issuecomment-717).
| Finding | Correction and evaluator |
| --- | --- |
| Diagram usage dispatch precedes generic modal handling, so merely adding a Rename modal gate permits queued diagram Open over Rename. | Both admissions now exclude the other chooser; source navigation and Rename retain reference chooser exclusions. Real App tests cover Rename with an existing approval and both loading/ready diagram choosers. |
| A Rename completion arriving after Close and diagram navigation can cancel the newer deferred camera/focus during outer reconciliation. Worker slots also survive document replacement. | Completion is passive in reveal reconciliation and releases only its exact slot before modal gates. Tests cover target/preview, forged/duplicate completion, first measurement, and all three real outstanding workers across reset. |
| Rejected old Close/Confirm must be inert before outer source/camera reconciliation. Captured Begin and Undo Rename have an additional queued-intent boundary. | Envelope checks run before reconciliation. Begin still requires Text; Undo Rename still requires its existing live-context predicate. Tests retain a real old approval and exercise stale Begin/Close/Confirm and queued Undo Rename after diagram navigation. Ordinary model Undo/Redo preserves the exact accepted snapshot stack. |
| Independent review found a P2 Details/Preview visit gap: a held File-navigation snap could target the same preview identity after returning from Details and erase later manual scrolling. | An actual Details visibility change rotates the visit UUID without changing file/hunk/line/segment or scheduling a scroll reset. Repeated same-value visibility is inert. The retained-widget test exercises held reset → Details → Preview → manual scroll → held reset, including both mounted and between-frame Details transitions. |
The integration owner reported an independent static review approving the final Details correction, with both corrected pre-format hashes matching [details-fix-hashes.json](details-fix-hashes.json), and no further finding. This was source review, not test/native evidence. Formatting subsequently changes presentation only; the final manifest identifies the resulting inputs for future gates.
The existing `preview_destination` UUID remains paired in the mounted widget and every page/approval scroll operation. The Details correction does not force a return to the top. If Details is actually mounted, the returning preview follows Iced's ordinary widget-state lifecycle; if both switches happen between frames, the retained scroll state remains subject to the existing contract. In either case, an older operation cannot address the new visit.
## Exact source and artifact records
- [Initial frozen union hashes](initial-source-hashes.json): the initial 27-path handoff before the Details correction.
- [Reviewed Details fix hashes](details-fix-hashes.json): the two changed files before formatting.
- [Pre-format hashes](pre-format-source-hashes.json): all 27 inputs after the accepted Details correction.
- [Final source hashes](final-source-hashes.json): all 27 inputs after bounded formatting; use these to identify the next compiler inputs.
- [Formatting receipt](formatting.json): formatter version, exact relative argument list, changed paths, check exit and checks against tracked inputs outside the owned set.
- [Raw artifact hashes](artifacts.json) and [scoped attributes](.gitattributes): exact archived bytes and text-conversion policy.
The two independently archived pre-fix Rust files are [source_rename.rs](before-details-fix/crates/oa-desktop/src/app/source_rename.rs) and [preview_scroll_tests.rs](before-details-fix/crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs). Their [original manifest](before-details-fix/manifest.json) is copied unchanged. These copies intentionally retain the reviewed old behavior and must not be compiled as current sources or reformatted. Exact `-text` entries preserve their raw bytes and the checksum-bound receipts. The current implementation is in [the App rename controller](../../../crates/oa-desktop/src/app/source_rename.rs).
Formatting used the local `rustfmt` binary with edition 2024 and `skip_children=true` over only the 25 named Rust files. The preceding leaf-only `--check` found expected formatting differences; the subsequent all-owned-file format/check receipt records completion. No Cargo command, compiler, test, native UI or staging/publication operation was performed during this preparation.
## Evaluators to run
The six combined App tests use a parsed four-file Unicode/CRLF fixture with an explicitly identified distant placement. They dispatch actual App events, produce worker completions independently without polling the returned workers, and check whole model/source, accepted snapshot identity, history, semantic/visual selection and actual deferred viewport measurements.
The four retained-widget tests execute real scroll operations on the production dialog widget tree with a CPU font/layout renderer. They do not establish native GPU paint or package behavior.
These group filters must select **six** and **four** tests respectively; do not substitute filename filters:
```text
cargo test --locked --offline -p oa-desktop app::source_rename::tests::navigation_union_tests:: -- --test-threads=1
cargo test --locked --offline -p oa-desktop app::source_rename::tests::preview_scroll_tests:: -- --test-threads=1
```
Exact individual filters:
```text
app::source_rename::tests::navigation_union_tests::rename_modal_rejects_queued_diagram_and_source_navigation_without_losing_approval
app::source_rename::tests::navigation_union_tests::loading_and_ready_diagram_choosers_reject_a_previously_captured_rename_begin
app::source_rename::tests::navigation_union_tests::late_target_and_preview_results_release_only_their_slot_and_preserve_first_camera_measurement
app::source_rename::tests::navigation_union_tests::stale_begin_close_and_actual_confirm_leave_new_diagram_focus_and_pending_measurement_unchanged
app::source_rename::tests::navigation_union_tests::document_reset_retains_all_three_worker_slots_until_their_exact_results_arrive
app::source_rename::tests::navigation_union_tests::rename_then_exact_caret_diagram_navigation_preserves_complete_model_undo_redo_history
app::source_rename::tests::preview_scroll_tests::explicit_navigation_resets_retained_scroll_but_id_change_alone_does_not
app::source_rename::tests::preview_scroll_tests::delayed_page_and_approval_operations_cannot_reset_a_new_destination
app::source_rename::tests::preview_scroll_tests::repeated_page_visits_filters_and_fast_preview_completion_have_distinct_destinations
app::source_rename::tests::preview_scroll_tests::details_round_trip_retires_held_reset_without_changing_page_or_repeated_visibility_scroll
```
Additional relevant groups are `source_rename`, `document::alias_rename::tests::`, `app::diagram_usages::tests::`, and `app::diagram_reveal::tests::`. The existing isolated timing filters are `accepted_release1_prepare_commit_sync_and_confirm_timing` and `accepted_release1_constructor_vs_reuse_through_next_highlight`, each run alone with `--ignored --nocapture --test-threads=1` when the integration owner schedules those trials.
Compilation, focused/full regression gates, strict lint, matching build and native navigation/rename/Save/Undo/Redo/package acceptance remain open. The peer's published source/native/package evidence remains tied to its own identified source and executable, not this union. The existing permanent Text layout is retained; compact command/layout work remains with the peer's separate scope.
The [prepared native acceptance workflows](native-acceptance.md) cover preview visibility/scroll, mutual modal input ownership, immediate keyboard editing, diagram navigation and complete source/disk/history restoration. They have not been executed on this union.
Parent staging also checks added files. Its initial cached whitespace check identified original CRLF bytes in three checksum-bound JSON artifacts; exact raw-artifact attributes now allow CR at line endings while retaining ordinary whitespace checks. No archived bytes or source were changed by this correction. The earlier working-tree diff check did not cover those then-untracked artifacts.
@@ -0,0 +1,59 @@
{
"files": [
{
"path": "before-details-fix/crates/oa-desktop/src/app/source_rename.rs",
"bytes": 45315,
"sha256": "7b13c39d4c1509d13aef2de4580b9e418cf7ac1ae87d42bd21dcd34ecc70f863",
"git_blob": "eee376e2461477a4ac123c849fb165d9e2867b2b"
},
{
"path": "before-details-fix/crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs",
"bytes": 10937,
"sha256": "06c8dc66b696f70427a190cd174be373a8114bd2f49b6e8f1152173d59e9ec29",
"git_blob": "4641cf7f8db309b12c7bd668dd4ea771cb456fa6"
},
{
"path": "before-details-fix/manifest.json",
"bytes": 595,
"sha256": "4ac41b15970e9525b5def9af9eb0d57eaa9d3919dd2dd6fe9c4929a60cb17aa6",
"git_blob": "4507b73945f1660a9c1e9a0ea3064d1d40b7b764"
},
{
"path": "details-fix-hashes.json",
"bytes": 494,
"sha256": "275a692bda781a561c0a50c9af1900c21db42327366daed5ec54a6ade2c1b810",
"git_blob": "da4aa80d6ab9cb752fc398337f2e12a63a10d07c"
},
{
"path": "final-source-hashes.json",
"bytes": 6679,
"sha256": "a1c007d3d44da805b840423ea6950811c1b43dc780c753164320105fb1296f0b",
"git_blob": "616cc048be1c7bee62bd12e73a493c2a7b57ff20"
},
{
"path": "formatting.json",
"bytes": 1986,
"sha256": "14b0812cb176296f07fa7712dfc9fc5e5a9cc94ec10a4038961e469ab0650647",
"git_blob": "d0ca466fbaa24abf1270c56e3cfe3842458458c4"
},
{
"path": "import-provenance.json",
"bytes": 10539,
"sha256": "9761b644ca7c5a3cbcc543834848170c3baa27c6f80093c68a8f64d0c3677b30",
"git_blob": "1fe1da89a3ddf54af931ac9f3c9e3d537fd422fd"
},
{
"path": "initial-source-hashes.json",
"bytes": 7723,
"sha256": "fbc1109e039150265dbdc1d3c7ffda2279b7323468488732c776f67515b78e66",
"git_blob": "291589c30276eb7f7000daa8ee01f3feb613b531"
},
{
"path": "pre-format-source-hashes.json",
"bytes": 6679,
"sha256": "d49583b87bb12655fd96c17c1629b832b6389aeddf98cc986ad97c7c19282f13",
"git_blob": "e746e7a36318fce9ddf607122006f2088343d89b"
}
],
"note": "Raw archived inputs and receipts. This manifest and .gitattributes intentionally do not hash themselves."
}
@@ -0,0 +1,310 @@
//! Execute the controller's scroll operations on a retained, scrolled dialog.
use super::*;
use crate::views::source_tests::FontLayout;
use iced::advanced::{Layout, layout, widget};
use iced::futures::StreamExt;
use iced::{Rectangle, Size, Vector};
const HOST: Size = Size::new(720., 660.);
fn paged_fixture() -> App {
let mut source = bundle();
let name = "Long engineering name 雨 ".repeat(18);
source.files.get_mut("defs.arcadia").unwrap().replace_range(
..,
&format!(
"oa_activity pump \"{name}\" id \"00000000-0000-0000-0000-000000000002\" {{}}\r\n\
oa_activity backup \"Backup\" id \"00000000-0000-0000-0000-000000000004\" {{}}\r\n"
),
);
let mut uses = String::new();
for index in 0..16 {
if index == 12 {
uses.push_str(&"// unchanged gap\r\n".repeat(10));
}
uses.push_str(&format!(
"interaction use_{index} \"{name}\" id \"00000000-0000-0000-0001-{index:012}\" {{ source @pump; target @backup; }}\r\n"
));
}
source.files.insert("uses.arcadia".into(), uses);
let mut app = fixture();
app.window_size = HOST;
app.document = Document::from_bundle(source, LIMITS).unwrap();
app.source_workspace = Workspace::new(app.document.bundle(), true);
app.source_workspace.active = "uses.arcadia".into();
app.show_source_file(false);
let start = app.source_workspace.text().find("source @pump").unwrap() + "source @".len();
app.source_editor
.move_to(cursor(app.source_workspace.text(), start, start + 4));
begin(&mut app);
input(&mut app, "pump_long");
let _ = preview(&mut app);
app
}
fn scroll_id(app: &App) -> widget::Id {
let form = app.source_rename.form.as_ref().unwrap();
preview_scroll_id(form, form.approval.as_ref().unwrap().id)
}
struct Geometry {
id: widget::Id,
offset: Option<Vector>,
}
impl widget::Operation for Geometry {
fn traverse(&mut self, visit: &mut dyn FnMut(&mut dyn widget::Operation)) {
visit(self);
}
fn scrollable(
&mut self,
id: Option<&widget::Id>,
_: Rectangle,
_: Rectangle,
offset: Vector,
_: &mut dyn widget::operation::Scrollable,
) {
if id == Some(&self.id) {
self.offset = Some(offset);
}
}
}
struct Mounted {
editor: text_editor::Content<FontLayout>,
tree: widget::Tree,
}
impl Mounted {
fn new(app: &App) -> Self {
let editor = text_editor::Content::<FontLayout>::new();
let tree = widget::Tree::new(dialog_content(app, &editor).as_widget());
Self { editor, tree }
}
fn operate(&mut self, app: &App, operation: &mut dyn widget::Operation) {
let mut view = dialog_content(app, &self.editor);
// Preserve the actual scroll state across the new page's view diff.
self.tree.diff(view.as_widget());
let node = view.as_widget_mut().layout(
&mut self.tree,
&FontLayout,
&layout::Limits::new(Size::ZERO, HOST),
);
view.as_widget_mut()
.operate(&mut self.tree, Layout::new(&node), &FontLayout, operation);
}
fn offset(&mut self, app: &App) -> f32 {
let mut geometry = Geometry {
id: scroll_id(app),
offset: None,
};
self.operate(app, &mut geometry);
geometry.offset.expect("mounted preview scrollable").y
}
fn scroll_down(&mut self, app: &App) -> f32 {
self.operate(
app,
&mut widget::operation::scrollable::scroll_to(
scroll_id(app),
widget::operation::scrollable::AbsoluteOffset {
x: None,
y: Some(10_000.),
},
),
);
let offset = self.offset(app);
assert!(offset > 10., "fixture must really be scrolled");
offset
}
async fn execute(&mut self, app: &App, task: Task<Message>) -> usize {
let mut count = 0;
if let Some(mut actions) = iced_runtime::task::into_stream(task) {
while let Some(action) = actions.next().await {
let iced_runtime::Action::Widget(mut operation) = action else {
panic!("preview paging must only schedule a widget operation");
};
self.operate(app, operation.as_mut());
count += 1;
}
}
count
}
}
#[tokio::test]
async fn explicit_navigation_resets_retained_scroll_but_id_change_alone_does_not() {
let mut app = paged_fixture();
let before = evidence(&app);
let form = app.source_rename.form.as_ref().unwrap();
let invocation = form.invocation;
let approval = form.approval.as_ref().unwrap().id;
let mut mounted = Mounted::new(&app);
mounted.scroll_down(&app);
let old_id = scroll_id(&app);
let task = app.update(Message::SourceRename(Event::File(
invocation, approval, true,
)));
assert_ne!(old_id, scroll_id(&app));
// Negative control: even after diff/layout with the new id and new file,
// Iced retains the previous offset until the returned operation executes.
assert!(mounted.offset(&app) > 10.);
assert_eq!(mounted.execute(&app, task).await, 1);
assert_eq!(mounted.offset(&app), 0.);
for navigation in [
Event::Line(invocation, approval, true),
Event::Segment(invocation, approval, true),
Event::Hunk(invocation, approval, true),
Event::File(invocation, approval, false),
Event::Search(invocation, "uses".into()),
Event::Search(invocation, "no-path-match".into()),
Event::Search(invocation, String::new()),
] {
mounted.scroll_down(&app);
let task = app.update(Message::SourceRename(navigation));
assert_eq!(mounted.execute(&app, task).await, 1);
assert_eq!(mounted.offset(&app), 0.);
assert_eq!(evidence(&app), before);
}
// Passive redraw and unchanged filter input preserve deliberate scrolling.
let offset = mounted.scroll_down(&app);
assert_eq!(mounted.offset(&app), offset);
let task = app.update(Message::SourceRename(Event::Search(
invocation,
String::new(),
)));
assert_eq!(mounted.execute(&app, task).await, 0);
assert_eq!(mounted.offset(&app), offset);
let task = app.update(Message::SourceRename(Event::Input(
invocation,
"pump_long".into(),
)));
assert_eq!(mounted.execute(&app, task).await, 0);
assert_eq!(mounted.offset(&app), offset);
let task = app.update(Message::SourceRename(Event::File(
invocation, approval, false,
)));
assert_eq!(
mounted.execute(&app, task).await,
0,
"clamped first-page request is a no-op"
);
assert_eq!(mounted.offset(&app), offset);
assert_eq!(evidence(&app), before);
}
#[tokio::test]
async fn delayed_page_and_approval_operations_cannot_reset_a_new_destination() {
let mut app = paged_fixture();
let before = evidence(&app);
let form = app.source_rename.form.as_ref().unwrap();
let invocation = form.invocation;
let old_approval = form.approval.as_ref().unwrap().id;
let mut mounted = Mounted::new(&app);
let old_page_task = app.update(Message::SourceRename(Event::File(
invocation,
old_approval,
true,
)));
let next_page_task = app.update(Message::SourceRename(Event::Line(
invocation,
old_approval,
true,
)));
assert_eq!(mounted.execute(&app, next_page_task).await, 1);
let offset = mounted.scroll_down(&app);
assert_eq!(mounted.execute(&app, old_page_task).await, 1);
assert_eq!(mounted.offset(&app), offset, "old page target is absent");
let old_approval_task = app.update(Message::SourceRename(Event::Search(
invocation,
"defs".into(),
)));
input(&mut app, "pump_new");
let _ = preview(&mut app); // Real new approval in the same invocation/page.
assert_ne!(
app.source_rename
.form
.as_ref()
.unwrap()
.approval
.as_ref()
.unwrap()
.id,
old_approval
);
let offset = mounted.scroll_down(&app);
assert_eq!(mounted.execute(&app, old_approval_task).await, 1);
assert_eq!(
mounted.offset(&app),
offset,
"old approval target is absent"
);
let task = app.update(Message::SourceRename(Event::File(
invocation,
old_approval,
true,
)));
assert_eq!(
mounted.execute(&app, task).await,
0,
"stale envelope is rejected before scheduling"
);
assert_eq!(mounted.offset(&app), offset);
assert_eq!(evidence(&app), before);
}
#[tokio::test]
async fn repeated_page_visits_filters_and_fast_preview_completion_have_distinct_destinations() {
let mut app = paged_fixture();
let before = evidence(&app);
let form = app.source_rename.form.as_ref().unwrap();
let invocation = form.invocation;
let approval = form.approval.as_ref().unwrap().id;
let mut mounted = Mounted::new(&app);
let first_visit = app.update(Message::SourceRename(Event::File(
invocation, approval, true,
)));
let next_page = app.update(Message::SourceRename(Event::Line(
invocation, approval, true,
)));
assert_eq!(mounted.execute(&app, next_page).await, 1);
let return_visit = app.update(Message::SourceRename(Event::Line(
invocation, approval, false,
)));
assert_eq!(mounted.execute(&app, return_visit).await, 1);
let offset = mounted.scroll_down(&app);
assert_eq!(mounted.execute(&app, first_visit).await, 1);
assert_eq!(
mounted.offset(&app),
offset,
"old visit to the identical page is stale"
);
let old_filter = app.update(Message::SourceRename(Event::Search(
invocation,
"uses".into(),
)));
let new_filter = app.update(Message::SourceRename(Event::Search(
invocation,
"us".into(),
)));
assert_eq!(mounted.execute(&app, new_filter).await, 1);
let offset = mounted.scroll_down(&app);
assert_eq!(mounted.execute(&app, old_filter).await, 1);
assert_eq!(
mounted.offset(&app),
offset,
"old filter on the same page is stale"
);
input(&mut app, "pump_new");
let job = start_preview(&mut app);
let completion = preview_completion(&app, job);
// No intermediate frame mounts the temporary no-approval view. The old
// Scrollable survives even though the new approval has a different id.
let ready = app.update(Message::SourceRenameReady(completion));
assert!(mounted.offset(&app) > 10.);
assert_eq!(mounted.execute(&app, ready).await, 1);
assert_eq!(mounted.offset(&app), 0.);
assert_eq!(evidence(&app), before);
}
@@ -0,0 +1,17 @@
{
"base": "4db1ef543ced916179194272bf0e65dce73cb107",
"peer": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"status": "Pre-fix union; source-reviewed, uncompiled, Details delayed-scroll finding",
"files": [
{
"path": "crates/oa-desktop/src/app/source_rename.rs",
"bytes": 45315,
"sha256": "7b13c39d4c1509d13aef2de4580b9e418cf7ac1ae87d42bd21dcd34ecc70f863"
},
{
"path": "crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs",
"bytes": 10937,
"sha256": "06c8dc66b696f70427a190cd174be373a8114bd2f49b6e8f1152173d59e9ec29"
}
]
}
@@ -0,0 +1,14 @@
[
{
"path": "crates/oa-desktop/src/app/source_rename.rs",
"bytes": 45705,
"sha256": "4714cde897a7a365958a6014f6a546df682a963a48c2fd9d918ddb3c5500268d",
"git_blob": "a4e41d1a3ccd8c2a37e763c3ab50ff6cac8935af"
},
{
"path": "crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs",
"bytes": 13821,
"sha256": "ca8d49b5de9e4b848d73cc4c0a4884c0a006a48c3e171f32fb496eac4d6aa180",
"git_blob": "3025e756299bab0c0c48aa236e99dd9788e557ee"
}
]
@@ -0,0 +1,168 @@
{
"base": "4db1ef543ced916179194272bf0e65dce73cb107",
"peer": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"files": [
{
"path": "crates/oa-desktop/src/app.rs",
"bytes": 233137,
"sha256": "c4af6a3bce725ed52e1e5919a2177a12c603d9beb6f0f3485925269171bef7ac",
"git_blob": "8b1edac34f9b8b96df76d4fd759bd6aaae5c0a5e"
},
{
"path": "crates/oa-desktop/src/app/diagram_reveal.rs",
"bytes": 5996,
"sha256": "6d94b32ae64aaebdf81b80d5b8f69a5077425d51727c736a57ffb5f334b3b76a",
"git_blob": "ab4dd765b1b03556e9e7f5abf4ca4b5ae8692c1d"
},
{
"path": "crates/oa-desktop/src/app/diagram_usages.rs",
"bytes": 18131,
"sha256": "ae7ae6f24a845549d97715d0229861bd49dc0f82d4ce0632f1c134a73de605ee",
"git_blob": "fb17862f667b597f76d77c7c320f1b0b7935758c"
},
{
"path": "crates/oa-desktop/src/app/source_rename.rs",
"bytes": 45621,
"sha256": "129147bd71286f482c3958a0f5011b9f9d11b6fce72b7ae843cc9e6362670721",
"git_blob": "7bcbaa0adaf143e9e37ea5071acf5924b415c0e5"
},
{
"path": "crates/oa-desktop/src/app/source_rename/alias_input.rs",
"bytes": 6940,
"sha256": "5888b50e4d6fabd8cd0c6d70986a791d8e95f190453ea37ebb251f2fa19cda90",
"git_blob": "f7240271ea87a957a686249bf629bc0c36e924fe"
},
{
"path": "crates/oa-desktop/src/app/source_rename/alias_input/tests.rs",
"bytes": 7279,
"sha256": "f9dd619c440a6d784792be5e41bad562ef312e07967d193b0e96cdc127debfb2",
"git_blob": "579880f4f6fab0949805452451b70bdf9e43ac1e"
},
{
"path": "crates/oa-desktop/src/app/source_rename/editor_patch.rs",
"bytes": 11423,
"sha256": "049c9774c1ca28cda01f9a8e024604bef282366aa52c53c17c1918dbd09c3441",
"git_blob": "f30a08b8e712d3f59aefa8dc478c2db8e46512d1"
},
{
"path": "crates/oa-desktop/src/app/source_rename/navigation_union_tests.rs",
"bytes": 17106,
"sha256": "239bae866176409906140233d9e906ae8a6d9bf810cdb5503b95b01d5eae327e",
"git_blob": "e208548be6e06ca7011bc9ee53921c52f6631092"
},
{
"path": "crates/oa-desktop/src/app/source_rename/preview_glyph_tests.rs",
"bytes": 16247,
"sha256": "d45a799bd97047c6b77ff5b18334f2a71912b65d5239f2b8ce7017588ccff0f4",
"git_blob": "90b3864106072a2fb39c2e1f88a877465f2dc859"
},
{
"path": "crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs",
"bytes": 14051,
"sha256": "62354e03219c75b4e24dad7bae7c31486cb4fda06059493f392e381f52700d22",
"git_blob": "4adb3bf470195047a95607ad40f098adad21da1d"
},
{
"path": "crates/oa-desktop/src/app/source_rename/tests.rs",
"bytes": 54012,
"sha256": "90f69af589fd1698f20ab67299785f8b6c60a99c092e615b8ddb446feff8d5f0",
"git_blob": "2b90ec6e35c0d0a10fa05268a447a0bb53131bf0"
},
{
"path": "crates/oa-desktop/src/app/source_rename_layout_timing_tests.rs",
"bytes": 12253,
"sha256": "dadf8ce0ec989b9a370703a330bde4b415a813273917037fc6a732b9bf2f98ce",
"git_blob": "ea37c4d44a8c54f00f9508250666b5f4a55008ce"
},
{
"path": "crates/oa-desktop/src/app/source_rename_timing_tests.rs",
"bytes": 13912,
"sha256": "942753946d00cab9d4a19717bec5f429af58c070e2cd1b97cb4d32ed6fb93967",
"git_blob": "b7df39f71542b08ca55acc5c97d580378394f451"
},
{
"path": "crates/oa-desktop/src/app/source_symbols.rs",
"bytes": 21084,
"sha256": "43382383bc09c496a4262e7b16a01855e533c6203d046076c16032719bf7ae14",
"git_blob": "03aaade7cc7e660ab3ded9ab9920522b08f550a0"
},
{
"path": "crates/oa-desktop/src/document.rs",
"bytes": 32600,
"sha256": "e87d7ce456bcab1dab55249021eaa8056f41b888723d143428486e31cb9ca4b1",
"git_blob": "e68c312afbc17da193db832b022eabb6aeadaac6"
},
{
"path": "crates/oa-desktop/src/document_alias_rename.rs",
"bytes": 8021,
"sha256": "ce64d723a51a834699ebcf74d89d406a77b6ccc5419bcd3f63cf0e27e9fd25cb",
"git_blob": "aa98e63b9c81decea42746f1766128765da47e75"
},
{
"path": "crates/oa-desktop/src/document_alias_rename_tests.rs",
"bytes": 18027,
"sha256": "847dca1e50970d8a3d75c7e881754453e801f4f3d34f03a88410a334899783bc",
"git_blob": "5e773f46fb7ff50ebf1a43a71ee87225e8451389"
},
{
"path": "crates/oa-desktop/src/guide.rs",
"bytes": 120562,
"sha256": "8795295d86b51c5e6b589017445886132f6349c5aef0ac3542f202c1c6afb157",
"git_blob": "50a6c6c9ac64661890062f9f88343d8d52e0cef3"
},
{
"path": "crates/oa-desktop/src/main.rs",
"bytes": 1549,
"sha256": "2230e12ddbfda7e52fa36b04bf676ca822c7807f1d31715cd0527653679c889b",
"git_blob": "cb86659ddc6a9e18026d2fc3de5f67e77a575167"
},
{
"path": "crates/oa-desktop/src/source_navigation/query.rs",
"bytes": 36149,
"sha256": "4f6ff7d708bb99c64b7370a1761a6099d5f97be4b319582ab4faa7bb8aa42bb9",
"git_blob": "316224b35e4def678df49de62d411076e3e979ed"
},
{
"path": "crates/oa-desktop/src/source_navigation/query_tests.rs",
"bytes": 31577,
"sha256": "121f197dbae319f47ec59ff875733f1985c7607badb2e4c3d97ef8746d13afa9",
"git_blob": "0b6bd7e101dcc031647222c2c788e4be362b5510"
},
{
"path": "crates/oa-desktop/src/source_rename.rs",
"bytes": 116,
"sha256": "1ead2a66d9fd7429b8cfca1338b038e7dd97e21ae76cb722f3ca4c43a520ca00",
"git_blob": "f185672c488712aa50de495561062f90c014eaaf"
},
{
"path": "crates/oa-desktop/src/source_rename/origin.rs",
"bytes": 9275,
"sha256": "11f619310fe837f20a8d495b13e557cafe258270350815c6ac8c848f51cd76ac",
"git_blob": "3da6ccb36964f9456cbe258138838f1176bd1058"
},
{
"path": "crates/oa-desktop/src/source_rename/preview.rs",
"bytes": 19903,
"sha256": "bf96e31986d143fce43ad1634d7028f1225aebcd9013955ca2ba18cc4fd1190d",
"git_blob": "df96bb6d43e66c9f07f94410871809b3b371e5da"
},
{
"path": "crates/oa-desktop/src/views.rs",
"bytes": 71224,
"sha256": "a60dea8285f844ea386e3ff429fd47e559e2a288dc88d4d98eb0f95d3684f2b1",
"git_blob": "0ebc252ab42ce1281482b7d61c4f797755f20d7d"
},
{
"path": "docs/language.html",
"bytes": 184689,
"sha256": "b0eb7199e481d8ecc8dd04bf1e1951569b6971acb0f1d1263afb40a0ec6ba14f",
"git_blob": "fb55b2ff958a785c59a671389e5a852d8a572015"
},
{
"path": "docs/language.rst",
"bytes": 139785,
"sha256": "9009c564f20f833f7d545bd286ee2b5a18fa86fbf8c6a6e68d2ffdd287a27f0f",
"git_blob": "0116a562098e9d8a5fc885442fa57621ff63e01d"
}
]
}
@@ -0,0 +1,49 @@
{
"formatter": "rustfmt 1.9.0-stable (48a229ceae 2026-09-01)",
"command": [
"rustfmt",
"--edition",
"2024",
"--config",
"skip_children=true",
"crates/oa-desktop/src/app.rs",
"crates/oa-desktop/src/app/diagram_reveal.rs",
"crates/oa-desktop/src/app/diagram_usages.rs",
"crates/oa-desktop/src/app/source_rename.rs",
"crates/oa-desktop/src/app/source_rename/alias_input.rs",
"crates/oa-desktop/src/app/source_rename/alias_input/tests.rs",
"crates/oa-desktop/src/app/source_rename/editor_patch.rs",
"crates/oa-desktop/src/app/source_rename/navigation_union_tests.rs",
"crates/oa-desktop/src/app/source_rename/preview_glyph_tests.rs",
"crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs",
"crates/oa-desktop/src/app/source_rename/tests.rs",
"crates/oa-desktop/src/app/source_rename_layout_timing_tests.rs",
"crates/oa-desktop/src/app/source_rename_timing_tests.rs",
"crates/oa-desktop/src/app/source_symbols.rs",
"crates/oa-desktop/src/document.rs",
"crates/oa-desktop/src/document_alias_rename.rs",
"crates/oa-desktop/src/document_alias_rename_tests.rs",
"crates/oa-desktop/src/guide.rs",
"crates/oa-desktop/src/main.rs",
"crates/oa-desktop/src/source_navigation/query.rs",
"crates/oa-desktop/src/source_navigation/query_tests.rs",
"crates/oa-desktop/src/source_rename.rs",
"crates/oa-desktop/src/source_rename/origin.rs",
"crates/oa-desktop/src/source_rename/preview.rs",
"crates/oa-desktop/src/views.rs"
],
"rust_inputs": 25,
"owned_inputs": 27,
"formatted_paths": [
"crates/oa-desktop/src/app/source_rename.rs",
"crates/oa-desktop/src/app/source_rename/navigation_union_tests.rs",
"crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs"
],
"outside_inputs_checked": 312,
"outside_inputs_unchanged": true,
"format_exit": 0,
"check_exit": 0,
"stdout": "",
"stderr": "",
"compilation_or_tests_run": false
}
@@ -0,0 +1,274 @@
[
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app.rs",
"bytes": 217694,
"git_blob": "b9d14f11bd36173053974f619ea6e616db8e5dc4",
"sha256": "d2e13b4527eec6c0920668d312d647806c762ed0a2f3ad9595a1243d9993fc14"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename.rs",
"bytes": 45005,
"git_blob": "8c0da85bc6f3a306931280452447eba962d7e66d",
"sha256": "b3402c661330da1bc50a6135ffbefbd7ab559c364e07f5c52f23ab9e3e7f6e74"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename/alias_input.rs",
"bytes": 6940,
"git_blob": "f7240271ea87a957a686249bf629bc0c36e924fe",
"sha256": "5888b50e4d6fabd8cd0c6d70986a791d8e95f190453ea37ebb251f2fa19cda90"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename/alias_input/tests.rs",
"bytes": 7279,
"git_blob": "579880f4f6fab0949805452451b70bdf9e43ac1e",
"sha256": "f9dd619c440a6d784792be5e41bad562ef312e07967d193b0e96cdc127debfb2"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename/editor_patch.rs",
"bytes": 11423,
"git_blob": "f30a08b8e712d3f59aefa8dc478c2db8e46512d1",
"sha256": "049c9774c1ca28cda01f9a8e024604bef282366aa52c53c17c1918dbd09c3441"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename/preview_glyph_tests.rs",
"bytes": 16247,
"git_blob": "90b3864106072a2fb39c2e1f88a877465f2dc859",
"sha256": "d45a799bd97047c6b77ff5b18334f2a71912b65d5239f2b8ce7017588ccff0f4"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs",
"bytes": 10937,
"git_blob": "4641cf7f8db309b12c7bd668dd4ea771cb456fa6",
"sha256": "06c8dc66b696f70427a190cd174be373a8114bd2f49b6e8f1152173d59e9ec29"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename/tests.rs",
"bytes": 53945,
"git_blob": "e0dfe43bcd255be1b0787e804ac6eb025c55be9e",
"sha256": "a55b5b28c6f4149c957bd9a369e67a8c10054a023b5dd2f9e5f90d441a923206"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename_layout_timing_tests.rs",
"bytes": 12253,
"git_blob": "ea37c4d44a8c54f00f9508250666b5f4a55008ce",
"sha256": "dadf8ce0ec989b9a370703a330bde4b415a813273917037fc6a732b9bf2f98ce"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_rename_timing_tests.rs",
"bytes": 13912,
"git_blob": "b7df39f71542b08ca55acc5c97d580378394f451",
"sha256": "942753946d00cab9d4a19717bec5f429af58c070e2cd1b97cb4d32ed6fb93967"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/app/source_symbols.rs",
"bytes": 18691,
"git_blob": "d992b59adf759076b057b7f242c440bacaa54c1a",
"sha256": "77cb97ec909bcaf3d952e0c6673171fd81e7ca31568248994c8c6b150e2c7f4e"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/document.rs",
"bytes": 32600,
"git_blob": "e68c312afbc17da193db832b022eabb6aeadaac6",
"sha256": "e87d7ce456bcab1dab55249021eaa8056f41b888723d143428486e31cb9ca4b1"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/document_alias_rename.rs",
"bytes": 8021,
"git_blob": "aa98e63b9c81decea42746f1766128765da47e75",
"sha256": "ce64d723a51a834699ebcf74d89d406a77b6ccc5419bcd3f63cf0e27e9fd25cb"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/document_alias_rename_tests.rs",
"bytes": 18027,
"git_blob": "5e773f46fb7ff50ebf1a43a71ee87225e8451389",
"sha256": "847dca1e50970d8a3d75c7e881754453e801f4f3d34f03a88410a334899783bc"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/guide.rs",
"bytes": 116153,
"git_blob": "d0dfce65a3c6cf418f434cfa7293e08b47a60f67",
"sha256": "9a5a0608d87e93eebd5f1c72db021f4f05391362223e0f3b2991e8b24d259f6b"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/main.rs",
"bytes": 1530,
"git_blob": "4f0505451ec37d593a5caa590efd7e7c1971d40d",
"sha256": "ab842902972443da5f55d3ea263fca72d557be2e80886368371ebec6cbc5b1ff"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/source_navigation/query.rs",
"bytes": 36149,
"git_blob": "316224b35e4def678df49de62d411076e3e979ed",
"sha256": "4f6ff7d708bb99c64b7370a1761a6099d5f97be4b319582ab4faa7bb8aa42bb9"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/source_navigation/query_tests.rs",
"bytes": 31577,
"git_blob": "0b6bd7e101dcc031647222c2c788e4be362b5510",
"sha256": "121f197dbae319f47ec59ff875733f1985c7607badb2e4c3d97ef8746d13afa9"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/source_rename.rs",
"bytes": 116,
"git_blob": "f185672c488712aa50de495561062f90c014eaaf",
"sha256": "1ead2a66d9fd7429b8cfca1338b038e7dd97e21ae76cb722f3ca4c43a520ca00"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/source_rename/origin.rs",
"bytes": 9275,
"git_blob": "3da6ccb36964f9456cbe258138838f1176bd1058",
"sha256": "11f619310fe837f20a8d495b13e557cafe258270350815c6ac8c848f51cd76ac"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/source_rename/preview.rs",
"bytes": 19903,
"git_blob": "df96bb6d43e66c9f07f94410871809b3b371e5da",
"sha256": "bf96e31986d143fce43ad1634d7028f1225aebcd9013955ca2ba18cc4fd1190d"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "crates/oa-desktop/src/views.rs",
"bytes": 68431,
"git_blob": "bedd5388cabbce972d9268ef86ca85257f34d043",
"sha256": "df415535c675f9f3aeac8a48ba53c547fe06f369ba74c585a664b898760c9d22"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "docs/language.html",
"bytes": 179620,
"git_blob": "3b7d79c0f42c70b83ebca676d1c7cb30d13b0d7a",
"sha256": "f8a9abc811047005bc616f03852b8ca2e7e784cd15eb4cd9a28cd750af62fe6b"
},
{
"side": "peer",
"pin": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"path": "docs/language.rst",
"bytes": 134869,
"git_blob": "c1ca91062bf5581a33ef7bb91ab82b4b746f0f25",
"sha256": "d2ccbb28923ea82824c5fb3a9f28f718e23bbfb695a3fb9d0ba569b8310be3c0"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "crates/oa-desktop/src/app.rs",
"bytes": 215385,
"git_blob": "11030066dd8973d3a603c1343b6b2651f9841b04",
"sha256": "4a41b062da233a72f1b04866898eeddb3f79882918a67f5f09469fe4eadd9929"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "crates/oa-desktop/src/app/source_symbols.rs",
"bytes": 18627,
"git_blob": "20d0ce55afeb7df57a95e4c1b8096b130dc89a0b",
"sha256": "99370865b548b28f32f4c6ce7e9f8eeaa0c80268a644f2ebcc4bd1e11695e59c"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "crates/oa-desktop/src/document.rs",
"bytes": 31807,
"git_blob": "8369645d832852e912bb79bef06090593fe70ede",
"sha256": "7c87280b5b8d112c34865253f8ba0f80d43bc9897771943b15dc7b5608eb17a4"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "crates/oa-desktop/src/guide.rs",
"bytes": 114509,
"git_blob": "3cb4cbce0669440ce038f8c1488ecd1c81b85a10",
"sha256": "9a6e14ea72c29f4b826e007a4a9836c1c526bd574fc14dd3476ca00a1d80b1c9"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "crates/oa-desktop/src/main.rs",
"bytes": 1511,
"git_blob": "43ab49ecb98e0a8f402af9fa85d8573483463b25",
"sha256": "cb0a919fd0df0924591283da5b55d64d525d8461640441509350be840235e51a"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "crates/oa-desktop/src/source_navigation/query.rs",
"bytes": 35200,
"git_blob": "3044fff36e5392fd9cf9b016c62c63d4b34a5769",
"sha256": "aa8e8e9d446b57c30520c4b3ca1ae9fe524cecb2f4f4f4b229d930ea0377ecca"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "crates/oa-desktop/src/source_navigation/query_tests.rs",
"bytes": 29720,
"git_blob": "e0c9cde6216202ca4bf6e31319bdb664c928d2c3",
"sha256": "a4ecc95a49d0a9325cbf1548cf95a8d367f758f8eb1f44346a2b71ef046f6668"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "crates/oa-desktop/src/views.rs",
"bytes": 67434,
"git_blob": "e91892e3216150f98539cc71c582720307689c85",
"sha256": "e5ed7640fbd2653983c418b88fd2e3612b91f8f02fa2f50f1b5dfd31aab773b2"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "docs/language.html",
"bytes": 176533,
"git_blob": "a9d889f56550eb1152310a17810c69ecbcdb55a2",
"sha256": "9660320375b5cb593169433d9b059c2be46be032a0e44fa5220b436beb3f622b"
},
{
"side": "base",
"pin": "be7a8cd8d7d63aa18e0196bbd36f9e646764c761",
"path": "docs/language.rst",
"bytes": 131984,
"git_blob": "9ea3a7f6572d46483cde621179b912ee306071ea",
"sha256": "894a1a77f97d1aa94c11762fe4e84b4d95e181a77c630324c16c307637ed27e1"
}
]
@@ -0,0 +1,195 @@
{
"base": "4db1ef543ced916179194272bf0e65dce73cb107",
"peer": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"files": [
{
"path": "crates/oa-desktop/src/app.rs",
"bytes": 233137,
"sha256": "c4af6a3bce725ed52e1e5919a2177a12c603d9beb6f0f3485925269171bef7ac",
"git_blob": "8b1edac34f9b8b96df76d4fd759bd6aaae5c0a5e",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/app/diagram_reveal.rs",
"bytes": 5996,
"sha256": "6d94b32ae64aaebdf81b80d5b8f69a5077425d51727c736a57ffb5f334b3b76a",
"git_blob": "ab4dd765b1b03556e9e7f5abf4ca4b5ae8692c1d",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/app/diagram_usages.rs",
"bytes": 18131,
"sha256": "ae7ae6f24a845549d97715d0229861bd49dc0f82d4ce0632f1c134a73de605ee",
"git_blob": "fb17862f667b597f76d77c7c320f1b0b7935758c",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/app/source_rename.rs",
"bytes": 45315,
"sha256": "7b13c39d4c1509d13aef2de4580b9e418cf7ac1ae87d42bd21dcd34ecc70f863",
"git_blob": "eee376e2461477a4ac123c849fb165d9e2867b2b",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/app/source_rename/alias_input.rs",
"bytes": 6940,
"sha256": "5888b50e4d6fabd8cd0c6d70986a791d8e95f190453ea37ebb251f2fa19cda90",
"git_blob": "f7240271ea87a957a686249bf629bc0c36e924fe",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/app/source_rename/alias_input/tests.rs",
"bytes": 7279,
"sha256": "f9dd619c440a6d784792be5e41bad562ef312e07967d193b0e96cdc127debfb2",
"git_blob": "579880f4f6fab0949805452451b70bdf9e43ac1e",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/app/source_rename/editor_patch.rs",
"bytes": 11423,
"sha256": "049c9774c1ca28cda01f9a8e024604bef282366aa52c53c17c1918dbd09c3441",
"git_blob": "f30a08b8e712d3f59aefa8dc478c2db8e46512d1",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/app/source_rename/navigation_union_tests.rs",
"bytes": 16422,
"sha256": "27e4529125974c832cf35e699c69bb1855f94f3bc6cd5455fde94408906c2579",
"git_blob": "dba110c2244a0921fde002af67c20d2050faf999",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/app/source_rename/preview_glyph_tests.rs",
"bytes": 16247,
"sha256": "d45a799bd97047c6b77ff5b18334f2a71912b65d5239f2b8ce7017588ccff0f4",
"git_blob": "90b3864106072a2fb39c2e1f88a877465f2dc859",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs",
"bytes": 10937,
"sha256": "06c8dc66b696f70427a190cd174be373a8114bd2f49b6e8f1152173d59e9ec29",
"git_blob": "4641cf7f8db309b12c7bd668dd4ea771cb456fa6",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/app/source_rename/tests.rs",
"bytes": 54012,
"sha256": "90f69af589fd1698f20ab67299785f8b6c60a99c092e615b8ddb446feff8d5f0",
"git_blob": "2b90ec6e35c0d0a10fa05268a447a0bb53131bf0",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/app/source_rename_layout_timing_tests.rs",
"bytes": 12253,
"sha256": "dadf8ce0ec989b9a370703a330bde4b415a813273917037fc6a732b9bf2f98ce",
"git_blob": "ea37c4d44a8c54f00f9508250666b5f4a55008ce",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/app/source_rename_timing_tests.rs",
"bytes": 13912,
"sha256": "942753946d00cab9d4a19717bec5f429af58c070e2cd1b97cb4d32ed6fb93967",
"git_blob": "b7df39f71542b08ca55acc5c97d580378394f451",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/app/source_symbols.rs",
"bytes": 21084,
"sha256": "43382383bc09c496a4262e7b16a01855e533c6203d046076c16032719bf7ae14",
"git_blob": "03aaade7cc7e660ab3ded9ab9920522b08f550a0",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/document.rs",
"bytes": 32600,
"sha256": "e87d7ce456bcab1dab55249021eaa8056f41b888723d143428486e31cb9ca4b1",
"git_blob": "e68c312afbc17da193db832b022eabb6aeadaac6",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/document_alias_rename.rs",
"bytes": 8021,
"sha256": "ce64d723a51a834699ebcf74d89d406a77b6ccc5419bcd3f63cf0e27e9fd25cb",
"git_blob": "aa98e63b9c81decea42746f1766128765da47e75",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/document_alias_rename_tests.rs",
"bytes": 18027,
"sha256": "847dca1e50970d8a3d75c7e881754453e801f4f3d34f03a88410a334899783bc",
"git_blob": "5e773f46fb7ff50ebf1a43a71ee87225e8451389",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/guide.rs",
"bytes": 120562,
"sha256": "8795295d86b51c5e6b589017445886132f6349c5aef0ac3542f202c1c6afb157",
"git_blob": "50a6c6c9ac64661890062f9f88343d8d52e0cef3",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/main.rs",
"bytes": 1549,
"sha256": "2230e12ddbfda7e52fa36b04bf676ca822c7807f1d31715cd0527653679c889b",
"git_blob": "cb86659ddc6a9e18026d2fc3de5f67e77a575167",
"equals_peer_raw": false
},
{
"path": "crates/oa-desktop/src/source_navigation/query.rs",
"bytes": 36149,
"sha256": "4f6ff7d708bb99c64b7370a1761a6099d5f97be4b319582ab4faa7bb8aa42bb9",
"git_blob": "316224b35e4def678df49de62d411076e3e979ed",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/source_navigation/query_tests.rs",
"bytes": 31577,
"sha256": "121f197dbae319f47ec59ff875733f1985c7607badb2e4c3d97ef8746d13afa9",
"git_blob": "0b6bd7e101dcc031647222c2c788e4be362b5510",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/source_rename.rs",
"bytes": 116,
"sha256": "1ead2a66d9fd7429b8cfca1338b038e7dd97e21ae76cb722f3ca4c43a520ca00",
"git_blob": "f185672c488712aa50de495561062f90c014eaaf",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/source_rename/origin.rs",
"bytes": 9275,
"sha256": "11f619310fe837f20a8d495b13e557cafe258270350815c6ac8c848f51cd76ac",
"git_blob": "3da6ccb36964f9456cbe258138838f1176bd1058",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/source_rename/preview.rs",
"bytes": 19903,
"sha256": "bf96e31986d143fce43ad1634d7028f1225aebcd9013955ca2ba18cc4fd1190d",
"git_blob": "df96bb6d43e66c9f07f94410871809b3b371e5da",
"equals_peer_raw": true
},
{
"path": "crates/oa-desktop/src/views.rs",
"bytes": 71224,
"sha256": "a60dea8285f844ea386e3ff429fd47e559e2a288dc88d4d98eb0f95d3684f2b1",
"git_blob": "0ebc252ab42ce1281482b7d61c4f797755f20d7d",
"equals_peer_raw": false
},
{
"path": "docs/language.html",
"bytes": 184689,
"sha256": "b0eb7199e481d8ecc8dd04bf1e1951569b6971acb0f1d1263afb40a0ec6ba14f",
"git_blob": "fb55b2ff958a785c59a671389e5a852d8a572015",
"equals_peer_raw": false
},
{
"path": "docs/language.rst",
"bytes": 139785,
"sha256": "9009c564f20f833f7d545bd286ee2b5a18fa86fbf8c6a6e68d2ffdd287a27f0f",
"git_blob": "0116a562098e9d8a5fc885442fa57621ff63e01d",
"equals_peer_raw": false
}
]
}
@@ -0,0 +1,14 @@
# Combined native acceptance — prepared, not executed
Use a fresh private copy of [examples/source-project](../../../examples/source-project/project.arcadia), the identified union executable and an isolated profile. Record the executable hash and initial hashes of all six `.arcadia` files. Existing peer native evidence does not cover this combined source.
Target the second `@assess_report` reference in `views.arcadia` (line 61 in the prepared fixture), and rename it to `assess_report_union`. The independent accepted-source oracle is six alias-token substitutions across two files: four in `sa/reporting.arcadia` and two in `views.arcadia`. Names, UUIDs, geometry, comments and the other four files must remain identical. Confirmation alone must leave all disk files unchanged.
1. **Preview visibility and scroll.** Focus the target, invoke F2, enter the replacement and Preview. On a page with actual overflow, scroll its body, switch Full details → Preview pane normally and rapidly, then scroll deliberately again and allow redraw/idle. Approval and selected file/hunk/row/segment remain unchanged; later scrolling stays put. The alias input and footer remain reachable. Cancel changes neither accepted source nor disk. Do not require the old scroll offset to survive an actually mounted Details replacement. The deterministic held-operation race is checked by the retained-widget test; native toggling alone cannot establish its timing.
2. **One modal input owner.** With Rename open, try F12 and the underlying Show in diagrams control where reachable, then Escape once. Open Show in diagrams and try F2 and the underlying Rename control while the chooser is ready, and while loading if that state is observable. Only the current modal owns input; no second dialog, hidden navigation or source edit occurs. Escape dismisses one owner, and a fresh Rename works afterward. A canceled lookup must not reopen its chooser when it completes.
3. **Confirm and immediate edit.** Rename from the same second reference. Confirm must focus the editor and select exactly that renamed alias. Without clicking, type `assess_report_probe`: only the selected occurrence becomes an unapplied text draft. Ctrl+Z restores `assess_report_union` without undoing the accepted rename. Disk remains baseline.
4. **Diagram usage and model history.** From the restored renamed reference, Show in diagrams and visit each destination, returning to Text between visits. Expected destinations are **SA — system boundary and functions**, placement `sa_assessment_view` (`00000000-0000-4000-8000-000000000714`), and **SA — functional containment**, placement `assessment_view` (`00000000-0000-4000-8000-000000000723`). Each reveals the visible **Assess report** representation with a readable marker after layout settles. Navigation adds no history entry. One Undo model restores all six old tokens; one Redo model restores all six new tokens. Before Save disk stays baseline; after Save and native reopen, exactly the two expected files contain exactly the six substitutions.
If the example has no genuinely scrollable preview at the chosen window size, materialize the existing `paged_fixture()` in [preview_scroll_tests.rs](../../../crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs) as a separate native fixture. Preserve its exact generation inputs; a non-overflowing preview cannot establish scroll acceptance.
Record actual observations, source/disk/history oracles, logs, window size and clean closure against the matching executable. Compilation and screenshots alone do not establish these outcomes. Linux remains user-paused.
@@ -0,0 +1,168 @@
{
"base": "4db1ef543ced916179194272bf0e65dce73cb107",
"peer": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"files": [
{
"path": "crates/oa-desktop/src/app.rs",
"bytes": 233137,
"sha256": "c4af6a3bce725ed52e1e5919a2177a12c603d9beb6f0f3485925269171bef7ac",
"git_blob": "8b1edac34f9b8b96df76d4fd759bd6aaae5c0a5e"
},
{
"path": "crates/oa-desktop/src/app/diagram_reveal.rs",
"bytes": 5996,
"sha256": "6d94b32ae64aaebdf81b80d5b8f69a5077425d51727c736a57ffb5f334b3b76a",
"git_blob": "ab4dd765b1b03556e9e7f5abf4ca4b5ae8692c1d"
},
{
"path": "crates/oa-desktop/src/app/diagram_usages.rs",
"bytes": 18131,
"sha256": "ae7ae6f24a845549d97715d0229861bd49dc0f82d4ce0632f1c134a73de605ee",
"git_blob": "fb17862f667b597f76d77c7c320f1b0b7935758c"
},
{
"path": "crates/oa-desktop/src/app/source_rename.rs",
"bytes": 45705,
"sha256": "4714cde897a7a365958a6014f6a546df682a963a48c2fd9d918ddb3c5500268d",
"git_blob": "a4e41d1a3ccd8c2a37e763c3ab50ff6cac8935af"
},
{
"path": "crates/oa-desktop/src/app/source_rename/alias_input.rs",
"bytes": 6940,
"sha256": "5888b50e4d6fabd8cd0c6d70986a791d8e95f190453ea37ebb251f2fa19cda90",
"git_blob": "f7240271ea87a957a686249bf629bc0c36e924fe"
},
{
"path": "crates/oa-desktop/src/app/source_rename/alias_input/tests.rs",
"bytes": 7279,
"sha256": "f9dd619c440a6d784792be5e41bad562ef312e07967d193b0e96cdc127debfb2",
"git_blob": "579880f4f6fab0949805452451b70bdf9e43ac1e"
},
{
"path": "crates/oa-desktop/src/app/source_rename/editor_patch.rs",
"bytes": 11423,
"sha256": "049c9774c1ca28cda01f9a8e024604bef282366aa52c53c17c1918dbd09c3441",
"git_blob": "f30a08b8e712d3f59aefa8dc478c2db8e46512d1"
},
{
"path": "crates/oa-desktop/src/app/source_rename/navigation_union_tests.rs",
"bytes": 16422,
"sha256": "27e4529125974c832cf35e699c69bb1855f94f3bc6cd5455fde94408906c2579",
"git_blob": "dba110c2244a0921fde002af67c20d2050faf999"
},
{
"path": "crates/oa-desktop/src/app/source_rename/preview_glyph_tests.rs",
"bytes": 16247,
"sha256": "d45a799bd97047c6b77ff5b18334f2a71912b65d5239f2b8ce7017588ccff0f4",
"git_blob": "90b3864106072a2fb39c2e1f88a877465f2dc859"
},
{
"path": "crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs",
"bytes": 13821,
"sha256": "ca8d49b5de9e4b848d73cc4c0a4884c0a006a48c3e171f32fb496eac4d6aa180",
"git_blob": "3025e756299bab0c0c48aa236e99dd9788e557ee"
},
{
"path": "crates/oa-desktop/src/app/source_rename/tests.rs",
"bytes": 54012,
"sha256": "90f69af589fd1698f20ab67299785f8b6c60a99c092e615b8ddb446feff8d5f0",
"git_blob": "2b90ec6e35c0d0a10fa05268a447a0bb53131bf0"
},
{
"path": "crates/oa-desktop/src/app/source_rename_layout_timing_tests.rs",
"bytes": 12253,
"sha256": "dadf8ce0ec989b9a370703a330bde4b415a813273917037fc6a732b9bf2f98ce",
"git_blob": "ea37c4d44a8c54f00f9508250666b5f4a55008ce"
},
{
"path": "crates/oa-desktop/src/app/source_rename_timing_tests.rs",
"bytes": 13912,
"sha256": "942753946d00cab9d4a19717bec5f429af58c070e2cd1b97cb4d32ed6fb93967",
"git_blob": "b7df39f71542b08ca55acc5c97d580378394f451"
},
{
"path": "crates/oa-desktop/src/app/source_symbols.rs",
"bytes": 21084,
"sha256": "43382383bc09c496a4262e7b16a01855e533c6203d046076c16032719bf7ae14",
"git_blob": "03aaade7cc7e660ab3ded9ab9920522b08f550a0"
},
{
"path": "crates/oa-desktop/src/document.rs",
"bytes": 32600,
"sha256": "e87d7ce456bcab1dab55249021eaa8056f41b888723d143428486e31cb9ca4b1",
"git_blob": "e68c312afbc17da193db832b022eabb6aeadaac6"
},
{
"path": "crates/oa-desktop/src/document_alias_rename.rs",
"bytes": 8021,
"sha256": "ce64d723a51a834699ebcf74d89d406a77b6ccc5419bcd3f63cf0e27e9fd25cb",
"git_blob": "aa98e63b9c81decea42746f1766128765da47e75"
},
{
"path": "crates/oa-desktop/src/document_alias_rename_tests.rs",
"bytes": 18027,
"sha256": "847dca1e50970d8a3d75c7e881754453e801f4f3d34f03a88410a334899783bc",
"git_blob": "5e773f46fb7ff50ebf1a43a71ee87225e8451389"
},
{
"path": "crates/oa-desktop/src/guide.rs",
"bytes": 120562,
"sha256": "8795295d86b51c5e6b589017445886132f6349c5aef0ac3542f202c1c6afb157",
"git_blob": "50a6c6c9ac64661890062f9f88343d8d52e0cef3"
},
{
"path": "crates/oa-desktop/src/main.rs",
"bytes": 1549,
"sha256": "2230e12ddbfda7e52fa36b04bf676ca822c7807f1d31715cd0527653679c889b",
"git_blob": "cb86659ddc6a9e18026d2fc3de5f67e77a575167"
},
{
"path": "crates/oa-desktop/src/source_navigation/query.rs",
"bytes": 36149,
"sha256": "4f6ff7d708bb99c64b7370a1761a6099d5f97be4b319582ab4faa7bb8aa42bb9",
"git_blob": "316224b35e4def678df49de62d411076e3e979ed"
},
{
"path": "crates/oa-desktop/src/source_navigation/query_tests.rs",
"bytes": 31577,
"sha256": "121f197dbae319f47ec59ff875733f1985c7607badb2e4c3d97ef8746d13afa9",
"git_blob": "0b6bd7e101dcc031647222c2c788e4be362b5510"
},
{
"path": "crates/oa-desktop/src/source_rename.rs",
"bytes": 116,
"sha256": "1ead2a66d9fd7429b8cfca1338b038e7dd97e21ae76cb722f3ca4c43a520ca00",
"git_blob": "f185672c488712aa50de495561062f90c014eaaf"
},
{
"path": "crates/oa-desktop/src/source_rename/origin.rs",
"bytes": 9275,
"sha256": "11f619310fe837f20a8d495b13e557cafe258270350815c6ac8c848f51cd76ac",
"git_blob": "3da6ccb36964f9456cbe258138838f1176bd1058"
},
{
"path": "crates/oa-desktop/src/source_rename/preview.rs",
"bytes": 19903,
"sha256": "bf96e31986d143fce43ad1634d7028f1225aebcd9013955ca2ba18cc4fd1190d",
"git_blob": "df96bb6d43e66c9f07f94410871809b3b371e5da"
},
{
"path": "crates/oa-desktop/src/views.rs",
"bytes": 71224,
"sha256": "a60dea8285f844ea386e3ff429fd47e559e2a288dc88d4d98eb0f95d3684f2b1",
"git_blob": "0ebc252ab42ce1281482b7d61c4f797755f20d7d"
},
{
"path": "docs/language.html",
"bytes": 184689,
"sha256": "b0eb7199e481d8ecc8dd04bf1e1951569b6971acb0f1d1263afb40a0ec6ba14f",
"git_blob": "fb55b2ff958a785c59a671389e5a852d8a572015"
},
{
"path": "docs/language.rst",
"bytes": 139785,
"sha256": "9009c564f20f833f7d545bd286ee2b5a18fa86fbf8c6a6e68d2ffdd287a27f0f",
"git_blob": "0116a562098e9d8a5fc885442fa57621ff63e01d"
}
]
}