test(activation): address code-review findings on E2E flows, mock, CI
Review fixes (REQUEST_CHANGES round 1): 1. HIGH activation-negative-401.yaml: after dismissing the "Connection Failed" alert the app stays on the Add-Connection modal (handleQuickConnect's failure branch never calls router.back()), so the old `text: "No Connection"` assertion (Sessions-tab empty state) could never pass. Now asserts connect-submit-button is still visible instead. 2. MEDIUM mock-opencode-server.ts: prompt_async now parses the request body, persists the USER's message, and broadcasts it (message.updated + message.part.updated) BEFORE the canned assistant reply — matching real server behavior. Without this, the app's handleEvent strips the optimistic temp- user message when the assistant's message.updated arrives and the sent message vanishes from the transcript. activation-positive.yaml now also asserts chat-bubble-user and the user's message text are visible after the reply lands, so that regression class is actually covered. 3. MEDIUM activation-e2e.yml: timeout-minutes 15 -> 60. The job runs the same npm install + prebuild + assembleRelease + emulator pipeline that cua-smoke.yml budgets 60 min for (emulator-boot-timeout alone is 10 min). 4. MEDIUM activation-e2e.yml: replicated cua-smoke.yml's "Purge stale generated sources" step — the Gradle cache key/restore-keys are shared with that workflow, so the stale-autolinking-tree failure mode (compileReleaseJavaWithJavac against the old package id) applies here too. Verified locally: tsc --noEmit clean; npm test 81/81 pass; all three touched YAML files parse valid; mock server exercised standalone — full prompt cycle confirms GET /session/:id/message returns BOTH user and assistant messages, SSE order is message.updated(user) -> message.part.updated(user) -> busy -> message.updated(assistant) -> message.part.updated(assistant) -> idle, user events carry the sessionID/messageID fields handleEvent filters on, and --fail-auth mode returns 401. Still no emulator run in this environment. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NJKAQ6HAikWGQK7PGZ5Y4E
This commit is contained in:
15
.github/workflows/activation-e2e.yml
vendored
15
.github/workflows/activation-e2e.yml
vendored
@@ -37,7 +37,11 @@ on:
|
||||
jobs:
|
||||
activation-e2e:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
# Same npm install + expo prebuild + assembleRelease + emulator pipeline as
|
||||
# cua-smoke.yml, which budgets 60 min (emulator-boot-timeout alone is 10 min).
|
||||
# Typical runs finish well under this; the ceiling just avoids flaky kills
|
||||
# on cold Gradle caches.
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
@@ -74,6 +78,15 @@ jobs:
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
|
||||
- name: Purge stale generated sources
|
||||
# Same mitigation as cua-smoke.yml (whose Gradle cache entries this job
|
||||
# shares — the cache key/restore-keys are identical): the restore-keys
|
||||
# prefix fallback can restore a generated autolinking tree from a
|
||||
# previous package id, making compileReleaseJavaWithJavac fail against
|
||||
# the old package (ai.opencode.mobile vs cc.agentlabs.opencode). Delete
|
||||
# generated sources so prebuild + Gradle regenerate them.
|
||||
run: rm -rf android/app/build/generated android/build/generated android/app/build/intermediates
|
||||
|
||||
- name: Install Maestro CLI
|
||||
run: |
|
||||
curl -Ls "https://get.maestro.mobile.dev" | bash
|
||||
|
||||
Reference in New Issue
Block a user