diff --git a/.gitattributes b/.gitattributes index 6e706f66..ccecfcf3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -101,3 +101,6 @@ harness/process-group-removal-evidence-20260925/** -text whitespace=cr-at-eol # Preserve exact saved-view planner review and portable evidence bytes. harness/saved-group-removal-evidence-20260925/** -text whitespace=cr-at-eol + +# Preserve exact saved-view application check records. +harness/saved-group-removal-app-evidence-20260925/** -text whitespace=cr-at-eol diff --git a/harness/saved-group-removal-app-20260925.md b/harness/saved-group-removal-app-20260925.md new file mode 100644 index 00000000..96f2319e --- /dev/null +++ b/harness/saved-group-removal-app-20260925.md @@ -0,0 +1,105 @@ +# Saved-view group model deletion: application checkpoint + +Branch contribution for [issue 29](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/29). +The [policy](saved-group-removal-policy-20260925.md), language section 8.1 and +[planner foundation](saved-group-removal-foundation-20260925.md) remain the +contract and earlier evidence. This application checkpoint is separate from +the delivered issue 37 prerelease and is not full application acceptance. + +## Change + +Saved Architecture and State groups have an explicit **Delete from model…** +control, whole-selection context action and focused Shift+Delete request. +Plain Delete/Hide retains placement-only semantics. Context actions preserve +the current group even when opened on another object; selecting only that +object remains an explicit separate action. + +One captured review contains the original typed selection, semantic subjects, +actual removed/updated records and derived Process interpretation/caller +effects. Names, aliases and effects can be searched and paged; confirmation and +cancellation remain outside the scrolling effect body. The final operation is +one Document transaction, including source synchronization, with one Undo/Redo. +Stale requests and modal tokens are rejected before disturbing a newer edit. + +Ordinary and State private pointer state now shares the same generation/RAII +lease mechanism used by Process. A later native press or focus traversal can +revoke a queued request before App consumes the batch. Lost-focus and abandoned +gesture boundaries release ownership without making old generations reusable. + +Process interpretation and caller analysis is shared by both adapters. Deleted +definitions retain their pre-deletion dependency edges when reporting surviving +callers; clearing stored references must not hide that effect. This is bounded +definition-level analysis, not a complete expanded caller-graph calculation. +The existing Process review uses the same extracted effect-row formatter. + +## Verification record + +Source checkpoint: `fa9d89efad052d9f5591ac4f8b72d18db4ca58ed`. +**Verification is unfinished. The user explicitly requested immediate publication +and stop.** The running final Clippy gate was terminated (recorded Windows exit +4294967295), and the subsequent test/format gates did not start. The last edits +have not passed their final checks. No final passing suite is claimed. + +[Raw captures and source capsules](saved-group-removal-app-evidence-20260925/interrupted-checkpoint.zip) +and their [hash manifest](saved-group-removal-app-evidence-20260925/manifest.json) +preserve all five attempts, including failures and the interrupted lint run. +Windows GNU/LLVM Rust/Cargo 1.98.1, one Cargo job, incremental compilation off. +These are raw checkpoint records, not independently audited acceptance evidence. + +The last completed test command was: + +```text +cargo test -p oa-desktop --message-format=json -- removal multiselect focus state_canvas --test-threads=1 +``` + +At `b137d457270d5cdf89b4bd2ac411e95a6c7e556e` it passed 270 tests and failed +three (0 ignored, 1410 filtered). All saved-App tests, including the owner +deletion regression, passed at that source. The three follow-up edits in the +checkpoint dismiss only a same-token expired menu, cancel a held Scenario +gesture when its form becomes noneditable, and update the State Shift+Delete +test to require the now-supported complete model-removal group. Their rerun +is pending; this report does not treat the fixes as verified. + +Resume checks with the same command plus `direct_canvas_tests`, strict desktop +all-target Clippy, and formatting. Native and independent review limits below +also remain. No background build or test is intentionally left running. + +The retained attempts expose the corrections rather than hiding them: + +- `saved-app-tests-1`, source `3ab63ef028b1817924635571fbc5e8072558d2fc`: + compile failure from interrupted canvas refactors leaving duplicate Program + implementations and missing inherent helpers. The old update bodies moved + into inherent helpers, leaving one Program wrapper each. +- `saved-app-tests-2`, source `1b683ea3361304b29a38597a6c2022c41ff87680`: + 104 passed, one failed. Deleting a selected State Machine correctly changed + the model but retained its UI owner reference. Successful transactions now + retire deleted behavior owner/view references; failed transactions retain + them. The regression asserts surviving inspection context and exact Undo. +- `saved-app-clippy-1`, source `84cd5ef56cefb2504465d2b6c771a8bab485d683`: + strict lint rejected a nested menu admission condition. It was collapsed + without changing the admitted action. + +The new App fixture uses distinct saved diagrams rather than reusing the +default diagram through `ensure_diagram`. Mounted batch checks found the need +to notify the canvas when its keyboard owner intercepts Tab; focus traversal +now retires private input state before a queued deletion reaches App. + +## Acceptance boundary + +No new native GUI trial, runnable release, default-branch integration, full +desktop-suite or Linux acceptance is asserted by this record. Earlier Scenario +and Process native evidence remains scoped to its identified source; it does +not validate this newly enabled saved-view workflow. + +Fresh independent review of the complete App changes and native compact +Architecture/State mixed selections, query/paging, cancellation, deletion, +exact save/Undo/Redo/reopen remain required before release acceptance. Bounded +contributors drafted input, derived-impact and App-test changes but terminated +at their usage limit before final review; the parent completed integration. +The previous independent planner review does not cover these application edits. + +Saved-App genuine source-budget failure coverage is not claimed. Existing +Scenario source-budget tests cover the shared Document failure path; they are +not relabeled as a saved-App runtime test. Cross-family changes to canvas focus +and extracted Process effect rendering need their identified regression results, +not merely successful compilation. diff --git a/harness/saved-group-removal-app-evidence-20260925/interrupted-checkpoint.zip b/harness/saved-group-removal-app-evidence-20260925/interrupted-checkpoint.zip new file mode 100644 index 00000000..b82022db Binary files /dev/null and b/harness/saved-group-removal-app-evidence-20260925/interrupted-checkpoint.zip differ diff --git a/harness/saved-group-removal-app-evidence-20260925/manifest.json b/harness/saved-group-removal-app-evidence-20260925/manifest.json new file mode 100644 index 00000000..46b28154 --- /dev/null +++ b/harness/saved-group-removal-app-evidence-20260925/manifest.json @@ -0,0 +1,174 @@ +{ + "status": "Interrupted at explicit user request; no final passing verification", + "source": "fa9d89efad052d9f5591ac4f8b72d18db4ca58ed", + "archive": { + "bytes": 16522133, + "sha256": "d97ed023dcb53b962040420e7b08f7ac3c3df8c1d9481e0908d07c94b65ef6ae" + }, + "members": { + "saved-app-clippy-1/inputs.json": { + "bytes": 141119, + "sha256": "46b0563e76ecb591057cd72c33aff9abd10ca5bb7732d9eaa261b99262f329cc" + }, + "saved-app-clippy-1/inputs.zip": { + "bytes": 3346263, + "sha256": "330ece3193a59dded605cde0465203753bb4f21df7bcee0fe7a84bbf256e8dd4" + }, + "saved-app-clippy-1/process.json": { + "bytes": 179, + "sha256": "d17bd2b86685a29d17c60dbc1bdb28dfb8aa7ea8ed3ca7b0a8bd17e399091891" + }, + "saved-app-clippy-1/result.json": { + "bytes": 1961, + "sha256": "04dac06b373f2c569b4bdc705be2d0b1cb3873818c8cc182a2e2d1b0c05908d6" + }, + "saved-app-clippy-1/source-proof.json": { + "bytes": 597, + "sha256": "ca56a2ca0e0f94c2309b44dd6e78eafd2cdd51ea5bddf3f9d31fa42c21e7fbb2" + }, + "saved-app-clippy-1/started.json": { + "bytes": 1563, + "sha256": "39022aa01566c2f0a96fc0e31faa621a2c9fe36ebe25fa337d6978c1cbe5f51f" + }, + "saved-app-clippy-1/stderr.log": { + "bytes": 163, + "sha256": "6cd1a10aa8ce9ee8a5ac74fd1dacd158709abeeb9483b49fc61c272157cbfc6d" + }, + "saved-app-clippy-1/stdout.log": { + "bytes": 272318, + "sha256": "47bfe7c3edc5146dba8ef89107de9eb80910d41524447f2e26eca16caafd9e60" + }, + "saved-app-clippy-2/inputs.json": { + "bytes": 141119, + "sha256": "8bff1ac0784ff6d04be666049adca30de1a62482fc1aabd667171899d27a8d69" + }, + "saved-app-clippy-2/inputs.zip": { + "bytes": 3346435, + "sha256": "76a4e581d52e0698d740d4b04281bba1356e51b60fefb906d460307cd1566a68" + }, + "saved-app-clippy-2/process.json": { + "bytes": 179, + "sha256": "3512984be21e665640644f04243453b3847889836784a62da4d67634b1a3dbdc" + }, + "saved-app-clippy-2/result.json": { + "bytes": 1966, + "sha256": "a0e40f1793182fc1938416f5301dd41b9485ed9ae030e5db95049c36e37fa6bb" + }, + "saved-app-clippy-2/started.json": { + "bytes": 1563, + "sha256": "351e948c1711cc8cce5d470cc0c2a5beec4e9fcddaf5a18257802fe7f9a94d5a" + }, + "saved-app-clippy-2/stderr.log": { + "bytes": 73, + "sha256": "85f6a6d188a56417b1b6a2dc5ba8144c2dcccba0c8fd25ceac85c2c95ab8d861" + }, + "saved-app-clippy-2/stdout.log": { + "bytes": 267337, + "sha256": "654d56a12e0543015deac1eb534742f7065baf1b2eee19bfb28a37d986c587b3" + }, + "saved-app-tests-1/inputs.json": { + "bytes": 141119, + "sha256": "ed1ab2d2b2a9537ab9568ba28e7c7f2fd8bf12412011c35841d76dde3b2a71c6" + }, + "saved-app-tests-1/inputs.zip": { + "bytes": 3344658, + "sha256": "322130a230d3f6ffcbb2fea5854e97299800e04e6c793e7dd28ab965401745ac" + }, + "saved-app-tests-1/process.json": { + "bytes": 173, + "sha256": "19b671b9dc7cbe8311b85fa812d4e57fd4a83a38578bc825c567261230a942fc" + }, + "saved-app-tests-1/result.json": { + "bytes": 3307, + "sha256": "95517c0616f5580d1a186b4f296dfb4e8b4d3e5d3d926b506b329610c4112e5c" + }, + "saved-app-tests-1/source-proof.json": { + "bytes": 596, + "sha256": "47cefda7aa77e8cd09ebab9db80a3067882320b3470bf66662d273d6302df091" + }, + "saved-app-tests-1/started.json": { + "bytes": 1552, + "sha256": "c2e4d951849ec6b5fe98bb42cdf36d6ee2a54cf6c2a864f419307fc51c8e9649" + }, + "saved-app-tests-1/stderr.log": { + "bytes": 164, + "sha256": "158c54ac0ec7922eb43268b0a72f2344babdd1e4937e90328e12542ce4bd67e1" + }, + "saved-app-tests-1/stdout.log": { + "bytes": 306273, + "sha256": "2dc4b498ca8686222647438c672a0737871b5dc791516dbd418ee8acebc55954" + }, + "saved-app-tests-2/inputs.json": { + "bytes": 141119, + "sha256": "2bf5d9594138d078e037c78fbc554a5f932856230cd6b7a9774e4efb21555da3" + }, + "saved-app-tests-2/inputs.zip": { + "bytes": 3346136, + "sha256": "b570d82f3cb2ba5c33dbd6bdde573bc96687f8e361607e8b34272e92e5c9c4d0" + }, + "saved-app-tests-2/process.json": { + "bytes": 172, + "sha256": "923409e253214b246216a303f7e2b35ee3d04edb42731b2b192c0fc1360863fd" + }, + "saved-app-tests-2/result.json": { + "bytes": 4635, + "sha256": "39cb174bccbd7f2fe5debce2b25225edbb8208d23617ef16577f0ec05e38e5f6" + }, + "saved-app-tests-2/source-proof.json": { + "bytes": 596, + "sha256": "8ce66483ad1e5960ccdea2121ee3c4403585bec7af0d82f104ddf6b69d02d6fe" + }, + "saved-app-tests-2/started.json": { + "bytes": 1552, + "sha256": "34f07b08c03dca520640b317cfead083f8583430b656e9308f8efbf351a54e1a" + }, + "saved-app-tests-2/stderr.log": { + "bytes": 355, + "sha256": "aabd0bca811fcce6bac438609a67fda9774e7bec7d7faa3f744f069b5fba32d0" + }, + "saved-app-tests-2/stdout.log": { + "bytes": 307406, + "sha256": "8c4d59448c048a3e5daeb334e2991a023c74ca23f7cf2dce401e9fd0d23d8e2e" + }, + "saved-app-tests-3/inputs.json": { + "bytes": 141119, + "sha256": "67e9f840904a78aee41f2f5f4bac9b4c1b51b5a11a3b95a792aa4388e9937d5d" + }, + "saved-app-tests-3/inputs.zip": { + "bytes": 3346266, + "sha256": "66b9c19fcf53cb7da1d86cf17174cd1724b1db4ba09c2a034354d24be8908095" + }, + "saved-app-tests-3/process.json": { + "bytes": 213, + "sha256": "5bc7171753a1242b71259de47c88502588c7b8f32881c73e825c3a6e90ec158f" + }, + "saved-app-tests-3/result.json": { + "bytes": 4690, + "sha256": "e043638dcf0de996b302e15bf858f516ab6e60cd00b8468f13158aee96cf19d3" + }, + "saved-app-tests-3/source-proof.json": { + "bytes": 596, + "sha256": "0bd60beafd33bdba6cb7c0bce3d325e21d6a5232ae927470177d92e4e12ab23a" + }, + "saved-app-tests-3/started.json": { + "bytes": 1607, + "sha256": "e4386cd76ec9e2a717945c72124f5b82df08de6d5af060c787302b319be226a1" + }, + "saved-app-tests-3/stderr.log": { + "bytes": 355, + "sha256": "b66e13c77cf7eacb33b9ce952a5e05f53c27e0ecb40eeeed211f3357c940b429" + }, + "saved-app-tests-3/stdout.log": { + "bytes": 328463, + "sha256": "0911f16cb480de0f267e48cbed826e17a886a1ba091f72d841b74186bce989b9" + }, + "helpers/gate.py": { + "bytes": 3778, + "sha256": "3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2" + }, + "helpers/source-proof.py": { + "bytes": 1396, + "sha256": "c86f51d9b8465341dab73d045923ec306b15ebabf7c97b81beac7afe73bd72a1" + } + } +}