Record lifecycle integration gates and independent native paint review

This commit is contained in:
2026-09-12 17:20:31 -07:00
parent aadc6396d3
commit 26ca4a4c81
14 changed files with 8332 additions and 0 deletions
+6
View File
@@ -98,6 +98,12 @@ failures, reviews and validated bound OA/SA evaluator fixtures. Complete direct
manipulation, persistent process placement/lanes and coherent peer integration
remain open. Gitea owns live coordination.
Source **aadc6396d39ff336d05381d58d545093d3f37a73** integrates reviewed lifecycle
rendering with typed activations. Its 36 lifecycle, 14 activation and one atomic
Call/Reply tests pass on 536 unchanged inputs, including rendered border continuity.
These 51 targeted checks do not establish full-suite or native acceptance for the
combined source. [Integration evidence](release-lifecycle-activation-union-20260913.md).
[Native follow-up evidence](release-canvas-native-83f53c7-20260912.md) records
the normally closed source83 trial, observed defect, minimum-size layout and
the boundary between state and scenario keyboard policies.
@@ -0,0 +1,21 @@
Finished `test` profile [unoptimized] target(s) in 7.05s
Running unittests src\main.rs (target\debug\deps\arcadia_studio-e358a5ed59b1de41.exe)
running 14 tests
test behavior::scenario_activation::tests::a_fragment_cannot_make_crossed_calls_an_unambiguous_caller_execution ... ok
test behavior::scenario_activation::tests::activation_shoulders_under_label_backplates_select_their_call ... ok
test behavior::scenario_activation::tests::actual_canvas_pointer_selects_each_exposed_shoulder_under_zoom_and_pan ... ok
test behavior::scenario_activation::tests::alternative_and_parallel_operand_local_calls_do_not_nest_from_screen_order ... ok
test behavior::scenario_activation::tests::an_inactive_self_call_has_no_fabricated_parent_and_three_nested_calls_expose_three_columns ... ok
test behavior::scenario_activation::tests::call_uuid_order_does_not_choose_activation_columns_or_message_anchors ... ok
test behavior::scenario_activation::tests::inherited_execution_anchors_a_self_call_inside_an_operand_before_returning_after_the_fragment ... ok
test behavior::scenario_activation::tests::long_message_backplates_do_not_erase_selected_activation_border_pixels ... ok
test behavior::scenario_activation::tests::missing_reply_is_a_short_explicit_open_span_and_an_uncorrelated_reply_closes_nothing ... ok
test behavior::scenario_activation::tests::nested_calls_expose_both_bars_and_end_at_their_exact_replies_in_both_directions ... ok
test behavior::scenario_activation::tests::nested_correlations_returning_in_alternative_operands_remain_nested_before_the_fragment ... ok
test behavior::scenario_activation::tests::reentrant_call_uses_the_other_receiver_without_inventing_a_caller_execution ... ok
test behavior::scenario_activation::tests::self_call_receives_at_lower_loop_end_and_self_reply_returns_to_the_parent ... ok
test behavior::scenario_activation::tests::sequential_calls_reuse_column_and_crossed_replies_keep_their_correlations ... ok
test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 848 filtered out; finished in 4.80s
@@ -0,0 +1,20 @@
{
"source": "aadc6396d39ff336d05381d58d545093d3f37a73",
"start": "2026-09-13T00:10:36.029521+00:00",
"end": "2026-09-13T00:10:50.675505+00:00",
"exit": 0,
"command": [
"cargo",
"test",
"--locked",
"-p",
"oa-desktop",
"--bin",
"arcadia-studio",
"scenario_activation",
"--",
"--test-threads=1"
],
"inputs": "activation-aadc639.inputs.json",
"changed_inputs": []
}
@@ -318,5 +318,50 @@
"file": "gui-d61f1f3.result.json",
"bytes": 351,
"sha256": "244535cd3032d71b9755ccd97c1102c7f0da3c9d64f8ceea6836271870bff771"
},
{
"file": "lifecycle-aadc639.log",
"bytes": 5054,
"sha256": "3a9c80e3b875c6b41612851666a0cececddf0ec127e3109bb10b921492257992"
},
{
"file": "lifecycle-aadc639.inputs.json",
"bytes": 99902,
"sha256": "a03c6f7c5a700fbce64a4808f81bd118f689cc9a5ebb377b921a98f5b58ce8ec"
},
{
"file": "lifecycle-aadc639.result.json",
"bytes": 416,
"sha256": "c9df3f204e76568b1acb66d7b52603a5895d39075e7ea5e8ff7683cba1ac32b7"
},
{
"file": "activation-aadc639.log",
"bytes": 2049,
"sha256": "28676a070d25276e9b7967f71d28785d6575f85e1ca97bf7e4f9eae86231a26c"
},
{
"file": "activation-aadc639.inputs.json",
"bytes": 99902,
"sha256": "a03c6f7c5a700fbce64a4808f81bd118f689cc9a5ebb377b921a98f5b58ce8ec"
},
{
"file": "activation-aadc639.result.json",
"bytes": 418,
"sha256": "e4288793fd618be5c4abe237af14f945dfac65ec9138e6c3792013b0b70a8261"
},
{
"file": "atomic-aadc639.log",
"bytes": 369,
"sha256": "ff6773e979dc35152db446df377f27686b87a416cff17f1cc6e5e10bfc873dce"
},
{
"file": "atomic-aadc639.inputs.json",
"bytes": 99902,
"sha256": "a03c6f7c5a700fbce64a4808f81bd118f689cc9a5ebb377b921a98f5b58ce8ec"
},
{
"file": "atomic-aadc639.result.json",
"bytes": 458,
"sha256": "26e1cf5e541947055d9c62cca4b71ac1cf102ac9b73eab3ff7f597ab38a813a3"
}
]
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,8 @@
Finished `test` profile [unoptimized] target(s) in 4.98s
Running unittests src\main.rs (target\debug\deps\arcadia_studio-e358a5ed59b1de41.exe)
running 1 test
test behavior::scenario::tests::graphical_call_reply_is_atomic_correlated_and_source_equivalent ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 861 filtered out; finished in 0.49s
@@ -0,0 +1,20 @@
{
"source": "aadc6396d39ff336d05381d58d545093d3f37a73",
"start": "2026-09-13T00:11:16.140390+00:00",
"end": "2026-09-13T00:11:23.831450+00:00",
"exit": 0,
"command": [
"cargo",
"test",
"--locked",
"-p",
"oa-desktop",
"--bin",
"arcadia-studio",
"graphical_call_reply_is_atomic_correlated_and_source_equivalent",
"--",
"--test-threads=1"
],
"inputs": "atomic-aadc639.inputs.json",
"changed_inputs": []
}
@@ -0,0 +1,44 @@
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
Finished `test` profile [unoptimized] target(s) in 12m 21s
Running unittests src\main.rs (target\debug\deps\arcadia_studio-e358a5ed59b1de41.exe)
running 36 tests
test behavior::scenario_lifecycle::render::tests::birth_label_clip_keeps_padded_world_bounds_at_each_scene_scale ... ok
test behavior::scenario_lifecycle::render::tests::birth_label_clip_preserves_parent_viewport_bounds ... ok
test behavior::scenario_lifecycle::render::tests::box_text_clip_intersects_parent_viewport_and_rejects_empty_interiors ... ok
test behavior::scenario_lifecycle::render::tests::panned_header_and_create_clips_use_screen_translation_and_actual_viewport ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_birth_death_markers_align_endpoints_and_win_selection_without_mutating_source ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_branch_delete_clips_only_its_activation_and_keeps_unanswered_call_visible ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_conditional_repeated_and_parallel_scopes_do_not_claim_definite_continuation ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_empty_and_create_only_use_visible_root_extents_not_insertion_bounds ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_lifecycle_edit_undo_redo_restores_exact_source_and_changed_geometry ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_long_header_title_and_detail_keep_names_and_have_bounded_clips ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_minimum_zoom_marker_halos_do_not_steal_adjacent_capsule_or_header_hits ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_minimum_zoom_near_ordinary_message_wins_over_lifecycle_halos ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_panned_zoomed_program_keeps_header_birth_and_death_hit_identity ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_self_delete_caption_clears_the_preceding_action_box ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_self_lifecycle_elbows_end_on_recorded_marker_rows ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_unassigned_lanes_and_explicit_incomplete_receiver_keep_real_marker_identity ... ok
test behavior::scenario_lifecycle::render::tests::real_scene_wide_latin_header_exceeds_old_character_budget ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::admitted_calls_without_sender_polylines_still_have_logical_correlation_metadata ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::admitted_death_and_incomplete_later_reply_do_not_fabricate_an_answered_execution ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::admitted_delayed_create_nested_calls_replies_delete_share_one_geometry_pipeline ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::admitted_self_lifecycle_and_self_call_keep_distinct_send_receive_rows ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::admitted_unresolved_operand_keeps_unanswered_cue_without_any_visible_segment ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::clipped_operand_preserves_original_nested_or_crossed_correlation_distinction ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::conditional_death_then_recreate_never_revives_call_but_keeps_open_sibling ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::invalid_prebirth_call_and_postdeath_reply_remain_rejected_with_defensive_scene_clipping ... ok
test behavior::scenario_lifecycle::render::tests::union_tests::test_only_upstream_row_offsets_update_lifetime_segments_and_endpoints_without_authoring ... ok
test behavior::scenario_lifecycle::tests::alternative_death_does_not_kill_its_displayed_sibling ... ok
test behavior::scenario_lifecycle::tests::conditional_birth_does_not_infer_absence_in_siblings_or_ancestors ... ok
test behavior::scenario_lifecycle::tests::explicit_receiver_is_authoritative_even_with_missing_exchange ... ok
test behavior::scenario_lifecycle::tests::lifecycle_free_fragments_do_not_poison_other_lanes ... ok
test behavior::scenario_lifecycle::tests::loop_lifetime_is_local_and_warning_bearing_loops_remain_drawable ... ok
test behavior::scenario_lifecycle::tests::missing_geometry_is_reported_without_nonfinite_or_guessed_markers ... ok
test behavior::scenario_lifecycle::tests::optional_cleanup_inside_loop_does_not_claim_balanced_or_definite_exit ... ok
test behavior::scenario_lifecycle::tests::projection_retains_exact_authored_source_and_does_not_enter_history ... ok
test behavior::scenario_lifecycle::tests::root_lifetime_has_exact_birth_death_boundaries_without_source_mutation ... ok
test behavior::scenario_lifecycle::tests::scenario_use_is_opaque_and_never_imports_callee_lifecycle_events ... ok
test result: ok. 36 passed; 0 failed; 0 ignored; 0 measured; 826 filtered out; finished in 3.43s
@@ -0,0 +1,20 @@
{
"source": "aadc6396d39ff336d05381d58d545093d3f37a73",
"start": "2026-09-12T23:56:54.823261+00:00",
"end": "2026-09-13T00:09:22.399674+00:00",
"exit": 0,
"command": [
"cargo",
"test",
"--locked",
"-p",
"oa-desktop",
"--bin",
"arcadia-studio",
"scenario_lifecycle",
"--",
"--test-threads=1"
],
"inputs": "lifecycle-aadc639.inputs.json",
"changed_inputs": []
}
@@ -16,6 +16,13 @@ disposable fixture copies. Its actual process exited normally with code 0.
[Native manifest, screenshots and source checkpoints](experiments/canvas-native-d61f1f3-20260912/manifest.json)
retain launch/closure records and the exact staged-build identity.
A [fresh independent native-evidence review](release-canvas-native-d61f1f3-independent-review-20260912.md)
finds no actionable issue within this scope. It verifies all 43 archived payload
hashes and complete saved fixture bytes, and independently checks visible
Inspector identities. Its same-coordinate pixel discriminator finds zero missing
border rows in each repaired band versus all 21 missing rows per band in the old
source83 negative control. This does not extend acceptance to other renderers.
## Observed behavior
- In bound OA nested C1/C2/R2/R1, clicks at the formerly covered outer shoulder
@@ -0,0 +1,39 @@
# Independent review of closed d61 native paint evidence
Reviewed `harness/release-canvas-native-d61f1f3-20260912.md` and the original archive at `harness/experiments/canvas-native-d61f1f3-20260912/`. Scope: the closed Windows trial of `d61f1f38779ab70a77efcde523ae31c432aefcfd`, activation-border continuity, selected identities, minimum-window evidence and claim boundaries. No app input, compiler/test execution, Gitea mutation or tracked edits. This report is the only new review artifact.
**Bounded conclusion: no actionable finding against the reported paint correction or its stated scope.** The archived original images independently show the former erased border bands repaired, and the Inspector states agree with the claimed call/reply selections. This is evidence for this particular correction and fixture, not the later lifecycle union, palette acceptance or complete application acceptance.
## Identity and preservation evidence
Read manifest, launch, closure, stage manifest, both checkpoint records/logs, fixture identities and launcher/checkpoint procedures. Independently recomputed **all 43 payload sizes and SHA256 hashes**, with no discrepancy. Independently compared complete bytes of all four baseline/preflight/final-Save files; all three copies match for each file.
Launch identifies source d61, PID 10792 and executable SHA256 `c990fa05772c60666ecf96ab808e6140e57542ad448ddd092b977be0b587136f`. The staged manifest agrees and records executable size 113,939,456. Closure refers to the same PID, exit 0, 23:51:20 UTC, after launch at 23:46:20. The launch procedure checks staged artifacts and same-source full/Clippy/GUI results before launching under a private profile. All three archived stage results identify d61, exit 0, and no changed inputs. I did not rerun those gates or the native executable.
The final checkpoint at 23:51:02 precedes closure. Its identified oracle returns `PASS same: complete Project and exact SourceBundle restored`; retained warnings are two explicitly reported `unallocated_leaf` completeness warnings, not errors. The checkpoint's oracle identity is correctly separated from the native executable's source. The final `bound-saved-0.png` says “All source files saved.” These results support the documented preservation outcome. The root's recorded input sequence supplies the Ctrl+S/click actions; static screenshots independently establish visible result states, not the entire input history.
## Visual findings checked against original images
| Witness | Independent visible result |
|---|---|
| `oa-outer-former-label-shoulder-0.png`, `oa-outer-r2-label-shoulder-0.png`, `oa-outer-r1-label-shoulder-0.png` | OA nested scenario; C1 selected in tree and Inspector, name C1 420 kPa, alias `bound_1040`. The outer left border is continuous through the C2, R2 and R1 label bands; the inner execution still occupies its distinct offset interval. |
| `oa-c2-exact-receive-endpoint-0.png` | C2 380 kPa, alias `bound_1030`; inner execution and C2 line highlighted. |
| `oa-r2-exact-send-endpoint-0.png`, `oa-r1-exact-send-endpoint-0.png` | R2 378 kPa `bound_1060` and R1 418 kPa `bound_1050`, respectively; selected dashed reply visible. These endpoints did not result in the outer C1 Inspector state. |
| `oa-reentrant-outer-label-shoulder-0.png`, `oa-reentrant-inner-0.png` | OA reentrant outer C1 `bound_3040` and left inner C2 `bound_3030`; reverse paths and both respective execution outlines remain visible. |
| `sa-outer-former-label-shoulder-0.png`, `sa-r2-exact-send-endpoint-0.png` | SA nested outer C1 `bound_2040` versus R2 `bound_2060`; repaired outer border and separate inner execution are visible. |
| `sa-minimum-100-0.png` | Actual image size 1102×732, scale display 100%; right participant header partly clipped. The release note acknowledges this rather than claiming all content fits. |
| `sa-minimum-fit-0.png`, `sa-minimum-fit-outer-shoulder-0.png`, `bound-saved-0.png` | Same outer dimensions, toolbar displays 66%. Fit restores the header within the canvas. Shoulder-selected and saved states show C1 `bound_2040`, with a continuous outer border. Small text/unselected outlines remain faint. |
Arrowheads and text remain visible in these witnesses. Cursor/blue pointer halo covers a small local area in individual screenshots, so multiple selected-outer witnesses were used to inspect the same border bands away from the pointer. I did not infer concealed pixels from a single cursor-covered endpoint.
## Discriminating read-only pixel cross-check
After visual inspection, read pixels from original PNGs with Pillow without modifying or generating screenshots. In the two d61 OA selected-outer images `oa-outer-former-label-shoulder-0.png` and `oa-outer-r1-label-shoulder-0.png`, checked each row in y=432…452, 524…544, and 616…636 at x=661…664. A row counts as having the teal border when any pixel satisfies `R < 85`, `70 < G < 180`, `G > R + 35`, and `B > R + 25`.
Both d61 images have **zero missing rows in all three 21-row bands**. For a negative control, inspected the original 83 image `harness/experiments/canvas-native-83f53c7-20260912/evidence/oa-outer-activation-selected-0.png`: same 1442×932 dimensions, same nested fixture and `bound_1040` selection. That image visibly has gaps and the same read-only scan reports **21 missing rows in each band**. The discriminator therefore detects the original defect rather than accepting a generic selected border elsewhere. The scan is narrowly coordinate/fixture/palette-specific, not a general renderer acceptance test or a monitor contrast measurement.
## Scope assessment
The release note is appropriately bounded: it does not convert the same-source automated gates into native evidence for unexercised workflows. It explicitly excludes a new self-call/ALT/PAR/lifecycle-marker result, architecture/state Save/Undo repetition, palette correction, lowest-zoom readability, complete OA/SA release acceptance and Linux. Its minimum-window clipping/66% faintness statements agree with the images.
The evidence supports retaining the stated d61 native paint acceptance. f659 introduces additional lifecycle markers, lane rendering and header clipping and still needs its own combined gates/native witnesses. Issue #26 remains open on the demonstrated faint unselected geometry and small text; this review did not test a new palette.
@@ -0,0 +1,47 @@
# Lifecycle and typed activation integration
Source **aadc6396d39ff336d05381d58d545093d3f37a73** integrates the reviewed
f6595eb contribution without changing its six source files. It combines the
published lifeline lifecycle rendering with typed nested activation bars and the
independently verified d61 label-paint correction. This is an integration
checkpoint, not combined release or native acceptance.
[Exact source, implementation contract and independent review](experiments/nested-lifecycle-union-20260912/README.md)
distinguish logical call/reply correlation from visible fragments clipped to the
receiver's lifetime and scope. Delete terminates an unanswered execution; clipping
cannot invent a Reply endpoint. Conditional death retains sibling uncertainty
without reviving the old execution after a later Create. Fully bound invalid
post-death/recreation fixtures remain rejected by core admission; defensive raw
Scene checks do not turn them into admitted authoring workflows.
## Executed Windows checks
All three gates use **536 unchanged committed inputs**, input-manifest SHA-256
`a03c6f7c5a700fbce64a4808f81bd118f689cc9a5ebb377b921a98f5b58ce8ec`:
| Gate | Result | Closed UTC, 2026-09-13 |
| --- | --- | --- |
| `scenario_lifecycle` | 36 passed, 0 failed/ignored | 00:09:22 |
| `scenario_activation` | 14 passed, 0 failed/ignored | 00:10:50 |
| `graphical_call_reply_is_atomic_correlated_and_source_equivalent` | 1 passed, 0 failed/ignored | 00:11:23 |
The lifecycle scope includes all 17 retained renderer tests, nine combined tests
and ten lifecycle projection tests. It compiled in 12m21s and ran in 3.43s. The
activation scope includes the real WGPU border-continuity test and actual
pointer/shoulder identity tests; it ran in 4.80s. The atomic authoring test retains
exact source and Undo checks and ran in 0.49s. These are **51 distinct targeted
tests**, not a full-suite result. The executable reports 862 total tests before
any palette additions.
[Archived commands, logs and input manifests](experiments/diagram-removal-windows-20260912/archive-manifest.json)
retain each result separately. The earlier d61 full/strict/GUI/native results do
not establish this source's full or native acceptance.
## Remaining verification
The final combined source still needs full desktop and strict lint checks,
a matching staged GUI, and native lifetime/activation acceptance. Native cases
include delayed Create→nested Call/Reply→Delete, self-event clearance, long
Latin/Unicode headers and birth capsules under pan/zoom, incomplete replies,
and unresolved operands. The separate palette candidate must retain these
geometry and selection invariants when combined. Linux remains user-deferred.