Resolve saved declarations without initializing editing states - #19
Merged
Merged
Conversation
Share ObjectState extraction, scoped resolution and reconstruction with a one-shot headless API. Capture mutable resolved values independently while preserving callable identities and graph aliases. Fixes #18
This was referenced Oct 4, 2026
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.
Headless compilation currently creates temporary editing states to obtain saved declarations and provenance. Those states compute LIVE and SAVED views, initialize dirty tracking and enter registration/history lifecycle even though compilation only needs a saved capture.
Add
ObjectState.resolve_saved_object(...)on the existing owner. Editing states and the new operation share field extraction, scoped dual-axis resolution and nominal reconstruction. The headless operation receives explicit saved ancestors and returns the concrete declaration plus same-epoch provenance. It detaches mutable resolved values as one graph while preserving callable identities and shared aliases. Live editors retain their existing saved/live and ancestry behavior. Remove the unused separate live reconstruction implementation.Validation: 25 focused controls passed, covering existing restore/update/callable baselines and new saved-vs-live scope, ancestor currentness, MRO precedence, nominal subtype, ordinary
None, default-factory/constructor effects, delegate admission and detached inherited aliases. Six substantive OpenHCS compiler consumer controls passed against this isolated source, including inherited/explicit well-filter provenance, source isolation, UI saved/live distinction, no temporary registrations and captured declaration completeness. Public saved-request compilation remains pending dependency integration. No benchmark or latency improvement is claimed; the observed 0.295 s constructor envelope is only an upper bound.Expose this new API in ObjectState 1.2.0 so production consumers can require its actual supported version.
Closes #18.
Refs OpenHCSDev/openhcs#384 and OpenHCSDev/openhcs#596. Immediate consumer: OpenHCS PR 597, replacing temporary editor registration in
PipelineCompiler/ResolvedPipelineDefinitionwith the admitted saved declaration and its scope/provenance facts.