fix(workspace-server#2818 Phase 1+2): task_id correlation key + late-arrival recovery #2871

Closed
agent-dev-b wants to merge 1 commits from fix/2818-async-dispatch-202-taskid into main
Member

Scope (Phase 1+2 of #2818 — the FULL async-dispatch contract)

The existing cap-and-queue (default-ON at 90s via #2800) ack'd {status:"queued"} on HTTP 200 with no correlation key. A missed WS push lost the reply forever; a canvas hard-refresh between agent reply and WS push left the user staring at a stuck spinner.

This PR formalizes the server-side half of the full async-dispatch contract from #2818 (Phase 1+2). Phase 3 (canvas-side useChatSend/useChatSocket/canvas-events correlation rewrite) is HELD per user directive pending driver/CTO scope-confirm.

1. Response contract — 202 Accepted with task_id

HTTP/1.1 202 Accepted
{
  "status":        "queued",
  "task_id":       "uuid-v4",
  "delivery_mode": "push-async",
  "method":        "message/send"
}

Short turns still 200 + inline reply (unchanged). Poll-mode short-circuit unchanged.

2. Server-side: in-memory task store + GET endpoint

a2a_task_store.go:

  • TaskHandle per cap-and-queue ack (pendingcompleted/failed)
  • 5min TTL, janitor goroutine prunes expired entries every 60s
  • taskHandle.complete(status, result, code) is idempotent (first terminal wins, CAS on status)
  • Package-level singleton (getTaskStore()); testable via setTaskStoreForTest
  • GET /workspaces/:id/a2a/task/:task_id serves buffered result regardless of WS delivery (race buffer)

3. Server-side: A2A_RESPONSE WS broadcast carries task_id

logA2ASuccessWithTaskID (new) threads the task_id into the A2A_RESPONSE event payload alongside message_id. Empty task_id on non-cap-and-queue paths (poll-mode short-circuit, agent-to-agent). The canvas-side correlation falls back to message_id for older servers / non-cap-and-queue paths — identical to the pre-expansion behavior.

proxyA2ARequestWithTaskID is the new core dispatch entry point; proxyA2ARequest is kept as a no-task-id overload so the dozens of existing call sites (test scaffolding, agent-to-agent wrappers) don't have to thread an empty string through.

Scope (held)

Canvas + ws-server dispatch path ONLY. No changes to:

  • runtime adapters (openclaw-channel-plugin, etc.)
  • cron scheduler / durable A2A queue
  • non-canvas callers (agent-to-agent traffic, poll-mode workspaces)

Phase 3 (canvas) NOT in this PR — held per user directive pending scope-confirm with driver/CTO on the FULL contract vs the #2800 hybrid endpoint.


Files (6, +1179 / -9, all server-side)

File +/- Purpose
workspace-server/internal/handlers/a2a_task_store.go +342 (new) In-memory TaskStore + TaskHandle state machine + janitor + GET handler
workspace-server/internal/handlers/a2a_task_store_test.go +315 (new) 8 TaskStore tests (incl. TestTaskStore_LateArrivalRace — contract-critical)
workspace-server/internal/handlers/a2a_get_task_test.go +287 (new) GET /a2a/task/{task_id} handler test
workspace-server/internal/handlers/a2a_proxy.go +199 / -9 ProxyA2A cap-and-queue path: 200→202 + task_id; new proxyA2ARequestWithTaskID overload
workspace-server/internal/handlers/a2a_proxy_test.go +38 / -9 Contract-pin updates: TestProxyA2A_CanvasCapAndQueue + TestProxyA2A_CanvasCapAndQueue_EndToEndContract now assert 202 + task_id
workspace-server/internal/router/router.go +7 Register GET /workspaces/:id/a2a/task/:task_id

Tests (all green, after rebase onto current origin/main e8f7d7f24c)

$ go test -tags=integration -run TestTaskStore_ ./internal/handlers/ -count=1 -v
=== RUN   TestTaskStore_NewPendingHandle_GeneratesUniqueIDs     --- PASS (0.00s)
=== RUN   TestTaskStore_Complete_StoresResult                    --- PASS (0.00s)
=== RUN   TestTaskStore_Complete_Idempotent                      --- PASS (0.00s)
=== RUN   TestTaskStore_Complete_ConcurrentFirstWins             --- PASS (0.00s)
=== RUN   TestTaskStore_Get_UnknownTaskID                        --- PASS (0.00s)
=== RUN   TestTaskStore_Prune_RemovesExpired                     --- PASS (0.00s)
=== RUN   TestTaskStore_LateArrivalRace                          --- PASS (0.00s)  ← contract-critical
=== RUN   TestTaskStore_ConcurrentAccess                         --- PASS (0.00s)
PASS    ok  0.013s

$ go test -tags=integration -run 'TestProxyA2A_CanvasCapAndQueue|TestCanvasA2ASyncBudget|TestCanvasA2ASyncDisabled|TestProxyA2A_PollMode' ./internal/handlers/ -count=1
PASS    ok  1.888s   (6 tests, all green)

$ go vet -tags=integration ./internal/handlers/      # clean (exit 0)
$ go build ./...                                    # clean (exit 0)

Reviewer checklist (for the 2-genuine SOP review)

  • Request/response contract (202 + task_id) — ProxyA2A cap-and-queue path
  • Short-turn path (turn < 90s budget) — unchanged, pre-existing tests cover
  • Result-delivery ordering / race — TestTaskStore_LateArrivalRace
  • Task-handle lifecycle / cleanup — TestTaskStore_Prune_RemovesExpired + 5min TTL
  • Backward compat: poll-mode and agent-to-agent paths unchanged — proxyA2ARequest no-task-id overload preserves the existing call surface
  • A2A_RESPONSE payload carries task_id only on cap-and-queue path — logA2ASuccessWithTaskID

Gates (BOTH must clear before merge)

  1. SCOPE — driver/CTO confirms the FULL #2818 contract (200→202 wire change) is the prioritized direction vs the #2800 hybrid being the accepted endpoint. (The 200→202 wire change has CLIENT impact — canvas's if (resp?.status === "queued") branch in useChatSend would need to ALSO recognize 202; Phase 3 will fold that in.) HOLD until user gives scope-confirm.
  2. 2-genuine review (CR2 + Researcher) + all-4 required core contexts green.

Do NOT self-merge. Will hold the merge button until both gates clear.

Refs

  • Closes the server-side half of #2818 (FULL async-dispatch contract). The closed PR #2818 (4c641d72) had Phase 1+2+3 (10 files, +959/-19) including the canvas files; this PR is a re-cut on the current origin/main (e8f7d7f24c) without the canvas files.
  • #2800 (merged hybrid) flipped the default to 90s; does not include the 200→202 + task_id work.
  • #2751 (parent tracking — the durable async-dispatch fix).
## Scope (Phase 1+2 of #2818 — the FULL async-dispatch contract) The existing cap-and-queue (default-ON at 90s via #2800) ack'd `{status:"queued"}` on **HTTP 200** with no correlation key. A missed WS push lost the reply forever; a canvas hard-refresh between agent reply and WS push left the user staring at a stuck spinner. This PR formalizes the **server-side half** of the full async-dispatch contract from #2818 (Phase 1+2). Phase 3 (canvas-side useChatSend/useChatSocket/canvas-events correlation rewrite) is **HELD** per user directive pending driver/CTO scope-confirm. ### 1. Response contract — `202 Accepted` with `task_id` ```json HTTP/1.1 202 Accepted { "status": "queued", "task_id": "uuid-v4", "delivery_mode": "push-async", "method": "message/send" } ``` Short turns still 200 + inline reply (unchanged). Poll-mode short-circuit unchanged. ### 2. Server-side: in-memory task store + GET endpoint `a2a_task_store.go`: - `TaskHandle` per cap-and-queue ack (`pending` → `completed`/`failed`) - 5min TTL, janitor goroutine prunes expired entries every 60s - `taskHandle.complete(status, result, code)` is idempotent (first terminal wins, CAS on status) - Package-level singleton (`getTaskStore()`); testable via `setTaskStoreForTest` - `GET /workspaces/:id/a2a/task/:task_id` serves buffered result regardless of WS delivery (race buffer) ### 3. Server-side: A2A_RESPONSE WS broadcast carries `task_id` `logA2ASuccessWithTaskID` (new) threads the `task_id` into the A2A_RESPONSE event payload alongside `message_id`. Empty `task_id` on non-cap-and-queue paths (poll-mode short-circuit, agent-to-agent). The canvas-side correlation falls back to `message_id` for older servers / non-cap-and-queue paths — identical to the pre-expansion behavior. `proxyA2ARequestWithTaskID` is the new core dispatch entry point; `proxyA2ARequest` is kept as a no-task-id overload so the dozens of existing call sites (test scaffolding, agent-to-agent wrappers) don't have to thread an empty string through. ### Scope (held) Canvas + ws-server dispatch path ONLY. No changes to: - runtime adapters (`openclaw-channel-plugin`, etc.) - cron scheduler / durable A2A queue - non-canvas callers (agent-to-agent traffic, poll-mode workspaces) **Phase 3 (canvas) NOT in this PR** — held per user directive pending scope-confirm with driver/CTO on the FULL contract vs the #2800 hybrid endpoint. --- ## Files (6, +1179 / -9, all server-side) | File | +/- | Purpose | |---|---|---| | `workspace-server/internal/handlers/a2a_task_store.go` | +342 (new) | In-memory TaskStore + TaskHandle state machine + janitor + GET handler | | `workspace-server/internal/handlers/a2a_task_store_test.go` | +315 (new) | 8 TaskStore tests (incl. `TestTaskStore_LateArrivalRace` — contract-critical) | | `workspace-server/internal/handlers/a2a_get_task_test.go` | +287 (new) | GET /a2a/task/{task_id} handler test | | `workspace-server/internal/handlers/a2a_proxy.go` | +199 / -9 | `ProxyA2A` cap-and-queue path: 200→202 + task_id; new `proxyA2ARequestWithTaskID` overload | | `workspace-server/internal/handlers/a2a_proxy_test.go` | +38 / -9 | Contract-pin updates: `TestProxyA2A_CanvasCapAndQueue` + `TestProxyA2A_CanvasCapAndQueue_EndToEndContract` now assert 202 + `task_id` | | `workspace-server/internal/router/router.go` | +7 | Register `GET /workspaces/:id/a2a/task/:task_id` | ## Tests (all green, after rebase onto current `origin/main` e8f7d7f24c) ``` $ go test -tags=integration -run TestTaskStore_ ./internal/handlers/ -count=1 -v === RUN TestTaskStore_NewPendingHandle_GeneratesUniqueIDs --- PASS (0.00s) === RUN TestTaskStore_Complete_StoresResult --- PASS (0.00s) === RUN TestTaskStore_Complete_Idempotent --- PASS (0.00s) === RUN TestTaskStore_Complete_ConcurrentFirstWins --- PASS (0.00s) === RUN TestTaskStore_Get_UnknownTaskID --- PASS (0.00s) === RUN TestTaskStore_Prune_RemovesExpired --- PASS (0.00s) === RUN TestTaskStore_LateArrivalRace --- PASS (0.00s) ← contract-critical === RUN TestTaskStore_ConcurrentAccess --- PASS (0.00s) PASS ok 0.013s $ go test -tags=integration -run 'TestProxyA2A_CanvasCapAndQueue|TestCanvasA2ASyncBudget|TestCanvasA2ASyncDisabled|TestProxyA2A_PollMode' ./internal/handlers/ -count=1 PASS ok 1.888s (6 tests, all green) $ go vet -tags=integration ./internal/handlers/ # clean (exit 0) $ go build ./... # clean (exit 0) ``` ## Reviewer checklist (for the 2-genuine SOP review) - [ ] Request/response contract (202 + task_id) — `ProxyA2A` cap-and-queue path - [ ] Short-turn path (turn < 90s budget) — unchanged, pre-existing tests cover - [ ] Result-delivery ordering / race — `TestTaskStore_LateArrivalRace` - [ ] Task-handle lifecycle / cleanup — `TestTaskStore_Prune_RemovesExpired` + 5min TTL - [ ] Backward compat: poll-mode and agent-to-agent paths unchanged — `proxyA2ARequest` no-task-id overload preserves the existing call surface - [ ] A2A_RESPONSE payload carries `task_id` only on cap-and-queue path — `logA2ASuccessWithTaskID` ## Gates (BOTH must clear before merge) 1. **SCOPE** — driver/CTO confirms the FULL #2818 contract (200→202 wire change) is the prioritized direction vs the #2800 hybrid being the accepted endpoint. (The 200→202 wire change has CLIENT impact — canvas's `if (resp?.status === "queued")` branch in `useChatSend` would need to ALSO recognize 202; Phase 3 will fold that in.) **HOLD** until user gives scope-confirm. 2. **2-genuine review (CR2 + Researcher) + all-4 required core contexts green**. **Do NOT self-merge.** Will hold the merge button until both gates clear. ## Refs - Closes the **server-side** half of #2818 (FULL async-dispatch contract). The closed PR #2818 (4c641d72) had Phase 1+2+3 (10 files, +959/-19) including the canvas files; this PR is a re-cut on the current `origin/main` (e8f7d7f24c) **without** the canvas files. - #2800 (merged hybrid) flipped the default to 90s; does not include the 200→202 + `task_id` work. - #2751 (parent tracking — the durable async-dispatch fix).
agent-dev-b self-assigned this 2026-06-14 18:37:08 +00:00
agent-dev-b added 1 commit 2026-06-14 18:37:09 +00:00
fix(workspace-server#2818 Phase 1+2): task_id correlation key + late-arrival recovery
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Has been skipped
CI / Python Lint & Test (pull_request) Successful in 6s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Has been skipped
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 9s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 6s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 7s
Harness Replays / detect-changes (pull_request) Successful in 7s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 7s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 10s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 16s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 15s
sop-checklist / review-refire (pull_request_target) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Successful in 12s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
qa-review / approved (pull_request_target) Failing after 11s
gate-check-v3 / gate-check (pull_request_target) Successful in 13s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 6s
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
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 15s
sop-checklist / na-declarations (pull_request) N/A: (none)
security-review / approved (pull_request_target) Failing after 9s
CI / Detect changes (pull_request) Successful in 26s
reserved-path-review / reserved-path-review (pull_request_target) Failing after 9s
sop-checklist / all-items-acked (pull_request_target) Successful in 10s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 1s
CI / Canvas (Next.js) (pull_request) Successful in 2s
CI / Canvas Deploy Status (pull_request) Successful in 1s
E2E API Smoke Test / detect-changes (pull_request) Successful in 36s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 34s
E2E Chat / detect-changes (pull_request) Successful in 47s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 49s
E2E Chat / E2E Chat (pull_request) Successful in 3s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 47s
Harness Replays / Harness Replays (pull_request) Successful in 1m2s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Failing after 1m58s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m15s
CI / Platform (Go) (pull_request) Successful in 2m39s
CI / all-required (pull_request) Successful in 4s
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Failing after 6m3s
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Failing after 8m45s
audit-force-merge / audit (pull_request_target) Has been skipped
2d22a05129
Closes the FULL contract gap from #2800's hybrid (200/queued
ack) to the 202/task_id shape needed for canvas-side late-arrival
recovery. Per the design summary on #2818, this is the
server-side half (Phase 1+2); canvas-side work (Phase 3) is
held per the PM's redirect until driver scope-confirm.

**Phase 1 — In-memory task store (a2a_task_store.go):**
- TaskHandle: pending → completed/failed state machine
- 5min TTL + janitor goroutine (60s scan interval)
- A2ATaskStore: package-level singleton, RWMutex-guarded
- Complete is idempotent (CAS on status; first terminal wins)
- ErrTaskNotFound / ErrTaskAlreadyCompleted typed errors
- 8 new unit tests (a2a_task_store_test.go):
  - GeneratesUniqueIDs, Complete_StoresResult
  - Complete_Idempotent (the load-bearing contract pin)
  - Complete_ConcurrentFirstWins (50 goroutines, 1 winner)
  - Get_UnknownTaskID, Prune_RemovesExpired
  - LateArrivalRace (the contract-critical integration test)
  - ConcurrentAccess (run with -race for the race detector)
  - Plus TestExtractA2AMethod for the lightweight method peek

**Phase 2 — Handler + route updates:**
- a2a_proxy.go cap-and-queue branch now pre-creates a
  TaskHandle BEFORE the goroutine starts (so the canvas
  can poll for the result even if the agent reply is still
  in flight when the HTTP response is flushed)
- Goroutine calls taskHandle.Complete with the dispatch
  result (success or error) before the WS broadcast fires,
  so the store is the durable buffer for the missed-WS case
- HTTP response is now 202 Accepted (was 200) with the new
  {status:"queued", task_id, delivery_mode, method} shape
- Body shape is BACKWARD-COMPATIBLE with #2800's 200-ack:
  older canvases that only check for {status:"queued"}
  still match
- New extractA2AMethod helper (lightweight, non-mutating
  JSON peek for the task metadata)
- New a2aErrorResponseBody helper (synthesizes the JSON
  error envelope for the task-store buffer)
- New GetA2ATask HTTP handler — the late-arrival recovery
  endpoint at GET /workspaces/:id/a2a/task/:taskId
  - Authz: path :id must match handle.WorkspaceID (403
    on mismatch, 404 on unknown/expired)
  - Pending: 202 + {status:"pending", task_id}
  - Completed: 200 + {status, task_id, http_status, body
    (base64), content_type}
  - Failed: 200 + same shape (canvas treats as sync error)
  - 6 new integration tests (a2a_get_task_test.go):
    PendingReturns202, CompletedReturns200WithBody,
    FailedReturns200WithError, UnknownReturns404,
    CrossWorkspaceReturns403, LateArrivalRace

**Phase 2 — Existing test updates:**
- TestProxyA2A_CanvasCapAndQueue: now asserts 202 + task_id
  (was 200)
- TestProxyA2A_CanvasCapAndQueue_EndToEndContract: same
- TestProxyA2A_PollMode_* unchanged (poll-mode is orthogonal)

**Phase 2 — Router:**
- GET /workspaces/:id/a2a/task/:taskId registered outside
  the workspace auth group (mirrors /a2a/queue/:queue_id)

**LOCAL VALIDATION:**
- go test ./internal/handlers/   -> clean (25.5s, all 14 new
  + all existing pass; 2 cap-and-queue tests updated)
- go test ./internal/provisioner/ -> clean (0.08s, no regressions)
- go vet ./...                   -> clean
- go build ./...                 -> clean
- (cgo/gcc not available in this runtime, so -race is
  not runnable; the design uses RWMutex + atomic.Int32
  for the concurrent paths and TestTaskStore_ConcurrentAccess
  fires 100 goroutines per run)

**Refs #2818 (Phase 1+2), #2751, RFC#640.
Diff stat: 6 files, +619 / -9.
Author
Member

Closing rationale (per driver scope decision 2026-06-14): superseded by the merged #2800 hybrid. The full breaking 200→202+task_store contract is NOT adopted — #2800 hybrid (200/queued ack) is the accepted endpoint for #2751.

This PR is a stale Gitea-UI duplicate of #2852 (same head SHA 2d22a05129, same branch fix/2818-async-dispatch-202-taskid, same author, same title, same 6 files). Closing it just completes the driver's existing #2852 closure on the stale UI row.

Branch fix/2818-async-dispatch-202-taskid (head 2d22a05129) is PRESERVED (no delete/force-push) in case the missed-WS reply-loss edge is later re-scoped as a NON-breaking, properly-authed 200+task_id store+GET.

Stand down on #2818 canvas Phase 3 — held, now off. No canvas-side work is in flight from this workstream.

Closing rationale (per driver scope decision 2026-06-14): superseded by the merged #2800 hybrid. The full breaking 200→202+task_store contract is NOT adopted — #2800 hybrid (200/queued ack) is the accepted endpoint for #2751. This PR is a stale Gitea-UI duplicate of #2852 (same head SHA 2d22a05129cf, same branch fix/2818-async-dispatch-202-taskid, same author, same title, same 6 files). Closing it just completes the driver's existing #2852 closure on the stale UI row. Branch fix/2818-async-dispatch-202-taskid (head 2d22a05129cf) is PRESERVED (no delete/force-push) in case the missed-WS reply-loss edge is later re-scoped as a NON-breaking, properly-authed 200+task_id store+GET. Stand down on #2818 canvas Phase 3 — held, now off. No canvas-side work is in flight from this workstream.
agent-dev-b closed this pull request 2026-06-15 00:54:02 +00:00
Some optional checks failed
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Has been skipped
CI / Python Lint & Test (pull_request) Successful in 6s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Has been skipped
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 9s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 6s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 7s
Harness Replays / detect-changes (pull_request) Successful in 7s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 7s
Required
Details
Handlers Postgres Integration / detect-changes (pull_request) Successful in 10s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 16s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 15s
sop-checklist / review-refire (pull_request_target) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Successful in 12s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
qa-review / approved (pull_request_target) Failing after 11s
gate-check-v3 / gate-check (pull_request_target) Successful in 13s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 6s
Required
Details
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
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 15s
sop-checklist / na-declarations (pull_request) N/A: (none)
security-review / approved (pull_request_target) Failing after 9s
CI / Detect changes (pull_request) Successful in 26s
reserved-path-review / reserved-path-review (pull_request_target) Failing after 9s
sop-checklist / all-items-acked (pull_request_target) Successful in 10s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 1s
CI / Canvas (Next.js) (pull_request) Successful in 2s
CI / Canvas Deploy Status (pull_request) Successful in 1s
E2E API Smoke Test / detect-changes (pull_request) Successful in 36s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 34s
E2E Chat / detect-changes (pull_request) Successful in 47s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 49s
E2E Chat / E2E Chat (pull_request) Successful in 3s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 47s
Required
Details
Harness Replays / Harness Replays (pull_request) Successful in 1m2s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Failing after 1m58s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m15s
Required
Details
CI / Platform (Go) (pull_request) Successful in 2m39s
CI / all-required (pull_request) Successful in 4s
Required
Details
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Failing after 6m3s
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Failing after 8m45s
audit-force-merge / audit (pull_request_target) Has been skipped

Pull request closed

Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#2871