fix(mcp): accept workflow id when confirming briefs - #7779
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
βΉοΈ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with π while any review is running, comments if it has suggestions, and reacts with π once all reviews finish with no findings. |
There was a problem hiding this comment.
π‘ Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 00648c8fce
βΉοΈ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with π.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
π§ͺ Queued for QA validation β this PR has changes that need a manual QA pass before it is merged. Nothing needed from you; we will update here once it is validated. Thanks for the contribution. |
mrcfps
left a comment
There was a problem hiding this comment.
@taljeon this is a clean, well-scoped fix for #7778. I verified that confirm_brief now declares pluginWorkflowId with the same PLUGIN_WORKFLOW_ID_ARG used by the rest of the local MCP surface, so validateMcpToolArgs no longer rejects the pluginβs required reuse of the server-issued workflow id. The new assertion in apps/daemon/tests/mcp-observability.test.ts pins that schema boundary directly. Confirmation still inherits attribution from the draft, which is the right source of truth for this step.
Thanks for the precise diagnosis and the tiny, reviewable patch β this unblocks a real Codex plugin flow. π
π Powered by Looper Β· runner=reviewer Β· agent=omp Β· An autonomous AI dev team for your GitHub repos.
|
@codex review |
There was a problem hiding this comment.
π‘ Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1181a5da37
βΉοΈ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with π.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: βΉοΈ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with π. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
mrcfps
left a comment
There was a problem hiding this comment.
@taljeon this is a clean, well-scoped follow-up for #7778. I reviewed the current head against the original contract hole and the two fail-closed cases that landed after the first patch.
confirm_brief now publishes pluginWorkflowId with the same PLUGIN_WORKFLOW_ID_ARG used by the rest of the local MCP surface, so additionalProperties: false no longer rejects the pluginβs required reuse of the server-issued id. When that id is supplied, resolveAttribution validates it as canonical and compares it to the draft: a matching id still inherits the stored attribution, a different canonical id fails with pluginWorkflowId does not match the brief draft, and a known or persisted id on an ordinary draft fails with pluginWorkflowId requires an attributed brief draft before the generic workflow branch can attach unrelated context. The three new assertions in apps/daemon/tests/mcp-observability.test.ts pin the schema boundary and both rejection paths.
Thanks for the precise diagnosis and for tightening the correlation contract after review β this unblocks the Codex plugin confirm path without loosening observability. π
π Powered by Looper Β· runner=reviewer Β· agent=omp Β· An autonomous AI dev team for your GitHub repos.
|
@taljeon Thanks for the contribution. QA verified the |
|
Thanks for the QA confirmation. With QA accepted and the required checks passing on |
π π‘ You just leveled up to Giotto
π Your contributions are sending a clear signal across the network: you care about making Open Design better. Keep transmitting. π Thanks for helping Open Design move forward. Keep building in the open. π π Rank #157 among 700+ contributors |

Fixes #7778
Why
I picked up the reported official Codex plugin integration failure because it blocks the confirmed brief from reaching the next OpenDesign step.
collect_briefissues apluginWorkflowIdthat the plugin is required to preserve, butconfirm_briefhadadditionalProperties: falsewithout declaring that field, so the local MCP rejected a valid follow-up call before confirmation could run.The confirmation path also keeps that opaque correlation fail-closed: when a caller supplies the workflow id, it must be canonical and match the attribution stored with the brief draft instead of being silently replaced by a different inherited id. An ordinary brief without plugin attribution cannot be attached to an unrelated known workflow during confirmation.
What users will see
Confirming a brief through the official Codex plugin can now preserve the server-issued workflow context and continue normally instead of failing with
PLUGIN_CONTRACT_REJECTED: confirm_brief.pluginWorkflowId is unsupported. Stale, cross-wired, or ordinary-draft workflow ids fail explicitly rather than confirming under another workflow.Surface area
apps/weborapps/desktop(including Electron menu bar)odsubcommand or flag, newtools-dev/tools-packflag, or newOD_*env varconfirm_briefinput contract now accepts the existing opaque workflow-id fieldskills/,design-systems/,design-templates/, orcraft/, or change to the skills protocolTRANSLATIONS.mdfor the locale workflow)package.jsonScreenshots
Not applicable; this changes the local MCP tool schema and has no UI surface.
Bug fix verification
apps/daemon/tests/mcp-observability.test.tsmain: yes β the new regression failed withconfirm_brief.pluginWorkflowId is unsupported.pluginWorkflowId does not match the brief draft, while the matching id succeeds.pluginWorkflowId requires an attributed brief draft.Validation
pnpm exec vitest run -c vitest.config.ts tests/mcp-observability.test.tsβ 15 passedpnpm exec vitest run -c vitest.config.ts tests/mcp-brief-app.test.ts tests/mcp-observability.test.tsβ 32 passedpnpm --filter @open-design/daemon typecheckpnpm guardpnpm typecheckorigin/main, where its 12 tests were skipped. Final-head focused/related tests and all typecheck/guard checks above were rerun after both follow-ups.git diff --checkAI assistance
OpenAI Codex assisted with source navigation, implementation, and validation. I reviewed and verified the final change.