mirror of
https://github.com/Comfy-Org/github-workflows.git
synced 2026-11-05 00:17:37 +00:00
[PR #33] [MERGED] feat(cursor-review): collect structured output through MCP tools #41
Labels
No labels
cursor-review-catalog-drift
groom
groom
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/github-workflows#41
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/github-workflows/pull/33
Author: @huntcsg
Created: 7/17/2026
Status: ✅ Merged
Merged: 8/17/2026
Merged by: @mattmillerai
Base:
main← Head:convert-cursor-review-to-structured-output📝 Commits (5)
adf1ca4feat(cursor-review): collect structured output through MCP tools4268a26fix(cursor-review): address structured output review feedback5ed67e8fix(cursor-review): integrate model preflight after rebasefa71c41fix(cursor-review): harden structured output failurescc96018fix(cursor-review): preserve prior-review repeats after rebase📊 Changes
11 files changed (+723 additions, -713 deletions)
View changed files
📝
.github/cursor-review/README.md(+8 -5)➖
.github/cursor-review/extract-findings.py(+0 -275)📝
.github/cursor-review/post-review.py(+2 -2)📝
.github/cursor-review/prompt-adversarial.md(+12 -15)📝
.github/cursor-review/prompt-edge-case.md(+12 -15)📝
.github/cursor-review/prompt-judge.md(+16 -19)➕
.github/cursor-review/review-output-mcp.py(+297 -0)➖
.github/cursor-review/tests/test_extract_findings.py(+0 -284)➕
.github/cursor-review/tests/test_review_output_mcp.py(+208 -0)📝
.github/workflows/cursor-review.yml(+162 -94)📝
.github/workflows/test-cursor-review-scripts.yml(+6 -4)📄 Description
Summary
Replace Cursor Review's free-form JSON response contract with a small, dependency-free stdio MCP server that gives reviewers and the judge typed output tools.
cursor_review_record_findingonce per issue andcursor_review_finishexactly oncecursor_review_submit_finalexactly once with the adjudicated findingsStrategy
The workflow writes a trusted project-scoped
.cursor/mcp.jsonthat startsreview-output-mcp.pyin reviewer or judge mode. It also writes an exact.cursor/cli.jsonallowlist for only the output tools needed by that role, avoiding broad--forcepermissions.The MCP server owns the result contract:
The consolidate job continues to consume the existing normalized findings shape, so posting and blocking-gate behavior remain compatible.
Why this should be more reliable
The previous path depended on probabilistic formatting compliance: each model had to place valid JSON in free-form stdout, after which the workflow searched prose and Markdown fences, coerced common wrapper objects, and retried the judge when parsing still failed. That history already includes multiple hardening changes for prose-wrapped, malformed, or otherwise unparseable responses.
This change moves correctness to a typed protocol boundary:
MCP or agent execution can still fail, but those failures now remain explicit operational errors. They are no longer ambiguous parsing failures and cannot silently become an empty successful review. In short, the result path changes from heuristic extraction of model-authored text to deterministic validation and persistence of tool arguments.
Security and compatibility
.cursordirectory and atomically replaces config filespost-review.pycontractsVerification
python3 -m unittest discover -s .github/cursor-review/tests -p 'test_*.py' -v— 11 tests passgit diff --checkpasses🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.