From 2f018f806ca0284160f25a452ceceb4c118a6c8c Mon Sep 17 00:00:00 2001 From: LeyckerS <104737119+LeyckerS@users.noreply.github.com> Date: Sat, 1 Aug 2026 21:05:08 +0200 Subject: [PATCH] docs: record #118, #119 and #120; add @felix-windsor and @AashishGupta2007 Eleventh and twelfth outside contributors. Co-Authored-By: Claude Opus 5 --- AUTHORS.md | 4 +++- CHANGELOG.md | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/AUTHORS.md b/AUTHORS.md index ad3cea9..5812cb4 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -18,10 +18,12 @@ first contribution: | [@Moferanoluwa](https://github.com/Moferanoluwa) | added `--version` and made both report flavours record which build wrote them (#61); corrected the `--proxies` documentation that #48 had made stale (#63); brought `docs/ARCHITECTURE.md` in line with the shared download engine (#68); put CI on a 3.10/3.11/3.12 matrix with a `ruff` baseline (#69); made documentation-only pull requests verify their `moon_cli.py` examples against the real parser (#70); annotated the exception handlers in `moon_engine.py` and narrowed the report-save swallow (#71) | | [@RubenSanosh](https://github.com/RubenSanosh) | froze the elapsed-time clock when a run finishes, so the GUI stops counting after the last file lands (#73) | | [@darlenepolek](https://github.com/darlenepolek) | derived the CI byte-compile list from `git ls-files` so it can no longer drift, and made the lint workflow watch its own file (#77) | -| [@XEDAB](https://github.com/XEDAB) | made a discarded partial download say so, instead of silently restarting a multi-gigabyte transfer when the server ignores a resume request (#98) | +| [@XEDAB](https://github.com/XEDAB) | made a discarded partial download say so, instead of silently restarting a multi-gigabyte transfer when the server ignores a resume request (#98); gave `download_file` a way to reach the live log, so mid-transfer failures stop being invisible until the run ends — and fixed an `UnboundLocalError` reachable whenever a connection timed out before the first byte (#120) | | [@tomatotomata](https://github.com/tomatotomata) | corrected the headless CLI example in `README.md`, which documented positional URLs and a `-o` flag the parser never accepted (#53) | | [@kocaemre](https://github.com/kocaemre) | taught the documentation guard to check single-dash flags, so it now catches the line it was written for (#104) | | [@Vam-si-krish](https://github.com/Vam-si-krish) | made an unsupported host fail on sight instead of being retried like a network error, and collapsed the host names to one definition shared by both front-ends (#108) | +| [@felix-windsor](https://github.com/felix-windsor) | stopped two links with the same filename from sharing one `.tmp` and corrupting each other, by reserving destination names at registration (#119) | +| [@AashishGupta2007](https://github.com/AashishGupta2007) | narrowed and documented the eight exception handlers in the Chrome-lifecycle slice of `moon_extract.py` (#118) | Dependabot handles the dependency and action bumps. diff --git a/CHANGELOG.md b/CHANGELOG.md index c004778..9bc3e27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 change from here on, and the two copies can no longer drift apart ### Fixed +- **Two links resolving to the same filename shared one `.tmp` and corrupted each other.** The + destination was derived from the filename alone, so two transfers opened the same partial + file and raced to rename it — visible on Windows as `WinError 32`, silent on POSIX, where + `os.replace` does not refuse and the interleaved survivor was reported `ok`. Names are now + reserved case-insensitively when each record is registered, before either transfer is + scheduled, and the rename is reported in both front-ends (#119, @felix-windsor) +- **Mid-transfer failures never reached the screen.** A dead proxy, a dropped connection or a + refused resume wrote a note that only appeared in `moontech_*.log` after the run, so a run + sat at `0 KB/s` with no explanation. `download_file` now takes an optional `on_event` + callback; the engine passes its log, the CLI prints, and the report keeps everything it had. + Also fixes an `UnboundLocalError` when a connection failed before the first byte arrived + (#120, @XEDAB) +- The eight `except Exception:` handlers in the Chrome-lifecycle slice of `moon_extract.py` + are narrowed or explained; the CDP attach now catches `PlaywrightError` and the Chrome + process teardown `(subprocess.TimeoutExpired, OSError)` (#118, @AashishGupta2007) - **Datanodes extraction hung on every link and failed silently.** The host now serves step 2 as a chain — *Free Download / Standard Speed* reveals *Start Download / Your file is ready*, and only the second starts the transfer — while the trigger handler latched after one click.