diff --git a/.github/workflows/source-platform-smoke.yml b/.github/workflows/source-platform-smoke.yml index fd55d26..cdc6186 100644 --- a/.github/workflows/source-platform-smoke.yml +++ b/.github/workflows/source-platform-smoke.yml @@ -63,7 +63,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install "PySide6>=6.5.0" paramiko tzdata pytest Pillow + python -m pip install "PySide6>=6.5.0,<6.12" paramiko tzdata pytest Pillow - name: Compile modules (bytecode validation) run: python -m compileall -q . diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b0fd090..a5abb77 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -66,7 +66,17 @@ jobs: run: python -m compileall -q . - name: Run smoke tests + env: + PYTHONFAULTHANDLER: "1" run: python run_tests.py - name: Run full pytest suite - run: python -m pytest -ra -v + env: + PYTHONFAULTHANDLER: "1" + shell: bash + run: | + set +e + python -m pytest -ra -v + exit_code=$? + echo "Full pytest process return code: ${exit_code}" + exit "${exit_code}" diff --git a/BEFUNDE.md b/BEFUNDE.md index 94f747e..f7c83e1 100644 --- a/BEFUNDE.md +++ b/BEFUNDE.md @@ -33,3 +33,22 @@ Es wurde keine Produktdatei verändert. Der dokumentarische Readback ist der einzige eigene Änderungsumfang; die Manifest-Fremdänderung bleibt erhalten. Vor dem Slice stand `master` auf `c0c5580` und war laut lokalem Readback vier Commits hinter `origin/master`; ein Push ist nicht Bestandteil der Rolle. + +### Befund 3: Standalone-SFTP-Abbruch mit PySide6 6.12.0 (2026-10-12) + +- **Fundort:** Linux/Python-3.10-A/B-Diagnose im [Smoke-Run 38200480460](https://github.com/file-bricks/ProSync/actions/runs/38200480460/job/114652552520). +- **Beleg:** Bei identischen Nicht-Qt-Abhängigkeiten endete der Standalone-SFTP-Test + mit PySide6/Shiboken6 6.11.2 mit Exit 0; die isolierte SFTP-Pytest-Suite bestand 9/9. + Mit 6.12.0 bestand Pytest weiter 9/9, doch der Standalone-Prozess gab seine + Erfolgsmeldung aus und brach anschließend mit Exit -6 und + `munmap_chunk(): invalid pointer` ab. +- **Einordnung:** Der A/B-Lauf verbindet den Abbruch mit dem gemessenen 6.12.0- + Distributionssatz auf diesem SFTP-Pfad. Die Ursache der Speicherbeschädigung bleibt + unbekannt. +- **Maßnahme:** Temporäre Grenze `PySide6>=6.5.0,<6.12` in `requirements.txt`, + `pyproject.toml` und den CI-Installationspfaden; Paketversion 3.2.0 bleibt + eingefroren. Die Diagnose-Sonderläufe werden aus dem finalen Workflow entfernt, + während alle regulären Smoke- und Volltestläufe erhalten bleiben. +- **Wiederöffnung:** Grenze erst neu bewerten, wenn ein neuerer Qt-Stand den + unveränderten Standalone-SFTP-Test, den vollständigen Smoke-Runner und die + vorhandenen vollständigen CI-Matrizen erfolgreich absolviert. diff --git a/CHANGELOG.md b/CHANGELOG.md index 147c0db..65e1f8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.1.0/). ## [Unreleased] +### Behoben / Fixed (2026-10-12) +- **Temporäre PySide6-Kompatibilitätsgrenze:** `requirements.txt`, `pyproject.toml` und + beide CI-Installationswege begrenzen PySide6 auf `>=6.5.0,<6.12`. Ein kontrollierter + Linux/Python-3.10-A/B-Lauf mit identischen Nicht-Qt-Paketen bestand mit + PySide6/Shiboken6 6.11.2: Standalone-SFTP mit Exit 0 und pytest mit 9/9. Mit 6.12.0 + brach derselbe Standalone-Prozess nach seiner Erfolgsmeldung mit Exit -6 ab; pytest + bestand weiterhin mit 9/9. Das belegt die Kompatibilitätsgrenze für den gemessenen + SFTP-Pfad, aber nicht die Ursache der Speicherbeschädigung. Die Grenze wird erst neu + bewertet, wenn ein neuerer Qt-Stand den unveränderten Standalone-Smoke, den regulären + Smoke-Runner und die vollständigen vorhandenen CI-Matrizen besteht. Die Release-Version + 3.2.0 bleibt unverändert. + ### Hinzugefügt / Added (2026-10-08) - **Pfad B Repository-Marketing, Discoverability, Visuelle 4-Sichten-Topologie & Level 1 SBOM Re-Audit:** - **Strikte Version-Freeze-Disziplin (`T-20260920-167562623`):** Versionsnummer `3.2.0` in `pyproject.toml`, Quellcode und Manifesten strikt unverändert bewahrt. diff --git a/pyproject.toml b/pyproject.toml index 4288a94..8add1cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,7 +53,7 @@ classifiers = [ "Topic :: System :: Filesystems" ] dependencies = [ - "PySide6>=6.5.0", + "PySide6>=6.5.0,<6.12", "paramiko>=3.4.0", "pypdf>=4.0.0", "tzdata>=2025.2" diff --git a/requirements.txt b/requirements.txt index 91f345e..aeb5ec8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ # Supported Python: 3.10-3.12 (requires Python >= 3.10) # Core Dependencies -PySide6>=6.5.0 +PySide6>=6.5.0,<6.12 tzdata>=2025.2 # SFTP/SSH target support diff --git a/run_tests.py b/run_tests.py index 1ea7f89..a872732 100644 --- a/run_tests.py +++ b/run_tests.py @@ -40,7 +40,7 @@ def main() -> int: env.setdefault("PYTHONIOENCODING", "utf-8") env.setdefault("QT_QPA_PLATFORM", "offscreen") - failed: list[str] = [] + failed: list[tuple[str, int]] = [] for test_file in TEST_FILES: print(f"\n=== {test_file} ===", flush=True) result = subprocess.run( @@ -51,10 +51,14 @@ def main() -> int: timeout=120, ) if result.returncode != 0: - failed.append(test_file) + failed.append((test_file, result.returncode)) if failed: - print("\nFAILED:", ", ".join(failed), flush=True) + failures = ", ".join( + f"{test_file} (return code {returncode})" + for test_file, returncode in failed + ) + print("\nFAILED:", failures, flush=True) return 1 print("\nAll smoke tests passed.", flush=True)