Skip to content

Security: bpcakes/batter

Security

SECURITY.md

Security and trust boundaries

This MVP has local compiler/runtime validation, but not a security audit or production validation. Do not deploy it as a security control without completing the validation and application-specific hardening outcomes tracked in Beads; see backlog access.

Boundaries that remain application-owned

Authentication, authorization, trusted proxy interpretation, tenant isolation, TLS, CSRF/CORS policy, body/socket/queue limits, secret loading, migration policy, and external-effect idempotency are outside Batter. A readiness gate is not an authorization gate. A concurrency permit is not a per-user rate limit. A timeout is not rollback or permission to replay a mutation.

Bulkhead does not bound its waiter count or request memory. HTTP deadlines stop at response construction and do not protect streaming sessions or every slow upload/connection path. Runtime-thread blocking can defeat cooperative timers.

Finite process admission separately bounds queued plus executing tasks, not their captured payload sizes. Its task-level error channel triggers process drain; expected user/business rejection must remain a successful task value. Custom HTTP renderers are application code and receive request parts: they must not echo raw headers, URLs, or sources. The example's private request-ID extension is generated by outer middleware; it does not establish proxy/header trust.

Diagnostics

Batter's own tracing fields avoid automatic raw errors, subjects, URLs, request bodies, and panic payloads. Internal reports retain original errors; Debug/source inspection or an application's logs can expose them. Do not serialize reports as HTTP responses. Use explicit sanitized domain mappings and low-cardinality metric labels. Operation names must remain developer-controlled constants.

Rust's default panic hook can print payloads to stderr before JoinError is observed. Batter does not install or sanitize a global hook. Tracing hygiene is not whole-process secret redaction. Never put secrets in panic messages.

Dependencies and publishing

The local source forbids unsafe code in all three library crate roots; that is not an audit of transitive dependencies or proof of logical cancellation safety. Resolve and review Cargo.lock, run your dependency advisory/license checks, and evaluate all optional features on the actual target platform. CI actions are separate supply-chain dependencies that also require review.

Publishing is disabled. No crates.io account, repository, deployment, or registry name was created/reserved for these packages. Before publication, establish an owner-controlled private vulnerability reporting channel rather than inventing a maintainer email address here.

There aren't any published security advisories