feat(flow): revalidate dependency graphs before durable execution - #67
Merged
Merged
Conversation
This was referenced Sep 26, 2026
Pull Request Summary by devActivityMetricsAchievements
|
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.
A saved
Succeededprerequisite can become stale after its inputs, provider, authority, validator, or outputs change. The previous durable single-step path checked recorded dependency status, so a downstream step could miss that stale ancestor.This PR requires fresh graph evidence before dependent execution. It is the first bounded checkpoint under #31.
assess_runwith the exact expected plan and a complete, explicitly identified context inventory. Reports classify ready, reusable, invalidated, dependency-blocked, approval-required, and abandoned work.execute_in_plan, which recomputes eligibility for the caller-selected step. Serialized reports grant no authority; the original single-step APIs now refuse dependent steps.flow.run-assessment/v1in provisional contract set 0.8.0, with schema/examples, proposed ADR-0012, API guidance, and the updated roadmap.Validation completed locally on Rust 1.85 and stable: all targets passed, including eight new graph tests and all 81 acceptance scenarios twice in fresh roots; Clippy passes with warnings denied on both toolchains. Contract/source drift, report rejection, repository validators, formatting, documentation tests, all three examples, and package verification passed. At head
7a45e95f19b01b1533b6aba641f692ac68e6ac49, all five hosted CI jobs passed: Rust 1.85.0, Rust stable, repository validators, macOS durable state, and Windows durable state. Both Linux jobs retained normalized acceptance reports.The graph tests cover restart and deterministic reports; branch/transitive invalidation across input, artifact, provider, configuration, authority, binding, invocation, capability, and validator boundaries; missing/reordered/duplicate/extra contexts; exact-plan refusal; stale-report non-authority; single-step bypass refusal; unresolved dependencies; corrupt history; and no repeated successful launch.
Limits: exact saved plan only; sequential observations require quiescent external files. This adds no scheduler, automatic retry, cross-plan migration, artifact cleanup, real provider adapter, or exactly-once external-effect guarantee. Validation implementation changes conservatively invalidate older acceptance evidence. #65 owns the broader lifecycle corpus and #66 owns authority/effect and residual proofs. Keep parent #31 open.
Closes #64. Refs #31, #11.
Maintainer merge only. After merge and green main CI, #65 is next.