Skip to content

feat(mobile): native step-by-step Bot creation and Environment adding - #2930

Merged
DoodleBears merged 10 commits into
mainfrom
claude/project-thread-q6839h
Oct 27, 2026
Merged

DoodleBears merged 10 commits into
mainfrom
claude/project-thread-q6839h

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Vain · project thread

Why the change

Adding Environments mixed list rows with embedded checkboxes, and creating a Bot was one long form with a dropdown destination / 添加环境时列表里套复选框;创建 Bot 是一整页长表单加下拉选择环境,都不像原生应用。This PR delivers every slice of #2922, one commit per slice.

Closes #2923 · Closes #2924 · Closes #2925 · Closes #2926 · Closes #2928 · Parent #2922 · Agent task claude/cloud/session_01WJJ4DsjGgNLb7bmSikF2Mr

Special things to note

  • Merge risk: mobile only. No Host, RPC or CLI change; the avatar uses the existing botAppearanceSet / botAvatarSet. The creation draft file gains an optional avatar field (old files still parse). Revert is a plain revert.
  • Known limits: Git and Zip previews return no avatar or persona to the phone, so imports show a "keeps the Bot's own avatar" placeholder and step ④ is bio + tags (the persona comes from the source). Showing the shipped avatar would need a Host preview change.
  • Navigation: each step is a real stack page (/create-bot = step 1, /create-bot-step?flow=…&step=n). The header ✕ pops the whole flow (router.dismiss(n+1)); opening the created Bot pops the step pages first. Zip entry no longer opens the picker immediately; the file is picked on step 2.
  • Verification (automated): pnpm --filter @botharness/mobile typecheck ✅ · vitest run in apps/mobile ✅ 278 files / 2130+ tests · pnpm lint ✅ · pnpm changelog:check ✅. New: bot-creation-steps.test.ts (step order, default Environment, step readiness), step-page screen tests (back/close, slow line, offline rows, empty state, avatar apply and failure, Git preflight, Zip progress), transport avatar test.
  • Verification (native): pending. Light/dark screenshots for iOS and Android are queued for the physical Mac/PC lane; this PR stays draft until they are attached.

Change outline

Screenshots: pending native capture (iOS / Android × light / dark).

🤖 Generated with Claude Code

https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr
…nned step bar

Rows on the Tobs Connect list now select as whole rows with one native
checkmark instead of an embedded checkbox. Added Environments say so and
cannot be toggled. A new StepBar primitive pins the add action at the
bottom with the native busy indicator, and the row being paired shows its
own progress while the list stays visible; the verification page appears
only when a fingerprint needs comparing.

Issue: #2923
Agent-Task: claude/cloud/session_01WJJ4DsjGgNLb7bmSikF2Mr

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr
@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 29 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 2 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6de8dee7-96c4-4785-a5d5-1625b88f84f9
Commits

Reviewing files that changed from the base of the PR and between 87f1e4c and 54af14d.

Files selected for processing: 40
  • CONTEXT.md
  • CONTEXT.zh.md
  • apps/mobile/DESIGN.md
  • apps/mobile/app/create-bot-step.tsx
  • apps/mobile/app/pair/account.tsx
  • apps/mobile/app/qa/account-actions.tsx
  • apps/mobile/src/host/account-action-fixture.ts
  • apps/mobile/src/host/bot-creation-entry.ts
  • apps/mobile/src/host/bot-creation-steps.ts
  • apps/mobile/src/host/bot-creation-transport.ts
  • apps/mobile/src/host/bot-creation.ts
  • apps/mobile/src/ui/account-hosts.tsx
  • apps/mobile/src/ui/design/tokens.ts
  • apps/mobile/src/ui/primitives/account-panel.ios.tsx
  • apps/mobile/src/ui/primitives/account-panel.tsx
  • apps/mobile/src/ui/primitives/environment-list.tsx
  • apps/mobile/src/ui/primitives/keyboard-form-footer.tsx
  • apps/mobile/src/ui/primitives/step-bar.android.tsx
  • apps/mobile/src/ui/primitives/step-bar.ios.tsx
  • apps/mobile/src/ui/primitives/step-bar.tsx
  • apps/mobile/src/ui/shell/bot-creation-notice.tsx
  • apps/mobile/src/ui/shell/create-bot-screen.tsx
  • apps/mobile/src/ui/shell/creation-avatar.tsx
  • apps/mobile/src/ui/shell/open-created-bot.ts
  • apps/mobile/src/ui/strings.ts
  • apps/mobile/test/account-hosts.test.tsx
  • apps/mobile/test/account-panel-ios-integration.test.tsx
  • apps/mobile/test/account-panel.test.tsx
  • apps/mobile/test/bot-creation-entry.test.ts
  • apps/mobile/test/bot-creation-notice.test.tsx
  • apps/mobile/test/bot-creation-screen.test.tsx
  • apps/mobile/test/bot-creation-steps.test.ts
  • apps/mobile/test/bot-creation-transport.test.ts
  • apps/mobile/test/bot-creation.test.ts
  • apps/mobile/test/bot-import-screen.test.tsx
  • changes/mobile-add-environments-list.md
  • changes/mobile-creation-avatar.md
  • changes/mobile-git-import-steps.md
  • changes/mobile-step-by-step-bot-creation.md
  • changes/mobile-zip-marketplace-import-steps.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@DoodleBears DoodleBears self-assigned this Oct 26, 2026
Issue: #2923
Agent-Task: claude/cloud/session_01WJJ4DsjGgNLb7bmSikF2Mr

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr
Blank creation and every import now run as real stack pages, one question
each, ordered by one pure function of the source. The Environment page is a
single-select list that preselects the only, entered-from or last-used
Environment, disables offline ones and offers adding one when there is none.
The pinned step bar carries Next · k/n, the round back button and native
loading, with a slow-Environment line after five seconds, the error above
the bar and Retry on the last page. The header close button leaves the
flow and keeps the draft; opening the new Bot closes the step pages.

Issue: #2924
Agent-Task: claude/cloud/session_01WJJ4DsjGgNLb7bmSikF2Mr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr
The Name step shows a large round avatar with Shuffle and Choose from
Photos. The choice is kept in the creation draft and the submitted record,
then applied after creation with the existing botAppearanceSet and
botAvatarSet operations. A failed apply keeps the created Bot, clears the
choice and raises a native notice.

Issue: #2925
Agent-Task: claude/cloud/session_01WJJ4DsjGgNLb7bmSikF2Mr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr
Git import runs Environment, Git link, name and avatar, then bio and tags.
Leaving the link step previews it on the chosen Environment and keeps any
failure there; an empty name now defaults to the repository's name.

Issue: #2926
Agent-Task: claude/cloud/session_01WJJ4DsjGgNLb7bmSikF2Mr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr
The Zip file step and the Marketplace confirm step shipped with the shared
step flow; this records them for the release notes.

Issue: #2928
Agent-Task: claude/cloud/session_01WJJ4DsjGgNLb7bmSikF2Mr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr
@DoodleBears DoodleBears changed the title feat(mobile): add Environments from a native checkmark list with a pinned step bar feat(mobile): native step-by-step Bot creation and Environment adding Oct 27, 2026

Copy link
Copy Markdown
Contributor Author

Native QA handoff: step-by-step Bot creation and Environment adding

You are testing PR #2930 on the physical machines: the Mac (iOS Simulator, iPhone optional) and BEAR-PC (Android emulator). All the code is written and the automated checks pass. Your job is the native checks and the light/dark screenshots, which the cloud session could not do.

Follow AGENTS.md and docs/agents/device-qa.md (Mac) / docs/agents/android-device-qa.md (Windows). Use the queues and the dedicated QA Host. Never use the Human's everyday Host. Live model checks (none are required here) use the latest DeepSeek model.

What to check out

Step 0: make sure both queues have the entry

The cloud session asked for the Mac entry to be added. Check both queues anyway, and add an entry that's missing, word for word from below. Don't cut a batch unless you are that queue's owner. #2850 and #2857 were ahead on the Mac.

  1. Mac .humanlayer/device-qa/queue.md in the main BotHarness checkout, under "Next batch". It replaces the older "feat(mobile): native step-by-step Bot creation and Environment adding #2930 Add Environments screen screenshots" entry.
  2. Windows D:\code\project\BotHarness: run pwsh -NoProfile -File scripts/android-qa.ps1 init if needed, then add the entry under "Next batch" in the queue file it names.

Mac queue entry (paste under "Next batch")

- #2930 native step-by-step Bot creation + Environment adding
  - Branch claude/project-thread-q6839h @ 47def313 (use PR head). JS only, no native build.
  - Report to: Vain (project thread linked in the PR #2930 description); results as PR #2930 comment.
  - Needs: QA Host + a second paired QA Host (or a second Environment) for the multi-Environment and offline steps; light+dark screenshots on steps A1–A3, B1–B9, C1–C3, D1–D2, E1–E2.
  - Steps: PR #2930 comment "Native QA handoff", sections A–E (iOS).

Windows queue entry (paste under "Next batch")

- #2930 native step-by-step Bot creation + Environment adding (Android)
  - Branch claude/project-thread-q6839h @ 47def313 (use PR head). JS only.
  - Report to: Vain (project thread linked in the PR #2930 description); results as PR #2930 comment.
  - Needs: QA Host reachable from the emulator, ideally a second Environment; light+dark screenshots on A1–A3, B1–B9, C1–C3, D1–D2, E1–E2.
  - Steps: PR #2930 comment "Native QA handoff", sections A–E (Android).

Screenshots

  • Capture each marked step in light and dark, on iOS 26 (Liquid Glass) and Android (Material 3 Expressive). One extra iOS shot at the largest accessibility text size for B2 and B6 is welcome.
  • Redact pairing codes, tokens, emails and tailnet names.
  • Commit the images to the PR branch under .github/pr-screenshots/bot-creation-steps/, named <platform>-<step>-<light|dark>.png, for example ios-B2-dark.png. Embed them in a PR comment with https://github.com/BotHarness/DeepSeekBot/raw/<12-char-sha>/.github/pr-screenshots/bot-creation-steps/<file>, with each URL at most 150 characters. If you may not push to the PR branch, use the batch evidence branch (qa/batch-<n>-evidence) as the doc says.
  • Put the results table and screenshots in one PR comment. Write each step as pass, fail (with what you saw) or untested (with why).

A. Add Environments from a Tobs Connect account (#2923)

Dev builds have a fixture route, so this needs no real account:
deepseekbot-dev://qa/account-actions?scenario=environments and …&pairing=studio. (Use the dev scheme the queue doc names; on Android open it with adb shell am start -a android.intent.action.VIEW -d "<url>".)

  • A1 — list. Rows: Studio Mac and Travel Laptop (selectable), Home PC reads "Added" and can't be selected, Office Server is offline and can't be selected. Tapping a row toggles one native checkmark: on iOS a trailing ✓, on Android the selected row fill plus a check. No checkbox control anywhere. 📸
  • A2 — step bar. The bottom bar reads "Select Environments" (disabled) with nothing selected, then "Add 1 Environment" / "Add 2 Environments". Chinese: 「选择环境」 / 「添加 2 个环境」. The capsule is pinned above the home indicator / gesture bar. 📸
  • A3 — pairing in place. With &pairing=studio, the list stays visible. Studio Mac shows the native spinner and "Adding…" (「正在添加…」), and the capsule shows native loading. 📸
  • A4 — real account (optional). If a test Tobs Connect account is available, add one Environment for real. The verification page should appear only when a code must be compared.

B. Create a blank Bot (#2924 + avatar #2925)

Start from the Chats plus menu → "Create a blank Bot" (「创建空白 Bot」). Repeat once from inside a specific Environment and once from "All".

  • B1 — step 1, Environment. The page starts with one sentence ("Choose the Environment this Bot lives in." / 「选择这个 Bot 所在的环境。」). It shows a single-select list with Online/Offline/Checking under each name. No dropdown. The bar has no round back button and reads "Next · 1/3" (「下一步 · 1/3」). The header has a ✕ on the left and no back chevron. 📸
  • B2 — preselect rules. (a) Entered from Environment A: A is preselected. (b) Only one Environment paired: it is preselected. (c) From All with two: the last-used one is preselected if it is online, otherwise nothing is, and Next stays disabled until you pick. (d) An offline Environment is greyed and can't be tapped. 📸 for (c) and (d).
  • B3 — no Environment. With no Environment paired (fresh Simulator or emulator): an empty state with "Add Environment" (「添加环境」). Add one through the pairing flow. Back on step 1, the new Environment is selected. 📸
  • B4 — step 2, name + avatar. A large round avatar is above the name field, with "Shuffle" / 「换一个」 and "Choose from Photos" / 「从相册选择」. Before you shuffle, the avatar matches the one the name generates. Shuffle changes it. Photos opens the system picker with a square crop. Next is disabled while the name is empty. The bar shows the round back button and "Next · 2/3". 📸
  • B5 — keyboard. With the name field focused, the step bar rides above the keyboard and stays tappable on both platforms. 📸 (one platform is enough)
  • B6 — step 3, persona + bio + tags. The fields are persona, then bio, then tags under bio. All are optional. The last capsule reads "Create" (「创建」) with no step count. 📸
  • B7 — back behaviour. On steps 2 and 3, iOS swipe-back, Android system back and the round button each go back exactly one step, keeping what you typed. On step 1, back leaves the flow. On any step, ✕ leaves the whole flow. Reopen "Create a blank Bot": the draft (Environment, name, avatar, persona) is still there.
  • B8 — creating. Tap Create. The capsule shows the native indicator inside it and "Creating…" (「正在创建…」), with no separate spinner. On success the app opens the new Bot's DM directly, and system back from the DM does not return to the step pages. 📸 of the loading capsule.
  • B9 — slow Environment and failure. Make the QA Host slow or unreachable right after tapping Create (for example, stop the QA Host after the tap, or create while its route is blocked). After about 5 s the line "Waiting for the Environment to respond" (「正在等待环境响应」) appears above the bar. On failure the page stays on step 3 with the error above the bar and "Retry" (「重试」), or "Check and resume" (「检查并恢复」) if the Host may have received the request. While the outcome is uncertain, it must not offer editing or create a second Bot. Restart the Host and retry: exactly one Bot exists (check with deepseekbot list against the QA Host). 📸 of the slow line and the error.
  • B10 — avatar applied. For a Bot created after Shuffle, and one after Choose from Photos, the new Bot's profile shows the chosen avatar. To test a failed apply, stop the Host right after creation: the Bot exists, and a native alert says "Avatar not set" (「头像没有设置成功」).

C. Import from Git (#2926)

Plus menu → Import from Git link.

  • C1 — steps. ① Environment ② Git link ③ Name + avatar ④ Bio + tags. The bar reads 1/4, 2/4, 3/4, then "Import" (「导入」). 📸 of ②.
  • C2 — preflight on leaving step ②. With a reachable public Bot repository URL, Next shows "Checking source…" inside the capsule, then moves to ③. The name is prefilled from the repository name and can be edited. 📸 of the checking capsule.
  • C3 — bad link. With an invalid or unreachable URL, Next stays on ② with the error above the bar. Fix the link and continue. 📸
  • C4 — avatar for imports. On ③ the avatar shows a box placeholder with "Uses the avatar that comes with the imported Bot". After import with no change, the Bot keeps its own avatar. After Shuffle, it uses the shuffled one. Step ④ has no persona field and starts with "The persona comes with the imported Bot".
  • C5 — import. Import succeeds and opens the DM, like B8.

D. Import from Zip (#2928)

Plus menu → Import Zip. Use a Bot Zip exported from the Host, under 100 MB.

  • D1 — no picker on entry. The first page is the Environment step; the document picker does not open immediately. On step ②, "Choose Zip file" opens the picker. Afterwards the page shows the file name and size, plus "Choose another Zip file". 📸
  • D2 — upload on leaving ②. Next shows "Checking source…" in the capsule and "Uploading NN% · Keep the app open" while it uploads. Then ③ has the name prefilled from the archive and ④ has its bio and tags prefilled. 📸 of the progress.
  • D3 — restore. Covered by automated tests. Optional: delete the app's retained copy mid-flow and check that "Choose the original Zip file" restores it.

E. Marketplace import (#2928)

Browse Marketplace → open a listing → Import.

  • E1 — steps. ① Environment ② Name + avatar (name prefilled from the listing) ③ Confirm, showing the source URL, Environment and name, with bio and tags editable. The capsule reads "Import". 📸 of ③.
  • E2 — stale listing. If the listing's commit changed, Import keeps you on ③ with "This listing has changed. Refresh it before importing…" above the bar (「市场条目已有更新,请刷新后再导入。…」) and a "Refresh listing" button. (Hard to stage live; automated tests cover it. Mark it untested if you can't stage it.) 📸 if seen.

Also look at (both platforms)

Known limits (not bugs)

  • Git and Zip previews send no avatar or persona to the phone, and this work changes no Host/RPC, so imports show a placeholder avatar and no persona field.
  • In the Zip and Git flows the name step is required. A name prefilled from the source counts.

When you're done

Post the results comment on PR #2930. If everything passes, say so there and in the queue results. Leave the PR in draft: the cloud session will mark it ready once the screenshots are attached. Report any failure with the step id, platform, theme and what you saw.


Generated by Claude Code

Issue: #2925
Agent-Task: claude/cloud/session_01WJJ4DsjGgNLb7bmSikF2Mr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJJ4DsjGgNLb7bmSikF2Mr
@DoodleBears
DoodleBears marked this pull request as ready for review October 27, 2026 05:36
…-q6839h

# Conflicts:
#	apps/mobile/src/ui/design/tokens.ts
@DoodleBears

Copy link
Copy Markdown
Contributor Author

Android (Windows) physical-device QA results

Task: codex/local/01a17bef-21c0-75f0-bf5d-2fedb6df7b73. Follow-up evidence PR: #2957. Full report.

Not an all-pass sign-off. Original 280dfd094 (includes #2930) fails native startup (#2945). Further checks use separate fix candidate 68c68f4715b9 in #2947. The following statuses keep these revisions separate.

Step Original source Fix candidate Observation / limit
A1 fail pass Development fixture: Studio Mac / Travel Laptop toggle selected fill and native check; Added Home PC and offline Office Server cannot be selected; no checkbox controls.
A2 untested pass Disabled zero-selection capsule; Add 1 and Add 2 states; bottom safe area checked. Chinese only; English not tested.
A3 untested pass Fixture pairing stays in list; row and capsule show native loading. This is fixture proof, not a real account operation.
A4 untested untested Optional real Tobs Connect account operation not attempted.
B1 untested pass Blank creation starts at single-select Environment, intro and header X; no first-step round Back; Next 1/3.
B2 untested untested Partial: specific Environment and All/last-online selection observed; offline rows cannot be selected; static maximum font/display layout checked after cold restart. Only-one-paired and last-used-offline fallbacks were not completed; existing pairings were preserved.
B3 untested untested Fresh zero-paired-device profile and pairing during creation not staged.
B4 untested pass Empty name disables Next; name-generated avatar and Shuffle; real system Photos picker selected only the supplied public image and opened native square crop. Native profile application is separately failed in B10.
B5 untested pass Actual soft keyboards in both themes; Next remains above keyboard and can be activated. Dark keyboard recommendation toolbar is redacted.
B6 untested pass Persona, bio and tags optional; final Create has no step count; maximum font/display top and scrolled layouts keep action accessible. Canonical first Bot retained entered bio/persona. Standard-size light screenshot is missing.
B7 untested pass Round Back, system Back, real edge-back gesture and three-button Back move one step. Name/avatar/persona/bio draft retained across close/reopen and app restart.
B8 untested pass Real accepted create response held: native loading; then direct DM. Back returns to roster, not completed forms. Loading screenshot is dark only.
B9 untested pass Held actual accepted response, then dropped transport/lookup traffic: slow message, locked uncertain state, error above capsule, Check and resume. Restoring transport opens the original Bot. CLI proves one Bot for each of QA293Blank, QARecover and QAResume; no retry duplicate. Slow screenshot is dark only; uncertain state has both themes.
B10 untested fail Generated recipes persisted, native photo crop exercised, and failed avatar application showed native alert while Bot existed. Opening the native Bot profile raised Event cannot be both direct and bubbling: topSelect; final profile avatar rendering could not be accepted. Profile redesign is outside this QA/fix scope.
C1 untested pass Actual Git flow has four steps and Next 2/4 at source input. Light/dark images differ in input contents (empty versus filled); they are state examples, not a matched comparison.
C2 untested pass Actual public Git source: Checking source on leaving step 2, then name doubao prefilled. Artificially holding preview beyond timeout also showed timeout; releasing and retrying succeeded. Only light loading screenshot retained.
C3 untested pass Invalid URL stays on step 2 with visible error; corrected exact public URL proceeds. Only dark error screenshot retained.
C4 untested untested Partial: box placeholder / original-avatar caption and no editable Persona in final import step observed. Generated override persisted for Zip import. Original avatar rendering in native profile blocked by B10; Git Shuffle variant not separately completed.
C5 untested pass Actual Git import opens DM; canonical Host list contains one imported doubao.
D1 untested pass Entry first shows Environment; picker is entered from step 2. Real Android DocumentsUI selected only QA2930-export.zip; filename, size and Choose another visible. Screenshot is dark only; entry image captures Environment result-check loading.
D2 untested fail Real 4055-byte Host export uploads and preflights, bio QABio prefilled, empty archive tags remain empty. Name incorrectly stayed doubao from previous Git flow instead of archive QA293Blank: #2954. Manually renaming to QAZip then importing worked and opened DM. Archive was one chunk; multi-chunk progress not tested.
D3 untested untested Optional retained-file deletion/restore native case not staged. Existing automated coverage mentioned in the handoff is not counted as execution of this case.
E1 untested pass Actual Marketplace listing: three steps, name prefilled doubao, final source URL / Environment / edited name QAMarket / bio / tags / Import; actual import opens DM and canonical Host contains one QAMarket. Only dark final screenshot retained.
E2 untested untested Optional stale listing commit not staged; shared public listing left unchanged.

38 redacted physical-device screenshots retained; incomplete/mismatched theme pairs explicitly listed in the report. TalkBack speech, iOS, live models, real Connect account and optional stale-listing/retained-file cases are not claimed.

Dedicated Host ended with six canonical Bots and no recovery duplicate. Only this QA pairing was revoked/unpaired. Original phone settings/input method and original APK restored with data preserved; test files removed, dedicated Host/Metro/proxy stopped, task ADB mappings removed and phone lease released.

@DoodleBears

Copy link
Copy Markdown
Contributor Author

iOS native acceptance — #2930

Overall: FAIL. Evidence-only follow-up: PR #2974, with 57 redacted native PNGs, capture hashes and the full report. All57 images were expanded in GitHub and verified loaded; pinned raw PNG spot-check returned200image/png.

  • Candidate frozen at window start: main/JS a13e23d791e7eb065a4c25a188f45326023b98be.
  • iPhone18ProMax Simulator, iOS27, Debug dev client0.0.1(1), Chinese; defaultlarge and maximumaccessibility-extra-extra-extra-large, light/dark.
  • Retained native source 43bf7b4a000566ff97316e61e48cb54979d2f582; independent native fingerprint and config/package/lock inputs match. Exact executed-JS content hashing remains unverified; actual current JS was loaded through this task's Metro. Physical iPhone and Android are not covered by this run.
Case Result Actual native result / limitation
A1 FAIL Blank part of selectable row does not toggle; tapping its name does. Native trailing checkmark and disabled Added/Offline rows work.
A2 PASS Zero/one/two counts and pinned capsule work with A1 text-hit workaround; height deviation recorded under B6.
A3 PASS Documented development fixture keeps list visible with row/capsule native indicators.
A4 UNTESTED No real Connect test account used.
B1 PASS Environment list, sentence, X/no chevron, no roundBack on1/3.
B2(a,c,d) PASS Scoped target; All selects online last-used target; real target shutdown clears selection after reentry, disablesNext, offline tap does nothing; choosing onlineB works. Max text scroll reachesA/B.
B2(b) UNTESTED Exactly-one-paired variant;3 existing offline pairings were preserved.
B3 return FAIL Creation→AddEnvironment→real pairing→customization Save returnsHome, not the creation step. Customization Back behaves the same.
B3 fresh empty UNTESTED Existing3pairings retained; initial no-online list is not a clean-no-pairing empty-state test.
B4 PASS Name-derived avatar, Shuffle, empty-name disabledNext, system Photos picker and square crop.
B5 PASS Real software keyboard; visible footer follows above it and Next advances. Driver AX coordinates sometimes stale; visible action independently tapped/recorded.
B6 FAIL Optional persona/bio/tags and max-text scrolling work, but default controls66pt, max Back66pt vs capsule93.33pt instead of equal52pt.
B7 PASS RoundBack/edge-swipe3→2 preserve draft; close/reopen retains inputs. Step1 edge-swipe/every close permutation not exercised.
B8 PASS Rapid double-submit→exactly1Bot/1DM onA,0onB; original receipt verified; native busy capsule and directDM navigation work.
B9 slow/restart/retry PASS RealB pause→5s waiting→unreachable+Retry; App restart preserves original target/input/key; restore/retry→exactly1Bot/1DM. Before mutation only.
B9 post-mutation faults UNTESTED Lost receipt, uncertain-edit lock and Host restart during submitted creation were not injected.
B10 generated/photo PASS Shuffled recipe persisted and displayed; cropped test photo persisted and appears in actual profile; picker cancel retains draft.
B10 failed avatar apply UNTESTED No post-create avatar-apply failure injected.
C1 PASS Native4-step Git flow and finalImport.
C2 PASS Real public repository preflight, native checking capsule, editable source-derived name.
C3 PASS Invalid link error remains on2/4; corrected link continues.
C4 UI PASS Box placeholder/keep-source copy; no persona field.
C4 artwork variants UNTESTED Exact source-avatar comparison and shuffled-import override.
C5 PASS ActualGit import opensDM; canonicalA count2→3.
D1 PASS Environment before picker; system picker cancel/reopen; actual Host-exportedZip selected, filename/size/choose-another shown.
D2 FAIL Upload/import succeed, bio/tags correct; priorGit name carries intoZip (existing#2954), and Uploading100% persists after preview.
D3 UNTESTED Optional retained-file loss/restore not injected.
E1 PASS Actualmarket list/detail→environment→listing name→confirm source/target/editable bio/tags→importDM.
E2 UNTESTED No stale-listing commit injected.

Also retained: newly created DM avatar/name stack and clip in the header; the correct hit target opens a normal profile. This adjacent observation is not fixed in the evidence branch.

Canonical isolated-Host counts: A0→1(shuffle/double-tap)→2(photo)→3(Git)→4(Zip)→5(market); B0→1(original operation after restart/retry), then2only for a deliberately separate named loading-theme capture. Each completed create/import opened its actualDM. No model calls.

Native/CLI screenshots and receipts are separate proof. SpokenVoiceOver, middle font size, English, ReduceTransparency/pre-iOS26 fallback and performance benchmarks remain untested. Images preserve original aspect ratios; only privacy masks are applied. Early theme-transition frames were replaced with settled captures.

Cleanup complete for active resources: ownA/B pairings removed and exact device keys verified revoked;3 prior pairings preserved; ownMetro/Hosts/downloadserver/driver stopped, owned ports free, protected shared listeners unchanged; SimulatorShutdown and light/large restored. Closed QA Profiles/raw evidence retained. Simulator-only differences retained: Toolsbutton hidden and first-use Dev-app/Photos notifications declined (not reset to notDetermined); owned test photo is recoverable in RecentlyDeleted. Details in report.

Task: codex/local/01a1653b-3345-7091-8284-34ceddb41e2c. No implementation fix, product merge, deployment, store or release action.

DoodleBears added a commit that referenced this pull request Oct 27, 2026
Issue: #2922
Refs: #2930, #2954
Agent-Task: codex/local/01a1653b-3345-7091-8284-34ceddb41e2c
DoodleBears added a commit that referenced this pull request Oct 27, 2026
* test(mobile): record Android physical-device QA for #2930

Issue: #2922

Agent-Task: codex/local/01a17bef-21c0-75f0-bf5d-2fedb6df7b73

* docs(qa): format Android creation evidence report

Issue: #2922

Agent-Task: codex/local/01a17bef-21c0-75f0-bf5d-2fedb6df7b73
@DoodleBears
DoodleBears deleted the claude/project-thread-q6839h branch October 28, 2026 04:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants