PyCForge 1.3.53 — Saved files, project bundles and clean sessions
Prepared 2026-10-21 from CC's 1.3.52 source distribution.

REPORTED FAILURES AND CORRECTIONS

1. Project files outside the original working folder
   Project capture rejected an otherwise saved Python file solely because its
   path was outside the original working folder. The same capture is used by
   Save Project, Save Project As, Save All before exit, and startup history
   reconnection. This explains why the folder error appeared in several places,
   including after a project had already been read successfully.

   Bundles now include those source contents without moving the linked files.
   Files inside the working folder keep their relative layout; files outside
   it use their filenames in the portable bundle. A different source drive
   no longer prevents project capture. Choose any writable bundle destination.
   Portable filename collisions and invalid names remain errors: no file is
   silently renamed, omitted, or overwritten to hide a collision.

   Startup history reconnection preserves the actual linked paths and saved
   disk baselines. Restoring a checkpoint preserves an existing external link.
   Explicit Open Project still creates copies in its chosen new working folder.

2. Repeated save prompts and Save All exit failures
   Saving Python text could leave the associated project bundle behind it.
   Both exit and Open Project then treated the bundle difference as unsaved
   work. Save All could fail on the obsolete folder restriction above.

   When a Python save completes with all tabs saved, the associated project
   bundle is updated too, preserving existing checkpoints. This applies to
   Save Python, Save Python As, and Save All Python. Save All on exit also
   completes when the Python files are already saved outside the working root.
   It skips rewriting unchanged Python files.

   Saved Python files read at startup establish the session's saved baseline.
   An older bundle differing from those files does not manufacture a new edit
   or trigger an exit/project-replacement prompt. Startup does not overwrite
   that bundle; explicit Save Project can update it. Subsequent edits, changed
   project settings, and failed save attempts remain subject to save guards.
   Failed writes and unresolved external conflicts keep the workspace open.

3. Closing all tabs and restarting
   Closing the final tab now clears the session's linked paths, failed restore
   entries, active path and project association. It also retires an in-flight
   startup read so a late result cannot reopen a deliberately closed session.
   The saved Python files, project bundle and checkpoints are not changed.
   Empty sessions no longer reconnect stale project links from older releases.

4. Recovery-dialog close highlight
   Automatic focus was styled identically to hover, so Windows activation
   could leave the close control highlighted even with the pointer elsewhere.
   Shared title controls now distinguish automatic focus, actual pointer hover,
   and deliberate keyboard focus. Keyboard focus has a visible outline; Tab
   and Space activation remain available. Leave/hide/deactivation clear stale
   pointer state, and painting checks the current pointer position.

VALIDATION

Environment: Linux, Python 3.12, PySide6/Qt 6.12.0, offscreen Qt rendering.
Native Windows/macOS execution was not available. CC's Windows acceptance is
still required, especially native focus/hover behavior and real drive paths.

Six initial regression cases failed against the original 1.3.52 implementation:
last-tab cleanup, individual/Save All completion before exit/project opening,
and activation-focus rendering. They pass after the corrections.

Sixteen new workflow cases pass, including:
- Add two modules, Save As each into another folder, Save Project As elsewhere,
  reopen the bundle, compare source bytes, and preserve checkpoint history.
- Save All on exit with two already-saved outside files: one decision, no
  Python rewrites, successful project save and completed exit.
- Individual and batch saves followed by exit or Open Project without a prompt.
- Cancel/save with genuine unsaved edits on exit and project replacement.
- Older project bundles with newer saved disk contents: no manufactured edits.
- Empty-session launches across real process boundaries with stale project links.
- Final-tab closure during a delayed restore, including earlier failed paths.
- External-link history reconnection and checkpoint restoration.
- Recovery-control pixels with automatic focus versus intentional keyboard focus.

The broader targeted run exercised 280 tests and 560 subtests. It passed 278
tests and all 560 subtests; two release assertions still expected 1.3.51, already
stale in the supplied 1.3.52 source. Those two expected current versions were
updated to 1.3.53, and the complete 11-test release-contract file passed again.
Thus all 280 targeted cases have passed on the corrected source. The 11-test
rerun overlaps the broader run and is not an additional distinct test count.
This is targeted file/session/UI validation, not a full conversion-suite rerun.

Existing coverage includes delayed and failed saves, edits during saves,
64-document Save All, external conflicts, guarded project replacement,
archive validation, startup failures, empty/normal startup, Windows-style
file-metadata behavior, editor lifecycle, shared window controls, and Help.
Prior tests that required the old folder restriction or automatic history
attachment to an empty session now assert the corrected requested behavior.

DOCUMENTATION AND DISTRIBUTION

Installed Help describes file placement, coordinated saves and empty sessions.
Both revised Help pages and the recovery dialog were rendered and inspected.
README differs from 1.3.52 only in the top version heading; all four approved
image URLs, ordering, widths and prose remain unchanged. The README renderer
check passes. AGENTS.md and PyCForge-README-Guidelines.txt are unchanged.
All 144 converter files are byte-identical to 1.3.52. Runtime dependencies,
entry points and archive format are unchanged.

The final downloadable copy of this report adds the exact distribution hashes,
public-package checks and installed-wheel verification after packaging.
CC alone publishes PyCForge to PyPI from CC's own computer.

WINDOWS RETEST

Install the downloaded wheel from its folder:
  py -m pip install --upgrade .\pycforge-1.3.53-py3-none-any.whl
Launch:
  py -m pycforge.ide

1. Confirm 1.3.53. Open an existing project, add two modules and Save Python As
   into chosen folders outside the original working folder. Save Project As
   into another chosen folder. Confirm it succeeds and preserves those files.
2. Exit after saving all tabs. Confirm no unnecessary save prompt. Reopen the
   project and confirm source contents and checkpoint history.
3. Close every tab, exit and restart. Confirm no tabs, no old file-load notice
   and no project-save prompt. Previously saved files and bundles remain.
4. Make a real edit: Cancel must keep it open; Save All must save and exit.
   Check the recovery dialog's Close control after hover, pointer leave and
   reactivation. Keyboard Tab focus should show an outline and Space should work.

No existing files or settings need to be deleted to install this update.

Source baseline SHA256:
94c03d19801d6e5f9a3d229dc93d9081a661ed19304b6c82d87b15802a3324ea
