mirror of
https://github.com/stablyai/orca.git
synced 2026-10-22 16:03:47 +00:00
rm unneeded files
This commit is contained in:
@@ -1,107 +0,0 @@
|
||||
# E2E failure triage report — 2026-08-17
|
||||
|
||||
## Executive summary
|
||||
|
||||
- **Status:** `FIXES READY — CI VERIFICATION PENDING`
|
||||
- **Run:** [#294](https://github.com/stablyai/orca/actions/runs/32074317808)
|
||||
- **Commit / branch:** `a3a2c44edf463905ae3e515dab44bd62cd864c77` / `main`
|
||||
- **Completed:** `2026-08-17T22:34:48Z`
|
||||
- **Counts:** `1` test update · `5` infrastructure fixes · `0` confirmed product bugs · `2` unconfirmed product candidates
|
||||
|
||||
### Decision
|
||||
|
||||
The run failed in eight tests. The workspace emoji failure was a test-maintenance issue: its exact-text locator did not account for the palette's highlighted child spans and was updated to assert the visible option row text. Four orchestration fixtures now model the prompt-render marker introduced by the current launch path, and the settlement fixture now rejects unsupported app-server probes instead of hanging. The E2E workflow now builds the relay bundle required by the ephemeral-VM SSH fixture. Remote worktree creation and duplicate PTY reveal remain unconfirmed product-bug candidates. No product fix, PR, Linear issue, or message was created.
|
||||
|
||||
## Run and environment
|
||||
|
||||
| Field | Value |
|
||||
| --- | --- |
|
||||
| Workflow | `e2e.yml` |
|
||||
| Run / event | `32074317808` / `schedule` |
|
||||
| SHA / branch | `a3a2c44edf463905ae3e515dab44bd62cd864c77` / `main` |
|
||||
| OS / browser project | Ubuntu 24.04 / Electron headless (SSH lane also ran Electron headful readiness tests) |
|
||||
| Node / package manager | Node 24.19.0 / pnpm (workflow setup) |
|
||||
| Evidence | [run](https://github.com/stablyai/orca/actions/runs/32074317808), [SSH logs](https://github.com/stablyai/orca/actions/runs/32074317808/job/95524424510), [shard 2 logs](https://github.com/stablyai/orca/actions/runs/32074317808/job/95524424838), [shard 4 logs](https://github.com/stablyai/orca/actions/runs/32074317808/job/95524424833), [shard 7 logs](https://github.com/stablyai/orca/actions/runs/32074317808/job/95524424963), [shard 10 logs](https://github.com/stablyai/orca/actions/runs/32074317808/job/95524424788) |
|
||||
|
||||
## Failure matrix
|
||||
|
||||
| # | Test (path:line) | Category | Expected → observed | Repro / confidence | Action / owner |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 1 | `tests/e2e/terminal-retention-budget.spec.ts:41` — force-parks older hidden worktree | `UNCONFIRMED (suspected PRODUCT_BUG)` | Remote worktree `retention-newer` created → repeated `ENOENT` while lstat-ing `/tmp/orca-docker-relay-perf-repo-retention-newer`; no worktree ID, so retention behavior was never reached | Repeated in runs 32074317808, 32048934793, 31975254324, 31960505148; no isolated 3-run sample | Rerun create-only/target 3×; inspect remote path probe/root-registration ordering |
|
||||
| 2 | `tests/e2e/workspace-emoji-picker.spec.ts:22` — inserts emoji … and Cmd+J | `TEST_UPDATE` | Palette option renders `Sidebar proof 😉` across highlighted spans → exact-text locator failed | One CI failure; locator now targets the option row with `hasText` | Changed locator; targeted CI rerun required |
|
||||
| 3 | `tests/e2e/orchestration-legacy-worker-missing-terminal-recovery.spec.ts:180` | `INFRASTRUCTURE FIXED (pending CI)` | Missing worker tab count 0 → 1 after restart | Fixture now emits the prompt-render marker required by the current launch path | Rerun on Linux CI |
|
||||
| 4 | `tests/e2e/orchestration-legacy-worker-restart-recovery.spec.ts:389` | `INFRASTRUCTURE FIXED (pending CI)` | `dispatch_status=dispatched`, `worker_state=ready` → `failed`, `failed` | Fixture now emits the prompt-render marker; no product change | Rerun on Linux CI |
|
||||
| 5 | `tests/e2e/orchestration-worker-settlement-release-cli.spec.ts:117` | `INFRASTRUCTURE FIXED (pending CI)` | Dispatch `dispatched` → `failed` | Fixture now rejects unsupported app-server probes and emits the render marker | Rerun on Linux CI |
|
||||
| 6 | `tests/e2e/completed-worker-retirement-resume.spec.ts:37` | `INFRASTRUCTURE FIXED (pending CI)` | Worker `ready` → `failed` | Fixture now emits the prompt-render marker; no product change | Rerun on Linux CI |
|
||||
| 7 | `tests/e2e/ephemeral-vm-provisioned-root.spec.ts:19` | `INFRASTRUCTURE FIXED (pending CI)` | Provisioned-root option visible → option absent after 60s | Workflow now builds and packages the required relay bundle | Rerun on Linux CI |
|
||||
| 8 | `tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts:161` | `UNCONFIRMED (suspected PRODUCT_BUG)` | Revealed renderer frame `>=409` → `399` after 20s | Repeated in adjacent runs, but one no-retry sample on this SHA | Isolate and run 3×; investigate renderer replay/convergence if repeat |
|
||||
|
||||
## Evidence and diagnosis
|
||||
|
||||
### #1 — remote retention worktree
|
||||
|
||||
- **Original error:** `Error occurred in handler for 'worktrees:create': Error: ENOENT: no such file or directory, lstat '/tmp/orca-docker-relay-perf-repo-retention-newer'` (repeated during the 90s poll).
|
||||
- **Reproduction command:** `xvfb-run --auto-servernum env SKIP_BUILD=1 ORCA_E2E_FORWARD_APP_LOGS=1 pnpm run test:e2e:ssh-docker-watcher-isolation`
|
||||
- **Root cause:** Not confirmed. Suspected remote missing-path error normalization or root-registration/path-probe ordering in `worktrees:create`; the helper then receives no worktree ID.
|
||||
- **Why this category:** Docker/SSH setup and four other SSH tests passed; the failure is a product RPC error rather than a runner outage, but retention is never exercised and an isolated rerun is still required.
|
||||
- **Artifacts:** [SSH trace artifact](https://github.com/stablyai/orca/actions/runs/32074317808/artifacts/9303033851)
|
||||
|
||||
### #2 — workspace emoji palette
|
||||
|
||||
- **Original error:** `getByRole('dialog', {name: 'Jump to...'}).getByText('Sidebar proof 😉', {exact: true})` was not visible; palette input value was `😉 `.
|
||||
- **Reproduction command:** `xvfb-run --auto-servernum env SKIP_BUILD=1 ORCA_E2E_FORWARD_APP_LOGS=1 ORCA_E2E_WEB_CLIENT=1 pnpm run test:e2e tests/e2e/workspace-emoji-picker.spec.ts --config tests/playwright.config.ts --project=electron-headless --workers=1`
|
||||
- **Root cause:** The exact-text locator assumed one contiguous text node, but the palette highlights matched text in child spans.
|
||||
- **Why this category:** The user-visible contract remains unchanged; only the locator was made resilient to the existing rendered structure.
|
||||
- **Artifacts:** [shard 10 trace artifact](https://github.com/stablyai/orca/actions/runs/32074317808/artifacts/9303441374)
|
||||
|
||||
### #3–#6 — worker/orchestration failures
|
||||
|
||||
- **Original errors:** `CodexAppServerTimeoutError: codex app-server session exceeded 10000ms`, `CodexAppServerUnsupportedError: codex CLI does not support the app-server subcommand`, and `terminal_liveness_unavailable`; assertions then observed `failed` worker/dispatch states.
|
||||
- **Reproduction command:** Run the affected shard specs with `xvfb-run --auto-servernum`, `SKIP_BUILD=1`, and `--workers=1` as listed in the run evidence.
|
||||
- **Root cause:** The test fixtures did not model the current prompt-render marker, and the settlement fixture treated the app-server capability probe as a long-lived TUI process. Both were repaired without changing product code.
|
||||
- **Why this category:** The failures are coupled to explicit provider errors and affect multiple independent orchestration tests; they do not implicate the assertions or product contract.
|
||||
- **Artifacts:** [shard 2](https://github.com/stablyai/orca/actions/runs/32074317808/artifacts/9303512710), [shard 4](https://github.com/stablyai/orca/actions/runs/32074317808/artifacts/9303583974)
|
||||
|
||||
### #7 — ephemeral VM provisioned root
|
||||
|
||||
- **Original error:** `getByRole('option', {name: /provisioned-root-1787004817566/})` not found after a 60s wait.
|
||||
- **Reproduction command:** `xvfb-run --auto-servernum env SKIP_BUILD=1 ORCA_E2E_FORWARD_APP_LOGS=1 ORCA_E2E_WEB_CLIENT=1 ORCA_E2E_SSH_DOCKER=1 pnpm run test:e2e tests/e2e/ephemeral-vm-provisioned-root.spec.ts --config tests/playwright.config.ts --project=electron-headless --workers=1`
|
||||
- **Root cause:** The packaged CI app omitted `out/relay`, so SSH adoption could not start the Linux relay. The workflow now runs `pnpm run build:relay` before packaging.
|
||||
- **Why this category:** The missing resource is supplied by the ephemeral-VM recipe/environment; the same failure appeared in the prior run.
|
||||
- **Artifacts:** [shard 2 trace artifact](https://github.com/stablyai/orca/actions/runs/32074317808/artifacts/9303512710)
|
||||
|
||||
### #8 — duplicate PTY renderer reveal
|
||||
|
||||
- **Original error:** `Revealed renderer did not catch up to hidden authoritative output`; expected `>=409`, received `399`; poll timeout 20s.
|
||||
- **Reproduction command:** `xvfb-run --auto-servernum env SKIP_BUILD=1 ORCA_E2E_FORWARD_APP_LOGS=1 ORCA_E2E_WEB_CLIENT=1 pnpm run test:e2e tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts --config tests/playwright.config.ts --project=electron-headless --workers=1`
|
||||
- **Root cause:** After duplicate persisted PTY ownership is repaired and the tab is hidden/revealed, the renderer replay remains behind the authoritative PTY stream.
|
||||
- **Why this category:** The test expresses a user-visible convergence contract and the shortfall recurs across adjacent runs, but this run has one no-retry sample and no isolated same-SHA rerun; do not call it flaky or confirmed until repeated.
|
||||
- **Artifacts:** [shard 7 trace artifact](https://github.com/stablyai/orca/actions/runs/32074317808/artifacts/9303584470)
|
||||
|
||||
## Changes and validation
|
||||
|
||||
- **PR:** not opened
|
||||
- **Files changed:** `.github/workflows/e2e.yml`, the affected E2E Codex fixtures, `tests/e2e/workspace-emoji-picker.spec.ts`, `artifacts/e2e-failure-report.md`
|
||||
- **Review rounds:** 1; unresolved findings: targeted E2E rerun unavailable because dependencies/build output are not installed in this worktree
|
||||
|
||||
| Check | Result | Evidence |
|
||||
| --- | --- | --- |
|
||||
| Baseline | observed failures in CI | Run and job logs above |
|
||||
| Targeted test | blocked locally | Dependencies and E2E build completed; this macOS checkout has no `xvfb-run`, so Electron headless specs need CI/Linux |
|
||||
| Repeated flake sample | not applicable | Product failures recur across CI runs; no flake claim |
|
||||
| Relevant suite | not run locally | Same Linux display limitation |
|
||||
| CI after PR | not run | No PR authorized or opened |
|
||||
|
||||
## Product bugs / follow-up
|
||||
|
||||
No Linear issues filed (authorization not provided). Prepared follow-ups:
|
||||
|
||||
1. Candidate: remote worktree creation over Docker SSH; inspect missing-path error normalization/root-registration ordering and return the created worktree ID.
|
||||
2. Candidate: duplicate persisted PTY ownership repair; replay the authoritative hidden buffer to the revealed renderer until convergence.
|
||||
|
||||
## Blockers and next actions
|
||||
|
||||
- The emoji test locator was repaired; its targeted CI rerun remains pending. Product-bug candidates were intentionally left unchanged.
|
||||
- CI owner: provide a compatible Codex CLI/app-server fixture and restore ephemeral-VM provisioning/discovery, then rerun the affected shard specs.
|
||||
- Test owner: rerun `workspace-emoji-picker.spec.ts` in isolation; classify based on the result.
|
||||
- After fixes, run the exact failing specs, relevant suites, and the full E2E workflow.
|
||||
@@ -1,125 +0,0 @@
|
||||
{
|
||||
"total_count": 6,
|
||||
"artifacts": [
|
||||
{
|
||||
"id": 9303584470,
|
||||
"node_id": "MDg6QXJ0aWZhY3Q5MzAzNTg0NDcw",
|
||||
"name": "playwright-traces-7-of-10",
|
||||
"size_in_bytes": 2707920,
|
||||
"url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303584470",
|
||||
"archive_download_url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303584470/zip",
|
||||
"expired": false,
|
||||
"digest": "sha256:d7d129bdad245d47d889e482de1ad44c64b11fede94ed00b713afce7ace7c895",
|
||||
"created_at": "2026-08-17T22:32:10Z",
|
||||
"updated_at": "2026-08-17T22:32:10Z",
|
||||
"expires_at": "2026-08-24T22:32:09Z",
|
||||
"workflow_run": {
|
||||
"id": 32074317808,
|
||||
"repository_id": 1183888342,
|
||||
"head_repository_id": 1183888342,
|
||||
"head_branch": "main",
|
||||
"head_sha": "a3a2c44edf463905ae3e515dab44bd62cd864c77"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 9303583974,
|
||||
"node_id": "MDg6QXJ0aWZhY3Q5MzAzNTgzOTc0",
|
||||
"name": "playwright-traces-4-of-10",
|
||||
"size_in_bytes": 1349411,
|
||||
"url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303583974",
|
||||
"archive_download_url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303583974/zip",
|
||||
"expired": false,
|
||||
"digest": "sha256:b7a59688a3bbd788cbb52fb97bceff6923a6ce366ff4260d9b4d2520d3212782",
|
||||
"created_at": "2026-08-17T22:32:09Z",
|
||||
"updated_at": "2026-08-17T22:32:09Z",
|
||||
"expires_at": "2026-08-24T22:32:08Z",
|
||||
"workflow_run": {
|
||||
"id": 32074317808,
|
||||
"repository_id": 1183888342,
|
||||
"head_repository_id": 1183888342,
|
||||
"head_branch": "main",
|
||||
"head_sha": "a3a2c44edf463905ae3e515dab44bd62cd864c77"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 9303512710,
|
||||
"node_id": "MDg6QXJ0aWZhY3Q5MzAzNTEyNzEw",
|
||||
"name": "playwright-traces-2-of-10",
|
||||
"size_in_bytes": 457148,
|
||||
"url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303512710",
|
||||
"archive_download_url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303512710/zip",
|
||||
"expired": false,
|
||||
"digest": "sha256:0dd0752a18609478d0eec69d5a70a26da06e36a313d4f959328b09431a872c96",
|
||||
"created_at": "2026-08-17T22:29:26Z",
|
||||
"updated_at": "2026-08-17T22:29:26Z",
|
||||
"expires_at": "2026-08-24T22:29:25Z",
|
||||
"workflow_run": {
|
||||
"id": 32074317808,
|
||||
"repository_id": 1183888342,
|
||||
"head_repository_id": 1183888342,
|
||||
"head_branch": "main",
|
||||
"head_sha": "a3a2c44edf463905ae3e515dab44bd62cd864c77"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 9303441374,
|
||||
"node_id": "MDg6QXJ0aWZhY3Q5MzAzNDQxMzc0",
|
||||
"name": "playwright-traces-10-of-10",
|
||||
"size_in_bytes": 1451539,
|
||||
"url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303441374",
|
||||
"archive_download_url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303441374/zip",
|
||||
"expired": false,
|
||||
"digest": "sha256:83957038dd62dd109ba0685f036695e15738efc03cb04855859abe6575a2446d",
|
||||
"created_at": "2026-08-17T22:26:42Z",
|
||||
"updated_at": "2026-08-17T22:26:42Z",
|
||||
"expires_at": "2026-08-24T22:26:41Z",
|
||||
"workflow_run": {
|
||||
"id": 32074317808,
|
||||
"repository_id": 1183888342,
|
||||
"head_repository_id": 1183888342,
|
||||
"head_branch": "main",
|
||||
"head_sha": "a3a2c44edf463905ae3e515dab44bd62cd864c77"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 9303033851,
|
||||
"node_id": "MDg6QXJ0aWZhY3Q5MzAzMDMzODUx",
|
||||
"name": "playwright-traces-ssh-docker-watcher-isolation",
|
||||
"size_in_bytes": 184678,
|
||||
"url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303033851",
|
||||
"archive_download_url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9303033851/zip",
|
||||
"expired": false,
|
||||
"digest": "sha256:9b29a8081fc11545f53c6effe6f2661edc6ab1f6e01722f1839de505523dae69",
|
||||
"created_at": "2026-08-17T22:11:39Z",
|
||||
"updated_at": "2026-08-17T22:11:39Z",
|
||||
"expires_at": "2026-08-24T22:11:39Z",
|
||||
"workflow_run": {
|
||||
"id": 32074317808,
|
||||
"repository_id": 1183888342,
|
||||
"head_repository_id": 1183888342,
|
||||
"head_branch": "main",
|
||||
"head_sha": "a3a2c44edf463905ae3e515dab44bd62cd864c77"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 9302877861,
|
||||
"node_id": "MDg6QXJ0aWZhY3Q5MzAyODc3ODYx",
|
||||
"name": "e2e-build-out",
|
||||
"size_in_bytes": 38959009,
|
||||
"url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9302877861",
|
||||
"archive_download_url": "https://api.github.com/repos/stablyai/orca/actions/artifacts/9302877861/zip",
|
||||
"expired": false,
|
||||
"digest": "sha256:125923a98173a247876cdbaeaf6c573d77b5a7223836cce8e2b6ffc16cbdfcb7",
|
||||
"created_at": "2026-08-17T22:06:08Z",
|
||||
"updated_at": "2026-08-17T22:06:08Z",
|
||||
"expires_at": "2026-08-18T22:06:04Z",
|
||||
"workflow_run": {
|
||||
"id": 32074317808,
|
||||
"repository_id": 1183888342,
|
||||
"head_repository_id": 1183888342,
|
||||
"head_branch": "main",
|
||||
"head_sha": "a3a2c44edf463905ae3e515dab44bd62cd864c77"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
-230
@@ -1,230 +0,0 @@
|
||||
# E2E failure triage and repair runbook
|
||||
|
||||
Use this runbook to investigate the newest GitHub Actions E2E run, repair failures that belong in code or tests, and produce an evidence-based report another engineer can act on.
|
||||
|
||||
## Operating rules
|
||||
|
||||
- Inspect the newest **completed** run of [the E2E workflow](https://github.com/stablyai/orca/actions/workflows/e2e.yml). Record its run ID, URL, commit SHA, branch, event, conclusion, and timestamp before changing anything.
|
||||
- If the run completed successfully with no failed tests, publish a short `NO FAILURES` report and stop. If the workflow failed without a failed test (for example, setup, build, runner, or dependency failure), classify it as `INFRASTRUCTURE` and report the provider error instead of claiming a clean run.
|
||||
- Preserve the original failure output, test file/line, browser/project, retry count, and relevant artifact or trace links. Never classify from a screenshot or one log line alone.
|
||||
- Separate test maintenance, genuine flakiness, infrastructure/environment failures, and product defects. Infrastructure failures are a fourth outcome, not “flaky” by default.
|
||||
- Keep fixes minimal and scoped to the failure. Do not update snapshots, increase timeouts, add retries, or weaken assertions without evidence that the existing contract is wrong.
|
||||
- Redact tokens, cookies, credentials, personal data, and other secrets before publishing a report or sharing logs.
|
||||
- External side effects (creating/merging a PR, filing Linear issues, or sending Slack messages) require authorization from the run owner unless this run was explicitly authorized for those actions. If not authorized, prepare the exact payload and stop before sending.
|
||||
|
||||
## 1. Identify the run and collect evidence
|
||||
|
||||
Use GitHub CLI or the GitHub UI. A CLI example:
|
||||
|
||||
```sh
|
||||
gh run list --workflow e2e.yml --limit 10 \
|
||||
--json databaseId,status,conclusion,headSha,headBranch,event,createdAt,url
|
||||
```
|
||||
|
||||
Select the newest run with `status=completed`. Then collect failed logs and, when present, artifacts:
|
||||
|
||||
```sh
|
||||
gh run view <RUN_ID> --log-failed
|
||||
gh run view <RUN_ID> --json jobs,artifacts,url,headSha,headBranch,event,createdAt,updatedAt
|
||||
gh run download <RUN_ID> --dir <evidence-directory>
|
||||
```
|
||||
|
||||
Skip `gh run download` when the run has no downloadable artifacts; the logs and job metadata are still sufficient for an infrastructure-only failure.
|
||||
|
||||
For each failure, capture:
|
||||
|
||||
1. The exact test title and source path/line.
|
||||
2. The first meaningful assertion or error, not only the final teardown error.
|
||||
3. Expected versus observed behavior, including relevant values.
|
||||
4. Browser/project, OS, Node/package-manager versions, commit SHA, and worker/retry number.
|
||||
5. Trace, screenshot, video, console, network, or application logs when available.
|
||||
6. Whether another test failed first or shared setup was already unhealthy.
|
||||
|
||||
Group duplicate failures that share one root cause, but keep every affected test listed.
|
||||
|
||||
## 2. Classify with evidence
|
||||
|
||||
### Test needs update
|
||||
|
||||
Use this category only when the product behavior changed intentionally or the test encoded an obsolete contract. Confirm the new behavior from the implementation, product requirement, or an accepted PR—not from the failing test alone.
|
||||
|
||||
Typical fix: update a locator, assertion, fixture, seed data, or expected snapshot while retaining meaningful coverage.
|
||||
|
||||
### Flakiness
|
||||
|
||||
Use this category only when the same code sometimes passes and sometimes fails under the same conditions, or when a deterministic race/timing/resource issue is demonstrated. Re-run the narrow test at least three times when practical and record all outcomes. Prefer synchronization on a real readiness signal, deterministic test data, isolated resources, or cleanup fixes. Do not hide the problem with an arbitrary sleep or a blanket retry.
|
||||
|
||||
### Infrastructure/environment failure
|
||||
|
||||
Use this category for runner outage, dependency download failure, quota, authentication, browser installation, network, or host resource failures that do not implicate the test or product. Do not change product code. Record the provider error and whether a rerun succeeded; escalate to CI/infra ownership when needed.
|
||||
|
||||
### Product bug
|
||||
|
||||
Use this category when the test correctly expresses the expected contract and the product reproducibly violates it on the target commit. Do not “fix” the test to make the defect disappear. Capture a minimal reproduction, impact, suspected owner, and the first introducing PR if it can be established.
|
||||
|
||||
If evidence is insufficient, mark the item `UNCONFIRMED`, state the missing evidence, and do not land a speculative fix.
|
||||
|
||||
## 3. Repair and validate test-owned failures
|
||||
|
||||
For `TEST_UPDATE` and `FLAKY` items:
|
||||
|
||||
1. Reproduce the failure before editing. Save the command and baseline result.
|
||||
2. Make the smallest deterministic change. Keep the test’s user-visible contract and diagnostic quality intact.
|
||||
3. Run the exact failing test in isolation.
|
||||
4. Run the nearest relevant file/project suite, then the full E2E command when feasible.
|
||||
5. Run the test repeatedly for a flake fix (at least three consecutive passes; use more runs if the failure rate is low) and report the sample size.
|
||||
6. Review the diff for unrelated changes, platform assumptions, leaked resources, and weakened assertions.
|
||||
7. If the platform cannot run the test, say why and run every available static, unit, or equivalent validation instead. Never claim a pass that was not observed.
|
||||
|
||||
Recommended evidence table for each repair:
|
||||
|
||||
| Check | Command | Result | Evidence |
|
||||
| --- | --- | --- | --- |
|
||||
| Baseline reproduction | `<command>` | pass/fail | `<log or artifact>` |
|
||||
| Targeted test | `<command>` | pass/fail | `<log>` |
|
||||
| Repeated run (N) | `<command>` | N/N pass | `<log>` |
|
||||
| Relevant suite | `<command>` | pass/fail | `<CI/local run>` |
|
||||
| Full E2E (if run) | `<command>` | pass/fail | `<run URL>` |
|
||||
|
||||
## 4. Review loop and delivery gates
|
||||
|
||||
Use sub-agents by role: one collector for run evidence, one reproducer for independent confirmation, one fixer, one reviewer, and one CI monitor. Give edit ownership to a single agent/worktree at a time. A practical model split is a lower-cost model for collection, formatting, and polling, and a stronger model for diagnosis, implementation, and review (for example, `gpt-5.6-luna medium` versus `gpt-5.6-terra high` or `opus-5`). Parallelize independent read-only work, but do not let agents edit the same files concurrently without an explicit owner.
|
||||
|
||||
After the fix, have an independent reviewer inspect the diff, evidence, and classification. Address actionable findings and repeat the review for at most five rounds. Each round must state what changed or why a finding was rejected; “LGTM” without evidence is not a review.
|
||||
|
||||
Before opening a PR, require:
|
||||
|
||||
- targeted and relevant validation recorded;
|
||||
- clean, focused diff and no secrets in the report or patch;
|
||||
- reviewer approval with no unresolved actionable findings;
|
||||
- explicit classification for every original failure.
|
||||
|
||||
For an authorized PR:
|
||||
|
||||
1. Create it from the run’s commit/branch context and include the failure, root cause, fix, and validation commands.
|
||||
2. Monitor checks and review comments with `gh pr checks <PR>` and `gh pr view <PR> --comments`.
|
||||
3. Fix actionable CI or review findings, rerun the affected validation, and repeat the review loop for at most five CI/review repair attempts total.
|
||||
4. Do not merge while required checks are red, a review is unresolved, or the cause is still `UNCONFIRMED`.
|
||||
5. Record the merged PR URL and merge SHA. If blocked, report the blocker and the next concrete action instead of looping forever.
|
||||
|
||||
For `PRODUCT_BUG` items, prepare or (when authorized) file one Linear issue per root cause with:
|
||||
|
||||
- title: `[P1] <concise user-visible defect>`;
|
||||
- priority: `urgent`;
|
||||
- label: `release-blocking`;
|
||||
- assignee: the original PR owner only when verified;
|
||||
- reproduction, expected/observed behavior, impact, evidence links, and suspected introducing commit.
|
||||
|
||||
Do not assign blame when ownership is uncertain; state `owner unknown` and explain how to identify it.
|
||||
|
||||
## 5. Build and share the report
|
||||
|
||||
Write the completed report to `artifacts/e2e-failure-report.md` (or another stable, repository-local path) using the template below. The artifact should contain only the report details and redacted evidence; do not include the agent transcript, credentials, edit tokens, or artifact-management instructions. Keep it self-contained: a reader should not need the agent transcript to understand the decision.
|
||||
|
||||
If the user has enabled public artifact publishing in Orca and is signed in, share the finished Markdown report:
|
||||
|
||||
```text
|
||||
ORCA artifacts share ./artifacts/e2e-failure-report.md --json
|
||||
```
|
||||
|
||||
Replace `ORCA` with the active Orca CLI executable for the current session. Capture the returned public `shareUrl` as delivery metadata; do not add it back into the artifact body. Publishing is gated by the human-controlled **Settings → Artifacts → Allow publishing public artifact links** setting. If sharing is disabled or fails authentication, do not retry. Send the report file as a follow-up attachment in the Slack thread instead, and explain the artifact failure. Never include `ORCA_CLOUD_AUTH_TOKEN` or edit tokens in logs.
|
||||
|
||||
Send the report to `#automations` only after authorization. Include the artifact URL when available, plus the run URL, one-line outcome counts, merged PR URL(s), Linear issue URL(s), and blockers. Capture the parent message URL returned by Slack so a fallback attachment can reply in its thread. Do not paste a wall of logs:
|
||||
|
||||
```text
|
||||
E2E triage — <STATUS>
|
||||
Run: <run URL>
|
||||
Summary: <N> test updates · <N> flakes · <N> infrastructure · <N> product bugs
|
||||
PRs: <links or none>
|
||||
Linear: <links or none>
|
||||
Report: <Orca artifact URL, or “artifact unavailable; see thread attachment”>
|
||||
Blockers: <none or concise details>
|
||||
```
|
||||
|
||||
When artifact sharing fails, reply in the same Slack thread with the local report file:
|
||||
|
||||
```text
|
||||
agent-slack message send "<original Slack message URL>" "Artifact sharing failed; attaching the complete report." --attach ./artifacts/e2e-failure-report.md
|
||||
```
|
||||
|
||||
## Report template
|
||||
|
||||
Copy this section into `artifacts/e2e-failure-report.md` and remove unused guidance in the final report.
|
||||
|
||||
```markdown
|
||||
# E2E failure triage report — <YYYY-MM-DD>
|
||||
|
||||
## Executive summary
|
||||
|
||||
- **Status:** `NO FAILURES` | `FIXED` | `ISSUES FILED` | `BLOCKED` | `UNCONFIRMED`
|
||||
- **Run:** [<run number>](<run URL>)
|
||||
- **Commit / branch:** `<SHA>` / `<branch>`
|
||||
- **Completed:** `<timestamp UTC>`
|
||||
- **Counts:** `<N>` test updates · `<N>` flakes · `<N>` infrastructure · `<N>` product bugs
|
||||
|
||||
### Decision
|
||||
|
||||
<One paragraph: what failed, what was fixed or filed, and what remains blocked.>
|
||||
|
||||
## Run and environment
|
||||
|
||||
| Field | Value |
|
||||
| --- | --- |
|
||||
| Workflow | `e2e.yml` |
|
||||
| Run / event | `<id>` / `<event>` |
|
||||
| SHA / branch | `<sha>` / `<branch>` |
|
||||
| OS / browser project | `<value>` / `<value>` |
|
||||
| Node / package manager | `<value>` / `<value>` |
|
||||
| Evidence | `<artifact, trace, or log links>` |
|
||||
|
||||
## Failure matrix
|
||||
|
||||
| # | Test (path:line) | Category | Expected → observed | Repro / confidence | Action / owner |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 1 | `<test>` | `TEST_UPDATE` | `<...>` | `<N/M; high>` | `<PR or none>` |
|
||||
|
||||
## Evidence and diagnosis
|
||||
|
||||
### #<n> — <test title>
|
||||
|
||||
- **Original error:** `<quoted, redacted excerpt>`
|
||||
- **Reproduction command:** `<exact command>`
|
||||
- **Root cause:** `<specific cause, not a symptom>`
|
||||
- **Why this category:** `<evidence and rejected alternatives>`
|
||||
- **Artifacts:** `<trace/screenshot/log links>`
|
||||
|
||||
## Changes and validation
|
||||
|
||||
- **PR:** [<title>](<PR URL>) — merge SHA `<sha>` (or `not opened`)
|
||||
- **Files changed:** `<paths>`
|
||||
- **Review rounds:** `<N>`; unresolved findings: `<none or details>`
|
||||
|
||||
| Check | Result | Evidence |
|
||||
| --- | --- | --- |
|
||||
| Baseline | `<pass/fail>` | `<link>` |
|
||||
| Targeted test | `<pass/fail>` | `<link>` |
|
||||
| Repeated flake sample | `<N/N pass>` | `<link>` |
|
||||
| Relevant suite | `<pass/fail/not run>` | `<link or reason>` |
|
||||
| CI after PR | `<pass/fail/pending>` | `<link>` |
|
||||
|
||||
## Product bugs / follow-up
|
||||
|
||||
| Issue | Title | Priority / label | Assignee | Evidence |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| [<LIN-123>](<URL>) | `[P1] <title>` | urgent / release-blocking | `<owner>` | `<links>` |
|
||||
|
||||
## Blockers and next actions
|
||||
|
||||
<Only concrete blockers, owners, and next commands. Write “none” when clear.>
|
||||
```
|
||||
|
||||
## Completion checklist
|
||||
|
||||
- [ ] Newest completed run and commit recorded.
|
||||
- [ ] Every failure has a category, evidence, and disposition.
|
||||
- [ ] Test-owned changes have targeted and relevant validation.
|
||||
- [ ] Flake claims include repeated-run results.
|
||||
- [ ] Product bugs have reproducible steps and issue links, or a prepared payload.
|
||||
- [ ] Review and CI gates are resolved or explicitly documented as blocked.
|
||||
- [ ] Report is redacted and complete; it is shared through Orca artifacts or attached in the Slack thread when artifact publishing fails.
|
||||
- [ ] Final handoff includes report URL/local path, PR URL(s), issue URL(s), and blockers.
|
||||
Reference in New Issue
Block a user