Repository navigation
U4: formbridge — headless MCP without Qt; the generic UI bridge leaves OpenHCS - #1206
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…idge mcp/execution.py serves main-thread calls through formbridge's QueuedMainThreadDispatcher instead of a QCoreApplication event loop, and every OpenHCS import of a module that moved from pyqt-reactive to formbridge names its new home. The stdio and hosted MCP servers now build without loading PyQt6 (the two B5 cold-build tests pass). DualEditorWindow._current_function_spec and the DualEditorSession.current_function_spec it forwarded to had no caller. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…HCS declares its application The UI-bridge DTOs, operation family, client service, descriptor discovery, transport, server, provider registry, in-process bridge and ObjectState projections move to formbridge (Qt-free); window introspection and the ObjectState code-document window providers move to pyqt-reactive. OpenHCS keeps its declarations: OpenHCSUiBridgeApplication (protocol v4, endpoint, transport, environment names), its identities, the dataset, pipeline-editor, debug and live-measurement surfaces, the selected-dataset workflow and session-events operations (OpenHCSUiAgentBridgeService), and the MCP capabilities. - The identity enums (UiCodeDocumentId, UiStateSurfaceId, UiWidgetId) restated the identity registry and are deleted; window aliases are declared on the identity classes and the dataset-list scope is a HiddenObjectStateScope. - The bridge widget id is datasets (was plate_manager), with datasets.orchestrator_config, datasets.state and datasets.live_measurements. - The dev client's WorkflowTerminalStateCriterion restated the dataset workflow operations; the terminal and failed row states now live on them. - OpenHCSMainWindow is a UiBridgeHostWindow; PyQtServiceAdapter is a UiHostServices (the colour-scheme protocol pyqt-reactive reads). - The unused copy openhcs/utils/performance_monitor.py is deleted. - The offscreen smoke test exits normally again: QApplication teardown no longer crashes (0 of 18 runs here, 0 of 8 on the E1 head). - Guards: tests/unit/test_formbridge_guards.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cates Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e branch heads Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n only by the required surface_id Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…asset follows the datasets id The headless guard imports openhcs first so its subprocess resolves formbridge through the source-checkout activation. Config-consumer and mirror-deletion scans, U3's generic-Qt guards, the help-projection scan and the desktop update worker's source path include external/formbridge. README, docs validation and the docs workflow list it. website/assets/gallery/ui-plate-manager.webp and its two records are renamed to ui-datasets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The installed-GUI smoke keeps formbridge's bridge DTO paths and the datasets widget identity, and reads the action status as the UiActionInvocationStatus class family from formbridge.bridge.dto. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
formbridge 0.1.0 and pyqt-reactive 0.6.0 replace the branch heads; ObjectState 2.1.1, PolyStore 0.6.1 and zmqruntime 0.6.2 become the dependency floors, with the submodules at those tags. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Surface U4 (receipt). Merged with
mainat44980dfe2(E1, K2, K3, N1). Against the published MCP snapshot onlyopenhcs_ui_get_state_surfacediffers (requiredsurface_id); the receipt lists every deliberate contract change.Libraries (not tagged; owner releases in this order, then repins OpenHCS):
external/formbridgepoints at its branch head)external/pyqt-reactivepoints at its branch head; remove itsrequirements-ci.txtformbridge line once 0.1.0 is on PyPI)formbridge>=0.1,<0.2andpyqt-reactive>=0.6,<0.7What changes
mcp/execution.pyserves main-thread calls through formbridge'sQueuedMainThreadDispatcherinstead of aQCoreApplicationevent loop, and the Qt-free tier of pyqt-reactive (10.8k lines) moved to formbridge. The two B5 cold-build tests pass.OpenHCSUiBridgeApplication(protocolopenhcs.ui_bridge.v4), its identities, surfaces, and the selected-dataset workflow and session-events operations.datasets(wasplate_manager);openhcs_ui_get_state_surfacerequiressurface_id(MCP contract fixture updated for exactly these two tool records).UiBridgeDescriptorEnvironment, the protocol constants and the dev client'sWorkflowTerminalStateCriteriondeleted (derived from identities, the application declaration andDatasetWorkflowOperation).DualEditorWindow._current_function_specandopenhcs/utils/performance_monitor.pydeleted (unused).Guards:
tests/unit/test_formbridge_guards.py(MCP stdio+hosted and every formbridge module load no PyQt6/PyQt5/PySide/qtpy; OpenHCS defines no class the libraries own; the libraries import noopenhcs; deleted names stay deleted; moved modules are gone), formbridgetest_no_toolkit_imports.py, pyqt-reactivetest_only_qt_code.py. Structural ratchet (openhcs, scripts, benchmark) and NRA R1 againstc7a953030: no increase.U4 · PR #1206 · guards 5/5 · production −13730 +736 · tests −527 +585
🤖 Generated with Claude Code