Repository navigation
Vendor-pull slice 4c: isolate mobile Markdown image requests #143
Description
Activity
- addedenhancementRequested improvement or new capability.Requested improvement or new capability.kind:sub-specChild spec produced by decomposing an epic.Child spec produced by decomposing an epic.status:draftSpec is being written or revised. Do not build.Spec is being written or revised. Do not build.phase:planCurrently in the Plan phase.Currently in the Plan phase.
on Aug 26, 2026 - added a parent issue
on Aug 26, 2026 Adversarial spec review disposition
Accepted the vague-verification finding. The spec now names #141's exact classifier and sizing test command, the mobile typecheck, and the delayed-response
test-t3-mobilesequence that settles B before late success and late error events from A.No new component-test dependency was added solely for this follow-up. The repository has no existing mobile component-rendering test seam. The deterministic public mobile fixture proves the keyed request behavior at the user boundary.
- addedstatus:approvedSpec approved by the maintainer. Ready to build.Spec approved by the maintainer. Ready to build.phase:buildCurrently in the Build phase.Currently in the Build phase.and removedstatus:draftSpec is being written or revised. Do not build.Spec is being written or revised. Do not build.phase:planCurrently in the Plan phase.Currently in the Plan phase.
on Aug 29, 2026 Build started on branch
143-isolate-mobile-markdown-image-requestsat base SHA846775dc13d3babb3d9e007e9544ac9ebcfb107c. The maintainer requested autonomous implementation of the current approved issue scope. Cleared the stale closed dependency on #141.Build report
Implemented URI-keyed mobile Markdown image requests with request-local loading state and an unmount lifecycle guard for stale callbacks. Added a compile-gated mobile fixture, deterministic held-response server, and Maestro flow for late success and late error callbacks.
Evidence:
- 58 focused tests passed
- mobile typecheck passed
- changed-scope lint and format passed
- iPhone 17 Pro / iOS 26.5 walkthrough passed both callback races with screenshots and video
- isolated verify-katacode pairing regression passed
- added-line T3 identity search returned no matches
- independent spec review: PASS
- independent code-quality review: Ready to continue
Commit: ff12767
Local artifacts: uat-evidence/issue-143-mobile and uat-evidence/web-20260829-213941-20d0ef6d
- addedstatus:implementedBuilt and reported. Ready to verify.Built and reported. Ready to verify.phase:verifyCurrently in the Verify phase.Currently in the Verify phase.and removedstatus:approvedSpec approved by the maintainer. Ready to build.Spec approved by the maintainer. Ready to build.phase:buildCurrently in the Build phase.Currently in the Build phase.
on Aug 29, 2026 - added a commit that references this issue
on Aug 29, 2026 Verification report
All acceptance criteria pass on PR #154 at
54bd63800.- URI-keyed remount and child-local lifecycle guard reject stale A callbacks.
- Each request owns loaded state and stays hidden until load.
- The loading treatment is visible and non-interactive.
- Vendor-pull slice 4a: preserve mobile Markdown image dimensions #141 sizing, source, unavailable, and viewer behavior remain intact.
- Maestro dispatched captured late success and error handlers after B loaded; B remained visible and available.
- 58 focused tests, mobile and scripts typechecks, lint, format, identity search, simulator walkthrough, and isolated web pairing regression passed.
- Independent spec and code-quality reviews passed.
- Current-head CI passed: Check, Test, Mobile Native Static Analysis, Release Smoke, and CodeRabbit.
Status remains Implemented pending maintainer acceptance. PR: #154
Final PR-head verification for 4e37711:
- 62 focused tests passed.
- Mobile and scripts typechecks passed.
- Targeted lint, formatting, and git diff --check passed.
- The callback-delivery Maestro run passed both late-success and late-error cases on iPhone 17 Pro with iOS 26.5.
- verify-katacode passed pairing and the web landing regression check on an isolated stack.
- CI run 33278760862 passed Check, Test, Mobile Native Static Analysis, and Release Smoke.
- All six inline review threads have explicit dispositions and are resolved.
Issue status remains Implemented pending maintainer acceptance.
Final PR-head verification update for cca838e:\n\n- Fixed the pending-waiter HTTP lifecycle finding from the latest Codex review.\n- Focused responder checks passed.\n- CI run 33279211996 passed Check, Test, Mobile Native Static Analysis, and Release Smoke.\n- All PR review threads are resolved.\n\nIssue status remains Implemented pending maintainer acceptance.
- added a commit that references this issue
on Aug 30, 2026
Status
Implemented
Goal
Mobile Markdown images never show stale content or accept stale callbacks when a rendered image source changes during thread updates.
Context
Parent: #124, vendor-pull slice 4.
Depends on #141 because this follow-up isolates the image renderer introduced there and touches the same
ThreadFeedhotspot.Source behavior: upstream #7942 at
55c909334.Constraints and non-goals
Acceptance criteria
Architecture
Extract the native
<Image>request into a child keyed by URI. The child owns loading visibility and forwards only its own size or error result to the parent renderer.No contract, server, persistence, desktop, or web changes.
Delivery slices
Demonstration
test-t3-mobiledelayed-response run and a recording or screenshot sequence.Verification
vp test run packages/client-runtime/src/markdownImages.test.ts apps/mobile/src/features/threads/markdownImageSize.test.tsto preserve Vendor-pull slice 4a: preserve mobile Markdown image dimensions #141's classifier and sizing behavior.vp run --filter @kata-sh/code-mobile typecheck.test-t3-mobileflow with a deterministic responder that starts URI A, replaces it with URI B, settles B, then settles A with both late success and late error variants.@t3tools/,T3CODE_,T3 Code, andpingdotgg/t3code.Risks and mitigations
ThreadFeedwith the first-open scroll fix. The native dependency keeps those ports out of the same file at the same time.Build handoff