# Changelog v0.3.48 - 2026-04-11

### Fixed
- **jcode model validation freeze (for real this time)** — jcode has a hardcoded model whitelist that rejects bare model names like `gpt-oss-120b` via `--model` flag. The v0.3.47 fix using `JCODE_MODEL` env var didn't actually work — jcode silently ignores it for the `openai-compatible` provider. The real fix uses two strategies:
  1. **Native providers**: For providers that jcode supports natively (Groq, Cerebras, DeepInfra, Scaleway, Together, Hugging Face, Fireworks, Chutes, OpenRouter, Perplexity, ZAI, Mistral), we now use `--provider groq` instead of `--provider openai-compatible`. Native providers accept namespaced model names like `openai/gpt-oss-120b` without validation issues.
  2. **OpenAI-compatible fallback**: For providers without a native jcode match (NVIDIA NIM, SambaNova, etc.), we keep `--provider openai-compatible` but ensure model IDs always have a namespace prefix (`openai/gpt-oss-120b` instead of `gpt-oss-120b`) and set a placeholder `OPENROUTER_API_KEY` to satisfy jcode's false credential check on namespaced models.

### Added
- **`JCODE_NATIVE_PROVIDERS` mapping** — New provider mapping table that routes 12 of our providers to jcode's native provider system, with correct env var names extracted from the jcode binary. This gives better compatibility and avoids the `openai-compatible` provider's model validation bugs.
- **`ensureJcodeModelPrefix()` helper** — Ensures model IDs always have a namespace prefix (e.g. `gpt-oss-120b` → `openai/gpt-oss-120b`) so jcode's whitelist validation is bypassed.
