Skip to content

docs: bind tool and model counts to the published artifact - #77

Merged
VickyXAI merged 1 commit into
mainfrom
feat/brand-numbers-sync
Jul 26, 2026
Merged

VickyXAI merged 1 commit into
mainfrom
feat/brand-numbers-sync

Conversation

@VickyXAI

Copy link
Copy Markdown
Contributor

Consumes blockrun#288's /brand/numbers.json.

What was wrong

Claim Was Now
Tools 19 19 ✓ already correct
LLMs (3 places) 55+ 66
RPC chains (2 places) 40+ 40

19 tools was accurate. The model and chain counts were not, and both appeared in the hero blurb, the tool table and the ecosystem links — each maintained by hand.

The tool count is now pinned here

mcp.tools lives in this repo's profiles.ts, so the artifact has to assert it rather than compute it. test/brand-numbers.test.ts is what makes that safe — add or drop a tool and the build fails here, instead of quietly making the claim wrong in the README, on the npm page, and in awesome-blockrun's ecosystem table.

It checks the count against the default profile, not the maximum: the copy says "19 tools" unqualified, so the number has to be what an agent actually gets without passing a flag.

It also covers the hero shields badge, where the count sits inside an HTML attribute — a marker there would break the tag, so it is asserted instead.

New CI workflow

publish.yml already ran build + typecheck + test, but only on push to main — after a merge. Nothing gated the pull request, so a break was only discoverable once it was already on main and mid-release.

ci.yml now runs typecheck, the 254-test suite, and the offline brand-numbers check on every PR.

Note

--check never touches the network. It compares the docs against the committed brand-numbers.json, so a blockrun.ai deploy in progress cannot fail this repo's CI. Pulling a newer artifact is a separate deliberate act (--refresh).

"19 tools" was right. "55+ LLMs" and "40+ chains" were not — the catalog serves
66 visible chat models and Tatum exposes exactly 40 chains. Both appeared in the
hero blurb, the tool table, and the ecosystem links, hand-maintained in each.

Numbers now regenerate from blockrun.ai/brand/numbers.json via markers, checked
offline in CI against the committed snapshot.

test/brand-numbers.test.ts pins the tool count, which BlockRun publishes but
cannot count: it lives in this repo's profiles.ts, so over there it is asserted.
Add or drop a tool and the build fails here instead of quietly making the claim
wrong in the README, on npm, and in awesome-blockrun's ecosystem table. It also
checks the count against the DEFAULT profile rather than the maximum — copy says
"19 tools" unqualified, so it has to be what an agent gets without a flag — and
covers the hero badge, where the number sits inside an HTML attribute that a
marker cannot enter without breaking the tag.

Adds a CI workflow. publish.yml already built, typechecked and tested, but only
on push to main — after a merge. Nothing gated the pull request itself, so a
break was only discoverable once it was on main and mid-release.
@VickyXAI
VickyXAI merged commit eb47378 into main Jul 26, 2026
1 check passed
@VickyXAI
VickyXAI deleted the feat/brand-numbers-sync branch July 26, 2026 05:22
VickyXAI added a commit that referenced this pull request Jul 26, 2026
#77 landed the pull-request gate on main, which is the important half — until
then publish.yml was the only thing running build, typecheck and test, and only
on push to main, i.e. after a merge. But the gate it landed runs typecheck,
test and brand-numbers. It never builds, and never loads the thing it builds.

Build is added because publish.yml runs it alongside typecheck and test, and
this gate exists to move that same trio earlier — the header comment says as
much. Without it a tsup/dts break still only surfaces on main, mid-release.

A CLI load smoke is added because 0.32.3 shipped with sharp imported at the top
level. sharp is an optionalDependency, so wherever it is absent — musl, unusual
arch, offline CI, --no-optional — ESM resolution failed before main() ran and
all 19 tools went with it. Build, typecheck and test were green the whole time.
Loading the built entrypoint is the only step that catches that class, and it
is the class this repo has actually shipped.

The smoke deletes node_modules/sharp rather than installing with
--omit=optional. That was tried first and fails for an unrelated reason: it
also strips rollup's platform binary, so tsup cannot run at all — a failure of
the build toolchain, not of the package under test, and a permanent false red.

Verified by replaying the whole sequence against the current main baseline in a
clean worktree: npm ci, typecheck, build, 254/254 tests, brand-numbers up to
date, and the sharp-absent smoke returning the package.json version.
VickyXAI added a commit that referenced this pull request Aug 4, 2026
#77 landed the pull-request gate on main, which is the important half — until
then publish.yml was the only thing running build, typecheck and test, and only
on push to main, i.e. after a merge. But the gate it landed runs typecheck,
test and brand-numbers. It never builds, and never loads the thing it builds.

Build is added because publish.yml runs it alongside typecheck and test, and
this gate exists to move that same trio earlier — the header comment says as
much. Without it a tsup/dts break still only surfaces on main, mid-release.

A CLI load smoke is added because 0.32.3 shipped with sharp imported at the top
level. sharp is an optionalDependency, so wherever it is absent — musl, unusual
arch, offline CI, --no-optional — ESM resolution failed before main() ran and
all 19 tools went with it. Build, typecheck and test were green the whole time.
Loading the built entrypoint is the only step that catches that class, and it
is the class this repo has actually shipped.

The smoke deletes node_modules/sharp rather than installing with
--omit=optional. That was tried first and fails for an unrelated reason: it
also strips rollup's platform binary, so tsup cannot run at all — a failure of
the build toolchain, not of the package under test, and a permanent false red.

Verified by replaying the whole sequence against the current main baseline in a
clean worktree: npm ci, typecheck, build, 254/254 tests, brand-numbers up to
date, and the sharp-absent smoke returning the package.json version.
VickyXAI added a commit that referenced this pull request Aug 4, 2026
#77 landed the pull-request gate on main, which is the important half — until
then publish.yml was the only thing running build, typecheck and test, and only
on push to main, i.e. after a merge. But the gate it landed runs typecheck,
test and brand-numbers. It never builds, and never loads the thing it builds.

Build is added because publish.yml runs it alongside typecheck and test, and
this gate exists to move that same trio earlier — the header comment says as
much. Without it a tsup/dts break still only surfaces on main, mid-release.

A CLI load smoke is added because 0.32.3 shipped with sharp imported at the top
level. sharp is an optionalDependency, so wherever it is absent — musl, unusual
arch, offline CI, --no-optional — ESM resolution failed before main() ran and
all 19 tools went with it. Build, typecheck and test were green the whole time.
Loading the built entrypoint is the only step that catches that class, and it
is the class this repo has actually shipped.

The smoke deletes node_modules/sharp rather than installing with
--omit=optional. That was tried first and fails for an unrelated reason: it
also strips rollup's platform binary, so tsup cannot run at all — a failure of
the build toolchain, not of the package under test, and a permanent false red.

Verified by replaying the whole sequence against the current main baseline in a
clean worktree: npm ci, typecheck, build, 254/254 tests, brand-numbers up to
date, and the sharp-absent smoke returning the package.json version.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant