Skip to content

migration: review Kuikly 2.24.0 staging3 replay - #109

Draft
bytemain wants to merge 228 commits into
mainfrom
staging3
Draft

migration: review Kuikly 2.24.0 staging3 replay#109
bytemain wants to merge 228 commits into
mainfrom
staging3

Conversation

@bytemain

@bytemain bytemain commented Aug 3, 2026

Copy link
Copy Markdown
Member

Purpose

Review-only Draft PR for task #73. This shows the complete net change required to move the bytemain fork from the current main baseline to the audited staging3 Kuikly 2.24.0 migration candidate.

Do not merge this PR until the product cutover strategy is explicitly approved. staging2 and the current Mobile gitlink/HAR remain the production path.

Exact coordinates

  • Base: main@1048ad0189ee4579bd9585d00b9623e3d4d6a125
  • Head: staging3@d37094f3a7e2e105d1959e2509dd1d3c5828f769
  • Head tree: 64d236099ddcaa2e405b98f137851fdc2fc1009f
  • Upstream baseline: Tencent-TDS/KuiklyUI 2.24.0@76a866795903014cfd2d0363ee31ccee7895775e
  • Frozen fork replay side: staging2@6a531a57105ee453edcfdc07a54d1bb1b4348431
  • Replay merge: 25cbc1fa25be4bba0ca800a67762a1f1317c5f25, with real parents c8f92f053fb60d6fe515b5e986e1c6fe2db775a0 and 6a531a57105ee453edcfdc07a54d1bb1b4348431 (not -s ours)

Migration shape

  1. Start from the exact upstream 2.24.0 tag.
  2. Explicitly hold unsafe/not-yet-consumed upstream migrations before replay:
    • LazyList prefetch/runtime 1.9 bundle
    • dedicated iOS context thread
    • Pager snap/touch-defer lifecycle
    • PullToRefresh inset shortcut
  3. Replay the frozen fork's net retained behavior through a real two-parent merge, resolving nine cross-platform conflicts deliberately.
  4. Repair upstream fix: round layout size up to 2 decimals on size report-back Tencent-TDS/KuiklyUI#1588 layout-size report rounding on Android, Web, iOS, and OHOS, with boundary and unresolved-width tests.
  5. Add an exact-head migration manifest, ancestry/DCO guard, and Linux/iOS/OHOS hosted matrix.

The detailed carried-patch inventory, held commits, conflict decisions, cutover gates, and rollback plan are in docs/migrations/staging3-2.24.0.md.

Exact-head evidence

Dedicated run: https://github.com/bytemain/KuiklyUI/actions/runs/30790072289 — terminal SUCCESS for exact head d37094f3….

  • identity/ancestry: job 91611523845
  • source contracts: job 91611523856
  • Linux common/Compose/Android/Web: job 91611523886 — 162 / 85 / 2 tests, zero failures or errors
  • iOS: job 91611523880 — Xcode 16.2, locked Pods, Kotlin/Native main/tests, native fixtures, production renderer with warnings as errors
  • OHOS: job 91611523905 — pinned container, fixtures, HAR assembly, fresh AArch64 production direct-link
  • aggregate exact matrix: job 91612353738

Review boundary

  • No staging2 change.
  • No Mobile gitlink/HAR pin change.
  • No product artifact or coordinate publication; hosted uploads are evidence only.
  • No product runtime/cutover claim is made by this PR.
  • Any head change invalidates the exact matrix above and requires a wholly fresh exact-head run.

Please review the migration diff and the carried/held decisions. Merge/cutover remains a separate explicit decision.

bytemain and others added 30 commits June 18, 2026 22:12
V2 styled string nodes are rendered by ArkUI Text internally. Registering the legacy foreground-draw callback for those nodes can route them through OH_Drawing_TypographyPaint before the paragraph is layout-ready, which spams paragraph-is-not-formatted warnings.

Track the styled-string path on KRRichTextView, unregister/skip foreground draw for that path, and reset styled-string state when falling back to the legacy typography path.
Throttle Compose↔Native scroll sync (calc/expand deferral, contentSize
dedup, scrollEnd finalize), quantize ArkUI onScroll in fling, and draw
RichText when typography is ready during main-thread tasks.

Co-authored-by: Cursor <cursoragent@cursor.com>
Quantize ArkUI scroll callbacks and SubcomposeLayout deltas at 0.5px,
dedupe content size updates, and flush the final offset on scroll stop.
Add OHOS demo cold-start page params and a CanScrollForward repro page.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ess test

Add a 500-item repeated demo list with Card UI and inspector enabled to reproduce and profile HarmonyOS scroll performance locally.

Co-authored-by: Cursor <cursoragent@cursor.com>
Clamp ArkUI scroll-frame-begin offset at nested list edges and skip
compose-side expand/offset correction when nestedScroll is configured.

Co-authored-by: Cursor <cursoragent@cursor.com>
Only recalculate native content size when contentView main-axis height
changes during fling, avoiding ~650 redundant calc calls per gesture
while keeping near-bottom and scrollEnd sync unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
Extend KuiklyScrollTrace with remeasure, frame timing, and offset/drag
skip metrics for OHOS scroll stress validation; gate redundant
contentOffset and isDragging writes; skip resetViewVisible when unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
bytemain and others added 17 commits August 2, 2026 02:23
Reviewed-exact: d2cb832

Signed-off-by: Codex-Kuikly-KMP <raft-mobile-codex-kuikly-kmp@mail.build>
Signed-off-by: Ark <raft-mobile-ark@mail.build>
Signed-off-by: Jony <jony@mail.build>
Co-authored-by: Jony <jony@mail.build>
Wake a retained Kuikly subcompose slot's draw ownership when it is successfully restored from the reusable pool, allowing hidden native descendants to flush visible on the first reactivated frame.

Cover same-key and compatible-key reuse, consecutive reuse cycles, and the already-active no-op path through the real precompose/dispose/retrieve state machine.

Signed-off-by: MingQi <raft-mobile-mingqi@mail.build>
Wake draw ancestry when a precomposed slot becomes active through real subcompose consumption.

Signed-off-by: MingQi <raft-mobile-mingqi@mail.build>
Start staging3 from upstream 2.24.0 while excluding migrations that are not safe or consumed by the fork yet:\n\n- LazyList prefetch/runtime 1.9 bundle: 2487101, 83bdfae, 388f904, fac3e1b\n- dedicated iOS context thread: b20353e\n- pager touch-defer/snap bundle pending lifecycle fixes: 69eebf5\n- PullToRefresh inset shortcut pending fork-safe adaptation: f3c1101\n\nThese can be restored later as independently reviewed feature batches. The current Mobile pin and staging2 are unchanged.

Signed-off-by: BiSheng <raft-mobile-bisheng@mail.build>
Replay the net retained fork state from origin/staging2@6a531a57105ee453edcfdc07a54d1bb1b4348431 onto the held Kuikly 2.24.0 baseline at c8f92f0.

Preserve fork focus, dispatch, coroutine, text, profiler, and renderer contracts while retaining reviewed upstream Pager content-size, OHOS handled-first/null-safety, Turbo cache lifecycle, and H5 documentation intent.

The first parent explicitly holds upstream prefetch/runtime-1.9, dedicated iOS context thread, Pager snap/defer lifecycle, and unsafe PullToRefresh inset changes pending independently repaired intake.

Signed-off-by: BiSheng <raft-mobile-bisheng@mail.build>
Replace the upstream half-cent bias with representation-aware hundredth ceiling on Android, Web, iOS, and OHOS. Preserve exact integers/hundredths and the Android 0.00|0.00 null wire value while still preventing measured sizes from rounding down.

Add platform fixtures for boundary, non-finite, negative, and rich-text unresolved-width behavior plus a mutation-tested cross-renderer source contract.

Signed-off-by: BiSheng <raft-mobile-bisheng@mail.build>
Record frozen upstream/fork coordinates, held upstream material, conflict decisions, retained fork capabilities, and cutover/rollback policy.

Add a push-bound staging3 matrix that verifies the audited replay ancestry and first-parent DCO, then runs Linux/Android/Web, hosted iOS, OHOS direct-link, and source-contract gates without publishing artifacts.

Signed-off-by: BiSheng <raft-mobile-bisheng@mail.build>
Remove two trailing-space-only lines restored with the held iOS context-thread implementation so the upstream-to-candidate diff passes the exact identity gate.

Signed-off-by: BiSheng <raft-mobile-bisheng@mail.build>
Dirty restored lazy descendants and force their draw ancestry after offscreen visibility is restored. Cover the real native mount, placement, restore, and clean-leaf lifecycle with production-callsite mutation teeth.

Signed-off-by: MingQi <raft-mobile-mingqi@mail.build>
(cherry picked from commit c5730e2)
Signed-off-by: CC-希乐 <raft-mobile-cc-xile@mail.build>
Preserve child content for bare draw nodes, route view-aware fallback through ordinary draw overrides, and retain explicit view-aware precedence.

Add behavior coverage for all three implementer classes and a self-testing production-wiring constraint for LayoutNodeDrawScope.drawDirect.

Signed-off-by: MingQi <raft-mobile-mingqi@mail.build>
(cherry picked from commit 461bbe5)
Signed-off-by: CC-希乐 <raft-mobile-cc-xile@mail.build>
Signed-off-by: BiSheng <raft-mobile-bisheng@mail.build>
Co-authored-by: BiSheng <raft-mobile-bisheng@mail.build>
(cherry picked from commit 1547d16)
Signed-off-by: CC-希乐 <raft-mobile-cc-xile@mail.build>
Task Tencent-TDS#183: synchronize Compose offset after native viewport changes.

Reviewed exact: 175c8ac
Independent review: task Tencent-TDS#205 FINAL FULL-SEAT PASS / 0 blocker.
Hosted exact matrix: 30852685305.

Signed-off-by: MingQi <mingqi@mail.build>
(cherry picked from commit 8190595)
Signed-off-by: CC-希乐 <raft-mobile-cc-xile@mail.build>
Signed-off-by: Android-Developer-1 <raft-mobile-android-developer-1@mail.build>
Co-authored-by: Android-Developer-1 <raft-mobile-android-developer-1@mail.build>
(cherry picked from commit dbc3830)
Signed-off-by: CC-希乐 <raft-mobile-cc-xile@mail.build>
Signed-off-by: Jony <jony@mail.build>
Co-authored-by: Jony <jony@mail.build>
(cherry picked from commit 7404576)
Signed-off-by: CC-希乐 <raft-mobile-cc-xile@mail.build>
Signed-off-by: KMP-专家 <raft-mobile-kmp-expert@mail.build>
Co-authored-by: KMP-专家 <raft-mobile-kmp-expert@mail.build>
(cherry picked from commit c7a0212)
Signed-off-by: CC-希乐 <raft-mobile-cc-xile@mail.build>
Keep the active programmatic scroll target aligned with the native scroller when a viewport shrink commits a smaller frame. Preserve owner fencing across synchronous native echoes, lock the behavior with a renderer-level regression fixture, and remove the obsolete source-code assertion gate.

Signed-off-by: MingQi <mingqi@mail.build>
(cherry picked from commit d691975)
Signed-off-by: CC-希乐 <raft-mobile-cc-xile@mail.build>
bytemain and others added 5 commits August 7, 2026 10:14
Signed-off-by: artin <artin@cat.ms>
Signed-off-by: Ark <raft-mobile-ark@mail.build>
Co-authored-by: Ark <raft-mobile-ark@mail.build>
Signed-off-by: Jony <jony@mail.build>
Co-authored-by: Jony <jony@mail.build>
Signed-off-by: Quinn Rafferty <quinn.rafferty@hands.build>
Co-authored-by: Quinn Rafferty <quinn.rafferty@hands.build>
@bytemain
bytemain had a problem deploying to raft-artifacts-production August 10, 2026 16:59 — with GitHub Actions Failure
@bytemain
bytemain had a problem deploying to raft-artifacts-production August 10, 2026 17:04 — with GitHub Actions Failure
@bytemain
bytemain deployed to raft-artifacts-production August 10, 2026 17:08 — with GitHub Actions Active
Signed-off-by: Argus <argus@mail.build>
Co-authored-by: Argus <argus@mail.build>
@bytemain
bytemain deployed to raft-artifacts-production August 10, 2026 17:59 — with GitHub Actions Active
Signed-off-by: Argus <argus@mail.build>
Co-authored-by: Argus <argus@mail.build>
@bytemain
bytemain deployed to raft-artifacts-production August 11, 2026 12:13 — with GitHub Actions Active
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.