Check O2 · provenance family · severity HIGH · automatic · one of the 17 Open VSX checks
Maps to OWASP LLM03 ATLAS AML.T0079 A listing younger than the campaign that uses it — the capability staged on infrastructure the adversary controls.
The question this check asks: when was the first version of this extension published to Open VSX? Not the latest version's date, which moves with every release, but the oldest one Open VSX still lists.
The clone campaigns on Open VSX arrived on new listings. The GlassWorm v2 clones Socket described on 25 April 2026 were published at the start of that month, and after the fake “Solidity Language” extension Kaspersky described was removed on 2 July 2025, its replacement was published the next day. Age is the cheapest provenance fact there is, and it is the one an operator cannot buy.
Age also grades the rest of the roster: O1, O5, O6, O7, O8 and O12 escalate only on a listing whose first version is under 90 days old (ovsx_established_days); on an established one they are notes.
Open VSX's version list carries no dates, so the first-publish date takes three small reads: the number of versions, the oldest version's name, and that version's own record and its timestamp. A first version under 30 days old (ovsx_ext_age_high_days) is ovsx-ext-age, HIGH, 10 points (the default weight; the scoring table has no row of its own for the Open VSX checks yet). When the history cannot be read, O2, O3 and O10 are listed as not checked, never passed.
In the 1 November 2026 measurement of Open VSX's 100 most-downloaded extensions O2 fired on none: the youngest listing in the list was 30 days old. A legitimate new extension is a REVIEW for its first 30 days on this check. That is the intended cost.
A sleeper. GlassWorm v2's clones were published benign and updated weeks later into loaders; by then they had aged past the line. A takeover. An old listing whose publisher's token was stolen is old. Versions Open VSX has removed: the oldest version it still lists is the one read.
Scope, the same on every page of this roster: RepoGates does not see git clone, package managers or curl — outside Claude Code with the RepoGates plugin, whose hook refuses a clone or install that names a blocked repository on the command line, before it runs. The hook sees Bash tool calls in that one client and nothing else. Edit and Write are read for one thing only — an API key about to be saved — checked on the machine and never sent; that guard asks, it never denies. Open VSX is the registry VSCodium, Cursor and Windsurf install from. An extension there is assessed on request: through the API (/v1/ovsx/score/{namespace}/{extension}), the MCP server (platform="ovsx") and the preflight, which reads an open-vsx.org address and a codium, vscodium, cursor or windsurf --install-extension line. That line is read against both Open VSX and the VS Code Marketplace, because it cannot show which registry the editor uses; code --install-extension stays the Marketplace's. An extension installed from the editor's own UI, or one that auto-updates, is not a shell line the hook sees; there is no board on Open VSX's pages, and the browser's download gate does not read open-vsx.org. This roster reads what Open VSX publishes about an extension — its record, its version history, its manifest, the package's file list and at most eight agent files inside the package — and the extension's code bundle is not read on this tier. Open VSX's own scan results are admin-only and not published; its review status is evidence, and its silence is never a pass. An extension Open VSX no longer serves is not assessed, never a pass. A PASS means nothing matched on what was read.
curl -s 'https://open-vsx.org/api/NAMESPACE/EXTENSION/versions?size=1' | jq .totalSize
curl -s 'https://open-vsx.org/api/NAMESPACE/EXTENSION/versions?offset=TOTAL_MINUS_ONE&size=1'
curl -s https://open-vsx.org/api/NAMESPACE/EXTENSION/OLDEST_VERSION | jq .timestamp
The first call gives the number of versions, the second the oldest version's name, the third its publish date.
Why 30 days? It is the roster's line for a listing too new to have any history. Past it a listing is no longer young on this check, but O1, O5, O6, O7, O8 and O12 still read it as new until 90 days.
Why does it take three reads? Open VSX's version list carries no dates. The number of versions gives the position of the oldest one, and that version's own record carries its publish date.
Does an old listing mean a trustworthy one? No. A sleeper ages past the line before it turns, and a stolen token publishes through an old listing. Age is one fact among seventeen.
V2 Extension age — the Marketplace twin · O3 Traction mismatch — downloads against the same age · O10 Pre-release and re-publish cadence — the rhythm of a young listing.
Add RepoGates to Chrome Pricing
Sources for this page: Open VSX's published record format, read on 1 November 2026; the measurement of Open VSX's 100 most-downloaded extensions the same day; the severities from the product's roster, and the default weights of its scoring table; campaign facts as the primary write-ups state them. See also the Open VSX intelligence page.