Skip to content

dual-ai-verifier v0.1.0

Latest

Choose a tag to compare

@TQYM TQYM released this 19 Jul 07:15
· 1 commit to main since this release

Changelog

All notable changes to Dual AI Verifier are documented here.

[Unreleased]

  • Publish the plugin source, usage documentation, project log, and CI checks.
  • Keep the reviewer result available as report_markdown for Codex's Outputs panel.

[0.1.0] - 2026-07-19

Added

  • A single ai_review MCP tool with Gemini-first provider selection.
  • Automatic DeepSeek fallback when Gemini has no usable credential or cannot complete a request.
  • JSON review contract with pass, revise, and blocked verdicts.
  • Evidence, fixes, missing-test, and open-question fields for each review.
  • Chinese-friendly Markdown rendering through report_markdown.
  • Skill workflow that mirrors each review to outputs/ai-review.md.
  • macOS Keychain credential loading for both providers.
  • Local unit tests, plugin validation, and shell/Python syntax checks.

Security and reliability

  • Provider credentials are read through inherited file descriptors instead of being copied into command arguments.
  • DeepSeek credential loading no longer uses a FIFO or a temporary directory.
  • Gemini credentials are sent in the x-goog-api-key header rather than a URL query string.
  • Review responses fail closed when required JSON fields are missing or empty.
  • MCP parameter errors return JSON-RPC errors instead of terminating the server.
  • Request, summary, context, tests, and combined input limits are enforced.
  • The default Gemini model was moved from the retired gemini-2.5-flash to gemini-3.1-flash-lite.

Known boundaries

  • This is provider failover, not independent dual-model consensus: DeepSeek is not called when Gemini succeeds.
  • Codex has no universal post-final-message interception hook; enforcement occurs at the skill workflow boundary.
  • Review content is sent to the selected third-party provider. Do not include secrets or unnecessary private data in the context.
  • A missing provider credential or blocked network request yields an explicit unavailable/blocked result and never an invented pass.