Is BayesTruth production-ready at 1.0.0?
Yes. 170 tests across 20 suites pass under Vitest 4 with 97% coverage; TypeScript 6 maximum strict mode is
clean; Biome 2.5 lint is clean; publint and @arethetypeswrong/cli are clean across
all fourteen subpaths. The suite and the distribution smoke test are run on the Node 20, 22, and 24 matrix.
Every published release carries SLSA provenance produced by GitHub Actions.
Why not a frequentist Wilson interval?
For a single subject's confidence range, Wilson is a close substitute. BayesTruth wins where Wilson cannot
follow: explicit and per-category priors, partial pooling so a cold-start tool borrows strength from
siblings, sequential decisions, and Thompson-sampling routing, all composed in one calibrated system.
Why not a Python Bayesian library like PyMC or Stan?
Those are superb for offline statistical modeling in Python. BayesTruth is embeddable TypeScript for
production: closed-form conjugate updates with zero inference latency, a node-free core, and an API a
developer can use in five lines without a statistics background.
Does this work in Cloudflare Workers, Vercel Edge, Bun, or Deno?
Yes. The core is node-free; the audit seal uses the Web Crypto API, not node:crypto. Import
@takk/bayestruth or @takk/bayestruth/edge on any runtime with fetch
and Web Crypto. Only @takk/bayestruth/node requires the Node standard library.
How does BayesTruth handle my data?
BayesTruth records the subject identifiers you choose, the posterior parameters, the observed counts, and
timestamps. It never sees your tool payloads and makes no outbound network calls of its own. With the file
store, only that operational state reaches disk; no secrets are involved at any point.
What happens with a brand-new tool (cold start)?
A new subject starts at its prior, the uniform Beta(1, 1) by default, so its interval is wide and honest.
To do better than a flat prior, fit a category prior with fitCategoryPrior and score the new
subject against it; it borrows the reputation of its siblings until it has data of its own.
Where does the state live?
In-process memory by default, with portable JSON snapshots via snapshot() and
load(). For durability across restarts, use createFileStore from
@takk/bayestruth/node. For multi-process coordination, implement the PosteriorStore
interface over SQLite, Postgres, or Redis.
Is the audit trail a digital signature?
No, and the docs are explicit about it. The seal is a SHA-256 hash-chain root that proves a log was not
altered after sealing. It is an integrity seal, not a signature: it does not prove who produced the log.
Signed and timestamped seals for stronger third-party evidence are on the roadmap.
Is the trust score really calibrated?
Under the model, independent Bernoulli trials with a stable rate, yes, and the interval is the exact Beta
quantile. Real traffic is bursty and non-stationary, so use the correlated-failure guard and time-decay,
and confirm calibration on your own data with @takk/bayestruth/calibration.
How do I verify a published version's provenance?
Every release is published with npm publish --provenance. Check the attestations with
npm view @takk/bayestruth@<version> --json | jq .dist.attestations. The attestation links
the tarball you installed to the GitHub Actions workflow that built it from a specific source commit.
Can I plug in my own store backend?
Yes. Implement the PosteriorStore interface with get, set,
keys, and snapshot, and pass it as store in the config. Back it with
SQLite, Postgres, Redis, or anything else; the file store is the zero-dependency reference.
What is the policy on breaking changes?
Strict SemVer 2.0.0, starting from 1.0.0. The binding stability surface is documented in SPEC.md section
5. Major bumps require a deprecation cycle; security fixes follow the disclosure flow in SECURITY.md.