Skip to content

Wire the observer error isolation key - #317

Merged
chris-colinsky merged 1 commit into
mainfrom
fix/wire-ge-no-propagated-error
Oct 14, 2026
Merged

chris-colinsky merged 1 commit into
mainfrom
fix/wire-ge-no-propagated-error

Conversation

@chris-colinsky

Copy link
Copy Markdown
Member

Wires graph-engine 015's no_propagated_error, the only graph-engine key left in the unread ledger.

  • The runner already fails if invoke() or drain() 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 declares no_propagated_error.
  • make_observer_fn rejects 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 plain record.

Testing:

  • With the raiser switched to record, 015 fails at the new check. With the key also removed, it passes, which is the gap this closes.
  • A source mutant that skips the first observer in deliver_loop fails 015 at the new check.
  • An unknown behavior fails when the observer is built.

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.
Copilot AI balanced review requested due to automatic review settings October 14, 2026 06:06

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 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.

@chris-colinsky
chris-colinsky merged commit 73402b9 into main Oct 14, 2026
6 checks passed
@chris-colinsky
chris-colinsky deleted the fix/wire-ge-no-propagated-error branch October 14, 2026 06:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants