118 lines
9.0 KiB
Markdown
118 lines
9.0 KiB
Markdown
# 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.
|