Repository navigation
Description
Merged checkpoint — 20 September 2026
PR #755 merged this issue to WebScene main at 974e04f0cb298454ac926f0ef88ad104f3cda70d from focused implementation e099eef286f54937107846dc82aee70df2dc8f77. It adds the unchanged Code OSS ::details-content 0 ↔ auto keyword-size and opacity transitions, retained/clipped close paint, exact transition-list parsing, inherited interpolate-size: allow-keywords, interruption/reversal, reduced-motion cancellation, teardown, and lazy owner runtime allocation without per-frame selector/cascade work.
Focused native and WPT candidate gates are committed. They were intentionally not executed under the current fast-implementation directive; all PR and post-merge jobs were canceled after merge. Product visual/performance acceptance remains in #259 and the epic's cumulative gates.
Parent epic: #235
Related owners: #237 (pseudo matching/invalidation), #242 (transition/frame scheduling), #241 (retained paint)
Proven Code OSS gap
Unchanged Code OSS 645f29c uses two ::details-content transition groups in chat.css for completed responses and checkpoint file changes:
interpolate-size: allow-keywordson the owningdetails;block-size: 0plusopacity: 0while closed;block-size: autoplusopacity: 1while open;block-size 180ms,opacity 140ms, andcontent-visibility 180ms allow-discrete;- reduced-motion overrides that set
transition: none.
PR #739 implemented the static ::details-content layout and retained paint subset. It intentionally left keyword-size animation timing, discrete content visibility, interruption, and compositing here. The current result snaps disclosure content open and closed instead of matching the authored Code OSS motion.
Implementation scope
- retain and cascade
interpolate-size: allow-keywordsfor the exact supported owner/pseudo path; - retain pseudo transition longhands/shorthand for block-size, opacity, and content-visibility with per-list timing/behavior alignment;
- resolve
autoagainst one intrinsic expanded-content measurement per transition generation; - animate the pseudo used block size and opacity from the host clock without per-frame selector matching or cascade;
- defer closed content visibility to the correct discrete boundary and expose normal computed values;
- support open/close interruption, reversal, zero duration, negative delay, reduced motion, stylesheet mutation, removal/reinsertion, navigation, and teardown;
- keep the static Implement static Code OSS details content #739 behavior unchanged when no transition is admitted;
- do not create an alternate DOM subtree or application-specific CSS.
Performance and quality gates
- browser/native contract for both unchanged Code OSS rule shapes, deterministic initial/mid/end geometry and opacity, discrete visibility, cancellation, reversal, reduced motion, and nested content;
- exact retained-scene ordering/clip/opacity checks and unchanged summary activation behavior;
- 256 unrelated details nodes allocate no pseudo animation runtime and request no frames;
- one active disclosure performs zero per-frame selector/cascade work and only the affected layout/scene publication work;
- 100 open/close and remove/reinsert cycles return runtime, retained nodes, frame demand, and memory to the warmed baseline;
- fixed caps for transition records/events and fail-closed invalid timing/value handling;
- focused Linux native SDK, native document, and precompiled JavaScript gates before merge;
- unchanged Code OSS Chat disclosure geometry/pixel comparison remains the product acceptance gate under Establish Chromium/AppScene visual and geometry regression gates for unchanged Code OSS #259.
Dependency/order
Start from merged #739 and merged #749 so the implementation reuses the current transition timing, allow-discrete, lifecycle, and host-clock machinery. Keep the focused PR separate from the open consolidation #76.
Activity