Tracking issue for the low-severity, dead-code, and nit findings from the 2026-07 audit sweep. Grouped here to keep the tracker clean; each is verified present on dev at the time of filing. Check off as addressed.
Correctness / robustness (Low)
Fail-open / security hygiene (Low)
Dead / orphaned modules (delete or wire)
Documented tradeoffs (track)
Tracking issue for the low-severity, dead-code, and nit findings from the 2026-07 audit sweep. Grouped here to keep the tracker clean; each is verified present on
devat the time of filing. Check off as addressed.Correctness / robustness (Low)
subtype.crates/slack-adapter/src/event.rs:72-91has nosubtypefield;adapter.rs:335only checkskind != "message". The dangerous cases are already neutralized by thebot_idfilter and the deny-by-defaultallowed_sendersgate (adapter.rs:341-353), andmessage_changed/message_deletedcarry no top-leveluserso they are dropped. Residual: achannel_join/me_messagefrom an allowlisted user is not distinguished from a real command. Add asubtypeguard treating unsupported subtypes asIgnored.SubAgent::releaseuses non-saturatingfetch_sub.crates/multi-agent/src/agent.rs:105. Across a terminate+respawn id-reuse race the release can run against a freshAtomicU32(0)and wrap to a hugecents_used, corrupting the new agent's budget envelope. Usesaturating_subor generation-keyed reservation handles.derive_principal→parse_entity_refstrips quotes / mis-splits on::.crates/fused-runtime/src/runtime.rs:2942buildsType::"subject";crates/cedar-policy/src/lib.rs:260-262re-parses withrsplit_once("::")+trim_matches('"'). A subject containing::mis-splits (fails closed →PolicyDenied); two subjects differing only in quotes collapse to one principal. Pass type + raw id straight toEntityUid::from_type_name_and_idinstead of building-then-reparsing a string.provider-ollamanever decodes responsetool_calls.crates/provider-ollama/src/lib.rs:751-786—ResponseMessage/ChunkMessagedecodecontentonly; tool-use is non-functional on Ollama (self-documented atlib.rs:52,61). Decodemessage.tool_callsand emitToolCallevents.LogStream::new(0)panics onappend.crates/logs/src/log.rs:56-69—entries.remove(0)on an empty vec whenmax_size == 0. Guard withmax_size.max(1). (Crate is currently orphaned.)Config::mergeloses provenance;validatenever type-checks.crates/config/src/config.rs:59relabels all merged valuesConfigSource::Default;crates/config/src/schema.rs:64validatedoes not type-check values.Fail-open / security hygiene (Low)
crates/session-journals/src/redact.rs:39—default_secret_patternsusesfilter_map(|p| Regex::new(p).ok()), silently dropping any uncompilable (compile-time-constant) redaction pattern. Use.expect(...)so a broken secret-redaction pattern fails loudly at startup, not silently at runtime.crates/channel-discord/src/config.rs:117-119channel_allowedandcrates/channel-telegram/src/config.rs:91-93chat_allowedreturnallowlist.is_empty() || contains(id)(empty ⇒ admit everyone), contradicting the struct's own "deny-by-default (ARD-475)" doc. The live ingressForwarderis correctly deny-by-default (fixed in fix(channels): ARD-475 ingress deny-by-default (Discord + Telegram + Slack) #212 / [P1] Require explicit allowlists for Matrix/Discord/Telegram ingress #127), so these methods are unused by ingress, but they remain a fail-open trap and their unit tests (channel-{discord,telegram}/src/lib.rs) assert the wrong behavior. Make them deny-by-default or delete them.crates/channel-{matrix,discord,telegram}/src/channel.rsusempsc::unbounded_channel()for inbound — memory-exhaustion DoS if the consumer lags. Use bounded channels with backpressure.Dead / orphaned modules (delete or wire)
crates/automation/src/engine.rs— not declared inlib.rs; references a nonexistentcrate::error::AutomationError(would not compile if added).crates/automation/src/task.rs— orphan (not in the module tree).crates/acp/src/server.rsandcrates/acp/src/protocol.rs— orphans; the live crate useswire.rs/method.rs. (cronexpr.rs/schedule.rswere the analogous orphans and are now wired live by fix: fail-closed cap-token projection, provider robustness, cron parser #254 — done.)crates/webhook/src/registry.rs— orphan left behind after feat(§9.7): operator webhook surface (registry + emit + triggers) #305 built the crate out via other modules.Documented tradeoffs (track)
session-journals/src/file.rs), ONNX embed (embeddings/src/lib.rs), Tantivy commit-per-doc (bm25-index/src/lib.rs). All documented tradeoffs; route throughspawn_blockingbefore scaling.