audit-snapshot memory-notes misattributes the decline reason for stability-downgraded candidates #16

Closed
opened 2026-07-30 03:40:05 +03:00 by issuer-agent · 1 comment

bin/audit-snapshot memory-notes renders the wrong reason for a candidate that the FR-4.5 evidence-stability gate downgraded.

On the 2026-07-30 anxious run, anxious/agent-wip/release-policy-derivation was downgraded from file to boundary-question by the stability gate. bin/stability-classify recorded the correct reason:

HARD GATE (FR-4.5): evidence is not stable across measurement windows — measurement_strength 'thin' -> 'measured'; share_of_audited_spend 0.0 -> 0.1185. Downgraded to a boundary question, never filed.

But the drawer that memory-notes rendered (and which is now stored in mempalace, wing anxious, room inference-arbitrage-audits, source_file inference-arbitrage/Audits/anxious/2026-07-30.judgments.md) says:

  • Declined because: did not clear the filing threshold in this window

That is factually wrong: the candidate was measured at 11.85% of audited spend, far above the 2% filing threshold. The threshold is precisely the one gate it did clear. The renderer appears to fall through to a generic "did not clear the filing threshold" branch whenever verdict == boundary-question and confidence is high, instead of reading the stability downgrade that is already present in the same document.

Impact: the memory drawer is the input to step 2b (FR-9) recall on the next audit. A future run recalling this drawer is told the candidate failed on value when it actually failed on measurement instability — the opposite diagnosis, and one that invites re-proposing it as soon as a window shows a high share. The same document's later "Evidence-stability downgrades (FR-4.5)" section states it correctly, so the two halves of one drawer contradict each other.

Expected: for a stability-downgraded candidate, the "Declined because" line should name the FR-4.5 gate and the flip, not the filing threshold.

`bin/audit-snapshot memory-notes` renders the wrong reason for a candidate that the FR-4.5 evidence-stability gate downgraded. On the 2026-07-30 anxious run, `anxious/agent-wip/release-policy-derivation` was downgraded from `file` to `boundary-question` by the stability gate. `bin/stability-classify` recorded the correct reason: > HARD GATE (FR-4.5): evidence is not stable across measurement windows — measurement_strength 'thin' -> 'measured'; share_of_audited_spend 0.0 -> 0.1185. Downgraded to a boundary question, never filed. But the drawer that `memory-notes` rendered (and which is now stored in mempalace, wing `anxious`, room `inference-arbitrage-audits`, source_file `inference-arbitrage/Audits/anxious/2026-07-30.judgments.md`) says: > - Declined because: did not clear the filing threshold in this window That is factually wrong: the candidate was measured at **11.85%** of audited spend, far above the 2% filing threshold. The threshold is precisely the one gate it *did* clear. The renderer appears to fall through to a generic "did not clear the filing threshold" branch whenever `verdict == boundary-question` and confidence is `high`, instead of reading the stability downgrade that is already present in the same document. Impact: the memory drawer is the input to step 2b (FR-9) recall on the *next* audit. A future run recalling this drawer is told the candidate failed on value when it actually failed on measurement instability — the opposite diagnosis, and one that invites re-proposing it as soon as a window shows a high share. The same document's later "Evidence-stability downgrades (FR-4.5)" section states it correctly, so the two halves of one drawer contradict each other. Expected: for a stability-downgraded candidate, the "Declined because" line should name the FR-4.5 gate and the flip, not the filing threshold.
admin added the area/agent-behaviordomain/agentskind/defect labels 2026-07-30 03:41:56 +03:00
Author

Fixed by commit 6b634fd on main. decline_reason() now checks FR-4.2's own disqualifiers first — a candidate can coincidentally be named in an unrelated stability finding without having cleared them, and the function only replaces the generic fallback line when the candidate actually reached it after clearing every earlier check on its own grade, which is the only way it can also be a genuine FR-4.5 downgrade.

New regression test (h) added to tests/memory.test.sh; full suite passes.

Fixed by commit 6b634fd on main. `decline_reason()` now checks FR-4.2's own disqualifiers first — a candidate can coincidentally be named in an unrelated stability finding without having cleared them, and the function only replaces the generic fallback line when the candidate actually reached it after clearing every earlier check on its own grade, which is the only way it can also be a genuine FR-4.5 downgrade. New regression test (h) added to tests/memory.test.sh; full suite passes.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kotkan/claude-plugin-inference-arbitrage#16