Two documents describe preset pipelines in prose that no longer matches the presets map in config/config.go. Same defect class as the table drift fixed in #142, but in prose, which that PR's guard (TestDocumentedPresetPipelinesMatchTheShippedOnes) does not read — it parses markdown table rows only.
1. README.md:147-148 — codesmart and codesafe
Documented:
[format, toon, dedup, failed_run, cmdfilter, extract_llm, extract, cachesplit]
Actually ships:
format, textclean, searchfold, dedup, failed_run, cmdfilter, extract_llm, extract, linecap, cachesplit
So the README names toon — retired from codesmart after acting 0 of 5,752 production requests and converting 0 candidates in 11.67M measured tokens — and omits textclean, searchfold and linecap. This is the default preset, in the first document anyone reads.
2. docs/get-started/connect-ibm-service.md:22 — the hosted default
Documented as the "Default pipeline":
[format, toon, dedup, failed_run, cmdfilter, extract, cachesplit]
The hosted default is house, which ships:
format, dedup, toon, cmdfilter, searchfold, textclean, extract, cachesplit, toolfilter
Wrong in three ways: it lists failed_run, which house does not run; it omits searchfold, textclean and toolfilter; and the order differs (house's order is the operator's, deliberately not the lossless-first rule — see the note under the table in docs/reference/presets.md).
toolfilter is the omission that matters most here: this page is what a prospective hosted tenant reads to decide what the service will do to their traffic, and declaration removal is exactly the kind of thing they would want disclosed.
How it was found
While adding a row to the preset table for the cache preset (#141) — the table itself turned out to be stale in every row, which is #142. These two are the same rot in places the new guard cannot see.
Severity
Medium. Nothing misbehaves; the docs misdescribe what runs, in the direction that matters (naming a component that does not run, omitting three that do, including one that removes tool declarations). A reader who audits our claims against the code finds a contradiction, and cannot tell which side is authoritative.
Fix options
- Correct the prose, leave the guard as-is. Cheapest, and it rots again — this is the second time these numbers have drifted.
- Correct the prose and extend the guard to read fenced/inline pipeline lists too. The parsing is more speculative than a table row (prose mentions component names for other reasons), so it needs an explicit "this line is a pipeline claim" marker to avoid false positives — e.g. a comment anchor, or a generated block.
- Stop restating pipelines outside
docs/reference/presets.md and link to it instead. Removes the class of bug rather than guarding it, at the cost of making the README less self-contained.
My suggestion is (3) for the README's prose list plus (1) for the IBM page's table cell — which is a table cell the guard could cover if the row were keyed by preset name (| \house` | ... |`) rather than by the label "Default pipeline".
Found by Claude Opus 5 while implementing #130.
Two documents describe preset pipelines in prose that no longer matches the
presetsmap inconfig/config.go. Same defect class as the table drift fixed in #142, but in prose, which that PR's guard (TestDocumentedPresetPipelinesMatchTheShippedOnes) does not read — it parses markdown table rows only.1.
README.md:147-148—codesmartandcodesafeDocumented:
Actually ships:
So the README names
toon— retired fromcodesmartafter acting 0 of 5,752 production requests and converting 0 candidates in 11.67M measured tokens — and omitstextclean,searchfoldandlinecap. This is the default preset, in the first document anyone reads.2.
docs/get-started/connect-ibm-service.md:22— the hosted defaultDocumented as the "Default pipeline":
The hosted default is
house, which ships:Wrong in three ways: it lists
failed_run, whichhousedoes not run; it omitssearchfold,textcleanandtoolfilter; and the order differs (house's order is the operator's, deliberately not the lossless-first rule — see the note under the table indocs/reference/presets.md).toolfilteris the omission that matters most here: this page is what a prospective hosted tenant reads to decide what the service will do to their traffic, and declaration removal is exactly the kind of thing they would want disclosed.How it was found
While adding a row to the preset table for the
cachepreset (#141) — the table itself turned out to be stale in every row, which is #142. These two are the same rot in places the new guard cannot see.Severity
Medium. Nothing misbehaves; the docs misdescribe what runs, in the direction that matters (naming a component that does not run, omitting three that do, including one that removes tool declarations). A reader who audits our claims against the code finds a contradiction, and cannot tell which side is authoritative.
Fix options
docs/reference/presets.mdand link to it instead. Removes the class of bug rather than guarding it, at the cost of making the README less self-contained.My suggestion is (3) for the README's prose list plus (1) for the IBM page's table cell — which is a table cell the guard could cover if the row were keyed by preset name (
| \house` | ... |`) rather than by the label "Default pipeline".Found by Claude Opus 5 while implementing #130.