Files
weichen 45f21e84c7 feat(jevdecide): product shadow client with offline eval gates
Add typed jevdecide HTTP client (circuit, metrics) and coordinator
DecideAssist wiring behind JEV_DECIDE_MODE (default off). Offline eval
and synthetic soak evidence gate realtime/profile before assist rollout.
2026-09-23 17:40:40 +00:00

58 lines
1.0 KiB
Go

package jevdecide
import (
"os"
"strings"
"sync"
)
var (
flagsMu sync.RWMutex
activeMode = defaultMode()
)
func defaultMode() Mode {
return ParseMode(os.Getenv("JEV_DECIDE_MODE"))
}
// ParseMode maps env string to Mode; unknown → off (fail-closed).
func ParseMode(raw string) Mode {
switch strings.ToLower(strings.TrimSpace(raw)) {
case "", "off", "0", "false", "no":
return ModeOff
case "shadow":
return ModeShadow
case "assist":
return ModeAssist
default:
return ModeOff
}
}
// CurrentMode returns the active integration mode.
func CurrentMode() Mode {
flagsMu.RLock()
defer flagsMu.RUnlock()
return activeMode
}
// SetModeForTest overrides mode in tests.
func SetModeForTest(m Mode) {
flagsMu.Lock()
activeMode = m
flagsMu.Unlock()
}
// ResetModeForTest restores mode from the process environment.
func ResetModeForTest() {
flagsMu.Lock()
activeMode = defaultMode()
flagsMu.Unlock()
}
// Enabled reports whether shadow or assist is active.
func Enabled() bool {
m := CurrentMode()
return m == ModeShadow || m == ModeAssist
}