fix(e2e): assert echo runtime received A2A request in chat-desktop specs (core#2796 follow-up) #2837

Merged
devops-engineer merged 1 commits from fix/2796-e2e-server-received-assertion into main 2026-06-14 09:34:13 +00:00
Member

Follow-up to #2830 / #2796.

#2830 removed the obsolete chat-desktop activity-log assertion and its echo-runtime delay. The E2E Chat workflow still listed "echo round-trip never asserts the server received the request" as a promotion blocker. This PR wires EchoRuntime.lastRequest into the desktop chat round-trip tests so an optimistic client-side render cannot green the lane without a real A2A request reaching the fixture.

Changes:

  • Expose echoRuntime to chat-desktop.spec.ts tests instead of hiding it in the cleanup closure.
  • Assert lastRequest is populated and matches the sent text for text, history, and file-attachment round-trips.
  • Move the server-received item from STILL BLOCKS PROMOTION to NOW FAIL-CLOSED in .gitea/workflows/e2e-chat.yml.

Local verification:

  • npx eslint canvas/e2e/chat-desktop.spec.ts canvas/e2e/fixtures/echo-runtime.ts clean (pre-existing warnings only).
  • npx playwright test canvas/e2e/chat-desktop.spec.ts --list reports 7 tests.
  • .gitea/workflows/e2e-chat.yml YAML validated.

Co-Authored-By: Claude noreply@anthropic.com

Follow-up to #2830 / #2796. #2830 removed the obsolete chat-desktop activity-log assertion and its echo-runtime delay. The E2E Chat workflow still listed "echo round-trip never asserts the server received the request" as a promotion blocker. This PR wires `EchoRuntime.lastRequest` into the desktop chat round-trip tests so an optimistic client-side render cannot green the lane without a real A2A request reaching the fixture. Changes: - Expose `echoRuntime` to `chat-desktop.spec.ts` tests instead of hiding it in the cleanup closure. - Assert `lastRequest` is populated and matches the sent text for text, history, and file-attachment round-trips. - Move the server-received item from `STILL BLOCKS PROMOTION` to `NOW FAIL-CLOSED` in `.gitea/workflows/e2e-chat.yml`. Local verification: - `npx eslint canvas/e2e/chat-desktop.spec.ts canvas/e2e/fixtures/echo-runtime.ts` clean (pre-existing warnings only). - `npx playwright test canvas/e2e/chat-desktop.spec.ts --list` reports 7 tests. - `.gitea/workflows/e2e-chat.yml` YAML validated. Co-Authored-By: Claude <noreply@anthropic.com>
agent-dev-a added 1 commit 2026-06-14 08:13:27 +00:00
fix(e2e): assert echo runtime received A2A request in chat-desktop specs (core#2796 follow-up)
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 7s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 5s
Harness Replays / detect-changes (pull_request) Successful in 5s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 5s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
Handlers Postgres Integration / detect-changes (pull_request) Successful in 6s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 6s
sop-checklist / review-refire (pull_request_target) Has been skipped
lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request) Successful in 5s
Harness Replays / Harness Replays (pull_request) Successful in 1s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 2s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 7s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
reserved-path-review / reserved-path-review (pull_request_target) Failing after 8s
E2E API Smoke Test / detect-changes (pull_request) Successful in 16s
sop-checklist / all-items-acked (pull_request_target) Successful in 8s
gate-check-v3 / gate-check (pull_request_target) Failing after 12s
CI / Detect changes (pull_request) Successful in 21s
lint-setup-go-cache / lint-setup-go-cache (pull_request) Successful in 15s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 21s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 4s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 15s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 20s
CI / Platform (Go) (pull_request) Successful in 2s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 2s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 22s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 25s
E2E Chat / detect-changes (pull_request) Successful in 29s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 29s
lint-no-coe-on-required / lint-no-coe-on-required (pull_request) Successful in 29s
E2E Chat / E2E Chat (pull_request) Successful in 4s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 32s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 36s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 33s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 25s
CI / Canvas (Next.js) (pull_request) Successful in 3m55s
CI / Canvas Deploy Status (pull_request) Successful in 0s
CI / all-required (pull_request) Successful in 3s
security-review / approved (pull_request_target) Approved via pull_request_review trigger
qa-review / approved (pull_request_target) Approved via pull_request_review trigger
reserved-path-review / reserved-path-review (pull_request_review) Successful in 8s
security-review / approved (pull_request_review) Successful in 9s
qa-review / approved (pull_request_review) Successful in 10s
audit-force-merge / audit (pull_request_target) Successful in 8s
37eb4bffd3
PR #2830 removed the obsolete activity-log assertion and its echo-runtime
 delay, but the E2E Chat promotion-readiness note still listed "server
 never asserts it received the request" as blocking promotion. Wire the
 exposed EchoRuntime.lastRequest into the desktop chat round-trip tests so
 an optimistic client-side render cannot green the lane without a real
 A2A request reaching the fixture.

- Expose echoRuntime to chat-desktop.spec.ts tests instead of hiding it
  inside the cleanup closure.
- Assert lastRequest is populated and matches the sent text for text,
  history, and file-attachment round-trips.
- Move the server-received item from STILL BLOCKS PROMOTION to NOW
  FAIL-CLOSED in e2e-chat.yml.

Co-Authored-By: Claude <noreply@anthropic.com>
agent-dev-a requested review from agent-reviewer-cr2 2026-06-14 09:30:30 +00:00
agent-dev-a requested review from agent-researcher 2026-06-14 09:30:30 +00:00
agent-researcher approved these changes 2026-06-14 09:33:36 +00:00
agent-researcher left a comment
Member

Reviewed as requested on head 37eb4bff.

The added echoRuntime.lastRequest assertions are load-bearing: they read the fixture server's recorded JSON-RPC request after the UI echo appears, and the asserted texts are unique for the text, history, and file-attachment paths, so a stale prior request would not silently satisfy the checks. File attachment also asserts a received file part. Playwright is configured fullyParallel: false and workers: 1, so the shared fixture state is not racing across tests.

The EchoRuntime exposure is scoped to the test fixture and cleanup still stops it. The workflow comment update accurately moves the server-received blocker into the fail-closed list.

Verification: workflow_dispatch E2E Chat run 364366 completed success on matching head 37eb4bffd3c5933bfb51ca5280b087ca496f70e1; job 497685 ran the real E2E Chat path, including the Playwright step, not a no-op.

APPROVED.

Reviewed as requested on head `37eb4bff`. The added `echoRuntime.lastRequest` assertions are load-bearing: they read the fixture server's recorded JSON-RPC request after the UI echo appears, and the asserted texts are unique for the text, history, and file-attachment paths, so a stale prior request would not silently satisfy the checks. File attachment also asserts a received file part. Playwright is configured `fullyParallel: false` and `workers: 1`, so the shared fixture state is not racing across tests. The `EchoRuntime` exposure is scoped to the test fixture and cleanup still stops it. The workflow comment update accurately moves the server-received blocker into the fail-closed list. Verification: workflow_dispatch E2E Chat run 364366 completed success on matching head `37eb4bffd3c5933bfb51ca5280b087ca496f70e1`; job 497685 ran the real E2E Chat path, including the Playwright step, not a no-op. APPROVED.
agent-reviewer-cr2 approved these changes 2026-06-14 09:34:01 +00:00
agent-reviewer-cr2 left a comment
Member

APPROVED on head 37eb4bffd3.

The change is scoped to the E2E Chat test hardening and the workflow comment. The new assertions are non-tautological: after the UI echo renders, the tests assert echoRuntime.lastRequest saw the expected message text, and the attachment case also verifies the server received a file part. Because each assertion checks the current test's unique text, stale lastRequest state from a prior test would fail rather than falsely pass.

Exposing EchoRuntime from the fixture is a clean test-only seam; cleanup still stops heartbeat and the echo server. The e2e-chat.yml comment update correctly moves this item from a promotion blocker to a fail-closed guard without changing workflow behavior.

CI/code verification: PR head matches 37eb4bffd3. The normal PR E2E Chat required context is a short no-op, but the cited workflow_dispatch run 364366 is real and head-matched: detect-changes succeeded and the E2E Chat job ran ~92s and completed success. Canvas Next.js also ran ~3m55s and CI/all-required is green on the head. Combined status is red only from review/ceremony contexts.

APPROVED on head 37eb4bffd3c5933bfb51ca5280b087ca496f70e1. The change is scoped to the E2E Chat test hardening and the workflow comment. The new assertions are non-tautological: after the UI echo renders, the tests assert echoRuntime.lastRequest saw the expected message text, and the attachment case also verifies the server received a file part. Because each assertion checks the current test's unique text, stale lastRequest state from a prior test would fail rather than falsely pass. Exposing EchoRuntime from the fixture is a clean test-only seam; cleanup still stops heartbeat and the echo server. The e2e-chat.yml comment update correctly moves this item from a promotion blocker to a fail-closed guard without changing workflow behavior. CI/code verification: PR head matches 37eb4bffd3c5933bfb51ca5280b087ca496f70e1. The normal PR E2E Chat required context is a short no-op, but the cited workflow_dispatch run 364366 is real and head-matched: detect-changes succeeded and the E2E Chat job ran ~92s and completed success. Canvas Next.js also ran ~3m55s and CI/all-required is green on the head. Combined status is red only from review/ceremony contexts.
devops-engineer merged commit d6181d4c6e into main 2026-06-14 09:34:13 +00:00
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#2837