Skip to content

v0.41: startup/version fixes and repository restructure - #75

Merged
IzzmooPro merged 5 commits into
masterfrom
codex/v041-build-evidence
Oct 3, 2026
Merged

IzzmooPro merged 5 commits into
masterfrom
codex/v041-build-evidence

Conversation

@IzzmooPro

Copy link
Copy Markdown
Owner

Summary

Four commits on top of master:

  • 8c82677, 33b19bc — earlier v0.41 evidence and playback/cleanup/localization hardening (not previously pushed).
  • 4964ddc — product fixes, each with a deterministic red test:
    • uninstall-cleanup registration (child process, up to 30 s) no longer blocks startup; it runs in a daemon thread after the window is shown;
    • concurrent provisions are serialised by a per-user named mutex released by the OS on process death;
    • prerelease tags, trailing zeros and +build metadata no longer sort above the stable release;
    • three user-visible silent failures are logged by exception type only.
  • bf4837e — repository and documentation restructure:
    • the root keeps only Start.bat and LICENSE (plus .gitignore/.gitattributes);
    • entry points in app/, specs in packaging/ (inputs resolved from SPECPATH), dependency lists in requirements/, READMEs in .github/, Claude rules in .claude/CLAUDE.md, agent contract in docs/process/AGENTS.md;
    • every generated output under the ignored output/ folder (PyInstaller --distpath/--workpath, Inno, prepublish, source mirror, hosted build workflow);
    • docs/ split into process/release/policies/quality/video-format/history with a tested index (docs/README.md); SignPath records merged; stale packaging history and checklist archived; CONTINUITY.md rewritten compactly with every removed block archived verbatim;
    • second_launch.py removed (committed test artifact with a personal absolute path) plus a test that keeps the local profile path out of tracked files.

Tests

  • Local full suite on the final tree: 5404 passed, 11 skipped, 0 failed.
  • Tree of 4964ddc alone (exported): 5384 passed; the only failure was the ledger-commit check, which needs a .git directory.
  • extract_translations.py --check, compileall, git diff --check, verify_ledger_append_only.py pass.
  • Two independent adversarial reviews: GO, P0 = 0; all P2 findings fixed or recorded.

Evidence boundary

Deterministic/offscreen only (EV-20261003-001). No PyInstaller or Inno build has run on the new paths; a stubbed spec-execution test checks every input resolves from any working directory. No installed artifact contains these changes. Tools that only read a root AGENTS.md (Codex) must be pointed to docs/process/AGENTS.md. Old root URLs for README.md, PRIVACY.md and CODE_SIGNING_POLICY.md now 404; GitHub shows .github/README.md on the repository page.

Uninstall cleanup and startup (earlier uncommitted v0.41 work):
- Add the per-user cleanup helper (MLCUserCleanup) with a durable
  Programs path, legacy migration, reparse checks and failure teardown;
  wire it into the installer and build (EV-20260910-009/010).
- Remove the empty HKLM parent key on uninstall (EV-20260910-003).
- Center the window on the active screen at startup and drop the large
  empty-state logo; round app icon and wizard images.

Review fixes, each proven by a red test first (EV-20260924-001..004):
- Keep an oversized restored window's title bar on screen.
- Stop nested modal error dialogs from the 100 ms UI timer on an
  unopenable file and on a failed next playlist item.
- Do not restore native full screen, and do not save the PiP geometry,
  across restarts; keep maximized/full-screen when a second launch
  un-minimizes the window.
- Menu "Add subtitle" and track selection now show the subtitle (real
  libmpv keeps sub-visibility off); scope the subtitle session per media
  so a stale sid cannot remove another track.
- Playlist "Remove" ignores rows hidden by the search filter.
- Thumbnail worker start failures no longer stall the queue.
- Translate the volume OSD; percent, decimal and byte texts follow the
  language via a Qt-free app/number_text.py; one playback-speed list.

Tests: pytest -q tests -> 5371 passed, 11 skipped (offscreen). Not yet
verified in a real window or an installed build.
…eases

- Run the uninstall-cleanup registration (child process, up to 30 s) in a
  daemon thread after the window is shown instead of on the GUI thread
  before it; worker exceptions are reported by type, never raised.
- Serialise concurrent provisions with a per-user named mutex released by
  the OS on process death; a second provision returns busy instead of
  deleting the first one's temporary helper copy.
- Version comparison: prerelease suffixes sort below the stable tag,
  trailing zeros and +build metadata do not change the version.
- Log three user-visible silent failures (subtitle delay reset, subtitle
  hide on new media, previous subtitle track removal) by exception type.

Each defect has a deterministic red test; translations and the
architecture inventory are refreshed for the shifted lines.
Repository layout
- Entry points move to app/ (app/main.py runs as a script or with -m),
  PyInstaller specs to packaging/ (inputs resolved from SPECPATH, not the
  current directory), dependency lists to requirements/, READMEs to
  .github/, Claude rules to .claude/CLAUDE.md (importing
  docs/process/AGENTS.md).
- Every generated output goes under the ignored output/ folder: PyInstaller
  --distpath/--workpath, Inno OutputDir and sources, prepublish, source
  mirror staging, verify_build and the hosted build workflow.
- Remove second_launch.py, a committed test artifact that carried a
  personal absolute path; mask the same path in the engineering audit and
  add a test that keeps the local profile path out of tracked files.

Documentation
- Split docs/ into process, release, policies, quality, video-format and
  history, with docs/README.md as the tested index.
- Merge the two SignPath records, fold the video capability inventory into
  the acceptance plan, and move PACKAGING_PLAN's historical records and
  stale checklist to docs/history/PACKAGING_HISTORY.md.
- Rewrite CONTINUITY compactly (137 lines, no line over 81 characters);
  closed and duplicated blocks are archived verbatim in
  CONTINUITY_HISTORY, and the continuity test now limits line length.
- Record EV-20261003-001.

No real PyInstaller/Inno build has run on the new paths yet; a stubbed
spec execution test checks every input resolves from any directory.
…seek

The hosted mpv stub never reports playback position. When the 100 ms UI
timer fired inside the processEvents() right after the timeline click,
update_overlay_state synchronised the slider back to position 0 although
the seek had happened (PR #75 run 37137517782, time_pos 300). Reproduced
deterministically with one forced update_ui(); product code unchanged.
Record EV-20261003-002.
@IzzmooPro
IzzmooPro merged commit c5ca0ec into master Oct 3, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant