feat(cockpit): retire PySide6/PyInstaller — remove the LGPL artifact ahead of the web-app rebuild (#355) - #359
Merged
Merged
Conversation
…ahead of the web-app rebuild (#355) Delete the PySide6 (LGPLv3) desktop UI and PyInstaller packaging now, ahead of web-app parity (ADR-0008), so the license check is clean with ZERO exceptions before the OSS/MIT flip. The framework-agnostic Python cores are retained; the FastAPI web app (#351) rebuilds the UI on them. No runnable desktop UI in the interim. - pyproject: drop PySide6, pywinpty, pytest-qt (and the forge-cockpit entry point); keep psutil + pytest; relicense the package MIT; regenerate uv.lock. - Delete the Qt presentation layer (app/__main__/terminal/*_view) and forge-cockpit.spec; strip __init__.py to a cores-only package init. - Delete the Qt/pytest-qt + packaging tests and the offscreen conftest; keep the six core suites (test_fleet_control removed too — it imported the deleted fleet_view/log_view and used qapp/qtbot). 106 cores-only tests pass. - license gate: remove the PySide6 LGPL exception (added by #349) from license.mjs; the Python tree is now fully permissive — `node license.mjs` reports zero exceptions, exit 0. Update the #349 tests to assert no non-permissive Python license and no lingering exception. - CI: cockpit-python job runs cores-only pytest (no Qt/offscreen env). - docs: ADR-0006 Decision 1 + ADR-0008 note PySide6 removed ahead of parity (UI absent until #351); runner-ui README + runner-adoption guide + docs route index reflect the cores-only interim state. Closes #355 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SATRHKa6mDHDuirhP6QuwL
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.
Closes #355 — parent epic #350 (Cockpit v2, ADR-0008).
Per the owner's 2026-08-03 decision, remove the PySide6 (LGPLv3) desktop UI and PyInstaller packaging now, ahead of web-app parity, so the license check is clean with zero exceptions before the OSS/MIT flip. The framework-agnostic Python cores are retained; the FastAPI web app (#351) rebuilds the UI on them. No runnable desktop cockpit UI in the interim.
Acceptance criteria
pyproject.toml;uv.lockregenerated;forge-cockpit.specdeleted. Cores + psutil (+ pytest) kept. Theforge-cockpitentry point (target deleted) was removed; package relicensed MIT.app.py,__main__.py,terminal.py,*_view.py); no remaining module imports PySide6/pywinpty;__init__.pystripped to a cores-only package init. Cores import cleanly; the six core test suites pass.license.mjs(PYTHON_LICENSE_EXCEPTIONSnow empty;pyside6/pywinpty/pytest-qtdropped from the SPDX map).#349tests updated to assert no non-permissive Python license and no lingering exception.cockpit-pythonCI job is now cores-only (no Qt/offscreen env); license job green with zero exceptions;pnpm verifygreen.tools/runner-ui/README+ runner-adoption guide + docs route index reflect the cores-only interim; docsync gate green.Test deviation from the ticket inventory (honest note)
The ticket's KEEP list included
tests/test_fleet_control.py, but on inspection it importsFleetTabfromfleet_viewandLogViewerfromlog_view(both deleted Qt modules) and uses theqapp/qtbotpytest-qt fixtures. Per the ticket's own "verify each test's imports before deciding" instruction, it is a Qt UI test and was deleted alongside the other Qt suites. The six genuinely framework-agnostic core suites are kept.Verification (this branch)
node plugin/scripts/gates/license.mjs:license: clean — plugin declares MIT; all npm dependency licenses within the allowlist (9 ids); 2 Python dep(s), 0 documented exception(s)— exit 0, zero exceptions.uv.lock) —uv sync --frozen+uv run --frozen pytest -q: 106 passed (no Qt, no offscreen).doc-sync: clean (54 docs indexed).PySide6/pywinpty/pytest-qt/forge-cockpit.spec/entry-point references in code, CI, or gitignore (only historical CHANGELOG/spike entries remain, intentionally).🤖 Generated with Claude Code