Originally created by: fu351
doberman.subjective.revealed nudges preference weights from approve/deny history with bounded steps, hysteresis, and a minimum-sample gate — but a learned adjustment lives forever. A weight nudged toward "don't ask" a year ago outlives the workflow that justified it. Scope tokens expire (SCOPE_TOKEN_TTL_SECONDS); weight adjustments have no clock at all.
What to build
- Staleness decay, toward the preset. When a preference dimension sees no fresh approve/deny evidence within a window, decay its learned adjustment back toward the declared preset value — not toward zero, and never past the preset. Decay is direction-safe by construction: it returns protection to the operator's declared baseline, so it composes with raise-only and needs no F10 involvement.
- Evidence-graded re-strengthening. The current minimum-sample gate is flat. Make it graded: the further a cumulative adjustment sits from the preset, the more samples a further step in that direction requires. Cheap resistance to approve-spam, and it pairs naturally with the decay clock.
- Anything that would relax past the objective floor still routes through the F10 gate — unchanged, this issue does not touch that path.
Suggested tests
- A stale relaxed weight returns to the preset after N idle windows; it never crosses the preset in the loosening direction.
- Fresh evidence on a dimension resets that dimension's decay clock only.
- A re-strengthening step without the graded sample quota is a no-op.
- The F10 gate still fires where it fired before.
Provenance: concept adapted from the lesson-confidence lifecycle in WayneCider/YourOwnPersonalJean-Luc (learning/seal_store.py, Apache-2.0). Adopt the idea, not the code: theirs decays toward zero and lets revalidate_lesson() restore any confidence with no evidence gate — both wrong under our invariants, and the second is exactly the hole this design closes.