PyCForge 1.3.55 — Editor operation progress
Prepared 2026-10-21 from CC's verified 1.3.54 source archive.

REQUESTED BEHAVIOR

A compact themed dialog places the operation's explanation above a blue
progress bar. It covers large clipboard pastes, lengthy Python source-buffer
preparation and generated-C display preparation. Quick preparation and ordinary
small pastes finish without a popup. Long filenames remain available in the
tooltip and accessible label when the visible name needs shortening.

Typing does not open a progress dialog. Keyboard input and input-method
composition in either source pane hide existing preparation feedback before
the input reaches the editor, stop pending feedback, and suppress later work
in the same document/conversion context. Pausing typing does not reopen it.
Selecting another source or explicitly requesting another conversion permits
new preparation feedback. Explicit large Paste commands have separate feedback.

Preparation dialogs use Qt's no-activation and no-keyboard-focus flags, have
no initial focus target, and cannot focus their Close control. Closing the
preparation dialog hides feedback without canceling preparation. It stays
hidden for that work and otherwise closes automatically when work finishes.

PASTE AND LIFETIME

Paste feedback applies to insertions/replacements of at least 262,144
characters, or a pasted line of at least 16,384 characters. Existing multiple-
caret admission limits remain. Clipboard text is captured before yielding.
The dialog paints before one ordinary native edit, preserving Qt text
normalization, selection replacement and native undo/redo grouping.

Pending paste work retires if its document, text, carets, editability or editor
visibility changes. Workspace shutdown and failures release the dialog and
timer. Native drag-and-drop stays synchronous to preserve move-drop ordering.
No worker, nested event loop or partially published paste is introduced.

Paste has a busy indicator because native insertion/layout exposes no measured
percentage or safe cancellation boundary. Its animation can pause during that
native work. Source/C preparation uses actual completed character counts and
switches to busy mode for final display work. This release provides feedback;
it does not claim to eliminate native long-line layout stalls.

VALIDATION

Environment: Linux, Python 3.12.14, PySide6/Qt 6.12.0, offscreen rendering.
Final targeted suite: 182 tests passed and 548 subtests passed. This includes
36 new editor-progress cases, loading/resource regressions, editor productivity,
all 16 saved-workspace regressions from 1.3.53, release contracts, Help,
Classes & Functions navigation and shared title-bar behavior.

The new cases exercise real keyboard paste, clipboard ownership, multiple
carets, Unicode/selection replacement, undo/redo, changed/closed targets,
exception cleanup, native drop, shared buffers, source/output completion,
stale work, both source panes, keyboard and input-method composition, delayed
feedback, later callbacks, dismissal and focus configuration.

One warning comes from a deprecated Qt 6.12 constructor in a native drag/drop
test; no product warnings or failures were suppressed. A focus check caught
an inappropriate shared-chrome focus target; modeless feedback now has none.
The headless Qt plugins activate dialogs even with no-activation flags, so
that test restores simulated owner activation before checking deferred focus
callbacks. Native OS activation behavior remains a platform acceptance check.

Actual Qt dialogs were rendered and visually reviewed at 100% and 200% scale,
including long filenames. A live paste also verified exact text, controller
synchronization and undo. The repeatable script is
tools/review_editor_progress_1_3_55.py (pass an output directory).
Evidence and the final targeted-suite output are in
evidence/editor_progress_1_3_55; scope is documented in
specifications/editor_progress_1_3_55.md.

PRESERVATION AND RELEASE

All 19 checked file/project/save/session/controller modules are byte-identical
to 1.3.54. All 144 converter files are byte-identical. Across the runtime,
889 existing files are unchanged, seven existing files change for UI wiring,
styles, Help and version, and two UI-only modules are added. Buffer preparation
and generated-C projection gain progress signals; storage algorithms do not
change. Dependencies, entry points and archive formats remain unchanged.

README changes only its version heading to 1.3.55. Its prose and four approved
image URLs, positions and banner widths remain unchanged. AGENTS.md and
PyCForge-README-Guidelines.txt are unchanged and retained in the source archive.

The downloadable report appends final package sizes, SHA256 values,
distribution checks and installed-wheel results after packaging.
CC alone publishes PyCForge to PyPI from CC's own computer.

WINDOWS ACCEPTANCE

Install from the downloaded wheel's folder:
  py -m pip install --upgrade .\pycforge-1.3.55-py3-none-any.whl

Confirm 1.3.55, then type normally in either split source pane, including with
an input method if used. Preparation feedback must remain absent while typing
and must not return merely because typing pauses. Check that modeless progress
does not take keyboard focus. Paste a large clipboard selection and confirm
the reason/bar appears before insertion, closes automatically, and Undo/Redo
restores the exact before/after text. Check source/C progress and dismissal.
Native Windows/macOS interaction was not available in this environment.

Source baseline SHA256:
8d9b5a02b2885b9e35f822dc75d23178248c13fdefd3a4020776a904bcd7b2ba
