A later anti-windup notice could replace a write-path BUG SIGNAL notice
under the shared goodwe_output_clamp id (escalation ignores the budget).
The WARNING now uses goodwe_integrator_bound and points to DOCS; the
cadence sentence in DOCS is corrected. Tests pin both ids (red on fd14569).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1.5 KiB
Markdown
29 lines
1.5 KiB
Markdown
# SAFETY-40: the integrator bound is not a bug
|
|
|
|
**Decision.** `i_clamped` (the integrator reaching `integrator_max_w`, i.e.
|
|
anti-windup) keeps alarming through the same `ClampWatchdog`: it is counted,
|
|
notified on the same cadence, and escalates on a sustained run
|
|
(SAFETY-41). It gets its own text, a `WARNING` and an amber status row. Only
|
|
`clamped` (a command over `max_w`) and write-path clamps keep the BUG SIGNAL,
|
|
the `ERROR` and the red row.
|
|
|
|
**Why it still notifies.** On a default install `clamped` is unreachable
|
|
(`control.py`, at the integrator bound), so the integrator bound is the only
|
|
loop-side signal of a runaway such as the 14 768 W one. Silencing it would
|
|
remove that. The card says the same: "the fix is to say the true thing, not to
|
|
say less."
|
|
|
|
**Why a bug has its own budget.** A genuine over-rating must not wait up to
|
|
`REASSERT_S` behind anti-windup notices. `ClampWatchdog` tracks a separate
|
|
`last_bug_alarm`, and a bug's text is never overwritten by later anti-windup
|
|
text within an episode. Across episodes the WARNING uses its own
|
|
notification id (`goodwe_integrator_bound`), so it cannot replace a BUG SIGNAL
|
|
notice still on screen (review of #130). With only bug engagements, the cadence is the same as
|
|
before (`test_clamp.py` part 9).
|
|
|
|
**Numbers.** They come from the `Decision` of the clamping tick (`i_bound_w`,
|
|
`requested_w`, `clamped_w`, `target_w`), not from `i_w` or `self.target`.
|
|
|
|
**Open for the owner.** Whether scattered one-cycle anti-windup episodes should
|
|
notify at all, or only log and count. They notify now, as before.
|