Cover fan-out degrade refinements (0069)#164
Merged
Merged
Conversation
Adopt proposal 0069 (spec v0.59.0), which refines 0066's fan-out degrade contribution. python's runtime already satisfied all three refinements, so this is conformance coverage with no library behavior change: - Fixture 069 is a mixed fixture; its FI-degrade cases run in the pipeline-utilities runner and its crash_injection/resume case in the checkpoint runner. The two runners partition cases on a checkpointer / resume / crash_injection marker. The checkpoint runner gains a small static-degrade FailureIsolationMiddleware translator for the degrade. - A unit test pins the strict-element-reducer caveat: a degrade that nulls a slot under concat_flatten / merge_all still raises ReducerError (the engine merge runs the reducer; the fan-in does not suppress it). Advance the pinned spec to v0.59.0.
There was a problem hiding this comment.
Pull request overview
Updates the repo to openarmature-spec v0.59.0 (proposal 0069) and adds conformance coverage for the refined fan-out degrade contribution rules, without changing runtime library behavior.
Changes:
- Added a focused unit test asserting
ReducerErrorwhen a degraded (null) slot hits a strict-element reducer (concat_flatten). - Split fixture 069 coverage across runners by skipping checkpoint-concern cases in
test_pipeline_utilities.pyand adding fixture 069 to the checkpoint runner (plus a minimal FI instance-middleware translator there). - Bumped spec pin/version sync points to v0.59.0 and recorded proposal 0069 in
conformance.tomland the changelog.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/unit/test_fan_out.py | Adds strict-reducer degrade/null-slot unit coverage for proposal 0069 caveat. |
| tests/test_smoke.py | Updates __spec_version__ assertion to 0.59.0. |
| tests/conformance/test_pipeline_utilities.py | Includes fixture 069 and skips checkpoint-concern cases in this runner. |
| tests/conformance/test_checkpoint.py | Includes fixture 069 checkpoint case handling and translates FI instance middleware (static form). |
| src/openarmature/AGENTS.md | Regenerates bundled agent doc header for spec v0.59.0. |
| src/openarmature/init.py | Updates __spec_version__ to 0.59.0. |
| pyproject.toml | Updates tool.openarmature.spec_version to 0.59.0. |
| conformance.toml | Pins spec to v0.59.0 and marks proposal 0069 as implemented. |
| CHANGELOG.md | Updates the consolidated spec-pin summary to include v0.59.0 / proposal 0069. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Address PR review on the fixture-069 split: - Both cases-loops now count the cases they drive and assert at least one ran, so a cases-shaped fixture whose cases are all skipped (a routing mistake) fails loudly instead of passing vacuously. This is the structural guard for the silent-skip hazard the split introduced. - _translate_fi_instance_middleware validates that a failure_isolation entry carries a degraded_update and names the fan-out node in its errors, so a malformed fixture fails actionably instead of with a bare KeyError.
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.
Summary
Adopts proposal 0069 (spec v0.59.0), which refines 0066's fan-out degrade contribution rules. python's runtime already satisfied all three refinements, so this PR is conformance coverage with no library behavior change.
The three refinements (all already conformant):
extra_outputssource contributes a positional null slot (index-aligned withtarget_field), not "not contributed".collect_fieldon any fan-in path is a null slot and the fan-in does not raise, with the caveat that under a strict-element reducer (concat_flatten/merge_all) a null contribution still raisesReducerError. python does not suppress it: the reducer runs in the engine merge, downstream of the fan-in.Third of four PRs folding the v0.14.0 consolidated spec-review findings (0068 through 0071) into the release.
Changes
checkpointer/resume/crash_injectionmarker. The checkpoint runner gains a small static-degradeFailureIsolationMiddlewaretranslator (the only degrade shape its fixtures use; the callable forms stay with pipeline-utilities) and leaves non-failure_isolationinstance middleware unwired, as before.concat_flattenraisesReducerError(callable form because a static degrade omittingcollect_fieldis a 0066 compile error).conformance.toml(spec_pin+[proposals."0069"]), the three spec-version sync points, regeneratedAGENTS.md; CHANGELOG pin-summary.Testing
uv run pytest tests/: 1320 passed, 376 skipped.ruffandpyrightclean.