fix(lobster): keep ordinary run/resume on default flow fields#102036
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed July 8, 2026, 1:49 AM ET / 05:49 UTC. Summary PR surface: Source +16, Tests +125. Total +141 across 2 files. Reproducibility: yes. source-level. Current main and 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:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Land one canonical Lobster parser fix with real installed-plugin or Gateway proof that ordinary default-field Do we have a high-confidence way to reproduce the issue? Yes, source-level. Current main and Is this the best way to solve the issue? Unclear as the final landing path. A plugin-local parser fix is the right owner boundary, but this branch is not clearly the best candidate while the sibling PR has stronger real-runtime proof. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 5a5b4c5b105f. Label changesLabel justifications:
Evidence reviewedPR surface: Source +16, Tests +125. Total +141 across 2 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 (4 earlier review cycles)
|
|
@clawsweeper re-review Updated the proof section with a real embedded runtime run: the patched Lobster tool loaded the installed @clawdbot/lobster package, ran a temporary .lobster approval workflow with flowStateJson: "{}" and flowExpectedRevision: 0, then resumed it with the returned real token and the same default flow fields. Verified locally on PR head c12bf2f:
|
|
🦞👀 Command router queued. I will update this comment with the next step. |
|
Maintainer validation is complete on exact head The final parser distinguishes schema-injected defaults from intentional managed fields while preserving strict cross-mode validation. I added the missing negative coverage after fresh autoreview caught two cases where incompatible fields could otherwise be dropped before fallback. Proof:
Ready to squash merge. |
|
Merged via squash.
|
|
@clawsweeper hatch |
…aw#102036) * fix(lobster): keep default flow fields on runner path * fix(lobster): reject incomplete managed resume revisions * fix(lobster): preserve explicit empty managed flow state * fix(lobster): preserve cross-mode validation --------- Co-authored-by: Vincent Koc <[email protected]>
…aw#102036) * fix(lobster): keep default flow fields on runner path * fix(lobster): reject incomplete managed resume revisions * fix(lobster): preserve explicit empty managed flow state * fix(lobster): preserve cross-mode validation --------- Co-authored-by: Vincent Koc <[email protected]>
Closes #102011
What Problem This Solves
Ordinary
@openclaw/lobsterrunandresumecalls could be routed into managed TaskFlow parsing when the tool payload contained schema-injected defaults such asflowStateJson: "{}"andflowExpectedRevision: 0.Why This Change Was Made
The Lobster parser now distinguishes injected empty defaults from intentional managed fields:
stateJson: {};0alone does not select managed mode;This stays inside the Lobster plugin parser. It does not change core TaskFlow, protocol, configuration, migration, storage, or dependency contracts.
User Impact
Ordinary Lobster approval workflows can run and resume without being asked for TaskFlow-only fields the caller did not intend to provide. Managed TaskFlow callers retain existing validation and can explicitly start with an empty state object.
Evidence
Validated exact head
c12bf2f48570da79968487e1dcc10fb4b9ac2f35.cbx_c92971815ef7, runrun_f48d59554de8, exit0; lease released after proof.pnpm test extensions/lobster/src/lobster-tool.test.ts extensions/lobster/src/lobster-runner.test.ts: 2 files, 52 tests passed.createLobsterTool(createEmbeddedLobsterRunner())ordinary run -> approval -> resume with injected{}and revision0: passed without a TaskFlow runtime.stateJsonproperty equal to{}.pnpm check:changed: passed, including extension production/test typechecks, lint, database/storage guards, and import-cycle checks.28920766065: 63 successful checks, no failures or pending checks.git diff --check: passed.No documentation or changelog update is required; the public call shapes are unchanged and release generation owns
CHANGELOG.md.