/* Validation proof — captured during pre-release, v1.1.0. Tag: v1.1.0, pinned commit 466f802ebadd8126bb09dc9fe9e81b736a8814b6 */
Captured on 2026-08-12 against PyPI diffbot-python 0.2.1, with a valid token
at ~/.diffbot/credentials.
v1.1.0 adds five use-case Knowledge Graph skills — /diffbot-news,
/diffbot-organizations, /diffbot-people, /diffbot-places, /diffbot-deals —
layered over the existing /diffbot-dql, which keeps its DQL reference material but
gives up its news and people routing claims to the new skills. Ten skills total.
$ claude plugin validate .
Validating plugin manifest: .../.claude-plugin/plugin.json
Validating plugin: .../CLAUDE.md
⚠ Found 1 warning:
❯ root: CLAUDE.md at the plugin root is not loaded as project context.
To ship context with your plugin, use a skill (skills/<name>/SKILL.md) instead.
✔ Validation passed with warnings
The single warning is expected and unchanged from v1.0.0: CLAUDE.md is
maintainer documentation, not user-facing plugin context.
All four manifests verified in sync at 1.1.0 — name, version, license,
repository, homepage, keywords, author, and description are byte-identical
across .claude-plugin/, .cortex-plugin/, .github/plugin/, and .factory-plugin/.
All ten skill directories verified: SKILL.md present, frontmatter parses, and
name: matches the directory name in every case (the collision-safety invariant).
All eight subcommands the skills rely on are present:
ask, crawl, crawl-delete-job, crawl-list-jobs, dql, entities, extract, web-search.
| Skill | Command | Result |
|---|---|---|
| dql | db dql init |
ontology refreshed, token found |
| dql | db dql probe 'type:Organization name:"Diffbot"' |
4 hits |
| news | db dql probe 'type:Article tags.label:"Anthropic" sortBy:date' |
310 hits |
| news | db dql export … --spec date.str,title,siteName,sentiment,pageUrl |
826 bytes, dated headlines w/ sentiment |
| organizations | db dql probe 'type:Organization categories.name:"Semiconductor Companies" location.country.name:"United States"' |
2592 → 159 with isPublic:true |
| organizations | db dql export … revSortBy:nbEmployees |
Intel, Micron, Qualcomm, Nvidia — correct headcounts |
| organizations | db dql export 'similarTo(name:"OpenAI") location.country.name:"United States"' |
Hugging Face, Anthropic, Moveworks, Perplexity, Scale AI |
| people | db dql probe on both subquery forms |
3457 loose vs 399 co-constrained — the documented ~9x trap, reproduced |
| people | db dql export … revSortBy:importance |
Jensen Huang / Nvidia, Lip-Bu Tan / Intel, C.C. Wei / TSMC |
| places | db dql probe 'type:City location.country.name:"Japan" population>1000000' |
13 hits; type:Country → 634 |
| places | db dql export … revSortBy:population |
Tokyo, Yokohama, Osaka, Nagoya w/ populations |
| deals | db dql probe 'type:Investment investment.series:"Series A" investment.date>="2026-01-01"' |
2061 hits |
| deals | db dql export … investee/series/amount/date/investors |
Etched Series C $300M, Cathedral Series A $160M |
| deals | db dql export 'isAcquired:true acquiredBy.name:"Microsoft"' |
LinkedIn $26.2B, Nuance $19.7B, Skype $8.5B — figures correct |
| web-search | db web-search "Diffbot knowledge graph" -n 2 -f text |
2 results honouring -n, top score 0.966 |
| extract | db extract https://example.com |
markdown content |
| entities | db entities "Apple CEO Tim Cook…" |
Apple Inc. + Tim Cook resolved w/ Diffbot IDs, sentiment +0.73 |
| crawl | db crawl-list-jobs |
read-only: returned live job list |
Each of the five new skills was exercised over its full documented path —
probe for selectivity, then export --spec to CSV — confirming
ontology cache → parallel probe → export to ~/.diffbot/tmp/ → formatted output,
with no repeated permission prompts.
Every DQL string shipped in the five new SKILL.md files was executed against the live Knowledge Graph before being written. Documented traps were verified by observation, not assumption:
investee.categoriesdoes not exist onLinkedEntity— returns 0, so deal queries filtered by industry route throughOrganization.investmentsinstead (verified: 0 → 121 hits).- Unrecognized field paths are silently ignored and return the unfiltered
count (
countryGroup.name:"Europe"→ 18,517,102 = all oftype:Place). type:Acquisitionrecords are name-only stubs; M&A routes throughOrganization.acquiredBy.- The default JSON export payload is not the full entity —
Organization.ceo,Organization.founders,Place.population, andPlace.isPartOfare all absent unless requested withget:.--specrequests its CSV columns automatically. Verified both ways:has:foundersmatches while the field is missing from the payload, andget:name,ceo,foundersreturnsceo=Elon Muskplus five founders. Person.employmentsconditions written outside a{}co-constraint match across different jobs and inflate results ~9x (3,457 vs 399 for current semiconductor CEOs).Person.descriptorsis unpopulated, unlike Organization's.- For non-Article types the default ranking already encodes relevance; adding an
explicit sort overrides it, often wrongly.
homepageUri:"openai.com"unsorted returns OpenAI,revSortBy:nbEmployeesreturns "OpenAI for Developers";anthropic.comreturns Anthropic vs "Claude Builder Club". Place and Person unsorted results match theirrevSortBy:population/revSortBy:importanceorder already. similarToreturns exactly--sizeranked results withhitsmirroring the request, sodql probe(which runssize=0) always reports0for it. Both/diffbot-dqland/diffbot-organizationsdocument this exception and direct validation to a smallexportinstead.
The Step 1 bootstrap in every skill pins diffbot-python>=0.2.1 rather than the bare
package name. This is deliberate: pip install <pkg> with no constraint is a no-op
when any version is already present, so a venv created against 0.1.0 would never
upgrade. 0.1.0 sent the wrong query parameter for web-search -n, silently returning
10 results regardless — the version floor is what guarantees the documented flag
behaves as described.
Each SKILL.md pre-authorizes only a fixed-path Bash allowlist:
Bash(~/.diffbot/venv/bin/db:*)
Bash(python3 -m venv ~/.diffbot/venv:*)
Bash(~/.diffbot/venv/bin/pip install:*)
Bash(jq:*) # Knowledge Graph skills only: diffbot-dql, -news,
# -organizations, -people, -places, -deals
No broad Bash(*). No plugin settings.json. Credentials are user-managed at
~/.diffbot/credentials and never stored in this repo.