PyCForge 1.3.14 — Save All Python

Installation
------------
The version stays 1.3.14. Replace an existing working installation using the
updated wheel in this ZIP's dist directory:

  py -m pip install --force-reinstall --no-deps pycforge-1.3.14-py3-none-any.whl

For a fresh installation, omit --no-deps so required packages are installed.

Saving and exit
---------------
File → Save All Python sits below Save Python As. It is also in the command
palette. It saves new or modified modules, skips unchanged files, asks for
locations for never-saved modules, and preserves the current selection.

Python saves run sequentially in the background. The save actions temporarily
disable while saving. Cancelling a location dialog or a failed write stops the
remaining batch and leaves unsaved modules open; completed saves remain saved.
The actions recover so the user can retry. Changing source during a save does
not mark the newer text saved.

Closing the IDE offers Save All, Discard, or Cancel for unsaved modules, including
never-saved tabs. A close request during saving waits without blocking the UI.
Save errors, cancellation, or additional edits keep the workspace open. This
flow does not apply to forced process termination, power loss or closing the
original console that hosts a console-launched Windows IDE.

Consoles on Windows 11
----------------------
Run Python requests its own console with separate input and output. Closing
the script's console stops that run without closing PyCForge. Normal IDE exit
does not wait for the external script or console to finish.

If PyCForge was started attached to a console, closing that original console
can terminate the IDE before unsaved-file prompts. Close the IDE using its own
close button first. This release does not change the original launch method.

Validation
----------
298 tests and 773 subtests passed in the final selected suite, with no skips.
Coverage includes 64-module save/exit flows, real writes exceeding the queue's
capacity, mixed clean/modified/new modules, split-view edits before debounce,
cancel/failure/retry, duplicate destinations, removed tabs, repeated clicks,
edit-during-save, individual-save/exit races and imported companion modules.
Fresh startup, empty sessions, saved-session restoration, legacy settings and
corruption recovery were exercised. A process test confirms a live terminal
waiter does not prevent interpreter exit.

Testing also exposed an editor-buffer teardown hazard. Both views now detach
before source documents are deleted; deferred-delete and repaint regression
checks pass. Earlier failed-run logs and the final passing results are in
evidence/save_all_1_3_14.

Tests ran on Linux with Qt offscreen. Windows/macOS launch construction uses
mocks, and no live desktop terminal is installed here. Native Windows 11 checks
below remain necessary; this result is not a claim that every possible bug
or operating-system failure has been eliminated.

Windows laptop checks
---------------------
1. Mix saved, edited and new tabs. Save All; confirm the new-file prompts, saved
   contents, unchanged tab selection and disabled Save All afterward.
2. Cancel a new-file prompt. Confirm remaining modules stay open and Save All
   can be retried. Completed saves should remain saved.
3. Close with unsaved modules. Check Save All, Discard and Cancel separately.
   Cancel a save-location prompt during exit; the IDE should remain open.
4. Edit while saving, and try repeated Save/Close. New edits must stay unsaved;
   there must be no duplicate save dialogs or stuck save controls afterward.
5. Restart normally. Confirm saved files and the selected file restore, with
   no unexpected startup report. A fresh empty session should remain empty.
6. Run a script containing input() and output. Close only its separate console;
   PyCForge should remain responsive. Run again, then close the IDE normally;
   the script console should remain independent. Keep the IDE's original
   launching console open until the IDE has closed normally.

README, conversion code, Python dependencies and version metadata are retained.
The ZIP includes the updated wheel and source tar.gz in dist.
