fix(api,watcher,server): reject moves non-markdown untouched; read caps; BOM; strict routing flag (review of #211, pass 2)
- brain_reject on a parked pdf/txt moves the bytes; it no longer prepends YAML - raw/ notes are read through a cap (readCapped); an endless reader test fails instead of exhausting memory - a byte-order mark no longer hides a note's wing: key - INGEST_WING_ROUTING is parsed strictly; a typo stops the server rather than leaving routing silently off - tests for the reserved-wing check in every disguise (Sources, sources., ...) Mutation-checked. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -150,6 +150,21 @@ func envInt(key string, fallback int) int {
|
||||
return fallback
|
||||
}
|
||||
|
||||
// envFlag reads a boolean switch. Unset is off; a value strconv.ParseBool does
|
||||
// not understand is an error, so a typo ("ture") cannot silently leave a
|
||||
// safety-relevant switch off.
|
||||
func envFlag(key string) (bool, error) {
|
||||
v := os.Getenv(key)
|
||||
if v == "" {
|
||||
return false, nil
|
||||
}
|
||||
b, err := strconv.ParseBool(v)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("%s=%q: want 1, 0, true or false", key, v)
|
||||
}
|
||||
return b, nil
|
||||
}
|
||||
|
||||
// buildNotifier returns the ntfy notifier, or a nil interface when
|
||||
// BRAIN_NTFY_URL is unset. A nil *interface* (not a typed-nil) is required so
|
||||
// DegradingSink/Reconcile and the governance observer skip it cleanly.
|
||||
@@ -405,7 +420,12 @@ func main() {
|
||||
// the layout this flag exists to leave. The interface stays nil when off
|
||||
// (a nil *Router inside it would not be nil).
|
||||
var placer wing.Placer
|
||||
if os.Getenv("INGEST_WING_ROUTING") == "1" {
|
||||
routing, ferr := envFlag("INGEST_WING_ROUTING")
|
||||
if ferr != nil {
|
||||
logger.Error("INGEST_WING_ROUTING", "err", ferr)
|
||||
os.Exit(1)
|
||||
}
|
||||
if routing {
|
||||
pattern := os.Getenv("INGEST_CLIENT_BLOCK")
|
||||
if pattern == "" {
|
||||
pattern = os.Getenv("CLAUDE_INGEST_CLIENT_BLOCK")
|
||||
|
||||
Reference in New Issue
Block a user