Advanced Features
Industry Specialised
DevTools

DevTools Accuracy Framework

Last updated Sep 3, 2026

Gracker checks the technical claims in your developer content against the thing that actually defines them - the package registry, the source repository, or the specification - and pins each one to the versions it is true in.

Developer tooling brands only, detected automatically. Gracker classifies every brand the moment you add it. There is no switch to find.

A claim without a version is not a claim

This is the whole framework in one line. Everything else follows from it.

"React batches state updates" is not true or false. It is true from 18, and it was not true before. "Node supports require() of ESM" is not true or false either. "The flag is deprecated" begs the question: since which release, and removed in which?

Developer content is written in the present tense about software that has no single present. The reader is on a version, your docs are about a version, and the blog post is about whichever version was current when someone wrote it. That gap is where almost every wrong technical claim lives, and none of it looks wrong on the page.

So the first thing Gracker does to any technical claim is try to bound it. A claim that cannot be bounded to a version range cannot be verified, and is flagged rather than cited.


The three questions

QUESTION 01
Does it exist?
Resolved against the registry entry and the published types or source, never against documentation prose.
QUESTION 02
In which versions?
Introduced in x, changed in y, removed in z - from release metadata, changelogs and the compatibility data projects.
QUESTION 03
Is it still supported?
Separate from whether it works. A runtime past end of life still runs; recommending it is still wrong.

1. Does it exist?

Is there such an API, flag, option, method, package or config key at all - not "does it sound plausible", but is it in the artifact people actually install?

Resolved against the registry entry and the published types or source, never against documentation prose. Documentation lags, and documentation for a thing that was renamed will happily describe the old name for years.

2. In which versions?

The claim gets a range: introduced in x, changed in y, removed in z. A range that ends before the version your reader is on makes the sentence wrong for them even though it was right when written.

Version ranges come from release metadata, changelogs, and the compatibility data projects that exist precisely for this - MDN's browser-compat-data for web platform features, caniuse for browser support, the language proposal trackers for anything not yet shipped.

3. Is it still supported?

Separate from whether it works. A runtime past end of life still runs; recommending it is still wrong. Support windows are published as data, not prose: Node 26 released 2026-05-05, enters LTS 2026-10-28, end of life 2029-04-30 - three dates, one lookup, no recollection involved.


One claim, checked

The draft says: use the built-in fetch instead of node-fetch.

QuestionAnswer
Does it exist?yes, global fetch in the Node runtime
In which versions?available from 18 onward
Still supported?18 and 20 are both past end of life; 22 and 24 are the current LTS lines
SourceNode release metadata and the changelog, not a blog post

What ships:

Node has provided a global fetch since 18, so node-fetch is no longer needed on any currently supported release line.

A version bound and a support statement, where the draft had a bare recommendation.


What a finding looks like

Not a score. A list of sentences, what the registry or source actually says, and the edit.

Findings from a page about replacing HTTP client dependencies:

The sentenceWhat the source saysEdit
"Use request for simple HTTP calls."npm marks request@2.88.2 deprecated, with the maintainer's own noticedrop the recommendation
"node-fetch is MIT licensed."npm metadata confirms MIT on 3.3.2correct - cite the registry
"Works on Node 20 and above."Node 20 reached end of life 2026-04-30raise the floor to a supported line
"Top-level await is supported."true from a specific release; unbounded, it is neither true nor falseadd the version it landed in
"The decorators proposal lets you..."a proposal has a stage, not a releasesay "proposed", or name the release that shipped it
"10x faster than the alternative."no version, workload or hardware givenattribute and scope it, or cut it

Every sentence in that left column is something a competent engineer would write, and none of them is invented. That is the point: developer content fails on version scope, not on truth.

Two patterns account for most of it. An unbounded claim - true today, silently false for readers on a different release, and fixable with one clause. And a proposal written as shipped - real, documented, discussed at length, and not yet available to anyone reading you.


What Gracker checks against

SourceWhat it settles
npm, PyPI, crates.io, Maven Central, NuGet, RubyGems, pkg.go.devpackage existence, current version, metadata, licence, deprecation flags
GitHub releases and tagsrelease dates, changelogs, the source at a given version
endoflife.datesupport windows and end-of-life dates across runtimes, frameworks and distributions
MDN browser-compat-datawhich browser and runtime versions a web platform feature landed in
caniusebrowser support levels and usage share
OSV.dev and the GitHub Advisory Databaseknown vulnerabilities affecting a package version range
SPDX licence listlicence identifiers and their exact names
IETF RFC index, ECMA-262, WHATWGthe specifications themselves
TC39 proposals, Rust RFCs, PEPs, JEPs, Go proposalsproposal stage - what is coming and what has landed

All of these are public and machine-readable, which is what makes this vertical checkable at all. There is no regulator here; the registry is the closest thing developer tooling has to a system of record, and it is a good one.


What this does not check

  • Whether the advice is good. Whether a library suits your architecture is judgment. This checks that the facts under the advice are true.
  • Performance claims without methodology. Flagged as unverifiable rather than wrong.
  • Private and internal APIs. Nothing published, nothing to check against.
  • Prerelease behaviour. Nightlies, canaries and betas change under the claim; they are noted as unstable rather than verified.
  • Non-technical brands, and non-articles. Nothing runs.
When a source cannot be reached, the citation is dropped. Nothing is shown unverified.

In the product

Page Audit grades every technical claim, shows what the registry or source says, and gives the edit. Deprecated packages and ones carrying open advisories are called out separately, since those are the findings that cost a reader real time.

Visibility Diagnosis names the version ranges and compatibility facts competitor pages carry on a topic where they outrank you.

Content Generation writes version bounds into the draft as it goes. No API, flag or package is named unless it resolves on the registry, and no support claim is made without the published end-of-life date.


FAQ

How do I turn this on?

You don't. Gracker classifies each brand when you add it. If it is a developer tooling brand, technical claim checking runs on that brand's content automatically.

Our docs are the source of truth for our own product. Will it argue with them?

For your own packages, the thing that ships wins: the published artifact and its release notes. If your documentation disagrees with the package people actually install, that is worth knowing, and Gracker will say so rather than quietly pick a side.

Why did it flag a sentence that is completely true?

Almost always the missing version. "X supports Y" with no range is unverifiable in principle - it cannot be true or false without knowing which release. Adding "since 4.2" resolves it.

We benchmark honestly and our numbers are real.

Then they need their conditions in the sentence: version, workload, hardware. Unverifiable is not an accusation, it is a statement about what a reader can check. Scoped, the same number passes.

It says a package we recommend is deprecated, but it still works.

Both are true. Deprecation is a maintainer signal, not a breakage, and the flag exists so you can decide deliberately rather than by omission.

Does it check code samples?

It checks the APIs, flags and package names in them against what actually exists at the version you state. It does not run the code.