Bug report: Anthropic provider silently falls back to static — LLM analyzers fail with HTTP 400 (minimum/maximum not supported in tool schema)
Repo: NVIDIA/SkillSpector
Version: v2.0.0
Commit: 2eb844780ab163f01468ecf142c40a2ec0fcaec0
Environment: Python 3.10–3.12, SKILLSPECTOR_PROVIDER=anthropic, default model claude-opus-4-6
Summary
When running with the Anthropic provider, every LLM (Stage 2) analyzer fails with an HTTP 400 from the Anthropic API and the scan silently falls back to static-only analysis. The CLI still exits 0 and prints a normal report, so the failure is invisible unless SKILLSPECTOR_LOG_LEVEL=WARNING (the default) output is inspected. Users believe they are getting the ~87% precision semantic pass when they are actually getting static-only results.
Root cause
The Pydantic models used as structured-output / tool schemas declare numeric constraints via Field(ge=..., le=...), which Pydantic emits as JSON Schema minimum/maximum. Anthropic rejects those keywords in tool schemas with HTTP 400. Offending lines: meta_analyzer.py:66, llm_analyzer_base.py:64, llm_analyzer_base.py:66. Full details in the attached report
Bug report: Anthropic provider silently falls back to static — LLM analyzers fail with HTTP 400 (
minimum/maximumnot supported in tool schema)Repo: NVIDIA/SkillSpector
Version: v2.0.0
Commit:
2eb844780ab163f01468ecf142c40a2ec0fcaec0Environment: Python 3.10–3.12,
SKILLSPECTOR_PROVIDER=anthropic, default modelclaude-opus-4-6Summary
When running with the Anthropic provider, every LLM (Stage 2) analyzer fails with an HTTP 400 from the Anthropic API and the scan silently falls back to static-only analysis. The CLI still exits 0 and prints a normal report, so the failure is invisible unless
SKILLSPECTOR_LOG_LEVEL=WARNING(the default) output is inspected. Users believe they are getting the ~87% precision semantic pass when they are actually getting static-only results.Root cause
The Pydantic models used as structured-output / tool schemas declare numeric constraints via
Field(ge=..., le=...), which Pydantic emits as JSON Schemaminimum/maximum. Anthropic rejects those keywords in tool schemas with HTTP 400. Offending lines:meta_analyzer.py:66,llm_analyzer_base.py:64,llm_analyzer_base.py:66. Full details in the attached report