Skip to content

Expose canonical declarations for native forms - #61

Merged
trissim merged 7 commits into
mainfrom
refactor/native-formbridge
Oct 16, 2026
Merged

trissim merged 7 commits into
mainfrom
refactor/native-formbridge

Conversation

@trissim

@trissim trissim commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Working source checkpoint, not installation-ready

Latest source 82a6213: DottedFieldPath.direct_child_name now owns both root and nested direct-child selection. PyQt #33 19917ea migrates the complete leaf/parent/parts/lineage/intersection family and deletes five replaced form/tree helper APIs; its child identity still rejects the root. General containment and structural-display/enum/module/ScopeKey parsing remain unchanged. 19 ObjectState checks passed in 0.07s; 67 PyQt checks passed in 2.10s. No new production type/cache/alias/codec/helper. Toad #670 f76f4d55e pins this exact source; 107-package offline lock check passes. Source-only checks, not a built/installed application. Claude review and UNKNOWN disposition remain required.

Accepted leaf checkpoint 973aa098: all twelve matching leaf-name consumers across ObjectState/FormBridge now use existing DottedFieldPath.field_name directly. This includes the five reported sites and seven further edit/resolution/save/restore copies. Raw splits/branches and split-only temporaries are deleted; no helper, stored path copy or new class/cache. 113 ObjectState checks passed in 0.94s, plus 13 FormBridge checks in 0.08s, including inherited inspection and actual root/nested conversion/preview requests. Toad #670 6c1748b31 pins these heads; 107-package resolution and offline lock check pass. No paired app build or installed acceptance.

Accepted parent checkpoint 061a5ed3: DottedFieldPath.parent owns immediate parenting and lineage owns nearest-first traversal. ParameterStructure lookup/ancestors, ObjectState indexing/container rebuild, FieldInspection, Toad settings and FormBridge preview formatting consume those operations. All duplicate parent splits/root branches and prefix loops are deleted; ScopeKey and static FieldPath stay separate. 36 ObjectState checks passed in 0.13s, plus 6 FormBridge preview checks in 0.02s. No new class/cache/wrapper.

ParameterStructure.path, ancestors and leaf_paths return paths through the existing admitted topology. Static declaration binding, native form search/filtering and SavedSettings now use these operations instead of rebuilding a static declaration tree. No additional map, cache, wrapper or registry. Existing history/callable assertions were migrated without restoring removed aliases.

The paired Toad #670 f76f4d55e pins the latest source in both pyproject and lock. The full paired graph resolves, and uv lock --check --offline passes; focused parent/topology/restore behavior passed the checks above; complete native-family and installed acceptance remain unverified. Corrected full cohort source census against actual registry python-introspect 0.3.0: 999 modules, 5,166 original / 5,150 nominally projected classes, 16 OPEN, no parse errors. Earlier evidence used a python-introspect checkout still at 0.2.8; the dependency source input is now corrected. Runtime MRO/dynamic effects are not certified by AST.

Expose the existing ObjectState.parameter_structure object as the form declaration/topology owner. Delete four forwarding property pairs and migrate every production reader/writer, including local transaction rollback and registry diagnostics. Remove the signature_default forwarding API; its Toad consumer and the two PyQt inline reset consumers found in the wider pass (#33) read the recorded declaration, and existing package assertions migrate to the same owner. Root type lookup now identifies the extraction target rather than a delegated lifecycle wrapper.

Native checkpoint search (ObjectState, FormBridge, Toad and Core candidate roots; the later wider pass found and migrated two additional PyQt readers): rg -n '\._(parameter_structure|path_to_type|direct_parameter_paths|exclude_param_names|excluded_params)\b|\.signature_default\(' <roots>; before readers in ObjectState's object_state.py, transaction_checkpoint.py and object_state_registry.py, plus Toad DeclaredField; after zero replaced member readers. ParameterStructure remains the sole declarations/direct_paths/defaults owner, not a copied map or compatibility alias.

Existing NRA source/class index: current ObjectState + FormBridge dependency roots 124 modules, 549 original classes, 549 projected, no parse omissions; original installed family context 680 modules, 2752 original classes, 2736 projected with 16 conditional/demo classes explicitly OPEN. Native binding, dynamic dispatch and behavior are not certified by that index.

Source syntax and diff whitespace checked. Focused package checks and actual saved settings/history/forms acceptance remain after the complete family implementation and one resolved current dependency graph. No installed pin changed. Source based on current main 093d82d, not a second backported API. Paired Toad/FormBridge drafts are required; Codex alone integrates/installs.

@trissim
trissim force-pushed the refactor/native-formbridge branch from 3c7fcb6 to 7f79994 Compare October 16, 2026 22:04
@trissim

trissim commented Oct 16, 2026

Copy link
Copy Markdown
Contributor Author

claude-forms: checked and merging as part of P45 together with ObjectState #61, FormBridge #13 and PyQt #33. Versions: objectstate 5.0.0, formbridge 0.2.0, pyqt-reactive 0.9.0 (public names removed; see CHANGELOG). Tests run from source together: ObjectState 407 passed; FormBridge 116 passed; PyQt failures identical to the three mains' (67, offscreen window-snapshot tests). Two stale PyQt test fakes now bind the real ParameterFormManager path method. Outside this PR: PyQt main already imports formbridge.forms.raw_display_value, which exists only in open FormBridge #14.

🤖 Generated with Claude Code

@trissim
trissim marked this pull request as ready for review October 16, 2026 22:09
Copilot AI balanced review requested due to automatic review settings October 16, 2026 22:09
@trissim
trissim merged commit ad87272 into main Oct 16, 2026
10 of 11 checks passed

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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

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