# Shared Repeat-binding inspector Both hosts provide **Bindings → Repeat bindings**. Select a declaration or choose **New Repeat binding**, enter **Pane (fx:id)**, **Component class** and **Collection path**, then **Apply Repeat binding**. **Remove Repeat binding** deletes the selected declaration. Selecting an entry selects its pane on the canvas; canvas selection also locates the corresponding declaration. The fields map directly to NeitzelLib `Repeat.pane`, `Repeat.component` and `Repeat.collection`. The runtime creates one fresh Component per collection item and assigns the item as its Model. Use a dedicated pane for these children. This inspector does not change NeitzelLib's list-change behavior or generate Component classes. ## Source and history The inspector shares the lexical document editor and form lifecycle with Direct and Computed bindings. Creation adds a fully qualified Repeat declaration, plus required BindingList/FXML containers when absent. Editing changes only the three requested attributes. Existing quoting, imports, Model declarations, comments, unknown attributes and unrelated bindings remain intact. Alternate FXML prefixes, self-closing containers and explicit BindingList `elements` wrappers are supported. Each create, change, remove or explicit replacement is one revision-checked host document command. Normal Undo/Redo restores the exact previous/new text. The active form is invalidated when source changes, and read-only documents cannot be edited. Nested-property declarations remain visible and removable but require Source for changes; unfamiliar syntax is not flattened. A second Repeat targeting the same pane requires **Replace conflicting bindings**. Replacement removes the conflicting Repeat declarations atomically with the requested edit. A Direct/Computed binding on a property of that pane remains independent and is preserved. ## Validation boundary Structural diagnostics cover missing/ambiguous pane identifiers, duplicate Repeat panes, and missing/malformed Component class or collection names. Known structural errors block new previews; invalid drafts remain saveable and undoable. **Validate Repeat bindings** reports these checks and existing target-side binding diagnostics for the current source. Validation does not apply pending form values. This slice accepts typed field values. A collection/Component chooser and complete preflight compatibility discovery are later work. The pane's actual Java type, collection existence and ObservableList value, element/Component Model compatibility, Component loading and injection still require target-runtime loading. The inspector explicitly distinguishes structural validation from those remaining runtime checks. Generated metadata, Table/Column authoring, structural reference refactoring and complete IDE Problems integration also remain open. ## Automated qualification Lexical tests cover container creation, escaping, all three field changes, exact source preservation, paired-element removal, duplicate-pane replacement, independence from Direct bindings, nested syntax and import identity. The same live shared-UI scenario runs in native standalone and registered IntelliJ against classpath and module-path fixtures. It removes an existing declaration, creates one, changes its pane and Component, saves and renders it, replaces a conflict explicitly, saves a malformed collection path while preview is blocked, and checks exact single-command Undo/Redo throughout. Existing Direct/Computed and lifecycle checks remain enabled. Run `scripts/check-bootstrap.py` and `scripts/check-ide-host.py` with the pinned SDKs described in the [README](../README.md). No manual testing is required; previously skipped human checks remain skipped. Final qualification on 2026-11-13 passed on the pinned macOS baseline: **99 unit/adapter tests** (92 Maven, 7 IntelliJ), **36 target processes / 484 fixture assertions**, **48 worker lifecycle cycles**, both native standalone modes and both registered IntelliJ modes. The registered IDE checks also verified exclusive JavaFX 26 natives and worker shutdown. No manual testing was used. The initial full run timed out once in the existing module-path `viewmodels` fixture at its 30-second process limit, before the new inspector checks. Three fresh-process retries passed unchanged, followed by a successful full bootstrap rerun. The timeout's cause was not established; no timeout was relaxed and no runtime change was made to hide it. Local evidence: `/tmp/repeat-bootstrap.log`, `/tmp/repeat-registered-ide.log`, `/tmp/repeat-bootstrap-initial-timeout.log`, `/tmp/repeat-fixture-retry-{0,1,2}.log`, `target/connected-workflow/` and `target/ide-workflow/{classpath,modulepath}.json`. Final live logs contain the Repeat inspector pass markers and no uncaught application exceptions; native-crash and shutdown checks passed. Malformed-XML diagnostics are intentional recovery-test inputs. These results qualify the pinned baseline, not additional platforms or IDE versions.