Files
ARCADIA-Studio/harness/experiments/behavior-layout-scene-20260912/lifetime.md
T

5.8 KiB
Raw Blame History

Lifetime extension of the actual Scene experiment — not executed

Prepared 2026-09-12 in codex/behavior-layout-scene-ytr83r-20260912, inspected HEAD 911f63e. This extension owns only lifetime.arcadia, lifetime.rs, this note, and the mod lifetime; declaration in the existing experiment module. The original fixture and its seven baseline tests are unchanged. Root owns the README compatibility note, compiler resource, source integration and publication. No production renderer, parser or model code was edited here.

Question and method

Does the current test-only row-anchor hook propagate a changed Create/Delete position into the actual Scene's local lifetime, marker hit identity, aligned message endpoints and activation clipping, while leaving semantic/source state and occurrence IDs intact?

The separate source fixture declares stable UUIDs, a sender action before receiver birth, then Create, Call and receiver Delete. All three messages reference one valid Interaction; explicit sender/receiver lifelines represent its Activity endpoints. A Reply is deliberately absent: receiver death must not manufacture a reply or erase the unanswered-call presentation cue. The test requires real language parsing, no semantic errors, ordinary Document::from_bundle admission, canonical format/reparse Project equality and exact original source retention. Warnings are allowed and are not promoted into semantic acceptance requirements.

The evaluator calls the existing Scene::sequence and scoped render/drag helpers. It reads Rendering::alive_spans and marker_at, real Scene line polylines and actual activation BoxItem records. It does not construct an alternative activation/lifetime implementation or edit final geometry afterward.

Independent expectations

Current Scene metrics give sender action148, Create243, Call335 and Delete427: the action consumes95 and each following message92. The scene height is564 and its root insertion bounds are106–477. These numbers are regression oracles for the inspected implementation, not permanent product spacing requirements.

The receiver is alive exactly243–427; the sender remains alive throughout the visible root span. Create ends at the 140px birth capsule's near edge, 70px before the receiver lane, while Delete ends at the death cross's center. Marker and Scene hit queries return the original Create/Delete occurrence IDs. The actual 8px activation starts at Call335 and ends at death427, with no minimum-height tail after death. The unresolved-call cue stays at receiver-x+12, death-y−16.

Three tests establish these expectations if they pass:

  1. Baseline parsed Scene has those independent rows, line endpoints, lifetime extents, hit identities, activation bounds and unanswered-call cue. Its real geometry remains equal after source round trip and an empty hook scope.
  2. Moving Create down60 changes its row to303 and propagates Call395/Delete487; the actual receiver lifetime, birth/death markers and activation follow. The preceding action's box stays fixed, line/row UUIDs stay stable, and the old birth point is no longer a lifecycle marker.
  3. Moving only Delete down48 changes death to475 and extends the same real activation to475, while Create and Call polylines stay fixed. Moving Create with an authored Delete request still at427 forces displayed death487; either signed-zero pointer delta preserves the entire latent map and Scene. Moving Create back restores baseline geometry and the original authored map.

Every test compares the entire accepted Project and source bundle against the original snapshot, and requires no dirty state or undo/redo history. No test weakens equality to just the occurrence list.

Contract reused and limits

The inspected implementation builds lifecycle geometry after recording occurrence rows (behavior.rs:1332–1344), aligns Create/Delete messages through scenario_lifecycle::render::Rendering::align_messages, and constructs actual activation boxes through activation_sequence/activation_segment (behavior.rs:1663–1734). The latter intersects segments with alive_spans and keeps a cue when Delete terminates an unanswered call. Existing scenario_lifecycle/render_tests.rs tests real root birth/death alignment and branch-local activation clipping. This extension exercises those current contracts through the layout hook; it does not replace them.

The peer 8112dea typed activation correction has a different future integration boundary and, as reported to this task, has no production lifecycle clipping yet. These tests are not evidence that that unmerged source is compatible. A future typed activation union needs its own tests for clipping, typed call/segment IDs, self/nested activation receive geometry, branch behavior, depth and paint order. Do not preserve a legacy width/classification assertion blindly when deliberately changing the activation representation; retain independent lifetime endpoints, identity and no-after-death expectations on the new actual records.

This extension remains uncompiled and unexecuted. It does not establish persisted layout syntax, a production drag transaction, undoable geometry edits, native pointer behavior, GPU painting, performance, or general upward/free positioning. The existing hook still applies a next-row floor. Root should run the existing cargo test -p oa-desktop behavior_layout_scene_experiment -- --nocapture gate on the exact identified wired source, then publish fixture, evaluator and result together. Remote peer machines cannot use workspace-local links.

Independent bounded source review confirmed the fixture ownership/endpoint contract and the numerical expectations above. Formatting and whitespace checks passed. Compilation and execution remain pending; these findings do not establish an editing transaction or native behavior.