Skip to content

Wire 0050 failure-isolation conformance fixtures#154

Merged
chris-colinsky merged 2 commits into
mainfrom
chore/0050-failure-isolation-conformance
Jun 12, 2026
Merged

Wire 0050 failure-isolation conformance fixtures#154
chris-colinsky merged 2 commits into
mainfrom
chore/0050-failure-isolation-conformance

Conversation

@chris-colinsky

Copy link
Copy Markdown
Member

Summary

Wire proposal 0050's failure-isolation conformance fixtures (pipeline-utilities/058-063) into the conformance harness, validating the §6.3 FailureIsolationMiddleware behavior against the spec fixtures (previously covered by unit tests only). This is the third v0.14.0 piece, after the cause-fidelity behavior fix (#153) and ahead of the spec-pin bump to v0.55.0.

Test/manifest only, no src/ changes.

What changed

  • A failure_isolation middleware directive (a directives.py spec + a _build_middleware branch constructing the real FailureIsolationMiddleware) and the expected_failure_isolation_event assertion, backed by a FailureIsolatedEvent capture observer.
  • Variant conventions for the fixtures: callable degraded_update (a {{ state.x }} template render), matches_category predicate, and the on_caught state-side-channel (overlaid onto final_state, since the callback can't write graph state directly).
  • The raises node directive accepts the {message, exception_kind} shape (fixture 063).
  • Un-defers 058-063 from parsing and execution.

Scope notes

  • 061 is execution-deferred. python's FailureIsolatedEvent.attempt_index in the three-piece composition is the node-level baseline (0), while fixture 061 (and §6.3's lineage-correlation prose) expect the final retry attempt (1). That reconciliation is in progress with spec; 061 un-defers once it resolves and python's attempt_index is corrected if needed.
  • The call-level-retry fixtures (llm-provider/056-058) stay deferred. They assert the per-attempt LLM span surface that 0050 deferred (decision (b); partial in the manifest), so they remain queued until a future LlmRetryAttemptEvent cycle.

Validation

  • Full conformance suite: 593 passed, 251 skipped, 0 failed (exercises the shared-harness changes across all capabilities).
  • The five failure-isolation fixtures (058/059/060/062/063) execute and pass; ruff + pyright clean; conformance-manifest guard OK.

Wire proposal 0050's failure-isolation conformance fixtures
(pipeline-utilities/058-063) into the harness: a failure_isolation
middleware directive, the expected_failure_isolation_event assertion
with a FailureIsolatedEvent capture observer, callable/predicate/
on_caught variant conventions, and an extended raises directive.
058/059/060/062/063 pass; 061 is execution-deferred for a
FailureIsolatedEvent.attempt_index discrepancy being reconciled with
spec. The llm-provider/056-058 call-level-retry fixtures stay deferred:
they assert the per-attempt span surface 0050 deferred (partial).
Copilot AI review requested due to automatic review settings June 12, 2026 15:42

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.

Pull request overview

Wires Wire proposal 0050 failure-isolation conformance fixtures (pipeline-utilities/058–063) into the Python conformance harness by adding fixture directive parsing, middleware construction, and FailureIsolatedEvent assertions (with 061 still execution-deferred due to the attempt_index discrepancy).

Changes:

  • Add a failure_isolation middleware directive model and runtime construction path, including predicate + degraded_update callable encoding and an on_caught side-channel overlay.
  • Capture and assert FailureIsolatedEvent via new expected_failure_isolation_event / no_failure_isolation_event expected-block keys.
  • Extend the raises node directive to accept {message, exception_kind} for fixture 063 and un-defer parsing/execution for 058/059/060/062/063.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/conformance/test_pipeline_utilities.py Runs pipeline-utilities 058–063, builds FailureIsolationMiddleware from fixture config, captures FailureIsolatedEvent, and asserts expected event/no-event plus on_caught overlay.
tests/conformance/test_fixture_parsing.py Updates parsing deferrals: keeps llm-provider/056–058 deferred, removes pipeline-utilities/058–063 from parsing deferral notes.
tests/conformance/harness/expectations.py Adds expected-block fields for failure-isolation assertions and parses 061’s expected_attempt_events.
tests/conformance/harness/directives.py Adds failure_isolation middleware directive schema and expands raises to allow dict shape.
tests/conformance/adapter.py Implements {message, exception_kind} support for raises nodes.
conformance.toml Updates proposal 0050 notes to reflect fixture wiring status and 061’s pending attempt_index reconciliation.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread tests/conformance/harness/expectations.py
It is a pipeline-utilities-only field, so the expected-block
discriminator should route on it alongside the other PU keys.
@chris-colinsky chris-colinsky merged commit 154434e into main Jun 12, 2026
5 checks passed
@chris-colinsky chris-colinsky deleted the chore/0050-failure-isolation-conformance branch June 12, 2026 15:53
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