5.4 KiB
Structured operation results and deep links
Date: 2026-07-31 Scope: local repository implementation and controlled contract validation External writes: none Commit, push or deployment: none
Outcome
The remaining mission-control mutation surfaces now return one structured result contract. The browser presents that contract in one global result tray and resolves its entity references into registered, selectable destinations. This closes the result-navigation follow-up recorded by the Performance-V2 checkpoint without introducing a second workflow or routing authority.
OpenClaw remains the runtime authority. Nexus still owns policy, approval, audit, durable workflow state and presentation. This checkpoint did not relax the production write gate for an unsupported external Nexus client identity.
Backend contract
OperationResultFactory creates the common response metadata:
- operation/correlation ID;
- operation status;
- non-negative resource revision;
- one optional primary
EntityRefDto; - de-duplicated affected references; and
- trace ID or validated
traceparentwhen available.
Caller-provided correlation IDs are accepted only when they are non-empty,
contain no control characters and are at most 128 characters. The selected ID
is returned in X-Correlation-ID. Frontend URLs are deliberately not emitted
by the backend.
The contract is emitted from:
- dashboard and versioned task create, update, state, approval, rejection, delete, stale-reset and activity mutations;
- task bridge and Nexus MCP task mutation responses;
- project create, update, archive and delete;
- notification read and read-all, including an honest
noopwhen an item was already read; - OpenClaw task cancel, session abort/model patch, cron create/update/delete/ run and approval resolution, including blocked, invalid, stale, replayed, in-doubt and idempotency-conflict paths;
- OpenClaw agent-file writes; and
- schema-controlled OpenClaw config patches.
Task and project delete endpoints now return the deleted/archived DTO with its
operation result instead of an empty 204, so clients can navigate and audit
the outcome. Generated OpenAPI and TypeScript contracts reflect this response
shape.
Legacy Nexus resources that do not yet own a concurrency revision use
revision 0. Notification changes use revision 1/0; OpenClaw and proposal/
run domains retain their existing revision semantics. A synthetic revision was
not invented from timestamps.
Frontend result handling
The global authenticated shell now contains a dismissible, keyboard-visible operation result tray. It normalizes generated number/string revisions and shows status, primary/affected entities, revision and trace metadata.
The central resolver supports:
| Reference | Destination behavior |
|---|---|
task |
durable Task Detail route |
project |
durable Project Detail route |
run |
durable Run Detail route |
cron |
Calendar opens the addressed job detail |
openclaw-task |
Run Control selects the runtime task |
session |
Run Control selects the session |
approval |
Run Control prioritizes, scrolls to and focuses the approval |
agent-file |
Agent Detail opens the addressed live file tab |
config |
Settings scrolls to and focuses the OpenClaw config editor |
notification |
Notifications prioritizes and focuses the item |
activity |
Activity opens the addressed event detail |
task-board |
Task Board index |
Existing agent, proposal, incident, document and event-stream mappings remain registered. The backend continues to emit entity identity rather than route strings.
Task Board, Task Detail, legacy ModuleView task actions, projects, notifications, OpenClaw cron/control commands, agent model changes, agent-file writes and config patches all consume the result contract. Failed OpenClaw responses report their structured result before the existing recovery message is raised.
Automated acceptance
| Gate | Result |
|---|---|
| .NET 10 backend tests | Passed: 362; failed: 0; skipped: 5; total: 367 |
| Frontend typecheck | Passed |
| Frontend unit tests | Passed: 12 files, 30 tests |
| Frontend production build | Passed: 1,988 modules transformed |
| Playwright controlled contract suite | Passed: 24 tests |
| Core-route geometry | Passed at 375, 768, 1024, 1440 and 1920 px |
| Task mutation result journey | Passed: drag/drop -> operation tray -> Task Detail |
| OpenAPI generation | Passed; backend document and generated schema updated |
The five skipped backend tests remain explicitly Docker-gated: three PostgreSQL provisioning tests, one Toxiproxy provisioning test and one PostgreSQL operation-claim concurrency test. They were not executed and are not counted as passing evidence.
Boundaries and next gates
This checkpoint does not prove:
- live pairing or management writes against Bao's OpenClaw;
- an end-to-end
Nexus -> OpenClaw -> OpenAI -> Nexusproduction run; - PostgreSQL/Toxiproxy concurrency behavior in a running Docker environment;
- k6 board thresholds or archived SQL execution plans;
- live Promptfoo/MCP 2.0 negotiation; or
- production OTLP/
pg_stat_statementsoperation.
The next release gate remains official external Nexus/generic-operator Client-ID support followed by read-only inventory acceptance. Docker-backed concurrency and measured board performance should be run before making scale or p95 claims. No Redis, broker, workflow engine or second agent runtime is justified by this result-contract slice.