Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ A Human pairs the phone app with their Host by a one-time QR code, and the phone
## How to get to it (user POV)

- Computer: Bot mode → settings → Devices → Pair a phone. The dialog shows the QR code and a copy link; the Devices list has Revoke.
- Phone: the app opens on "Pair with your computer"; scan the code or paste the link, then tap Pair.
- Phone: first use opens "Pair with your computer". From an existing session: Workspaces → Computers → Pair a new computer. Scan the code or paste the link, then tap Pair. Cloud → Join by link or QR is the separate cloud invitation path; its preview identifies organization membership versus one-channel guest access. The category tabs are the first drawer row; swipe, backdrop, Android Back and accessibility escape dismiss it.

## Driving it with verify-app

Expand Down
26 changes: 26 additions & 0 deletions .github/pr-screenshots/2171-drawer-headers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Drawer headers — Batch 23

Runtime `4185d28a380bd37f68eafb765d28d24ee947af4a`; base `3be6b52c384812f801d2b9d58013580c0d6e4c0f`; installed native `494a20f1eb4f0666a2c90bc3c758af4e7ff5f46b`. [Runtime CI](https://github.com/BotHarness/DeepSeekBot/actions/runs/39109396184) passed all applicable jobs.

The assigned existing iOS 26 Simulator rendered both views at 402 × 874 in English. Before/after pairs use matching default text, light theme and signed-out data. No new dependency, native build, account login, service mutation or Prod change.

## Results

- Workspace drawer and generic statistics Sheet: default/intermediate/maximum Dynamic Type × light/dark captured and inspected. Long titles wrap; maximum-size close actually clicked in both surfaces. Sheet body was scrolled; the secondary Got it button was partly clipped in the captured position, so this is not a full body-action reachability qualification.
- Normal-size iOS title uses native glass from existing Expo UI. Larger text uses an opaque rounded rectangle. Close is a separate 44pt target. Android source/bundle passed but was not driven natively.
- Workspace close/reopen and backdrop dismissal were actually performed. The 3.7-second recording and 14-cell contact sheet were inspected.
- Real Settings Reduce Transparency toggle was observed checked, App returned to opaque title/close, then the original unchecked state and glass rendering were restored. No app restart was needed for the setting change.
- Original statistics preferences were backed up privately, noticeSeen was temporarily cleared to show the production Sheet, then the original bytes were restored. Development telemetry transport was unconfigured. No telemetry identity or private file is published.

## First failures retained

- Initial sandbox source run could not bind loopback; permitted rerun passed 649 tests / 8 skipped.
- Initial CI rejected comments/useEffect; external-store subscription replaced it. The final source-policy, typecheck, build, affected tests and both mobile bundles passed.
- First native maximum-light glass title became a dark ellipse around multiline text (`first-pass/`). Final runtime uses the rounded opaque large-text treatment; all six cases rerun.
- Initial capture was during bundling and was discarded from final comparisons. First system-switch label click did not toggle the switch; unchecked state and unchanged glass were retained. Actual switch tap then produced checked → opaque → unchecked → glass evidence.

## Boundaries and cleanup

Settings/SheetStack remain unchanged; this does not requalify #2112 or claim every drawer migrated. Android, physical phone, VoiceOver/Human and older-iOS rendering remain unverified. Source and iOS results do not close those gates.

Large/light and Reduce Transparency off restored; original statistics preference file restored byte-for-byte; own App, driver and Metro stopped. Installed app/data/Keychain, signed Products, rollback, three original QA documents, physical-phone lane and all Hosts preserved. No merge.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 38 additions & 0 deletions .github/pr-screenshots/2171-drawer-headers/drawer-matrix.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[
{
"kind": "drawer",
"size": "large",
"theme": "light",
"closeAccessible": true
},
{
"kind": "drawer",
"size": "large",
"theme": "dark",
"closeAccessible": true
},
{
"kind": "drawer",
"size": "extra-extra-extra-large",
"theme": "light",
"closeAccessible": true
},
{
"kind": "drawer",
"size": "extra-extra-extra-large",
"theme": "dark",
"closeAccessible": true
},
{
"kind": "drawer",
"size": "accessibility-extra-extra-extra-large",
"theme": "light",
"closeAccessible": true
},
{
"kind": "drawer",
"size": "accessibility-extra-extra-extra-large",
"theme": "dark",
"closeAccessible": true
}
]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
36 changes: 36 additions & 0 deletions .github/pr-screenshots/2171-drawer-headers/proof.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"issue": 2171,
"pr": 2172,
"base": "3be6b52c384812f801d2b9d58013580c0d6e4c0f",
"runtime": "4185d28a380bd37f68eafb765d28d24ee947af4a",
"native": "494a20f1eb4f0666a2c90bc3c758af4e7ff5f46b",
"ci": 39109396184,
"environment": "local iOS Simulator, existing UAT signed-out configuration",
"viewport": "402x874",
"matrices": {
"drawer": "3 text sizes x light/dark",
"sheet": "3 text sizes x light/dark"
},
"pass": [
"native title material",
"maximum-text close in drawer and sheet",
"drawer close/reopen/backdrop",
"sheet body scroll",
"Reduce Transparency on/opaque and off/glass restored"
],
"unverified": [
"Android native",
"physical phone",
"Human and VoiceOver",
"older iOS native fallback",
"Settings / SheetStack adoption"
],
"cleanup": [
"large/light restored",
"Reduce Transparency restored off",
"original statistics preferences restored byte-for-byte",
"own app/driver/Metro stopped",
"no login or service writes",
"other Hosts and physical phone unchanged"
]
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 38 additions & 0 deletions .github/pr-screenshots/2171-drawer-headers/sheet-matrix.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[
{
"kind": "sheet",
"size": "large",
"theme": "light",
"closeAccessible": true
},
{
"kind": "sheet",
"size": "large",
"theme": "dark",
"closeAccessible": true
},
{
"kind": "sheet",
"size": "extra-extra-extra-large",
"theme": "light",
"closeAccessible": true
},
{
"kind": "sheet",
"size": "extra-extra-extra-large",
"theme": "dark",
"closeAccessible": true
},
{
"kind": "sheet",
"size": "accessibility-extra-extra-extra-large",
"theme": "light",
"closeAccessible": true
},
{
"kind": "sheet",
"size": "accessibility-extra-extra-extra-large",
"theme": "dark",
"closeAccessible": true
}
]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions .github/pr-screenshots/2171-drawer-headers/transparency-app.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
Page: ai.botharness.deepseekbot.dev
App: ai.botharness.deepseekbot.dev
Snapshot: 27 visible nodes
Simulator AX snapshot inapplicable (system-surface-host-lingering); used XCTest, which read app content: the system surface host process was still running but no longer presenting.
@e1 [application] "DeepSeekBot Dev"
@e2 [other] "gearshape.fill"
@e3 [image] "gearshape.fill"
@e4 [navigation-bar] "Back"
@e5 [button] "Back"
@e6 [text] "Cloud services"
@e7 [button] "Workspaces"
@e8 [other] "tob-instance-uat"
@e9 [scroll-area] "Import the UAT configuration supplied by your deployer. Cloud sign-in is separate from pairing a computer." [scrollable]
[content below scroll-area hidden]
@e10 [other] [same label as parent]
@e11 [button] "Scan configuration"
@e12 [button] "Paste configuration"
@e13 [text] "https://tob-service-uat.yangmufeng233.workers.dev"
@e14 [text] "UAT"
@e15 [text] "Signed out"
@e16 [button] "Sign in"
@e17 [other] "Workspaces"
@e18 [button] "Close workspaces"
@e19 [scroll-area] "Computers" [scrollable]
[content below scroll-area hidden]
@e20 [other] "Computers"
@e21 [text] "Cloud workspaces"
@e22 [button] "tob-service-uat.yangmufeng233.workers.dev · Sign in to continue"
@e23 [button] "Join with invitation"
@e24 [button] "Create workspace"
@e25 [button] "Pair a new computer"
@e26 [button] "Cloud services"
@e27 [button] "Notifications"
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Page: com.apple.Preferences
App: com.apple.Preferences
Snapshot: 18 visible nodes
Simulator AX snapshot inapplicable (system-surface-host-lingering); used XCTest, which read app content: the system surface host process was still running but no longer presenting.
@e1 [application] "Settings"
@e2 [navigation-bar] "Back"
@e3 [button] "Back"
@e4 [text] "Display & Text Size"
@e5 [table] "Bold Text"
[content below table hidden]
@e6 [switch] "Bold Text" [unchecked]
@e7 [cell] "Larger Text, On"
@e8 [switch] "Button Shapes" [unchecked]
@e9 [switch] "On/Off Labels" [unchecked]
@e10 [link] "What's new in Display & Text Size…"
@e11 [switch] "Reduce Transparency" [checked]
@e12 [other] "Improve contrast by reducing transparency and blurs on some backgrounds to increase legibility."
@e13 [switch] "Increase Contrast" [unchecked]
@e14 [other] "Increase color contrast between app foreground and background colors."
@e15 [switch] "Differentiate Without Color" [unchecked]
@e16 [other] "Replaces user interface items that rely solely on color to convey information with alternatives."
@e17 [switch] "Prefer Horizontal Text" [unchecked]
@e18 [other] "Prefer horizontal text in languages that support vertical text."
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Page: com.apple.Preferences
App: com.apple.Preferences
Snapshot: 18 visible nodes
Simulator AX snapshot inapplicable (system-surface-host-lingering); used XCTest, which read app content: the system surface host process was still running but no longer presenting.
@e1 [application] "Settings"
@e2 [navigation-bar] "Back"
@e3 [button] "Back"
@e4 [text] "Display & Text Size"
@e5 [table] "Bold Text"
[content below table hidden]
@e6 [switch] "Bold Text" [unchecked]
@e7 [cell] "Larger Text, On"
@e8 [switch] "Button Shapes" [unchecked]
@e9 [switch] "On/Off Labels" [unchecked]
@e10 [link] "What's new in Display & Text Size…"
@e11 [switch] "Reduce Transparency" [unchecked]
@e12 [other] "Improve contrast by reducing transparency and blurs on some backgrounds to increase legibility."
@e13 [switch] "Increase Contrast" [unchecked]
@e14 [other] "Increase color contrast between app foreground and background colors."
@e15 [switch] "Differentiate Without Color" [unchecked]
@e16 [other] "Replaces user interface items that rely solely on color to convey information with alternatives."
@e17 [switch] "Prefer Horizontal Text" [unchecked]
@e18 [other] "Prefer horizontal text in languages that support vertical text."
13 changes: 13 additions & 0 deletions .github/pr-screenshots/2174-drawer-compact/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Compact workspace drawer — native evidence

Final drawer source `dc15ffd3a7003ef0c0f4110f834f02f15a990e6c`, integrated `1376b50b1f8358d9d9b22c89e55901fb5a141d24`; retained native `494a20f1eb4f0666a2c90bc3c758af4e7ff5f46b`. No native dependency/config changes. Real shared iOS Simulator screenshots, 402 × 874, English.

`before-*` is the prior title/X + mixed Add iteration at source `59fc97fd7bada6d54cbae1feacc4d93d032e4c82`. The same empty-computer/signed-out-UAT fixture, viewport and themes are used. The exposed screen behind the drawer differs; compare the drawer only. These are not screenshots of the PR base branch. Earlier base evidence remains in `../2174-drawer-tabs/` and is superseded for final appearance.

`*-default-*`, `*-intermediate-*`, `*-max-*`, `join-direct` and `pair-direct` use the final source. `cloud-max-scrolled-dark` shows the address after a swipe in the constrained middle list; the footer stayed at x0/y757.6667/w342/h78.3333. A duplicate footer under the backdrop was found during review, removed, and these final screenshots recaptured.

Naming screenshots use source `f2d0f4af3ebeecfe5df9f25d2bc1a3636340531d`, integrated `9e77d9810ad642388ed8ac8bcd9a4b9725f181c0`; naming code is identical in the final source. Native edit changed the display name to `TOB UAT`, saved, survived cold restart, then restored `tob-instance-uat` and cold-read it back. No login, credentials, Host identity or organization name changed. `pair-name*` only verifies the optional input; no pairing was redeemed. Driver keystroke injection opened Expo's development menu, so native clipboard Paste was used for this nonsecret test name.

Local checks: typecheck, focused lint/format/source-policy/release-ledger checks; 74 affected focused tests plus 14 host-look/pairing-telemetry tests at f2d0 (counts overlap). After the backdrop-only fix: typecheck and 19 drawer/style tests passed. CI status is recorded in the PR, separately from these runtime checks.

Limits: no Android/physical/VoiceOver/Human acceptance; no signed-in org/guest fixture or actual named-computer pairing in this run. The previously observed Pair-modal → cloud-services root-drawer overlay issue remains unqualified; the normal cold-open path works. This is not a full navigation or authentication pass. No production change or merge.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
47 changes: 47 additions & 0 deletions .github/pr-screenshots/2174-drawer-compact/proof.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
"issue": 2174,
"pr": 2175,
"source": "dc15ffd3a7003ef0c0f4110f834f02f15a990e6c",
"integrated": "1376b50b1f8358d9d9b22c89e55901fb5a141d24",
"native": "494a20f1eb4f0666a2c90bc3c758af4e7ff5f46b",
"beforeSource": "59fc97fd7bada6d54cbae1feacc4d93d032e4c82",
"beforeIntegrated": "9a73f9c21440235d8caa6fdc9f7d65d5dc6dfde0",
"namingSource": "f2d0f4af3ebeecfe5df9f25d2bc1a3636340531d",
"namingIntegrated": "9e77d9810ad642388ed8ac8bcd9a4b9725f181c0",
"viewport": "402x874",
"locale": "en",
"fixture": "empty Computer directory and signed-out public UAT cloud service",
"passed": [
"Computers/Cloud tab selection and independent contextual Add destinations",
"fixed Notifications footer in both tabs; cloud management only in Cloud",
"default/intermediate/maximum Dynamic Type in light/dark",
"maximum text middle-list swipe exposes the address while Notifications rect remains unchanged",
"left-swipe dismissal",
"local cloud name save and cold-start persistence; exact original name restored and cold-read back",
"computer optional name input; no pairing redeemed"
],
"footerRectAtMax": {
"x": 0,
"y": 757.6666717529297,
"width": 342,
"height": 78.33331298828125
},
"unverified": [
"Android native and physical phone",
"VoiceOver and Human acceptance",
"signed-in organization/member/guest rendering on this revision",
"real computer pairing with name persistence",
"full keyboard/text-size matrix and every footer destination",
"Reduce Transparency toggle"
],
"knownCaveat": "Opening cloud-services from the native Pair modal can hide the root drawer; normal cold-open path works. Regression origin is not established; full navigation acceptance is not claimed.",
"correction": "Native review at f2d0 found duplicate footer in backdrop. dc15 removed only that duplicate; all final drawer layout screenshots and contextual Add actions were recaptured. Naming code is unchanged.",
"comparisonLimit": "Before/after use the same viewport, theme, locale and drawer fixture. The exposed underlying route differs (pairing vs invitation), so comparison is limited to the drawer.",
"cleanup": [
"original UAT display name restored and cold-read back",
"driver closed; own Metro stopped",
"qa/batch-24 and original three untracked documents preserved",
"light/large and original locale restored; task clipboard cleared",
"no account/Host/Prod writes, pairing redemption, native build or merge"
]
}
7 changes: 7 additions & 0 deletions .github/pr-screenshots/2174-drawer-tabs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Drawer tabs and Add screenshots

Real shared iOS Simulator captures for #2175, 402 × 874, English. Before and after use the same retained QA computer and signed-out public UAT configuration; there are no credentials in these images. The service address shown is the public UAT endpoint.

The before view combines both lists and three direct actions. The after views show Computers and Cloud separately and the new Add chooser. The chooser has no old modal counterpart: the old direct actions are its before state. `proof.json` binds source, integrated batch and native identities.

Navigation checks reached the invitation and pairing pages without signing in, accepting an invitation or changing pairing. Maximum-text images show wrapping and a scrollable chooser; they do not establish a complete accessibility matrix. A nested native-modal route observation remains open in the proof; Android, physical phone and Human QA are unverified. The shared environment was restored after capture.
39 changes: 39 additions & 0 deletions .github/pr-screenshots/2174-drawer-tabs/proof.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"issue": 2174,
"pr": 2175,
"source": "6292fbf41123bc583f813116e349ac2788e3871a",
"baseSource": "e8472aab4a0e22c0404f99a44d6831dcfe5d0988",
"baseBatch": "bfbcc648fa789ed551c2249b1a392f9341128f04",
"afterBatch": "06c92fc78b71643f6cdd74d42d50913ea92d640a",
"main": "648c1202c44f5a5e82ce22596682934745705cef",
"native": "494a20f1eb4f0666a2c90bc3c758af4e7ff5f46b",
"viewport": "402x874",
"locale": "English",
"environment": "shared iOS 26 Simulator, retained QA computer and signed-out public UAT configuration",
"passed": [
"Computers/Cloud selected tabs and separate directories",
"one Add target with decorative icons",
"Add close returns to selected tab",
"Add opens existing invitation page",
"Add opens existing pairing page",
"normal text light/dark actual screenshots",
"maximum text wraps; Add opens, chooser scrolls, close works"
],
"unverified": [
"Android native",
"physical phone",
"Human/VoiceOver",
"new login or invitation acceptance",
"full large-text matrix and all footer actions",
"Reduce Transparency toggle in this run"
],
"observation": "After opening Pair (native modal) and following a cloud-services deep link, Workspaces did not visibly overlay the native modal. A cold reopen to the normal cloud-services route restored the working drawer. This route is not marked passed; regression origin not established.",
"cleanup": [
"driver closed",
"own Metro stopped; 8091 free",
"qa/batch-24 restored at main648c1202c",
"light/large restored",
"three original untracked QA documents retained",
"no account, pairing or Host writes; no Prod or merge"
]
}
Loading
Loading