---
title: "Doctor: Version Compatibility: Feature Matrix (part 3 of 3)"
description: "Version Compatibility for the Doctor skill, page 4 of 5: Feature Matrix (part 3 of 3)."
canonical: "https://orchestkit.dev/docs/reference/skills/doctor/references/version-compatibility/03-feature-matrix-part-3"
---

# Doctor: Version Compatibility: Feature Matrix (part 3 of 3)

Version Compatibility for the Doctor skill, page 4 of 5: Feature Matrix (part 3 of 3).

> Part of the [Doctor](/docs/reference/skills/doctor) skill reference. The main page carries the skill itself; this page holds material that used to sit at the bottom of it.

**Version Compatibility**, page 4 of 5:

1. [Overview](/docs/reference/skills/doctor/references/version-compatibility/00-overview)
2. [Feature Matrix (part 1 of 3)](/docs/reference/skills/doctor/references/version-compatibility/01-feature-matrix-part-1)
3. [Feature Matrix (part 2 of 3)](/docs/reference/skills/doctor/references/version-compatibility/02-feature-matrix-part-2)
4. **Feature Matrix (part 3 of 3)** (this page)
5. [Prompt Caching Recommendation](/docs/reference/skills/doctor/references/version-compatibility/04-prompt-caching-recommendation)

| Feature | Min CC Version | OrchestKit Usage | Degradation if Missing |
|---------|---------------|-----------------|----------------------|
| `2.1.317` release | 2.1.317 | **Status: one OTel doc item; one upside on the session-identity child.** [CHANGELOG 2.1.317](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md#21317). **Added:** `anthropic.plan`, `anthropic.seat_type`, `anthropic.provider` and `anthropic.custom_base_url` on OTel metrics, events and spans (doc adoption in `otel-fields.md`); `onFailure: "block"` for Agent SDK hook callbacks (SDK only); `CLAUDE_CODE_DISABLE_NESTED_SESSION_ID`, which ork must not set. **Fixed, mapped:** a `claude -p` run inside a cloud or self-hosted runner session shared that session's ID and transcript and sent it its own title (ork's prompt hook starts exactly such a child, `session-identity.ts:326`); `claude -p` exits 1 when a full disk loses its transcript. **Changed, mapped:** subagents on another model use that model's saved or default effort (ork agents all name `effort:`); the Read tool's unchanged-file stub is gone, so a repeat Read returns the full content | Before 2.1.317: in a cloud session, ork's identity child can rename the parent session |
| `2.1.318` release | 2.1.318 | **Status: one mod behaviour to re-measure.** [CHANGELOG 2.1.318](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md#21318). **Changed, mapped:** what a mod attaches at `prompt.submit` stays in the user's turn instead of going out as a system message (verify: `mods/memory-lens/README.md:70` records a `hook_additional_context` attachment measured on 2.1.283); `deniedMcpServers` URL entries also block Anthropic-provided servers and cloud connectors. **Added:** `effort` on a mod's `$.model.fork` (no ork mod uses it); `credential_expires_at` in `claude -p` JSON and a stderr warning 10 days before a stored login ends (ork's identity child reads stdout text only). **Fixed, mapped:** idle compaction replacing a conversation with a reply that was not a summary; a `Setup` hook's `CLAUDE_ENV_FILE` variables not reaching Bash in some cloud sessions (ork's Setup hook writes none) | n/a |
| `2.1.319` release | 2.1.319 | **Status: one setting to report in doctor; three doc items.** [CHANGELOG 2.1.319](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md#21319). **Added:** `permissions.denyInsteadOfPrompting`, a call that would wait on a prompt is denied and the turn continues (follow-up: doctor reports it under `unattended`); MCP tasks in the terminal with `CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND` and `CLAUDE_CODE_DISABLE_MCP_TASKS`; `CLAUDE_CODE_DISABLE_FEATURE_FLAGS`. **Changed, mapped:** with telemetry or feature flags off, auto mode no longer falls back to the built-in classifier; `CLAUDE_CODE_AUTO_MODE_SERVER=0` keeps it (doc: configure `cc-version-settings.md` section); self-paced `/loop` ends when a turn does not reschedule, `CLAUDE_CODE_LOOP_KEEPALIVE=1` restores the fallback wakeup (doc: chain-patterns Pattern 8); PostToolUse hooks also run, with at most 10 s, on calls that finish after an interrupt (ork's synchronous PostToolUse hooks are all at or under 10 s). **Fixed, mapped:** `${CLAUDE_PLUGIN_ROOT}` in a plugin `subagentStatusLine` (ork ships none); `claude plugin eval` suggesting `max: 0` alone (ork's should-not-fire graders already set `min: 0`, `max: 0`, `arm: both`) | Before 2.1.319: an unattended lane that hits a permission prompt waits for a human |
| `2.1.320` | n/a | **Status: absent upstream.** No `## 2.1.320` heading in the CC CHANGELOG (checked 2026-11-10); the next entry after 2.1.319 is 2.1.321. Nothing to adopt | n/a |
| Fable 5.2 default model | 2.1.321 | **Status: adopt (pricing row, then alias).** CHANGELOG 2.1.321: "Added Claude Fable 5.2 (`claude-fable-5-2`), now the default Fable model, 1M context, $8/$40 per Mtok with $0.20/Mtok cache reads". The 2.1.322 binary maps it to `tier_8_40_cache_read_0_20` (cache write 10 for 5m, 16 for 1h). Saved Fable 5.1 picks move to `fable`. ork's `models.vocab.json` still maps `fable` to `claude-fable-5-1` and has no 5.2 row, so `cost-estimator.ts` prices a Fable 5.2 session at the Sonnet 5.5 fallback | Before the follow-up lands: Fable 5.2 sessions are costed at Sonnet 5.5 rates |
| `2.1.321` release | 2.1.321 | **Status: Fable 5.2 adoption (row above); two upside hook fixes.** [CHANGELOG 2.1.321](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md#21321). **Fixed, mapped:** a PreToolUse `ask` lost when another hook's `defer` finished first (ork's Bash dispatcher emits both); on Windows, `FileChanged` hooks stopping for `watchPaths` paths after the first shell command (ork's CwdChanged hook sets `watchPaths`); `mcp_tool` hooks over 16 MiB (ork has none). **Changed, mapped:** mods' own `$.tool.call` and `$.mcp.call` raise no prompt (no ork mod calls them); `.claude/skills` folders inside `~/.claude/plugins` no longer load (ork nests none); headless sessions hot-reload mods unless `CLAUDE_CODE_PLUGIN_DIR_WATCH=0`; OTel hook events leave two built-in hooks out of `num_hooks` | n/a |
| `2.1.322` release | 2.1.322 | **Status: nothing to adopt.** [CHANGELOG 2.1.322](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md#21322). **Added:** fast mode on Vertex in the global, us and eu regions, falling back to standard speed when refused (ork pins no provider or fast mode) | n/a |

**Function hook probes, 2026-09-19** (`claude --version` reports `2.1.277 (Claude Code)`; repeatable end to end via `tests/probes/function-hooks-probe.sh`, four `claude -p` calls with `--model haiku --no-session-persistence`, verdicts grepped out of each run's `--debug-file` log):

```
REFUTED R1-unset user-tier hooks modules not loaded; rollout flag off from the default (a cold GrowthBook cache, no payload yet)
VERIFIED R1-set lesson-cards loaded (tier user); 2 settle lines logged
REFUTED R3-main tool.list hook loaded tier user but never dispatched; Read still offered (model YES)
REFUTED R3-subagent subagent still offered Read and tool.list never dispatched; SUBAGENT:YES
```

Reading: on this account, measured before 2.1.287, a user-tier hooks module (`mods/lesson-cards` via `--plugin-dir`) did NOT load with `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` unset; the debug log names the decider, a cold GrowthBook cache falling back to the compiled default of false, matching the `env ?? GrowthBook ?? false` gate in §2 of the 2026-09-18 cc-mods brief. With the env var set to `1` the same module loads at `tier user` and its `session.start` and `tool.call` hooks dispatch. Re-measured on 2.1.288 (2026-10-03, headless `-p --plugin-dir`, each of the four ork mods, flag unset then set): every module loads and fires with the flag unset, so the env gate applies to 2.1.266 through 2.1.286 only. And `tool.list` is not consulted when the offered tool set is built for either the main loop or an Explore subagent in a `-p` run (zero `tool.list` dispatches in both runs, `Read` still offered in both), so the §6 subtractive-scoping claim does not hold for model-facing tool lists on this build; `tool.describe` (245 settles) is the per-tool surface that actually ran.
