| Version | Supported |
|---|---|
| 0.1.x | yes |
Pre-1.0 releases receive security fixes on the latest minor only.
Please do not open a public GitHub issue for security reports.
Instead, open a private security advisory at:
https://github.com/hinanohart/subjunctor/security/advisories/new
We aim to acknowledge within 7 days and to ship a patched release within 30 days for high-severity reports.
- Token-budget contract bypass that allows unbounded LLM spend.
- Known v0.1.x limitation (documented, not a vulnerability): only
candidate.tokensis debited against the ledger; internal probe / estimator calls are not. Operators handling adversarial input streams SHOULD share a singleBudgetLedger(vialedger:inGateConfig) for per-agent cumulative capping, AND set a defensivehard_limit_calls, AND add an upstream rate limit. Internal-probe budgeting lands in v0.2.x.
- Known v0.1.x limitation (documented, not a vulnerability): only
- Estimator / probe code paths that crash the host process on adversarial input.
- Adapter code paths (
openaiAdapter,anthropicAdapter) that leak credentials from the injected client into log output or thrown error messages. Verdict.reasonleaking secrets viainternal_error:<class>:<message>. The gate sanitizes obvious patterns (sk-...,Bearer ...,Authorization: ...) before placing them inreason, but the SDK that raised the error may still embed sensitive context in its own error payload — operators piping verdicts to public logs SHOULD post-filter.- JSONL event logger paths writing outside the configured file (path traversal).
- The accuracy of the underlying LLM.
subjunctoris a gate, not a hallucination eliminator. - The behaviour of any third-party LLM SDK that the user injects via
CompletionFn. - Threshold-tuning: choosing
tau_u,tau_s,tau_ais the user's responsibility. - CLI-supplied file paths. The CLI runs with operator privileges and reads
any path the operator provides (e.g.
subjunctor analyze /var/log/x.jsonl). - Development dependencies (
vitest,@vitest/coverage-v8, transitiveesbuild).npm audit --omit=devis clean on every release and CI gates on it;npm audit(including dev deps) currently reports 6 moderate advisories underesbuilddev-server — these do not ship to consumers who onlynpm install subjunctor. See CI logs for the current snapshot.
- The package has zero runtime credential handling. The user injects
CompletionFn;subjunctornever reads environment variables or token files. (This is minimum-trust DI, not an object-capability pattern.) JsonlEventLoggeropens a single file path supplied by the user; no globbing, no shell. Writes useappendFileSyncand are best-effort durable (nofsync(2)).npm audit --omit=devis clean on every release; CI gate enforces it.- The gate is fail-closed: invalid
BudgetConfig, missingcompletion, and a throwingon_eventsink all yield verdictescalate, not uncaught exceptions. Covered by tests intest/gate.test.ts.