Repository navigation
refactor(core): DagNode field layers, GWT test naming, lockstep consumption docs - #135
Merged
Merged
Conversation
…renames; docs: lockstep contract Closes the remaining audit items: #130, #132 (renames + factory marker), and the #128 documentation note. Also refreshes uv.lock for v0.32.4. #130 — DagNode: - drop the stringly-typed __getitem__/__setitem__/get proxies and the unused Dag.pop (zero callers in src or tests; three test call sites migrated to attribute access) - group the 28 fields into five labeled layers (identity, user policy, compiled contracts, private diagnostics, scope metadata) so the four distinct reasons to change are visible; module docstring now states where 'immutability' actually lives (frozen contract dataclasses, not the mutable record) - NOTE: the full StepSpec/CompiledNode split was assessed and deferred — it would rename attribute access across every executor and test construction site for zero behavioral gain; the field grouping makes that split mechanical if ever wanted #132 — test naming + factory marker: - 61 test functions renamed to test_given_X_when_Y_then_Z across the concentrated files (threshold x2 engines, wait_for_workers, lifecycle_stream x2, each_resource_lifecycle x2, tee, expansion, observer runtime); renames mirrored across engines and the parity meta-test exception lists updated - additive mark_as_factory()/FACTORY_MARKER protocol: callables whose signature cannot be sniffed (partials, callable objects) can be tagged explicitly; signature sniffing remains the default #128 — docs: - new DESIGN_PHILOSOPHY section 3.17 (Bounded Lockstep Consumption Contract): sibling fan-out branches must be consumed in lockstep; sequential consumption circular-backpressures a bounded push runtime and is mathematically guaranteed to deadlock (the complex_parallel case) - ROADMAP: completed bullets for parity enforcement, loud post-run streams, and fail-loud build validation Tests: 834 passing (was 832; +2 factory marker tests).
This was referenced Sep 20, 2026
refactor(core): fail loud on silent type-hint fallbacks (get_safe_type_hints, dag_dependencies)
#131
Closed
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
Final batch of audit follow-ups: #130 (DagNode), #132 (test naming + factory marker), and the #128 documentation note. Also refreshes
uv.lockfor v0.32.4.Changes
#130 — DagNode
__getitem__/__setitem__/getproxies and the unusedDag.pop— zero callers in src or tests; three test call sites migrated to attribute accessOutputContract/PublishPlan, not the mutable record itself)StepSpec/CompiledNodesplit would rename attribute access across every executor and test construction site for zero behavioral gain. The field grouping makes that split mechanical if it's ever wanted — flagged in the code and in refactor(core): split DagNode god object; drop stringly-typed accessors #130.#132 — test naming + factory marker
test_given_X_when_Y_then_Zacross the concentrated files (error threshold ×2 engines,wait_for_workers_after_shutdown, lifecycle stream ×2, each-resource lifecycle ×2, tee concurrency, expansion, observer runtime). Renames are mirrored across engines; the parity meta-test exception lists were updated accordinglymark_as_factory()/FACTORY_MARKERprotocol: materializer factories whose signature cannot be sniffed (partials over plain callables, callable objects) can now be tagged explicitly. Signature sniffing remains the default — nothing existing changes#128 — docs
DESIGN_PHILOSOPHY§3.17 Bounded Lockstep Consumption Contract: sibling fan-out branches must be consumed in lockstep; sequential consumption circular-backpressures a bounded push runtime and is mathematically guaranteed to deadlock (thecomplex_parallelcase — unfixable without unbounded buffering, hence documented instead)Tests
ruff format/lint,mkdocs build --strict, and the pre-commit coverage gate all green