PyCForge 1.3.45 — Module saving and project restoration
Prepared 2026-10-19 for CC's own PyPI upload.

CORRECTIONS
- Saving a newly added module as ofr_42.py replaces the default module_N /
  module_N.py identity with ofr_42 / ofr_42.py throughout the Source Bundle.
  Filename-derived identities follow Save As; custom logical aliases remain.
  Imports are not rewritten. Identity changes invalidate previous generated C.
- New modules in an open project default to its working folder instead of an
  unrelated previously used directory. Save As for an outside module also
  suggests the project's working folder. The original file is preserved.
- Matching placeholder identities retained by older projects are repaired by
  another save. Duplicate identities and linked-path collisions are rejected
  before file replacement. Cancelled and failed saves retain prior metadata;
  newer source edits remain dirty after an asynchronous save.
- A save completed before the first background revision was ready could
  encounter a missing-revision exception. Pending revisions now remain
  unauthenticated until the index is ready, while file saves complete normally.
- Startup keeps a successfully read project archive and its checkpoint history
  connected when a restored module is outside the working folder. The report
  identifies the actual filename, required folder and Save Python As action.
  Correcting the location and saving retains the original checkpoints and the
  archive's external-change protection. Missing/corrupt-file notices remain.

EXISTING AFFECTED FILES
For an already affected ofr_42.py, install 1.3.45, select its tab, and use
Save Python As to save it inside the project's working folder. Then Save
Project and restart. The original outside file is not deleted. A legitimate
startup notice can remain until this one-time location correction is made.

README AND VERSION
The README differs from the approved 1.3.44 README only in the heading:
# PyCForge v1.3.44 -> # PyCForge v1.3.45
Its prose, structure, conversion table, historical bug entries, four image
URLs, banner widths, screenshot labels, and Crucible placement are unchanged.
The README renderer check passes with exactly four images and no additional
navigation links. The release version is 1.3.45; historical evidence keeps its
original labels. The README guideline is included in the source archive.
Two installed HTML Help pages explain the corrected save/recovery workflow.
All converter implementation files are byte-identical to the 1.3.44 baseline.
Runtime dependencies and the one-wheel installation remain unchanged.

VALIDATION
219 distinct tests and 477 subtests passed in completed isolated test groups:
- 25 new identity, save, project and startup/recovery regressions.
- 31 existing Save All / asynchronous-save / exit cases.
- 62 existing project archive, project UI, checkpoint and restore cases.
- 21 startup recovery and fresh-process normal-startup cases.
- 14 controller tests with 4 subtests.
- 15 workspace UI tests.
- 51 release, documentation, C-export and revision tests with 473 subtests.
The final history-connection change was verified by rerunning its affected
35 project and module-workflow tests; repeated cases are not counted twice.

The initial combined workflow run also completed successfully: 167 tests and
4 subtests passed. Independent isolated runs verified the same cases again;
repeated cases are not counted twice. Logs are retained under
evidence/module_save_1_3_45.

Separate-process create/restart probes pass both when the Python file is saved
before updating the project bundle and after the bundle is updated. They check
ofr_42 / ofr_42.py, both restored files, active selection, project association,
and the absence of a startup report. The probe is included in tests/fixtures.

Verification used Linux, Python 3.12 and Qt offscreen. A native Windows or
macOS run was not performed. The full repository suite was not run, and no
PyPI upload was performed. Finished-package checks and SHA256 values are
appended to the accompanying handoff report after building the archives.

WINDOWS CHECK
1. Open a project, add a module, and save it as ofr_42.py in the suggested
   working folder. Confirm the Source Bundle ID and LOGICAL fields match.
2. Save Project, close PyCForge, and reopen. Confirm the module is present and
   no startup report appears for this valid saved module.
3. For a module already saved outside the working folder, use Save Python As
   to correct its location, Save Project, and confirm existing checkpoints
   remain available after restart.
