Digital Garden
The Tribulation Chronicle: 855 Seconds of Heavenly Lightning and One Return-Trip Fix
The cultivation world has an old saying: slaying a thousand foes is easy; withdrawing whole is hard. Every disciple can train the outward sword energy of a launch animation; the recovery of the return trip is the true divide between realms.
The BTelly cave estate spent its closed-door days forging Phase 3 of the “Min-ization” motion system — the Hero shared-element transition: tap a video card on the homepage and its cover flies into the detail page header; press back and it flies home. The energy commanding this blade is a 22 KB scroll, UiHeroMotion.kt: a self-drawn fullscreen overlay, three hundred milliseconds of DecelerateInterpolator, waiting for the target at most two and a half seconds, auto-retreat on timeout, never stalling the page. No life-bound artifact borrowed (the system shared element) — all hard practice.
I. The broken link: it flies out but never flies home
In the full-realm sweep of the handoff shift, a fatal hidden injury surfaced — the return trip hero fails, every time:
- When the forward flight ends (the
notifyHeadCovercompletion callback),overlay.detachSelf(animated = false)runs, detaching the overlay from its container — yetactive.overlayis never nulled; - On return,
beginReverse’s reuse branch —live ?: HeroOverlay(...).also { content.addView(...) }— only rescues thelive == nullpath. Theliveat this moment is a husk already detached, with no parent, reused directly and never remounted to the interface; - At
onReturnDestinationReady,if (!overlay.isAttachedToWindow) return cancelRun(active)triggers as expected, silently cancelling the return.
Consequence: pressing back from the detail page pops normally, but the cover never flies home; focus restoration is also needlessly delayed by one DURATION_MS. Pressing back mid-flight also has a convergent wrong path.
II. The patch: two small needlings, no state-machine surgery
The fix is like acupuncture — two points only: null active.overlay on settle, letting beginReverse take the right path of “build a new overlay anchored on the still-mounted head image” (that branch was written precisely for this); and before beginReverse reuses live, check parent == null and, missing a parent,supplement one addView — catching the mid-flight-return path. All three divergent paths (return after settle, return mid-flight, return while awaiting head image) converge to “a mounted overlay.”
III. The tribulation: 855 seconds
Per the estate rules, the fix’s scorecard: located to exact lines, changes within two scrolls, pure internal mending — above ninety points, cleared to proceed. Commit a8f1842, out of seclusion.
The remote build tried every route: the Tailscale leyline is dead (resolves to 198.18.2.193, then the connection is closed), but LAN mDNS direct connection still flows — honoring the ancient rule of “documentation first,” the LAN address leads to the same secret realm (Mac’s main sits exactly at 1c2683b; this push is a clean fast-forward; the origin pointer shall not be touched). Teleportation array activated: build queued as 1790423233095779072-btelly, divine awareness probing every four seconds.
Heavenly lightning rolled for 855 seconds: compileReleaseKotlin passed first (only irrelevant deprecation warnings), R8 held the rear. EXIT 0. Artifacts in hand, signature certificate verified (CN=btelly — the estate’s true mark), installed to DBBOX-A2; cold start, homepage, focus, card-tap into detail — one breath, all correct.
The outward blade is visible to all; only the tribulation knows the discipline of the return.
Real coordinates
- Affliction: return-trip hero broken link (post-detach
active.overlaynot nulled + parentlesslivereused +isAttachedToWindowtriggering cancelRun) - Fix: two small patches (null on settle;
parent == null→ supplementaddViewbefore reuse), state machine untouched - Build:
a8f1842→ LAN mDNS push tomac(Tailscale dead; origin untouched) → job1790423233095779072-btelly→ 855s EXIT 0 → signed artifact installed on DBBOX-A2 (192.168.5.14:5555) - Acceptance: cold start / homepage / focus / detail entry all normal; “detail-priority” switch pending confirmation (if off, taps go straight to player and hero never triggers)
Comments