CI
Coverage gates, API lockfiles, and a workflow that actually fails the build.
Documentation that cannot fail CI is a blog. Fumablox treats the public API like a compiler output.
check
npx fumablox check --config fumablox.toml --min-coverage 80It will fail on:
- parse / tag errors
[Aircraft:TakeOff]when the method isTakeoff- circular
require()(warning) - coverage below
--min-coverage
Output looks like:
Documentation Coverage
Public APIs ████████░░░░░░░░░ 48%
Types █████████████████ 100%
Functions █████████░░░░░░░░ 53%
Examples █░░░░░░░░░░░░░░░░ 6%
Overall: 52%
Undocumented APIs
Aircraft:Takeoff()
Aircraft.altitudediff
npx fumablox extract --out api.baseline.json
# in CI, against the file you committed
npx fumablox diff api.baseline.jsonRemoved members and number → number? are breaking (exit 1). Additions are reported, not fatal.
GitHub Actions
name: docs
on:
pull_request:
push:
branches: [main]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- run: npm ci
- run: npx fumablox check --min-coverage 80
- run: npx fumablox diff api.baseline.jsonCommit api.baseline.json from fumablox extract --out api.baseline.json. Update it in the same PR as the API change.
PR bots and LSP
Those are the next consumers of extract JSON, not a second parser. Keep the IR stable and everything else stays a thin client.