fumablox

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 80

It will fail on:

  • parse / tag errors
  • [Aircraft:TakeOff] when the method is Takeoff
  • 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.altitude

diff

npx fumablox extract --out api.baseline.json
# in CI, against the file you committed
npx fumablox diff api.baseline.json

Removed members and numbernumber? are breaking (exit 1). Additions are reported, not fatal.

GitHub Actions

.github/workflows/docs.yml
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.json

Commit 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.

On this page