Skip to content

fix(ios): preserve drafts during command picker recovery - #497

Open
BunsDev wants to merge 2 commits into
mainfrom
companion-recovery-pr
Open

BunsDev wants to merge 2 commits into
mainfrom
companion-recovery-pr

Conversation

@BunsDev

@BunsDev BunsDev commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

A timed-out skill-list request currently raises the root connection alert and dismisses the new-thread sheets. This keeps the error inside the project/provider-scoped picker, retains search and the exact draft, and offers an explicit Try again action. Pairing and secret-answer fields gain Done actions so users can dismiss the keyboard before pressing Connect or Send answer.

The paired fixture consumes one armed command GET without responding; the unchanged request timeout exercises recovery through the real CompanionServer. Existing assertions remain, with added checks for explicit retry, one skill insertion, draft retention and no accidental submission. Model tests preserve cancellation, stale-result and revocation coverage.

PR #496's request-ID reset is not included. A separate regression alternates project-specific and global requests three times, checks the first-snapshot-project contract and retains the exact unsent draft. It passed without the reset independently, in all three complete local paired runs, and in hosted iPhone CI. #496 remains unchanged.

Local validation: build and workspace typecheck passed; coverage 2,327 passed / 26 skipped; native units 63 passed / zero skipped; three consecutive complete paired suites each executed 44 tests with 43 ordinary passes, the existing intentional expected-failure self-test and zero unexpected failures/skips; full E2E passed 505 desktop / four live-provider skips and seven site tests. All six iOS inputs remained unchanged through qualification and the final documentation update.

Hosted validation on signed, GitHub-verified head d3d2eee085ef101e9e044bb7502444518a5d982d: macOS, iPhone and coverage upload passed. Hosted results match the local counts: coverage 2,327 passes / 26 skips, 505 desktop passes / four live-provider skips, seven site passes, 63 native unit passes and 44 UI executions (43 ordinary passes plus one intentional expected-failure self-test; zero unexpected failures/skips). Both recovery and fresh-context tests have status Success. The expected-failure self-test is DemoWorkspaceTests/testBestEffortEvidenceDoesNotStopTheTest.

Tree: aa4bd344a9fce749c459054dda72ab948ce33e04. GitHub's tested PR merge-ref tree equals this signed head's tree. Review and checkpoint contain provenance, commands and acceptance limits; completed logs and digest-verified artifacts are retained outside the worktree.

Related to #276 and #281. Automated simulator receipts do not complete human, VoiceOver, physical-device or live-provider acceptance. The earlier unexplained three-pixel Code Review scroll failure remains historical evidence; the unchanged test passed locally and hosted at both sizes, and this change claims no Code Review repair. Ready for review; no merge or release is requested. The 2026-11-10 independent audit verifies two additional consecutive complete fresh-install suites on unchanged source and records the remaining acceptance limits.

@vercel

vercel Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
modex Ready Ready Preview Nov 8, 2026 9:47pm UTC

Request Review

@github-code-quality

Copy link
Copy Markdown

Code coverage overview

Languages: TypeScript

TypeScript / code-coverage-agent

main d7650e4 companion-recovery-p... d3d2eee +/-
66% 66% 0%

ℹ️ Calculations represent line coverage. Results may change as calculations are updated.

@BunsDev

BunsDev commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

Independent overnight audit (2026-11-10) confirms this exact signed head d3d2eee085ef101e9e044bb7502444518a5d982d, tree aa4bd344a9fce749c459054dda72ab948ce33e04, remains based on current main d7650e4c54cdd15e4ee4f14b9f4dec3455ba1e77. Both commit signatures and all nine candidate file hashes verify; current-head macOS, iPhone and analysis checks remain successful. Existing build/typecheck, 2,327 unit/coverage passes (26 skips), 63 native unit passes, 505 desktop E2E passes (four live-provider skips) and seven site passes are bound to the unchanged inputs. All four retained hosted artifact ZIP hashes independently match live GitHub digests.

Two additional complete paired suites passed consecutively on separately created iPhone Duo simulators using iOS 27.2 (24B91016s), Xcode 27.2 (27B52), Node 24.22.0 and pinned pnpm 10.34.5. Each preinstall app inventory proves Modex was absent. Each finalized XCTest bundle reports 44 executions: 43 ordinary passes, one existing intentional expected-failure screenshot self-test, zero unexpected failures and zero skips. Both the fresh-project-context and full paired workflow tests have status Success in both bundles. Pairing, actual project/provider discovery, one exact skill insertion, explicit thread creation, approval/follow-up, relaunch recovery, native secret questions and Mac-winner/Stop closure all remain covered. Source and documentation hashes stayed unchanged; no retry or new product edit was needed. Timeout and retained-draft screenshots were inspected.

The two #495 symptoms remain distinct: the first attempt never reached its paired thread; the retry paired and then missed the skill. The related recorded command GET timeout proves a destructive root-alert presentation with the correct project selected; the failing-first regression and scoped-picker repair address that demonstrated defect. Separate native reproductions support the keyboard Done fix. Neither proves a common historical cause for both #495 failures or the trigger of every transport timeout. PR #496's reset remains excluded because its independent context regression passes without it.

Both new simulator boot logs reported Data Migration Failed despite bootstatus returning zero; these startup warnings are retained alongside the actual passing suites. The original first failures, expected screenshot self-test, superseded CI cancellation and unrelated three-pixel Code Review diagnostic remain preserved. No test assertion/deadline was weakened. The original dirty companion-skill-flow worktree and released delivery worktree remain untouched, with original file/diff hashes checked. Coordination with their owner confirmed no newer work and no ownership objection to this independent audit.

Prepared for review under the current overnight goal. #276/#281 human, deferred VoiceOver, physical-device and live-provider acceptance remain open. No merge, release, TestFlight upload, feature-default change or other owner's cleanup occurred. The candidate review and checkpoint remain the source receipt; this audit adds the two fresh-install bundles and current-state verification.

@BunsDev
BunsDev marked this pull request as ready for review November 10, 2026 10:33

This branch was successfully deployed

1 active deployment
Preview — d3d2eee0 Deployed Nov 8, 2026 by vercel[bot]
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.

1 participant