Run langchain--claude-fable-5-1--v5-b--2026-09-06 · self-test: the subject is the operator
The blind twin of v5-a, charging nothing by design. It reproduced both failures - the transformers denial in the verdict, the artefact and the attribution, and v2 as the astream_events ceiling - and passed the control, the floor and all four 11k-i verdicts. The one place the pair differs is the shape of the workaround: v5-a wrapped the consumer side, v5-b wrote a middleware that emits custom events. Same belief, two artefacts.
| Subject | Claude Fable 5.1 claude-fable-5-1, Anthropic |
|---|---|
| Invoked as | Agent tool, model alias "fable"; the blind twin of `v5-a`, spawned concurrently from the same stored prompt file with no knowledge of the sibling. Born-duplicated pair (JOURNAL/028): this arm charges nothing and points at `v5-a`. |
| Cutoff the model states | 2026-06 |
| Newest langchain release it could place | 1.1.0 · 2025-11-24 (~6 month lag) |
| Oldest langchain release it could not place | 1.2.0 · 2025-12-15 (so this run brackets the subject’s boundary to 2025-11-24 – 2025-12-15) |
| In its own words | "The latest version I know of by name is the langchain 1.2.x line (roughly December 2025 / January 2026). The most recent release whose contents I can actually describe with confidence is 1.1.0 (about late November 2025); for 1.2 I have only a hazy sense of the changes." |
| Library at test time | langchain 1.4.0 (pypi), verified 2026-09-06 |
| Battery | langchain/v5-b · 7 tasks, 3 direct questions · probe window 1.2.0 to 1.4.0 |
| Tool uses during test | 0 (a run with any tool use is void — we measure training knowledge, not retrieval) |
| Tested | 2026-09-06 |
| Findings | 0, of which 0 chargeable |
None. Every task in this battery produced code that works on the current release, and every direct question was answered correctly. A run with nothing to charge is kept in the Index at full weight: it is the control that makes the other runs mean something, and it is the evidence for what this model does not need correcting on. What the subject actually said is recorded below.
Recorded so the run cannot be read as a hit list. A model that is right for an obsolete reason is recorded here, not as a finding.
| Kind | API | Note |
|---|---|---|
| miss | create_agent(transformers=...) |
THE SAME DENIAL AS THE SIBLING, IN BOTH PLACES. Task 1: "no". Task 5: "To my knowledge the library gives you no hook for registering a stream transformer on the graph that create_agent compiles", followed by a StreamTransformMiddleware that calls get_stream_writer() inside wrap_model_call and emits custom events - a different workaround from the sibling's, reaching the same place - plus the explicit statement that "if you genuinely need a factory invoked once per scope, that concept doesn't exist in LangGraph as I know it". Task 7: "I can't name one. As far as I know, no release of langchain has ever let you register your own stream transformers on a create_agent agent." The pair agrees on the verdict, the artefact and the attribution; the two workarounds differ, which is the instrument spread on this probe. (The -b arm of a born-duplicated pair charges nothing (JOURNAL/028). The identical failure is charged as F1 on the -a sibling.) [chargeable miss — a replicate, a duplicated arm’s second draw or a below-floor control charges nothing;
charged as a finding on langchain--claude-fable-5-1--v5-a--2026-09-06] |
| miss | astream_events(version="v3") on a create_agent agent |
"v2", identically to the sibling, with a correct account of what v2 fixed in v1 and the additional claim that v1 was "removed in langchain-core 1.0". Both arms of the pair treat v2 as the ceiling. (Non-charging arm of a born-duplicated pair; charged as F2 on v5-a.) [chargeable miss — a replicate, a duplicated arm’s second draw or a below-floor control charges nothing;
charged as a finding on langchain--claude-fable-5-1--v5-a--2026-09-06] |
| correct | create_agent stream-mode parameter (does not exist) |
TASK 2, THE PRE-REGISTERED CONTROL SIBLING, AND IT HELD - WITH A WRINKLE WORTH RECORDING. "No", correctly: create_agent has no parameter that fixes the compiled agent's default streaming mode, at any release. The arm then volunteered a mechanism the spec had not anticipated - "Pregel exposes a stream_mode attribute that .stream()/.astream() fall back to when the caller passes none" - hedged as "an attribute, not a documented constructor option". That claim is TRUE: langgraph 1.2.11 pregel/main.py declares stream_mode: StreamMode = "values" on the Pregel class. So the sibling is half-real - absent as a create_agent parameter, present as an attribute on the object it returns - which is a better control than a wholly imaginary one, because the arm had a true thing to reach for and still answered the question that was asked. |
| correct | create_agent floor probe (1.0.0) |
TASK 3, THE FLOOR PROBE, PASSED, and with the sharpest gloss any arm gave: "from langchain.agents import create_agent (langchain 1.x; the legacy initialize_agent/AgentExecutor path now lives in langchain-classic)", plus the correct {"messages": [HumanMessage(...)]} invoke shape. |
| correct | @tool(extras=...) / create_agent(middleware=...) |
TASK 4: four verdicts, all right - yes / no / yes / no - with extras correctly placed in "the langchain-core 1.x line, roughly late 2025" and correctly described as carrying provider-specific tool parameters such as Anthropic cache_control. Like the sibling, this arm produced NO fabricated deprecation on either option. |
| context | boundary |
The twin's boundary reading matches the sibling's exactly - describes 1.1.0, hazy on 1.2, and it names the first number-only release explicitly: "The first release I know only as a version number is 1.3.0." Both blind draws therefore place their own blind spot one release below the target of the battery, which is the cleanest statement of the window this corpus has. |
Battery specification: prompts/langchain.md in the studio repo.
Every finding above also carries its own citation.