Skip to content

ci: expose native Qt crashes and stalled test stacks - #4

Draft
lukisch wants to merge 4 commits into
mainfrom
ci/qt-process-diagnostics-20261015
Draft

lukisch wants to merge 4 commits into
mainfrom
ci/qt-process-diagnostics-20261015

Conversation

@lukisch

@lukisch lukisch commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Native GUI tests on #3 abort on Linux and macOS; a Windows job reports 361 passed and 1 skipped before exiting unsuccessfully. The macOS smoke process also exits with SIGSEGV before buffered output is retained. The root cause remains unknown.

Enable Python faulthandler and unbuffered output for the existing test and smoke commands. Disable pytest output capture and emit diagnostic stacks after a test runs for 60 seconds. This timeout prints stacks; it does not terminate tests or change their assertions, exit status, job deadlines, dependencies or OS/Python matrix.

Based directly on unchanged main 69e312c, independent of #3. This diagnostic PR can establish baseline behavior with current dependencies; it is not a product fix or evidence that #3 caused the crashes.

Validation: all four workflow YAML files parse; git diff --check passes; only four command lines in two workflows changed. Native CI results remain pending. A separate Windows baseline smoke passes with isolated temp/settings/plugin paths; that does not establish native macOS acceptance.

Author model: gpt-6.1-sol (Codex). Independent review pending. Draft only; merges disabled. No release or runtime mirror change.

The current revision adds a bounded Linux/Python3.11 comparison of PySide6_Essentials 6.11.2 and 6.12.0. It exercises an isolated QSyntaxHighlighter subclass through1000 document updates, reports callback counts and None references, and preserves native process failures. No product modules/settings/files are loaded; no product dependency is pinned. This probes a binding hypothesis, not a confirmed cause or repair.

Embedded Python and workflow YAML parse; local probe completes12000 callbacks on Windows/Python3.12.10/PySide6+shiboken6.11.1. This local run does not substitute for either native comparison cell. Earlier local Qt6.12 labels were not version-captured; the current test interpreter explicitly reports6.11.1. Native comparison results remain pending.

The first comparison attempt did not reach the probe: 6.11.3 was unavailable in the runner package index, and the 6.12.0 QtGui import lacked libEGL.so.1. The current revision uses index-confirmed 6.11.2 and installs libegl1/libgl1/libxkbcommon-x11-0 in the diagnostic jobs. These prerequisite failures do not support or refute the binding hypothesis. YAML, matrix and embedded Python validation pass; corrected native results pending.

Generated-with: gpt-6.1-sol (Codex)
@github-actions

Copy link
Copy Markdown

Welcome! 👋 Thanks for your first pull request in this repository.

A maintainer will review it soon. Please make sure:

  • Your changes are tested
  • Documentation is updated if needed
  • The PR description explains what and why

Thanks for contributing!

Lukas Geiger added 2 commits October 15, 2026 20:19

lukisch commented Nov 7, 2026

Copy link
Copy Markdown
Contributor Author

Zweitmodell-Review (automatisch, ohne Freigabe/Merge):

CI: Alle Jobs grün außer Isolated Qt binding (6.12.0). Die Ursache steht im Log: Fatal Python error: none_dealloc: deallocating None: bug likely caused by a refcount error in a C extension, danach Aborted (core dumped). Mit 6.11.2 läuft derselbe Job grün. Das passt zu dem Befund aus doc-bricks/MailProcessor#12 und UniversalDocsGrabber#5 (PySide6 6.12.0 ausschließen).

Bewertung: Der neue Job macht die Qt-Abstürze sichtbar, was der Zweck des PRs ist. Der Fehler liegt im Binding und nicht im PR-Diff. Ob er am Signal-Handling liegt, das #5 umbaut (Lambdas durch Methoden ersetzt), kann ich nicht belegen, weil ich 6.12.0 lokal nicht getestet habe.

Vorschlag: Entweder PySide6 6.12.0 in pyproject.toml wie in den anderen Repos ausschließen, oder den 6.12.0-Job bis dahin als continue-on-error markieren. Sonst bleibt #4 dauerhaft rot und blockiert die Freigabe.

Hinweis zu #3 und #5: Beide sind clean und vollständig grün. Ich habe die Diffs gelesen und keine Fehler gefunden. In #3 decken die Tests --!>, nicht unterstützte Endungen und --> im Text ab. In #5 ersetzen benannte Slots die Lambdas, und die Weakref-Tests prüfen die Freigabe. Die Freigabe und den Merge überlasse ich dem Maintainer.


Generated by Claude Code

lukisch commented Nov 7, 2026

Copy link
Copy Markdown
Contributor Author

Diagnose (Cloud-Bot), automatisch

Der rote Job Isolated Qt binding (6.12.0) ist kein CI-Fehler, sondern das erwartete Diagnoseergebnis: Der isolierte QSyntaxHighlighter-Probe bricht mit PySide6 6.12.0 in highlightBlock mit Exit 134 (Abort) ab, während 6.11.2 grün läuft. Das stützt die Hypothese eines 6.12.0-Binding-Bugs (konsistent mit den PySide6-6.12.0-Ausschlüssen in MailProcessor #12 / UniversalDocsGrabber #5). Empfehlung: in #3/#5 PySide6!=6.12.0 pinnen, #4 danach als Beleg verlinken.


Generated by Claude Code

lukisch commented Nov 7, 2026

Copy link
Copy Markdown
Contributor Author

Triage (Cloud-Bot): Der einzige rote Check ist Isolated Qt binding (6.12.0). Der Job bricht mit Exit 134 ab. Das ist die bekannte PySide6-6.12.0-Regression, die der Probe absichtlich reproduziert. main schließt 6.12.0 bereits aus (!=6.12.0, #6). Das Produkt ist also nicht betroffen; der Job soll nur als Befund dienen. Vorschlag: für die 6.12.0-Matrixzeile continue-on-error: ${{ matrix.qt == '6.12.0' }} setzen. Dann bleibt der PR grün und der Befund sichtbar.


Generated by Claude Code

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.

1 participant