From bcfb85b5b5f5a54cfab936ee9110549d6294c98f Mon Sep 17 00:00:00 2001 From: Dan Guido Date: Fri, 20 Feb 2026 13:53:43 -0700 Subject: [PATCH] Fix second-opinion Codex schema validation and update Gemini model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit codex-review-schema.json failed OpenAI structured output validation because required arrays didn't include all sibling property keys when additionalProperties: false was set. Made optional fields nullable and added them to required to satisfy the constraint. Update Gemini model from gemini-3-pro-preview to gemini-3.1-pro-preview following the Feb 19 release. Bump version 1.5.0 → 1.5.1. Co-Authored-By: Claude Opus 4.6 --- .claude-plugin/marketplace.json | 2 +- .../second-opinion/.claude-plugin/plugin.json | 2 +- .../skills/second-opinion/SKILL.md | 6 +-- .../references/codex-review-schema.json | 50 ++++++++++++------- .../references/gemini-invocation.md | 12 ++--- 5 files changed, 43 insertions(+), 29 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index dd620f8..44ab16a 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -245,7 +245,7 @@ }, { "name": "second-opinion", - "version": "1.5.0", + "version": "1.5.1", "description": "Runs code reviews using external LLM CLIs (OpenAI Codex, Google Gemini) on uncommitted changes, branch diffs, or specific commits. Bundles codex-mcp-server for direct MCP tool access to Codex.", "author": { "name": "Dan Guido" diff --git a/plugins/second-opinion/.claude-plugin/plugin.json b/plugins/second-opinion/.claude-plugin/plugin.json index 9cb8bff..4f6b09a 100644 --- a/plugins/second-opinion/.claude-plugin/plugin.json +++ b/plugins/second-opinion/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "second-opinion", - "version": "1.5.0", + "version": "1.5.1", "description": "Runs code reviews using external LLM CLIs (OpenAI Codex, Google Gemini) on uncommitted changes, branch diffs, or specific commits. Bundles codex-mcp-server for direct MCP tool access to Codex.", "author": { "name": "Dan Guido" diff --git a/plugins/second-opinion/skills/second-opinion/SKILL.md b/plugins/second-opinion/skills/second-opinion/SKILL.md index d2875c9..db65dc8 100644 --- a/plugins/second-opinion/skills/second-opinion/SKILL.md +++ b/plugins/second-opinion/skills/second-opinion/SKILL.md @@ -49,7 +49,7 @@ gemini -p "/code-review" --yolo -e code-review # Gemini (headless with diff — see references/ for full pattern) git diff HEAD > /tmp/review-diff.txt { printf '%s\n\n' 'Review this diff for issues.'; cat /tmp/review-diff.txt; } \ - | gemini -p - --yolo -m gemini-3-pro-preview + | gemini -p - --yolo -m gemini-3.1-pro-preview ``` ## Invocation @@ -194,7 +194,7 @@ See [references/gemini-invocation.md](references/gemini-invocation.md) for full details on flags, scope mapping, and extension usage. Summary: -- Model: `gemini-3-pro-preview`, flags: `--yolo`, `-e`, `-m` +- Model: `gemini-3.1-pro-preview`, flags: `--yolo`, `-e`, `-m` - For uncommitted general review: `gemini -p "/code-review" --yolo -e code-review` - For branch/commit diffs: pipe `git diff` into `gemini -p` - Security extension name is `gemini-cli-security` (not `security`) @@ -227,7 +227,7 @@ When the user picks "Both" (the default): ## Codex Review (gpt-5.3-codex) -## Gemini Review (gemini-3-pro-preview) +## Gemini Review (gemini-3.1-pro-preview) ``` diff --git a/plugins/second-opinion/skills/second-opinion/references/codex-review-schema.json b/plugins/second-opinion/skills/second-opinion/references/codex-review-schema.json index 9f48a26..56a70f2 100644 --- a/plugins/second-opinion/skills/second-opinion/references/codex-review-schema.json +++ b/plugins/second-opinion/skills/second-opinion/references/codex-review-schema.json @@ -15,7 +15,7 @@ "minLength": 1 }, "confidence_score": { - "type": "number", + "type": ["number", "null"], "minimum": 0, "maximum": 1 }, @@ -25,30 +25,44 @@ "maximum": 3 }, "code_location": { - "type": "object", - "properties": { - "file_path": { - "type": "string" - }, - "line_range": { + "anyOf": [ + { "type": "object", "properties": { - "start": { - "type": "integer" + "file_path": { + "type": "string" }, - "end": { - "type": "integer" + "line_range": { + "anyOf": [ + { + "type": "object", + "properties": { + "start": { + "type": "integer" + }, + "end": { + "type": "integer" + } + }, + "required": ["start", "end"], + "additionalProperties": false + }, + { + "type": "null" + } + ] } }, - "required": ["start", "end"], + "required": ["file_path", "line_range"], "additionalProperties": false + }, + { + "type": "null" } - }, - "required": ["file_path"], - "additionalProperties": false + ] } }, - "required": ["title", "body", "priority"], + "required": ["title", "body", "confidence_score", "priority", "code_location"], "additionalProperties": false } }, @@ -56,7 +70,7 @@ "type": "string" }, "overall_explanation": { - "type": "string" + "type": ["string", "null"] }, "overall_confidence_score": { "type": "number", @@ -64,6 +78,6 @@ "maximum": 1 } }, - "required": ["findings", "overall_correctness", "overall_confidence_score"], + "required": ["findings", "overall_correctness", "overall_explanation", "overall_confidence_score"], "additionalProperties": false } diff --git a/plugins/second-opinion/skills/second-opinion/references/gemini-invocation.md b/plugins/second-opinion/skills/second-opinion/references/gemini-invocation.md index eddc3af..2bac6b4 100644 --- a/plugins/second-opinion/skills/second-opinion/references/gemini-invocation.md +++ b/plugins/second-opinion/skills/second-opinion/references/gemini-invocation.md @@ -2,7 +2,7 @@ ## Default Configuration -- Model: `gemini-3-pro-preview` +- Model: `gemini-3.1-pro-preview` - Extensions: `code-review`, `gemini-cli-security` ## Key Flags @@ -37,7 +37,7 @@ automatically picks up the working tree diff: gemini -p "/code-review" \ --yolo \ -e code-review \ - -m gemini-3-pro-preview + -m gemini-3.1-pro-preview ``` For branch diffs or specific commits, pipe the diff with a @@ -48,7 +48,7 @@ that break shell expansion): git diff ...HEAD > /tmp/review-diff.txt { printf '%s\n\n' 'Review this diff for code quality issues. '; \ cat /tmp/review-diff.txt; } \ - | gemini -p - -m gemini-3-pro-preview --yolo + | gemini -p - -m gemini-3.1-pro-preview --yolo ``` ## Security Review @@ -60,7 +60,7 @@ headless mode with a security-focused prompt instead: git diff HEAD > /tmp/review-diff.txt { printf '%s\n\n' 'Analyze this diff for security vulnerabilities, including injection, auth bypass, data exposure, and input validation issues. Report each finding with severity, location, and remediation.'; \ cat /tmp/review-diff.txt; } \ - | gemini -p - -e gemini-cli-security -m gemini-3-pro-preview --yolo + | gemini -p - -e gemini-cli-security -m gemini-3.1-pro-preview --yolo ``` When security focus is selected, only run the supply chain scan @@ -73,7 +73,7 @@ git diff --name-only \ && gemini -p "/security:scan-deps" \ --yolo \ -e gemini-cli-security \ - -m gemini-3-pro-preview + -m gemini-3.1-pro-preview ``` Skip the scan when only non-dependency files changed. The scan @@ -91,7 +91,7 @@ git diff HEAD > /tmp/review-diff.txt cat CLAUDE.md; \ printf '\n---\n\n%s\n\n' ''; \ cat /tmp/review-diff.txt; } \ - | gemini -p - -m gemini-3-pro-preview --yolo + | gemini -p - -m gemini-3.1-pro-preview --yolo ``` ## Error Handling