feat(server): say at startup when alerting is unconfigured (#107) #108
Closed
mathias
wants to merge 1 commits from
agent/107-loud-unconfigured-alerting into main
pull from: agent/107-loud-unconfigured-alerting
merge into: :main
:main
:fix/pipeline-writes-158
:fix/edit-path-io-192
:fix/create-regular-188
:fix/guard-special-179
:fix/linkcheck-keeps-write-178
:fix/write-dir-redirect-173
:fix/tunnel-detect-174
:fix/pipeline-root-157
:w3/154-mcp-auth-wiring
:fix/tunnel-traversal
:test/in-brain-targets-171
:fix/brain-scan-root-157
:fix/graph-wiki-root-157
:fix/vectorstore-root-157
:fix/notes-root-157
:fix/search-root-157
:fix/brainwide-root-157
:fix/raw-symlinks-153
:feat/symlink-tripwire-157
:fix/rest-auth-149
:fix/123-brain-edit-envelope-check
:feat/106-page-aware-extraction
:fix/105-source-drift-on-main
:fix/104-surface-merge-conflicts-on-main
:agent/b1-compile-on-ingest
:agent/104-surface-merge-conflicts
:agent/105-source-drift
:agent/107-loud-unconfigured-alerting
:feat/brain-read-edit
:fix/capture-i1-refusal-names-target
:renovate/configure
:feat/consolidate-single-harness
:icebox/cmd-routing
:feat/brain-pending-promote
:fix/close-session-classification-refresh
:fix/capture-summarywriter
1
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
1ff6af4a40 |
feat(server): say at startup when alerting is unconfigured (#107)
buildNotifier returns a nil interface when BRAIN_NTFY_URL is unset, and every consumer skips a nil notifier silently. That is right for an unconfigured homelab and wrong for an alert whose entire value is that someone finds out: "configured and working" and "never configured" were byte-identical in behaviour — no error, no warning, only a message that never arrives, which nobody notices because nobody is waiting for an alert they have never seen. Two alerts were dark in production for exactly that reason (#100): the governance-rewrite alert from #97, and the audit-degradation alert that reports the audit trail is down. Both were found by firing a real event and watching nothing happen, not by reading anything. WARN rather than fatal, deliberately. The brain rule `empty-credential-must-refuse-to-start-not-switch-modes` says an empty credential must be a startup error rather than a silent mode switch — but that is about a control being removed. Here observability degrades, no gate is bypassed, and refusing to boot would break the unconfigured-homelab case the nil notifier exists to support. What that rule demands and this provides is that the mode switch stops being silent. buildAuditSink already announces its own fallback ("capture audit: slog sink (BRAIN_LOKI_URL unset)"), so only the notifier needed this. alertingWarnings is pure and env-injected: the reason this gap survived is that nothing about it was observable, so the fix is tested rather than asserted. Refs #107, #100, #97. |