Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
a0b2919
feat(mobile): add trusted TOB UAT import and WorkOS sessions
DoodleBears Oct 17, 2026
7cd170b
feat(mobile): allow trusted cloud configuration text import (#2101)
DoodleBears Oct 17, 2026
2169633
docs: avoid cloud session ADR number collision (#2101)
DoodleBears Oct 17, 2026
1a699f4
docs: capture native TOB configuration import evidence (#2101)
DoodleBears Oct 17, 2026
e48712c
test: prepare real UAT sessions for native cloud verification
DoodleBears Oct 17, 2026
913aea0
test: bound native driver diagnostics and require a result
DoodleBears Oct 17, 2026
c12bc79
test: handle Hermes async fixtures and isolate simulator targets
DoodleBears Oct 17, 2026
17f6c0b
docs: record unattended native UAT session acceptance
DoodleBears Oct 17, 2026
bf91546
test: declare native UAT driver contracts for source checks
DoodleBears Oct 17, 2026
b341c64
test(mobile): drive native AuthKit callback with local emulator
DoodleBears Oct 17, 2026
b61c4e1
docs(mobile): publish bounded native browser callback evidence
DoodleBears Oct 17, 2026
027cb08
style: format browser acceptance report and counters
DoodleBears Oct 17, 2026
459c07d
docs(mobile): record real Hosted AuthKit UAT acceptance
DoodleBears Oct 17, 2026
56d53e2
feat(mobile): create and select cloud organizations
DoodleBears Oct 17, 2026
a616023
Merge current main into T1 organization slice
DoodleBears Oct 17, 2026
d9fa889
fix(mobile): bind workspace draft to selected version
DoodleBears Oct 17, 2026
f89d055
test(mobile): satisfy strict organization result indexing
DoodleBears Oct 17, 2026
d4ce602
docs: document cloud organization acceptance and resolve ADR number
DoodleBears Oct 17, 2026
494a20f
fix(mobile): retain pending organization creation on identical import
DoodleBears Oct 17, 2026
1b39324
fix(mobile): discard stale organization draft on reselection
DoodleBears Oct 17, 2026
9de7c56
docs: publish UAT mobile organization acceptance
DoodleBears Oct 17, 2026
9d337d1
feat(mobile): prepare default workspaces for ordinary cloud users
DoodleBears Oct 17, 2026
4fa835f
Merge remote-tracking branch 'origin/main' into codex/cloud-user-onbo…
DoodleBears Oct 17, 2026
00d9bcc
test(mobile): assert ordinary user role in native checkpoints
DoodleBears Oct 17, 2026
9f71dd3
docs: fix onboarding release fragment metadata
DoodleBears Oct 17, 2026
f520d81
fix(test): declare ordinary role in native fixture contract
DoodleBears Oct 17, 2026
0798329
fix(test): report actual verified instance role in UAT evidence
DoodleBears Oct 17, 2026
d94a95c
docs: publish ordinary-user multi-workspace simulator evidence
DoodleBears Oct 17, 2026
3b3ae6a
feat(mobile): create cloud channels and exchange durable text
DoodleBears Oct 17, 2026
7ceab0d
style: format channel release fragment
DoodleBears Oct 17, 2026
eccc5cf
fix(mobile): reveal cloud message input above keyboard
DoodleBears Oct 17, 2026
58d277f
fix(mobile): reserve wrapped cloud actions above keyboard
DoodleBears Oct 17, 2026
47ed7d3
style(mobile): format channel keyboard offset
DoodleBears Oct 17, 2026
f4dd6dc
fix(mobile): include keyboard prediction margin for cloud action
DoodleBears Oct 17, 2026
6704326
fix(mobile): theme cloud channel inputs in dark mode
DoodleBears Oct 17, 2026
5d2ef0f
fix(mobile): keep cloud send action compact at large text sizes
DoodleBears Oct 17, 2026
29785b3
test(mobile): publish channel UAT evidence (refs #2137)
DoodleBears Oct 17, 2026
6048b8a
feat(mobile): invite and accept cloud workspace members
DoodleBears Oct 17, 2026
4b424b5
Merge remote-tracking branch 'origin/main' into codex/2145-cloud-invi…
DoodleBears Oct 17, 2026
acfbc58
docs: resolve cloud-session ADR number collision (#2145)
DoodleBears Oct 17, 2026
0ce65b2
test(mobile): record native UAT organization invitations (#2145)
DoodleBears Oct 18, 2026
93a332a
docs: correct baseline screenshot provenance (#2145)
DoodleBears Oct 18, 2026
c146d54
feat(mobile): invite and open isolated cloud channel guests
DoodleBears Oct 18, 2026
cdc888b
fix(mobile): name the channel invitation destination clearly
DoodleBears Oct 18, 2026
77cd444
fix(mobile): pass selected channel name into invitation form
DoodleBears Oct 18, 2026
6f4d99f
fix(mobile): distinguish accepted guest access from workspace membership
DoodleBears Oct 18, 2026
250c88c
fix(mobile): use single-action keyboard spacing for guest composer
DoodleBears Oct 18, 2026
bc08a47
fix(mobile): retain prediction-bar clearance with compact guest action
DoodleBears Oct 18, 2026
55b546c
test(mobile): record UAT channel guest lifecycle evidence
DoodleBears Oct 18, 2026
f25f598
feat(mobile): provision channel Agents with private credential handoff
DoodleBears Oct 18, 2026
dc3ee2f
fix(mobile): follow source comment policy for Agent handoff (#2151)
DoodleBears Oct 18, 2026
ffaaef6
test(mobile): record channel Agent UAT lifecycle evidence (#2151)
DoodleBears Oct 18, 2026
8586130
feat(mobile): request bounded Agent health checks (#2153)
DoodleBears Oct 18, 2026
c15f5b0
docs: format channel Agent verification evidence (#2151)
DoodleBears Oct 18, 2026
81b98ea
Merge branch 'codex/2151-channel-agents' into codex/2153-agent-health…
DoodleBears Oct 18, 2026
e63bcdc
test: record native UAT Agent health check evidence (#2153)
DoodleBears Oct 18, 2026
7c4d00e
docs: record mobile work-request authority and retry boundary (#2153)
DoodleBears Oct 18, 2026
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
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 1,
"generatedAt": "2026-10-18T01:53:49.571Z",
"events": [
{
"kind": "tap",
"tMs": 1696.541015625,
"x": 201,
"y": 528,
"referenceWidth": 402,
"referenceHeight": 874
}
]
}
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.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 1,
"generatedAt": "2026-10-18T01:54:21.294Z",
"events": [
{
"kind": "tap",
"tMs": 1774.493896484375,
"x": 201,
"y": 361,
"referenceWidth": 402,
"referenceHeight": 874
}
]
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 1,
"generatedAt": "2026-10-18T01:56:25.945Z",
"events": [
{
"kind": "tap",
"tMs": 1769.397705078125,
"x": 201,
"y": 696,
"referenceWidth": 402,
"referenceHeight": 874
}
]
}
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.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"version": 1,
"generatedAt": "2026-10-18T01:58:39.612Z",
"events": [
{
"kind": "scroll",
"tMs": 137,
"x": 201,
"y": 721,
"x2": 201,
"y2": 153,
"referenceWidth": 402,
"referenceHeight": 874,
"durationMs": 400,
"contentDirection": "down",
"amount": 0.65,
"pixels": 568
}
]
}
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.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
27 changes: 27 additions & 0 deletions .github/pr-screenshots/tob-agent-health/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# T3 fixed health check — native UAT evidence

- Runtime: `8586130e5303d100e47f9f29d91e3e8cf1556012`; batch later fast-forwarded to `81b98eafc` for three inherited evidence JSON formatting changes only (no runtime changes).
- Installed SDK58 native binary: `494a20f1eb4f0666a2c90bc3c758af4e7ff5f46b`; no native inputs changed, no rebuild.
- TOB service: `23db30d9e34b8c51c72909b0a118e23d7dccf70e`, UAT version `eb945fb5-c38b-44de-8f28-dc90f17112af`, D1/Org/Channel schemas5/4/4.
- One assigned iOS Simulator; synthetic B is an ordinary organization member. Authentication fixture uses a real independent WorkOS UAT session; this is not new Hosted AuthKit/browser qualification.

## Observed path

1. Owner CLI provisioned a dedicated Agent in the shared workspace's health-mobile channel. Its local operator explicitly allowed B.
2. B tapped **Request health check**. A separate Node reference process read the public UAT channel, obtained current authorization, persisted its execution/result state, and returned platform/architecture/runtime with executionCount1. A fresh process replay reported executionCount0; server history contained one result for that request.
3. The local allow-list was cleared. B tapped the same action at maximum Dynamic Type; the next request produced LOCAL_POLICY_DENIED and executionCount0. Owner CLI independently read exactly two requests/two correlated results, with actual B and Agent authors.
4. Six default/intermediate/maximum × light/dark states exposed a reachable request action; owner creation controls were absent for B. No new text input was added. Large text scrolls long IDs and result text; screenshots05/06 show consecutive portions.
5. Cold restart, actual UI refresh and reload retained the same session/workspace and result history. Phone own logout was independently verified revoked, its latest refresh token rejected, local session cleared; A/B CLI sessions remained usable.

## Files and limits

- 01/02: member Agent and request acknowledgement; 03 is the initial history viewport (result body below the fold), 04 shows completed result.
- action-*: six request-control states;05/06 show maximum-text denial;07 shows denial after restart;08 signed out.
- Short videos01/03 show requests,02 the initial history load,04 scrolls to the retained result after restart. None records login credentials or token values.
- JSON files contain only bounded assertions; source49workerd/37Node/2wizard and mobile629passed/8skipped are separate evidence categories.

First failures retained in task history: initial CLI fixture selected an organization B had not joined and was correctly denied; first deploy smoke timed out/failure without detailed classification, subsequent read-only smoke passed; mobile suite sandbox loopback EPERM resolved by permitted local listening; coldstart selector fired before UI ready; checkpoint during active history request returned SESSION_BUSY and later passed; inherited three evidence JSON files failed CI formatting, corrected without runtime change. Do not reinterpret those first attempts as successful.

Own test Agent revoked and verified-revoked phone fixture removed. Light/large restored, own app/driver/Metro stopped, Batch18 released; shared resources preserved. UAT only, no Prod/merge.

Not qualified: Android, physical phone, Human QA, new Hosted AuthKit, WebSocket, DSH adapter, model work, two isolated Hosts or arbitrary side effects. T3 and overall goal remain open.
38 changes: 38 additions & 0 deletions .github/pr-screenshots/tob-agent-health/action-appearance.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[
{
"size": "large",
"theme": "light",
"requestReachable": true,
"ownerCreationAbsent": true
},
{
"size": "large",
"theme": "dark",
"requestReachable": true,
"ownerCreationAbsent": true
},
{
"size": "accessibility-medium",
"theme": "light",
"requestReachable": true,
"ownerCreationAbsent": true
},
{
"size": "accessibility-medium",
"theme": "dark",
"requestReachable": true,
"ownerCreationAbsent": true
},
{
"size": "accessibility-extra-extra-extra-large",
"theme": "light",
"requestReachable": true,
"ownerCreationAbsent": true
},
{
"size": "accessibility-extra-extra-extra-large",
"theme": "dark",
"requestReachable": true,
"ownerCreationAbsent": 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.
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.
8 changes: 8 additions & 0 deletions .github/pr-screenshots/tob-agent-health/cli-uat.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"stableRequestReplay": true,
"separateProcessExecutionOnce": true,
"memberAllowedByCloudButDeniedLocally": true,
"explicitLocalMemberGrant": true,
"exactThreeRequestsThreeResults": true,
"revokedAgentDenied": true
}
5 changes: 5 additions & 0 deletions .github/pr-screenshots/tob-agent-health/mobile-process.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"firstExecution": 1,
"freshProcessReplay": 0,
"processed": 1
}
8 changes: 8 additions & 0 deletions .github/pr-screenshots/tob-agent-health/mobile-readback.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"exactFourMessages": true,
"phoneMemberIdentity": true,
"requestResultCorrelation": true,
"completedOnce": true,
"localDenialZeroExecution": true,
"independentCliSessions": 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.
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.
24 changes: 24 additions & 0 deletions .github/pr-screenshots/tob-channel-agents/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Channel Agent native UAT evidence

Batch17, 2026-10-18. Product/runtime `dc3ee2f09064de7e96169199c93a5cc68da400ea`, integrated batch same SHA. Initial `f25f5988a` differed only by one source-policy-prohibited comment; it was removed before captures and the app was cold-started. Signed native binary `494a20f1eb4f0666a2c90bc3c758af4e7ff5f46b`; no native changes/build/erase. Service runtime `31e3a4a2880c05b670c2194d6b5a994dacfa297e`, UAT schema D1/Org/Channel5/4/3. Prod untouched; all PRs remain Draft/unmerged.

## Observed behavior

- `01-agent-entry`: owner channel Agent entry, before creating the test actor.
- `form-*`: six actual light/dark × default/intermediate/maximum text cases. Draft `Mobile echo` and keyboard focus retained. At maximum, input y217..274 and Create bottom365 are clear of keyboard top529. See `form-appearance-checks.json`.
- `02-created-maximum-dark`: phone created the channel Agent; after creation, the form scrolls to its top confirmation.
- `03-credential-handoff-safe`: safe management UI after explicit copy. Recording was stopped before copy; the copied credential went straight to an owner-only local file, was parsed/target-checked, and the simulator clipboard was cleared. No credential is in these artifacts.
- `04-phone-agent-reply`: phone sent `echo: Hello from the UAT phone`; independent reference Agent process read through public UAT HTTP and wrote its own author identity. Formal CLI read exactly the Human request and one Agent reply. A fresh second process produced zero new replies. See `mobile-readback.json`.
- `05-restart-retained-handoff`: cold-start and actual Refresh session retained the same private handoff. A second explicit copy was privately compared byte-for-byte as parsed data, then clipboard cleared again. The latest refresh token changed, with the same session identity.
- `06-revoke-maximum` / `07-revoked-maximum`: owner reached and used Revoke agent at maximum text size. Old credential read and send both returned `AGENT_ACCESS_DENIED`; see `mobile-revocation.json`.
- `08-signed-out`: local phone tokens removed, own remote session absent, latest refresh rejected, all pre-existing independent sessions preserved.

Recordings: `create-agent.mp4`, `phone-agent-reply.mp4`, `restart-and-revoke.mp4` (restart/refresh portion only; recording stopped before copy), `revoke-agent.mp4`. Originals remain local; committed copies are 402px/12fps without audio.

## Limits and first failures

This is an unattended synthetic UAT session driven through the production UI/API; not a new Hosted AuthKit or Human QA result. It proves HTTP text identity/replay/revocation, not model work, shell execution, WebSocket, organization-wide Agent admission, two DSH Hosts, Android or physical iPhone.

Initial driver attempts used wrong workspace label, tried an unavailable native Back control, and a hot refresh reset verified-session state. Navigation was corrected from actual snapshots and the final bundle cold-started before captures. Initial CI rejected a code comment; corrected exact-runtime CI39085993395 passed all applicable jobs. A redundant fixture cleanup request returned transport CHECK_FAILED after remote logout had already been independently verified; only the verified-revoked local phone fixture was removed. No cleanup success was inferred from that failed request.

Batch17 released: light/large restored; own app/driver/Metro stopped. Original three QA untracked docs, installed app/Keychain, native Products/rollback, phone Metro and all Hosts preserved. The revoked Agent credential remains only in a private local test file. No secret was logged or published.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[
{
"size": "large",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "large",
"theme": "dark",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-medium",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-medium",
"theme": "dark",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-extra-extra-extra-large",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-extra-extra-extra-large",
"theme": "dark",
"draftPreserved": true,
"focused": 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.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"phoneIssuedAgentVisibleInCli": true,
"exactTwoMessageHistory": true,
"agentAuthorMatches": true,
"noDuplicateReply": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"phoneRevokedOldCredentialReadDenied": true,
"phoneRevokedOldCredentialSendDenied": true
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
31 changes: 31 additions & 0 deletions .github/pr-screenshots/tob-channel-guests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Direct channel guests — native UAT evidence

Final mobile runtime: `bc08a47e6f060fe6caa6b879c4b2464e12d69e05`; compatible signed native binary: `494a20f1eb4f0666a2c90bc3c758af4e7ff5f46b`. Shared iOS 26 Simulator, English, 402 × 874 logical pixels. Service `6226ec3af48d7c446c95421290aaa280ce8a7490`, Worker version `b8e22111-d975-4ad6-81b9-6d56e32fb84c`, D1/Org/Channel schema **5/4/2**. UAT only; no native rebuild, Prod changes or merge.

## Observed behavior

- Ordinary owner A issued a direct invitation to synthetic B from the phone. B accepted from its own phone inbox and opened Guest channels. Its organization selection was unchanged; no WorkOS membership was created in A's workspace. Sibling channels and the pre-join message were inaccessible.
- B sent `B joins only this channel from phone`; independent owner CLI read the exact author/text at sequence 2. Owner CLI revoked access; a replacement invitation was accepted through B's CLI to set up rejoin testing. The same phone session could read only after the new floor (2). A deliberate new phone send committed at sequence 3; owner CLI saw both sends and B saw only sequence 3. These are distinct operations across two grants, not duplicate delivery.
- B refreshed, cold-restarted, checked its saved session and opened the same guest channel with sequence 3. Owner CLI then revoked the active grant. Reload on the old phone session visibly returned `CHANNEL_ACCESS_DENIED`; independent B CLI was denied and its guest list omitted the channel. Already rendered, previously authorized text can remain on screen; the error proves the subsequent request was refused.
- A separate replacement grant was prepared via CLI. A's phone reached and used **Revoke channel access** at maximum text size. The row became Revoked; B's independent CLI again lost access. This proves the owner UI action separately from the earlier CLI-triggered revocation.
- Independent A/B phone sessions signed out through the UI. Each latest refresh token was rejected, its WorkOS session revoked and its local session removed; all pre-existing active sessions, including A/B CLI, remained intact.
- Six owner-invitation form and six guest-composer size/theme combinations retained exact draft and focus. The final maximum guest Send bottom was about 525px, above the predictive keyboard top at 529px; an actual send succeeded. Maximum owner revoke was reached through scrolling and operated.

## Capture provenance

| Files | Runtime / meaning |
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `02-*`, `03-*`, `form-*`, `owner-invite.mp4` | `77cd444bffda36846838093ce6a25e17e7b7a951`: final channel-specific title/name and actual owner issuance; later changes affect accepted labels/composer spacing. |
| `04-*`, `05-*`, `06-*`, `recipient-accept.mp4` | `6f4d99fe3f2280584f26debefc26b53febc3a1c6`: real recipient acceptance and initial send. Video also includes the first failing composer matrix, not a final keyboard pass. |
| `message-*`, `10-*`–`13-*`, remaining videos | `bc08a47e6f060fe6caa6b879c4b2464e12d69e05`: corrected keyboard geometry, committed post-rejoin send, restart, old-phone refusal and owner revoke. Owner-revoke video ends during the request; `13-*` plus independent CLI readback prove completion. |
| `before-clipped-maximum-dark.png` | Earlier failing empty-history maximum-text composer; compare final `message-maximum-dark.png` at the same viewport/theme. |

Videos are compressed to 402px / 12fps without audio. Captures contain only synthetic example.test users and test content; no credentials or invitation tokens. The [prior workspace entry](../tob-org-invitations/member-inbox.png) is a historical organization-only comparison, not a guest feature test.

## First failures and limits

The first form used a workspace title; corrected before issuance. The first empty-history maximum-text composer clipped input beneath the fixed header. A first spacing fix exposed the input but left Send below the prediction bar (bottom549 vs529); the final compact guest action and margin passed the full six-case matrix. An earlier large upward gesture dismissed the modal, so that recording/screenshot is not used as revocation proof. A premature generic wait missed a pending request; final completion uses the actual changed control plus canonical readback. These failures are retained in the task's local evidence, not presented as first-pass success.

32 focused client/driver/style tests passed; service 41 workerd and 25 Node/CLI checks passed. Source/workerd cover idempotent retry and authorization failure paths. Native uncertain-response injection was not run. Synthetic sessions use the authorized UAT harness with normal server verification; this run does not repeat Hosted AuthKit login or test actual email delivery/new signup. Android, physical phone, Human QA, screen readers and non-Latin IME remain unqualified. Agents, WebSocket, identity-event revocation and two-Host communication are subsequent slices.

After verification, large/light were restored; own app, driver and Metro stopped; revoked phone fixture removed. Existing app data, Keychain, independent CLI fixtures, other device lanes, native Products/rollback and all Hosts were preserved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[
{
"size": "large",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "large",
"theme": "dark",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-medium",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-medium",
"theme": "dark",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-extra-extra-extra-large",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-extra-extra-extra-large",
"theme": "dark",
"draftPreserved": true,
"focused": true
}
]
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[
{
"size": "large",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "large",
"theme": "dark",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-medium",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-medium",
"theme": "dark",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-extra-extra-extra-large",
"theme": "light",
"draftPreserved": true,
"focused": true
},
{
"size": "accessibility-extra-extra-extra-large",
"theme": "dark",
"draftPreserved": true,
"focused": true
}
]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Loading