---
library: langchain
library-latest: "1.3.18"
library-latest-verified: 2026-08-31
model: claude-fable-5 (spawned via Agent model alias "fable")
model-self-reported-cutoff: 2026-01
model-believed-latest: "1.0.x seen; 1.0.0 (October 2025) is the last release whose contents it can describe"
test-date: 2026-08-31
battery: langchain/v1 (11 idiomatic tasks + 3 direct questions; probes restricted to 1.0.0–1.2.0)
tool-uses-during-test: 0
verified-against: https://docs.langchain.com/oss/python/migrate/langchain-v1 · https://docs.langchain.com/oss/python/releases/changelog · https://reference.langchain.com/python/langchain-classic/ · https://pypi.org/pypi/langchain/json
status: open (no retest yet)
json: fable-5.json
---

# LangChain × Claude Fable 5 — battery v1 findings

**One finding, and the shortest lag the Index has measured: three months.**

Eleven code tasks, eleven pieces of working LangChain v1 — from the subject with the *earlier* of
the two stated cutoffs in this battery.

## What it wrote

`create_agent` with `system_prompt`, `@tool` from `langchain.tools`, an `InMemorySaver`
checkpointer keyed by `thread_id`, `ToolRuntime[Context]` with `context_schema`/`context=`,
`@wrap_model_call` middleware wrapping `trim_messages`, both spellings of the model-node stream
filter (`"model" in chunk` for `stream_mode="updates"`, `meta.get("langgraph_node") == "model"`
for `stream_mode="messages"`), and `.text` as a property with the version note attached: *"`.text`
is a property in langchain-core 1.x; on older 0.3.x it was the method `resp.text()`."*

On the RAG task it flagged the removal unprompted — *"the old `RetrievalQA` chain is legacy and
lives in `langchain-classic` now"* — and on the belief probe it listed the v1 namespace accurately,
module by module.

Task 7 answered with a bare Pydantic model, `response_format=WeatherReport`. That is correct and
recorded as such: v1 accepts a bare schema and picks a strategy; what 1.0.0 removed is prompted
output, the form that passed an instruction string alongside the schema.

## The finding

Knowledge stops at **1.0.0 (2025-10-17)**; **1.1.0** shipped **2025-11-24**, one month inside the
subject's stated **2026-01** cutoff. It bracketed itself correctly:

> *"my coverage gets thin and less reliable for events from roughly November 2025 onward, which is
> exactly why I can describe 1.0.0 but not its latest patches."*

November 2025 is where 1.1.0 landed. This is the narrowest margin any finding in the Index has
been charged on, and it is charged because the fairness rule is mechanical: 1.1.0 precedes the
stated cutoff, so it counts. In practice the gap costs a developer nothing — 1.1.0 is additive.

## The one thing it got wrong, it got wrong in prose

On task 6 it wrote the correct code (`langsmith.Client().pull_prompt(...)`) and then told the
reader:

> *"The older spelling `from langchain import hub; hub.pull(\"hwchase17/react\")` still exists but
> the `langsmith` client is the current path."*

It does not still exist. 1.0.0 moved `hub` into `langchain-classic`, and the migration guide shows
the import being rewritten. This is recorded as an **imprecision, not a finding**, under the
code-vs-claim rule — the generated code is correct and the correct path is named. It is worth
saying plainly that this is the closest call in the run: the statement is flatly wrong rather than
hedged, and a stricter reading of our own rule would charge it. The call is recorded in the JSON
with its reasoning so a reader can disagree with it.

The other imprecision is the same one the other subjects made: describing `langchain-anthropic`'s
`max_tokens` default as *"small (historically 1024)"*, which 1.0.0 changed to a per-model value.
Hedged, and the code sets the value explicitly.

## Where this sits

Three months is the shortest lag in the Index, and it lands on the subject with the earlier stated
cutoff — Fable 5 at 2026-01, against Opus 5 at 2026-05. Both stop at exactly the same release,
1.0.0, which is the pattern all four libraries now show for this pair. What differs is only the
distance from that shared boundary to each model's stated cutoff. See
[JOURNAL/013](../../JOURNAL/013-the-python-that-split-the-models.md).

Findings as data: [`fable-5.json`](fable-5.json). Battery: [`prompts/langchain.md`](../../prompts/langchain.md).
