Repository navigation
docs: bind tool and model counts to the published artifact - #77
Merged
Merged
Conversation
"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
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Consumes blockrun#288's
/brand/numbers.json.What was wrong
19 toolswas 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.toolslives in this repo'sprofiles.ts, so the artifact has to assert it rather than compute it.test/brand-numbers.test.tsis 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.ymlalready ran build + typecheck + test, but only on push tomain— after a merge. Nothing gated the pull request, so a break was only discoverable once it was already on main and mid-release.ci.ymlnow runs typecheck, the 254-test suite, and the offline brand-numbers check on every PR.Note
--checknever touches the network. It compares the docs against the committedbrand-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).