Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/source-platform-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 .
Expand Down
12 changes: 11 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
19 changes: 19 additions & 0 deletions BEFUNDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 7 additions & 3 deletions run_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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)
Expand Down
Loading