test: add decay-required property test - #9
Merged
Conversation
robotrocketscience
added a commit
that referenced
this pull request
May 9, 2026
…r on empty derivation
`tool_lock` had `assert derived.belief is not None` directly on the hot
path. When the classifier sets persist=False (empty input post-strip,
question-shaped statement, anything else the derivation worker rejects),
the assert fires and the MCP tool surface crashes with an unhandled
exception. A crashing tool is far worse host-UX than a kind-tagged error
the agent can read and act on.
Replaces with a structured return:
{"kind": "lock.error", "id": "", "action": "error",
"error": "derivation produced no belief from the supplied statement
(likely empty after normalization)"}
Matches the existing lock.error shape used downstream (run_worker
reported empty derived_belief_ids list) and adds the populated `error`
field for actionability.
Adds tests/test_mcp_lock_via_worker.py::
test_lock_returns_structured_error_when_derivation_yields_no_belief —
monkeypatches `derive` to return DerivationOutput(belief=None,
skip_reason="empty") and asserts the new shape.
Phase 2 M4 of the mcp-server-properly-built audit. Closes the last
phase-2 finding (#9 in the audit list).
robotrocketscience
added a commit
that referenced
this pull request
May 9, 2026
…r on empty derivation
`tool_lock` had `assert derived.belief is not None` directly on the hot
path. When the classifier sets persist=False (empty input post-strip,
question-shaped statement, anything else the derivation worker rejects),
the assert fires and the MCP tool surface crashes with an unhandled
exception. A crashing tool is far worse host-UX than a kind-tagged error
the agent can read and act on.
Replaces with a structured return:
{"kind": "lock.error", "id": "", "action": "error",
"error": "derivation produced no belief from the supplied statement
(likely empty after normalization)"}
Matches the existing lock.error shape used downstream (run_worker
reported empty derived_belief_ids list) and adds the populated `error`
field for actionability.
Adds tests/test_mcp_lock_via_worker.py::
test_lock_returns_structured_error_when_derivation_yields_no_belief —
monkeypatches `derive` to return DerivationOutput(belief=None,
skip_reason="empty") and asserts the new shape.
Phase 2 M4 of the mcp-server-properly-built audit. Closes the last
phase-2 finding (#9 in the audit list).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Without decay, evidence mass runs unbounded under mixed-sign feedback. With type-specific half-life decay, mass stays bounded. This test asserts both regimes.
Test plan