refactor(workboard): share Control UI contract#102271
Conversation
Dependency GuardThis PR changes dependency-related files. Maintainers should confirm these changes are intentional. Changed files:
Maintainer follow-up:
|
Dependency graph changes are blockedOpenClaw does not accept dependency graph changes through PRs unless a repository admin or security explicitly authorizes the current head SHA. Dependency updates are generated internally by maintainers so external PRs cannot change the resolved graph. Detected dependency graph changes:
Auto-scrub was not attempted because this PR changes package manifest dependency graph fields:
Dependency graph changes must be reviewed by security or handled by maintainers internally. Please remove lockfile changes manually if they are not needed. To remove lockfile changes, restore them from the target branch: git fetch origin
git checkout 'origin/main' -- 'packages/workboard-contract/npm-shrinkwrap.json' 'pnpm-lock.yaml'
git commit -m 'chore: remove dependency lockfile change'
git pushIf this PR intentionally needs a dependency graph change, ask a repository admin or member of The action will approve the current head SHA ( |
|
Codex review: needs maintainer review before merge. Reviewed July 10, 2026, 12:44 PM ET / 16:44 UTC. Summary PR surface: Source -115, Tests +76, Config +15, Other +11. Total -13 across 27 files. Reproducibility: yes. at source level: current main has separate Workboard plugin and Control UI contract inventories, and the PR's focused regression test covers concrete plugin-owned fields that the UI copy currently drops. Review metrics: 1 noteworthy metric.
Stored data model Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Refresh the unchanged package-owned contract onto current main, rerun focused integration proof, preserve Gateway redaction and bundled-output invariants, then authorize and merge the exact dependency head. Do we have a high-confidence way to reproduce the issue? Yes at source level: current main has separate Workboard plugin and Control UI contract inventories, and the PR's focused regression test covers concrete plugin-owned fields that the UI copy currently drops. Is this the best way to solve the issue? Yes; extracting the unchanged plugin-owned model into a narrow private package removes the competing declaration owner while keeping UI-only state local and retaining the Gateway redaction boundary. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 1dcbcce515ea. Label changesLabel justifications:
Evidence reviewedPR surface: Source -115, Tests +76, Config +15, Other +11. Total -13 across 27 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (5 earlier review cycles)
|
|
Exact-head verification for
The remaining |
|
Exact-head verification for
The intentional workspace dependency/lockfile importer changes still require exact-head dependency approval from an admin or |
|
Exact-head CI correction pushed as
The dependency approval policy gate remains the only known external authorization requirement. No merge or automerge has been requested. |
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
Co-authored-by: Dallin Romney <[email protected]>
53f851b to
f9430b2
Compare
|
Land-ready verification complete for
Known proof gap: no screenshot, because this is an internal contract refactor with no intended rendered UI change. |
|
Merged via squash.
|
Co-authored-by: Peter Steinberger <[email protected]>
Related: #102258
What Problem This Solves
The Control UI maintained a separate copy of the Workboard card and metadata contract. Plugin-owned additions could silently drift or disappear at the UI normalization boundary, including workspace provenance and authority, claim state, diagnostic actions, and notification sequence values.
Why This Change Was Made
This moves the canonical Workboard data model into the private
@openclaw/workboard-contractworkspace package and makes both plugin internals and the Control UI consume it. UI-only lifecycle, task, refresh, and presentation state stays local to the Control UI. The normalizer explicitly preserves supported contract fields and drops unknown discriminants instead of fabricating fallback values.User Impact
No visual behavior changes are intended. Workboard metadata now has one package-owned contract, so valid plugin fields survive gateway normalization and future contract drift becomes a compile-time/build-time failure.
Evidence
run_0f9b3d099eb4: 250 Control UI Workboard tests and 8 Workboard gateway tests passed.run_9be895fcc578: full TSGo project build passed on pushed headf9430b27668907fe1020479468ca2d66ac2f8a25.pnpm ui:build: production build, sidecar checks, and performance budgets passed.git diff --check: passed.