Repository navigation
Wire the observer error isolation key - #317
Merged
Merged
Conversation
Read no_propagated_error (graph-engine 015) in the runner and drop it from the unread ledger. The runner already fails if invoke() or drain() raises, so an observer error reaching the caller was caught by control flow. What nothing checked was that an observer raised at all: the test observer records each event before it raises, so a raiser that never raised passed every check in 015. It now counts its raises, and the runner requires at least one. make_observer_fn also rejects a behavior it does not handle. The fixture model already rejects a typo, but a value added to that model without code here would have run as plain record.
There was a problem hiding this comment.
🟢 Approval recommended
The changes correctly close the vacuous conformance gap without introducing unresolved issues.
0 open findings
What changed in this PR
Wires the remaining observer error-isolation conformance assertion into the graph runtime harness.
Changes:
- Tracks and verifies that a raising observer actually raised.
- Rejects unsupported observer behaviors.
- Removes the now-resolved unread-key ledger entry.
| File | Description |
|---|---|
tests/conformance/test_conformance.py |
Asserts observer raising and error isolation. |
tests/conformance/harness/vocabulary.py |
Removes the resolved unread directive. |
tests/conformance/adapter.py |
Tracks raises and validates behaviors. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
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.
Wires graph-engine 015's
no_propagated_error, the only graph-engine key left in the unread ledger.invoke()ordrain()raises, so an observer error reaching the caller was caught by control flow. Nothing checked that an observer raised at all. The test observer records each event before it raises, so a raiser that never raised passed every check in 015. It now counts its raises, and the runner requires at least one when a fixture declaresno_propagated_error.make_observer_fnrejects a behavior it does not handle. The fixture model already rejects a typo, but a value added to the model without matching code in the test observer would have run as plainrecord.Testing:
record, 015 fails at the new check. With the key also removed, it passes, which is the gap this closes.deliver_loopfails 015 at the new check.