Repository navigation
Conversation
Bring paper.md in line with the code at v0.8.0: the library name, the AbstractManagerWidget declaration, the cross-window mechanism, field ownership and the config window save. Add the formbridge reference. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
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.
Brings
paper.mdin line with the code at v0.8.0 (1c0f35f, which is alsomain). No library code changes. Paths below are undersrc/pyqt_reactive/unless prefixed;formbridge:means formbridge v0.1.4 andobjectstate:means ObjectState v4.0.0, the versions 0.8.0 requires, read through the GitHub API.Nothing was executed: this is a PyQt library and no environment was created. Every name, import path and call signature in the two code examples was checked by reading the source (
ParameterFormManager.__init__(state, config)forms/parameter_form_manager.py:314,FormManagerConfig:74,ColorSchemetheming/init.py:9,ObjectState.__init__(object_instance, scope_id, ...)objectstate:object_state.py:145,set_base_config_typeobjectstate:init.py:120;AbstractManagerWidgetclass attributes widgets/shared/abstract_manager_widget.py:586-613,_action_handlers:267,ManagerStateBindingformbridge:managers/state_binding.py:8,ManagerItemHooksandAttributeItemIdProjectionformbridge:managers/item_hooks.py:33,46,ListItemFormatwidgets/shared/manager_item_display_builder.py:33). The first example is the repository's owndocs/quickstart.md. The examples were not run. The second is a class fragment: it omits the seven abstract methods the text lists, so it cannot be instantiated as printed.Claim ledger
pyqt-reactor(title, the text throughout, and two bib notes)pyqt-reactiveeverywhereAbstractManagerWidgetare the whole declarationBUTTON_CONFIGS = [("Add", "add_step"), ...](2-tuples naming methods)(label, action_id, tooltip); handlers come from_action_handlers(). The string tablesACTION_REGISTRY/DYNAMIC_ACTIONSraiseNotImplementedErrorITEM_HOOKS = {'backing_attr': 'steps', 'selection_signal': 'step_selected'}ITEM_HOOKSmust be aManagerItemHooks(a dict raisesTypeError); backing list and selection are named by a requiredSTATE_BINDINGPREVIEW_FIELD_CONFIGS = [...]configures row previewsLIST_ITEM_FORMATadd_step(),del_step(),edit_step(). The base class handles everything else"LIST_ITEM_FORMAT: "Multiline display with formatters"ListItemFormatFieldChangeDispatcherroutes changes with reentrancy guards"ObjectStateRegistrynotifies listeners viacontextvarsisolation"ObjectStateRegistry".contextvarsdoes not occur in this packagegrep -rw contextvars srcis emptyCrossWindowPreviewMixindebounces updates to prevent storms during rapid typing"AbstractManagerWidget, its only user in the package, overrides the hook and does not use it. The paper now says list managers listen on the registry and refresh their rowson_resolved_changed; ObjectState supplies the changed paths; the form refreshes and flashes thosenum_workersexamplepyqt-reactivecalls magicgui for leaf widgets it has no widget of its own forpyqt-reactivedisplays it"Nonemeans inherit. Placeholder text shows the inherited value"state.get_resolved_value(path)CodegenProviderABCand ...PreviewFormatterRegistry" as this package's integration pointsimport openhcsin src; 31 mentions of OpenHCS in docstrings and one attribute name (utils/window_utils.py:86)GlobalFlashCoordinatorruns a single timer, pre-computes all interpolated colors"_GlobalFlashCoordinator); the paper describes it without naming itWindowFlashOverlayrenders every flash rectangle in onepaintEvent"__init__), or objects with__call__... Pass a function, get a form"ObjectState, not from a callable. The analysis is one call toUnifiedParameterAnalyzer.analyze; which kinds of object that accepts is python-introspect's claim and is not restatedParameterInfosubclasses definematches()predicates; the factory selects the first match"_reset_OptionalDataclassInfo)"ValueErrorValueError, not a static checkpyqt-reactorprovides them once." and "eliminates this work"False or misleading: 13 (rows 1, 2, 3, 4, 5, 6, 11, 12, 17, 18, 23, 28, and 31 in part). Removed as unverifiable: 8 (rows 8, 15, 16, 22, 27, 33 reworded, 34, 35).
The paper had no line counts, widget counts, "N% less code" figures, frame-rate or latency numbers. The one number now in it (60 frames per second) is a default in the source, not a measurement.
New statements, with their source
ParameterFormManager.__init__takes anObjectState(forms/parameter_form_manager.py:314-327).mark_saved()per tab insideObjectStateRegistry.atomic_success, with checkpoint restore and participant rollback on failure (windows/config_window.py:699-767; CHANGELOG 0.8.0; the 0.7.2 to 0.8.0 diff of that file is +13 -148).ParameterFormManager.owns_field_pathanswers from the form's displayed fields (forms/parameter_form_manager.py:1456-1470).sole_ownerraisesNavigationTargetClaimedTwiceError(services/window_navigation.py:61-81), used byCompositeWindowNavigationDriver(:226, :237) andConfigWindow(windows/config_window.py:329-337).state.get_provenance(path)(widgets/shared/clickable_help_components.py:511; CHANGELOG 0.7.1).UiHostServicesis required by every manager (abstract_manager_widget.py:645, 676-677; formbridge:services/host_services.py:11).scripts/benchmark_form_construction.pymeasures form construction only and commits no results.For the owner
ParameterFormManager._on_live_context_changedis never connected.disposedisconnects it fromObjectStateRegistry(forms/parameter_form_manager.py:1039) but no line insrcconnects it;SignalService.register_cross_window_signalsonly logs (services/signal_service.py:135-148). So the 20 ms placeholder refresh at :992-1026 looks unreachable from inside this package, and the form's cross-window path isstate.on_resolved_changedalone. The paper describes only that path.CrossWindowPreviewMixin's debounce is bypassed by its only subclass in the package (row 12), andPREVIEW_FIELD_CONFIGSexists only in docstrings (row 5). The class docstring at abstract_manager_widget.py:573-575 still tells subclasses to definePREVIEW_FIELD_CONFIGSandACTION_REGISTRY, and the second now raises._ConfigEditorTab.owns_field_pathanswers fromstate.parametersbecause it is asked before its form is built (windows/config_window.py:235-245). The paper's sentence about shown fields is scoped toParameterFormManager.pyqt-reactive>=0.7.2,<0.8(pyproject.toml:113on the OpenHCS branch I read), so Research Application describes OpenHCS on 0.7.x while the paper describes 0.8.0.UnifiedParameterAnalyzer.analyzeaccepts; the AI disclosure's model name; the front-matterdate(13 January 2026), left as it was.paper.bib: addedformbridge(https://github.com/OpenHCSDev/formbridge, confirmed to exist; author and description taken from itspyproject.toml), please check the entry.pyqt6is now cited. "pyqt-reactor" corrected in twonotefields. TheobjectstateandpythonintrospectURLs point atgithub.com/trissim/...; both resolve, and theOpenHCSDevrepositories also exist, so I left them for you to choose. Five entries remain uncited (pydantic,gamma1994design,qt6,dataclasses,typehints); none is dangling.wc -w(front matter and code included) against 1144 before, 13% over. The two code examples with their imports account for the difference.🤖 Generated with Claude Code