Content audit: remove 20 entries, correct 12, add 8 - #1
Conversation
Applies the outcome of content audit AEA-691 to the entry data on this
branch. Data-only: no template, style, or page-copy changes.
Disqualified (17):
- No first-class Valkey integration to fix (9): celery, kombu, resque,
hangfire, redli, webdis, vllm, openmemory-javascript-sdk,
trino-connector. These work only via RESP compatibility, depend on a
Redis client, and name Valkey nowhere in code, CI, docs or changelog.
- Whole project stale or abandoned (5): tinywebdis, medis, predixy,
php-resque, walrus. Not just the Valkey parts, so no fix could land.
- Audience (2): valkey-test-framework, valkey-perf-benchmark. Both serve
people developing Valkey itself rather than people building on it.
- Licence (1): phpredis. PHP-3.01 is not OSI-approved.
Remediable (4) - removed now, reinstatement documented:
- recall: README install command at line 294 installs nothing
- db-gpt: 3 undeclared runtime deps break `import dbgpt.core`
- langchain-aws: from_texts() raises; wrong exception type caught
- langchain4j-valkey: published pom's unresolvable
${os.detected.classifier} yields a native-less glide jar
These have genuine first-class Valkey integrations on official Valkey
clients and are actively maintained, but the support they advertise is
broken or incomplete as shipped. Each should return once a fix ships in
a released version.
Verification: 19 functional runs against live Valkey in isolated
containers, cross-checked server-side; full-tree source inspection with
`git log -S` history search; every decision ratified by hand against the
raw audit trails.
manifest.json updated to match; 48 -> 27 entries (12 clients, 15
integrations), validated against files on disk in both directions.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
`Only open-source licenses are accepted` was immediately followed by a clause admitting proprietary and source-available licences case by case, so the first sentence claimed an absoluteness the second withdrew. Reframed as a requirement with a bounded exception, which is the intent: an open-source licence is required, and other licences are considered only by exception where the tool provides significant community value. No change to the substantive policy or to the community-value bar. Found by content audit AEA-691 (recorded as P7).
Follow-up to the deletion commit on this branch. Two kinds of change: FIELD CORRECTIONS to 11 existing entries, each backed by a functional audit trail: - Sidekiq: description said "for Rails applications" (wrong - upstream says any Ruby app, and this was disproved functionally by running a worker without Rails); repository moved mperham/sidekiq -> sidekiq/sidekiq - Rq: licence was the wrong SPDX id; repository and description corrected - valkey-py features: 110000001 -> 111000101 (two false negatives proven against a live server - pubsub_state_restoration and client_side_caching) - iovalkey features: corrected after direct measurement - huey, Valkey Admin, Cognee, Haystack, PraisonAI: description fixes - Valkey Admin: "desktop app" -> "web interface" (upstream is web-based) - CocoIndex, PraisonAI, Spring Data Valkey: installCommand corrected; Spring Data Valkey had none, and its coordinate is a three-segment vendor namespace (io.valkey.springframework.data) 7 NEW ENTRIES added to integrations, all functionally verified: - LiteLLM, LangBot, Agno, Langflow, LocalAI - requested by @jbrinkman. Four are Tier 1 (exercised against a live Valkey); LocalAI is Tier 3 (first-class valkey-go dependency proven from go.mod, runtime not executed - its Go build failed on an unrelated dependency). - Valkey MCP Server, Valkey Message Queue Starter - operator-attested. Each install command was tested from a clean environment; several were wrong in ways that left users with no Valkey support at all. NOT included, deliberately: the 6 server-module entries (valkey-search, valkey-json, valkey-bloom, valkey-ldap, valkey-bundle, valkeymodule-rs). They are absent from this branch entirely and we could not tell whether that was deliberate scoping in the clients+integrations restructure or a side effect. Flagging rather than re-adding them. 27 + 7 = 34 here; our audit set is 40, and those 6 are the difference. vLLM remains cut. The original basis was wrong (it was audited against vllm-project/vllm), but the correct finding supports the same outcome: the Valkey work lives in vllm-project/semantic-router, a separate Go product with its own release train, so an entry named "vLLM" would point readers at a repository that genuinely has no Valkey support.
Field edits, each decided on evidence recorded in the audit trail: - huey installCommand -> "pip install huey valkey-glide-sync". huey reaches Valkey two ways: valkey-glide-sync (first class, but undocumented upstream and with real gaps - blocking ops rejected, priorities NotImplementedError) and huey[redis] (documented, and upstream's install doc even names Valkey). Chose the GLIDE route because this entry's description says it is "built on the official Valkey GLIDE client", so a redis-py install line would contradict the copy. - LiteLLM and LocalAI retagged to "Inference & serving". LiteLLM is an LLM API gateway that was filed under Agent frameworks; LocalAI is a self-hosted inference server that was filed under RAG & retrieval. - valkey-glide-c.json renamed to valkey-glide-csharp.json. The '#' was lost in slugification, so the slug read as the language C. Pure rename, content hash unchanged; the manifest was the only reference. Also fixes a mistake of mine from the previous commit (992f368): the 7 entries added there were missing "isFirstParty", which all 27 pre-existing entries carry. All 7 are third-party, so all are set to false, and the field is now present on 34/34 entries. Separately, a key-reordering step in this change had dropped isFirstParty from huey.json; that is restored, and entries are now rewritten preserving their original key order. Not included: valkey-search and valkey-ldap "documentation" URLs were also set (https://valkey.io/topics/search/ and /topics/ldap/, both verified 200), but those two entries are among the 6 server-module entries absent from this branch, so the change has nowhere to land here. valkey-json and valkey-bloom stay unset - their topics pages 404.
Ruling: no new fields on entry JSON, and an entry that can't be described within the existing schema doesn't ship. LocalAI advertises a Valkey vector backend that is not part of the default image. backend/index.yaml publishes it as a separate OCI artifact resolved through LocalAI's backend gallery, so using it is a two-step operation. Every candidate value for installCommand was checked and none of them delivers the advertised capability: - "docker run localai/localai" installs the product but not the valkey-store backend, so it points users at something that won't work as described - the backend image itself is not a command a user runs; it is pulled by the gallery installCommand can hold one string, so there is nowhere truthful to put "then install the valkey-store backend". Rather than add a field or ship a misleading one-liner, the entry comes out. Every other entry with a null installCommand was re-checked against the same test - does the null hide a requirement, or is there simply nothing to install? All the others are honest nulls: valkey-cli ships with the server, valkey-container is itself an image, valkey-helm and valkey-operator are deployed rather than installed, Valkey Admin is a console you run, valkey-skills has no runtime artifact. LocalAI was the only one concealing a requirement. Valkey Message Queue Starter was reviewed under the same rule and stays: its "pnpm create next-app --example ..." line is long but is a single valid command, which is a different thing from unexpressible. Nothing is wrong with LocalAI itself. Its Valkey support is first class and proven from source (go.mod requires valkey-io/valkey-go), it is MIT and actively maintained. It qualifies again if the backend ever ships in the default image, or if a prerequisites field is introduced later. Integrations 22 -> 21.
The field was described in one sentence, which left three things unstated that reviewers were having to infer: - it only makes sense next to "documentation": null; a note beside a populated URL explains nothing - a useful note says what was looked for, what exists instead, and when it was checked, in the form "(checked YYYY-MM-DD)". Without a date the note stops being trustworthy once docs sites move - an unverified candidate URL must be named as unverified and must stay out of the documentation field That last point is not hypothetical. One entry's note recorded an unconfirmed <project>.io reference; the domain turned out to be a parked for-sale page with no documentation on it. Saying so in docsNote is what kept it out of documentation, which is exactly what the field is for. Also states plainly that docsNote does not satisfy the documentation expectation in the review checklist - it records a gap honestly so a reviewer can tell a researched null from a skipped one - and that the field is never rendered on the card, so it can be candid. Verified: no template references it. Examples are taken from entries already in the catalog.
The counterpart to removing vllm. vllm-project/vllm has no Valkey support, but the sibling project vllm-project/semantic-router has three first-class Valkey backends, so it gets its own entry rather than the removal quietly losing a real integration. Named "vLLM Semantic Router", not "vLLM". Upstream self-brands it that way, and the shorter name is what caused the original audit error: a reader would go to vllm-project/vllm and find nothing. They are separate products - not a fork, Go rather than Python, own domain, own release train. Verified at Tier 2. Tier 1 was not reachable honestly: both Valkey-bearing packages fail to link without the project's Rust candle-binding, and its own Valkey integration test needs real model embeddings. What was proven instead: the FT.CREATE argument vector taken verbatim from pkg/memory/valkey_store.go was accepted by a live server, confirmed with FT._LIST and FT.INFO on Valkey 9.1.2. First class, decisively: src/semantic-router/go.mod requires valkey-io/valkey-glide/go/v2, and every Valkey file imports glide. There is a go-redis dependency too, but it serves a separate Redis backend. The Valkey work is substantial - 124 files, 3,181 lines of non-test implementation, five merged PRs. Needs the search module; failure without it is loud, not silent. installCommand is null because the router is deployed rather than installed, the same as the operator and Helm entries. A PyPI package exists but at 135 KB cannot be the Go router, and its purpose is unverified, so it is not asserted as the install. Apache-2.0, confirmed from the LICENSE file. Integrations 21 -> 22.
|
These changes are meant to be incorporated into valkey-io#602 |
1bed776
into
jbrinkman:fix/ai-libraries-595
Content audit: remove 20 entries, correct 12, add 8
Follow-up to valkey-io#602, targeting
fix/ai-libraries-595rather thanmainso it lands inside the existing PR.This applies the outcome of a content audit (AEA-691) over every entry on this branch, ahead of the handoff to the Valkey project.
What this PR does now
docsNotedocumented properly; the self-negating licence rule rewordedCommits are ordered so each is reviewable on its own: removals, then field corrections + additions, then the final edits.
Methodology
Every entry started disqualified and had to earn re-inclusion. A remove-on-suspicion audit keeps whatever nobody happens to challenge; deny-by-default forces a positive case for each entry.
1. Functional verification against a live server
32 verification runs, one project per run, each isolated: cloned fresh, built from source where required, exercised against a real Valkey server in its own container on its own port (
valkey/valkey:latest→valkey_version 9.1.2;valkey/valkey-bundlewhere modules were needed)."It connects" was not a pass. The bar was set per entry type:
valkey-searchitself, distances were hand-computed and matched to float32 precision rather than merely observed to be non-erroring.MONITORcaptured the actual wire traffic; that is how one client'sCLIENT CAPA REDIRECTclaim was confirmed rather than assumed.Every result was cross-checked server-side rather than trusting the client:
KEYS,DBSIZE,TYPE,FT._LIST,FT.INFO,INFO server.Results were graded by confidence — functional proof, reproducible workaround, or static analysis only — with static positives treated as weak and static decisive negatives as strong. Two entries are retained on non-Tier-1 evidence and both say so in the trail, rather than being rounded up.
2. Source inspection, not README reading
An early pass checked READMEs and published API docs and produced false negatives — projects wrongly assessed as having no Valkey support. The method was corrected to: clone, grep the entire tree for every spelling of Valkey, read the dependency manifests directly, and search history for support that was renamed or removed.
That correction changed real outcomes, five times. README absence turned out to carry no information at all:
litellmlocalailangbotsemantic-routerOne of them explains why: its README never enumerates backends at all. A README is a marketing surface, not a dependency manifest.
3. Human ratification of every decision
No entry was removed or retained on tooling judgment. Verification produced verbatim audit trails — roughly 23,000 lines across the 32 runs, recording actual commands and actual output rather than summaries.
Every client and integration trail was read individually, looking for the markers that separate a real integration from an incidental one: which client library is actually imported, whether Valkey is named in the project's own manifests and docs, whether Valkey-specific code, tests or CI exist, whether a version floor is published, and whether the functional proof exercised the project's own Valkey code path rather than something adjacent. Where a trail's conclusion did not hold up against its own raw output, the conclusion was overturned — which is how the reinstatements were caught, and how several claims in our own catalog were found wrong.
Tooling gathered and graded evidence; the inclusion decision was mine.
Classification
Three outcomes rather than two, because "remove" was hiding two different situations:
Removals (20)
Disqualified (16) — no route back
No first-class Valkey integration to fix (8). These work only because Valkey speaks RESP: they depend on a Redis client, name Valkey nowhere, and have no Valkey CI, docs, or changelog entry. Adding support would be a feature request upstream, not a correction.
celery·kombu·resque·hangfire·redli·webdis·openmemory-javascript-sdk·trino-connectorWhole project stale or abandoned (5). Not merely the Valkey parts — no maintainer is present to merge a fix:
tinywebdis(~10 yr) ·medis(~2.5 yr) ·predixy(~2.5 yr) ·php-resque(~37 mo) ·walrus(~7.9 mo, and no Valkey story)Audience (2). Both serve people developing Valkey itself:
valkey-test-framework·valkey-perf-benchmarkLicence (1).
phpredis— PHP-3.01 is not OSI-approved, and the guide requires an OSI licence.vllm— removed, and worth explainingRemoved, but the original reasoning was wrong and has been replaced. The first finding was made against
vllm-project/vllmand concluded there was no Valkey support. That is true of that repository — but the Valkey work exists, in the sibling projectvllm-project/semantic-router, which we then audited properly.The cut still stands, on corrected grounds:
vllm-project/vllmgenuinely has no Valkey support (code search: 0 hits), so an entry namedvllmwould point readers somewhere that cannot do what the entry claims. The two are separate products — not a fork (fork:false,parent:null), Go vs Python, own domain, own release train.So
semantic-routeris added below as its own entry instead. Same conclusion for the reader, arrived at honestly.Remediable (4) — removed now, reinstatement documented
Genuine first-class integrations on official Valkey clients, actively maintained, but the advertised support is broken as shipped. We intend to raise each upstream.
recall@valkey/valkey-glide+ dedicated adapterdb-gptvalkey-glide, 870-line vector storeimport dbgpt.coreafter a documented installlangchain-awsValkeyVectorStoreon GLIDEfrom_texts()raises —check_index_existscatches the wrong exception type; unfixed in a released version ~6 monthslangchain4j-valkeyio.valkey:valkey-glidedirectly${os.detected.classifier}, so consumers get the native-less jar and fail on first callDeliberately excluded from these findings: anything that is our problem (catalog wording, install fields) and anything the project documents by design.
One further removal, on a rule rather than a defect
localai— its Valkey support is real and first class (go.modrequiresvalkey-io/valkey-go), MIT, actively maintained. Nothing is wrong with the project. But its Valkey backend is not in the default image: it is a separately published gallery artifact, so using it is a two-step operation, andinstallCommandholds one string. Every candidate value was tested and none delivers the advertised capability —docker run localai/localaigets the product without the backend. Rather than add a schema field or ship a misleading one-liner, the entry comes out. It qualifies again if the backend ships in the default image.Additions (8)
All functionally verified; each has a trail.
litellmFT._LIST→ its index,FT.INFO→ VECTOR dim 8 COSINElangbotftnamespaceagnovalkey-glide-synclangflowsemantic-routerFT.CREATEvector lifted verbatim from source, accepted by a live servervalkey-glide/go/v2valkey-mcp-servervalkey-message-queue-starter@valkey/valkey-glidesemantic-routeris named vLLM Semantic Router, not "vLLM" — see above.Corrections to retained entries (12)
Each was found by testing, not by reading:
sidekiq— description said "for Rails applications". Upstream says any Ruby app, and this was disproved functionally by running a worker with no Rails present. Repository also movedmperham/sidekiq→sidekiq/sidekiq.valkey-py— feature flags110000001→111000101. Two false negatives proven against a live server: pubsub state restoration and client-side caching both work.valkey-admin— described as a "desktop app". It is web-based.rq— wrong SPDX licence identifier; repository and description corrected.spring-data-valkey— had noinstallCommand. Its coordinate is a three-segment vendor namespace (io.valkey.springframework.data) that could not have been guessed.valkey-glide-c.json→valkey-glide-csharp.json— the#was lost in slugification, so the slug read as the language C.Module requirements are now disclosed, and scoped correctly. Where an entry has two Valkey surfaces and only one needs a module, the qualifier sits mid-sentence next to that surface rather than at the end of the sentence where it would claim both. Two entries were wrong in exactly that way and previously contradicted their own upstream docs, which correctly say plain Valkey is enough.
Question for @jbrinkman — server modules
This branch contains no entries for the Valkey server modules:
valkey-search,valkey-json,valkey-bloom,valkey-ldap,valkey-bundle,valkeymodule-rs. They were present in the source data this catalog was built from, and this PR does not add them back — we'd rather ask than assume.Was that deliberate scoping, or a side effect of the
clients+integrationsrestructure? A server module is neither a client nor an integration, so it may simply have had nowhere to go.Flagging it because the modules are load-bearing for this very page: during verification, most AI/RAG entries would not function at all on a stock Valkey server — they need
valkey-searchand/orvalkey-json, which is whatvalkey-bundleprovides. Several failed silently, returning0or[]rather than erroring.So the catalog lists integrations that depend on components the catalog itself doesn't mention. Options: add the modules here (a third category, or inside
integrations), keep the disclosure in entry descriptions only, cover it in page copy, or point elsewhere if modules are catalogued somewhere better. Happy to follow whichever you prefer.Two smaller things in the same area, both left for you:
Proxies & gateways,Data movement,Observability & testing— because this audit removed their only occupants. Two tags in active use are undocumented:ClientsandServer modules, and the guide states that clients do not use tags while all 12 client entries carry one.Verification
manifest.jsonparses, and its entry list matches the files on disk exactly — 34 = 12 clients + 22 integrations — with no orphaned references in either direction. Every entry file parses. Every description is within the guide's 200-character limit.isFirstPartyis present on all 34.