Originally created by: fu351
The subjective layer's per-entity streaming baseline (subjective/baseline.py, warmed via
observe(), read via drift.py::surprise_blended) starts every deployment cold. Until an entity
reaches K_OBSERVATIONS, its surprise term rides the conservative peer/global prior, so a fresh
install gets the least-sharp version of the adaptive layer exactly when an operator is most likely
to be evaluating it.
The #325 diagnostic showed the layer separates injection-induced actions from benign ones once
the baseline is warm — but it warmed on a benchmark corpus inside the test harness. There is no
production path for an operator to warm their own baseline from traces they already have (a prior
decision log, an allow-listed workflow capture) before live traffic starts.
Add a doberman baseline seed --from <path> command that warms the per-entity streaming baseline
from operator-supplied allowed-action traces, through the production observe() path — the
same code the live proxy calls, so seeding and live warming can never diverge.
PASS/allowed rows for the target entity.observe(obj, entity_id=..., repo_root=..., now=...). No new learningentity_id = HMAC(agent_role | repo_root) the live path would use, so an_observations, whether it crossed K_OBSERVATIONSHST_WARMUP), never a payload or path value.now.total_observations by exactly N.surprise_blended for the same entity_id (seed-then-score round-trip).#325 is a measurement-only diagnostic that warms on a benchmark corpus inside the test harness.
This is the production seeding path — a real CLI verb operators run against their own traces.
The advisor on the #325 build recommended scoping it as its own slice rather than deriving a seed
from AgentDojo (which would overfit the seed to a benchmark). This issue is that slice.
Touches the subjective baseline + redaction internals, so not a good-first issue.