Files
ARCADIA-Studio/harness/lifecycle-header-overflow-correction-ytr83r-20260911.md
T

118 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lifecycle header overflow correction — 2026-09-11
Owner: Codex-ytr83r /root/windows_release_gap_review. Bounded root assignment;
source ownership approved before editing: `crates/oa-desktop/src/behavior.rs`
shared Scene box text path and existing
`crates/oa-desktop/src/behavior/scenario_lifecycle/render_tests.rs` only.
## Observed defect and diagnosis
Root exercised admitted typography-wide source on production freeze29084050,
immutable Windows GUI SHA prefix47332A6E. At1100×700/80%, receiver header card
spanned approximately x515–679 while its eighteen-W name continued to about730;
64% and subsequently100/125/156/195% also showed overflow. Reviewer inspected
`.local/lifecycle-native-ui/screenshots/wide-latin-oa-header-overflow-min-80.jpg`
and confirmed the text visibly crosses the card's right border. The Create capsule
below contains its text correctly; selection remains original occurrence110.
These are pre-correction native observations, not evidence of a corrected build.
No CJK156% observation is inferred from the interrupted later Computer Use action.
The shared Scene text loop used `short(title, (width-25)/7)` and an analogous
detail estimate with divisor6, then unbounded `Frame::fill_text`. Scalar-count
truncation cannot bound wide Latin/CJK glyphs, combining clusters or emoji. The
card is204×70 world units with title at(+12,+12), detail at(+12,+39). Both text
lines can overflow independently. Existing B4 Create text already uses a bounded
`with_clip` child frame and explicitly reapplies the scene scale.
## Applied correction
Added small `box_text_clip(rect, scale, viewport)` helper: inset10 world units
horizontally and8 vertically, transform to local drawing-frame coordinates by the
scene scale, then intersect with the actual parent viewport. Invalid scale or an
empty interior produces no text. The shared box title/detail loop uses this clip
and reapplies `label.scale(self.scale)` inside the child frame, whose WGPU transform
starts at identity. Both text draws retain their exact content/shortening rule,
positions, sizes, colors and selection behavior. No new layout engine or dependency.
Cards, outlines, message labels, lifecycle capsules/markers, insertion slots, hit
geometry, Project, source, names, history and camera state are untouched. The
shared card path also protects other Scene cards using it; it does not change
their layouts. Overflow is hard-clipped inside the existing card, so the last
visible glyph may be cut and an existing ellipsis may lie beyond the clip. This
bounded tradeoff preserves the current single-line design and exposes the full
unchanged name in Properties; pixel-measured ellipsizing is not required to prevent
the demonstrated leak.
Current Scene drawing applies scale; its outer canvas/scrollable owns scrolling.
Do not subtract `scroll_offset` again inside the clip or child frame. For the
future peer shared-canvas pan integration, transform **both** clip rectangles and
child text by the same pan+scale convention, just as for B4 Create labels. This
change deliberately does not invent a new pan convention.
## Prepared regression coverage and evidence limits
Three tests added to the existing admitted real-Scene suite:
- `real_scene_long_header_title_and_detail_keep_names_and_have_bounded_clips`:
OA/SA wide W, CJK, combining and joined-emoji names, full title/detail retention,
unchanged204×70 header and exact lifeline selection, clip containment at
scales0.05/0.5/0.512/0.64/0.8/1/1.953125/2. The existing Fixture::scene gate also
checks ordinary core/source admission, Project/SourceBundle/history immutability
and stable lifecycle geometry.
- `box_text_clip_intersects_parent_viewport_and_rejects_empty_interiors`:
partial viewport intersections on right/bottom and negative origins, disjoint
and zero viewports, invalid scales and empty padded interiors.
- `real_scene_wide_latin_header_exceeds_old_character_budget`:
actual renderer Paragraph/font/shaping defaults measure the unchanged shortened
title and detail. Both must exceed the old available width, proving this is a
real-glyph falsifier rather than another character-count assertion. This is
font/layout evidence when run, not a screenshot/pixel-render acceptance gate.
**Uncompiled and unexecuted by this worker.** No Cargo, rustfmt, compiler, tests,
native UI, Git/index or WSL actions. Root's strict workspace pass16:45:59 and
affected prior let-chain test pass16:56:53 predate this production correction.
They do not transfer acceptance to these changed bytes. Root owns scoped
format/compile/tests, strict checks and a matching GUI rebuild/native recheck.
Native toolbar factors are51.2%/100%/195.3125% plus minimum Fit; exact0.5/2 are
prepared geometry-test cases, not claimed selectable native zoom settings.
## Source readback and handoff
The interrupted private preparation completed only an ignored proposed
`.local/lifecycle-header-overflow-correction-ytr83r/behavior.rs`. Before actual
edits, both production hashes still matched the frozen inputs. Root explicitly
released the source freeze before application. No other source or prior report
was edited.
Readback confirms behavior.rs exactly matches the prepared proposal. Removing
only the three inserted tests in memory reconstructs the complete original test
file SHA256, so unrelated test bytes are preserved.
| File | Before SHA256 | Corrected SHA256 |
| --- | --- | --- |
| behavior.rs | F2FB8850480FB96F8038A4C1D855EE31E408890B1D943E7B3A9F26B5E4498445 | B47E1DF6F88282D907CD5726A03DB0BF066B60B134962A223F11842482E75946 |
| scenario_lifecycle/render_tests.rs | 2942071D768CE021CA0DCE2FE2667BBA14DE0F3FA1D4176B7A6ECDCC156B2AA9 | 13716CBD059C99D7355DB1A777241F38C713050CB554C1643E7294106D1A95D0 |
Root should inspect the two-file diff, run the three new cases together with the
existing lifecycle suite, and verify both header lines stay inside their borders
while names/selection/history remain unchanged on a new matching GUI. Include
the already admitted Unicode variants and scrolling/zoom/minimum viewport cases.
Linux remains user-paused. This is a source correction handoff, not closed native
acceptance or first-release completion.
## Root review and source freeze
Root reviewed the two-file diff and all shared card dimensions, then ran scoped rustfmt successfully. behavior.rs remains B47E1DF6F88282D907CD5726A03DB0BF066B60B134962A223F11842482E75946; formatting changes render_tests.rs to5F8410FC80C85C9DFF6A47353FA9B82FD589F098E82EB9D24FDA030AFD603652.
A separate GPT-6 Astra reviewer found no material source issue for the configured WGPU backend after checking child-frame identity/paste transforms, viewport intersection, outer scrolling, compact branch cards and empty-label activation markers. Model strings, hits and existing shortening rules remain unchanged. This is static review: the tests do not exercise the complete draw loop or prove rendered pixels. Root must compile/run the new tests and verify a matching native build before accepting the correction. No corrected native pass is claimed by this freeze.
## Subsequent combined Windows test gate
The preceding uncompiled/unexecuted statements describe the original worker handoff. Root subsequently included this correction and the contextual source/minimum-card integration in source **321897fd55af9e07afa2c6ebf1e50be49e86f7d9**. Its Windows desktop all-targets gate passed **704 tests, zero failed/ignored/filtered**, exit0 at **17:47:12.6688512 UTC**, with all 261 recorded build inputs unchanged. This establishes the later combined test result; it does not turn the geometry/shaping tests into a rendered-pixel check.
The [closed runtime archive](experiments/windows-runtime-321897f-20260911/README.md) binds those desktop logs/input records and matching server HTTP/REST evidence: 204 schemas, 19 validated values, 9 rejected invalid shapes and 25 final REST requests passed. It preserves the initial source5→7 byte failure and the accidentally unchanged source7-named retry separately from the corrected source7-v2 pass. Those transport results are independent of header rendering.
The [earlier integration checkpoint archive](experiments/contextual-lifecycle-integration-ytr83r-20260911/README.md) contains the old 47332A6E/production 29084050 wide-name passive Save checkpoint, complete same-oracle pass and saved screenshot. It confirms retained identities/model/source/physical bytes after Save; it remains pre-correction typography evidence. That archive also preserves server/CLI 68, schema 72/204 and the failed missing-jsonschema attempt before local dependency installation.
Matching corrected GUI/native header pixels, combining/emoji appearance and minimum/wide zoom/scroll checks remain pending. The reviewed private [issue4 child-work correction](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/4) is being integrated after 321897f and inherits no pass from this gate. [Issue5](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/5) owns live integrated acceptance. This update records root's closed evidence; no new execution or archive change was made by the documentation worker.