Skip to content

Releases: genrihx2/MuMuManager-CLI-Menu

MuMuManager CLI Menu v1.22.54

Choose a tag to compare

@genrihx2 genrihx2 released this 30 Sep 04:13

MuMuManager CLI Menu v1.22.54

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.54 (30.09.2026)

  • Test-MumuTunnelAB: определение владельца Wintun-туннеля (read-only) — каждый снапшот находит Up-адаптер *Wintun*, резолвит владельцев портов прокси-ядер (SOCKS 10808/10809, mihomo 7890–7893), поднимается по цепочке родителей и пишет путь + командную строку; если владелец не MuMu* — предупреждение «тумблер MuMu на этот адаптер не влияет» (полевой случай: системный туннель оказался прокси INCY, порт 10808). Новый ключ -NoOwnerLookup — быстрый режим без поиска владельца. Как и раньше, ничего не убивается и не меняется.
  • Version bump: $scriptVer in mumu-menu.ps1, relnotes.md, README.md and .version synchronized to 1.22.54.
    EN summary: Test-MumuTunnelAB snapshots now identify the Wintun tunnel owner (read-only): resolve proxy-core port listeners (SOCKS 10808/10809, mihomo 7890-7893), walk parent chains, record path + command line; warn when the owner is not a MuMu* process (field case: the system tunnel belonged to INCY on port 10808, not MuMu). New -NoOwnerLookup switch skips the probe. Still read-only — nothing killed, nothing changed.

v1.22.53 (29.09.2026)

  • [V] startup/version block now lists the active install only - Show-MumuExeVersions resolves the directory containing the MuMuManager.exe the startup check resolved and skips any parallel second install (e.g. a leftover Netease1\MuMu), so the startup block prints a single install's MuMuPlayer.exe/MuMuNxMain.exe/MuMuNxUpdater.exe versions with the auto-read version and a build-date stamp (full discovery via Get-MumuInstallRoots remains the fallback when MuMuManager itself was not found).
  • Version bump: $scriptVer in mumu-menu.ps1, relnotes.md, README.md and .version synchronized to 1.22.53.

v1.22.52 (29.09.2026)

  • Фикс запуска под строгим pwsh-хостом — при Set-StrictMode -Version Latest из $PROFILE запуск падал на ленивом чтении сессионных таблиц ETag-кэша («cannot be retrieved because it has not been set» → «Could not check MuMu version»); таблицы декларируются сразу, плюс strict-safe чтение DisplayName в реестровом обходе.
  • Блок версий EXE — только активная установка — строки параллельной второй инсталляции (например, Netease1\MuMu) больше не дублируются; полное обнаружение осталось как fallback.
  • CI: пост-публикационный guard-аудит — release.yml диспетчеризует release-guard сразу после publish.
    EN summary: Strict-host startup fix (session tables declared up front; strict-safe DisplayName read in the registry walk — no more "Could not check MuMu version" under Set-StrictMode hosts). The EXE version block lists the active install only (no duplicate parallel-install lines). release.yml dispatches the release-guard audit right after publishing.

v1.22.51 (29.09.2026)

  • Поиск корней MuMu на любом диске — Get-MumuInstallRoots обнаруживает установку автоматически: каталог MuMuManager, живые процессы MuMu*, реестровые Uninstall-записи, ярлыки «Пуска»; при пустых быстрых источниках — ограниченный спул по всем фиксированным дискам (папки *Netease*/*MuMu*, ≤3 уровней, признак nx_main/целевой EXE). Жёстко прописанные C-пути больше не используются.
  • [V] — реальные полные пути — блок «MuMu EXE versions» печатает обнаруженный путь каждого бинарника с авто-версией (каскад FileVersion → ProductVersion → версия продукта → unknown) и штампом сборки; ссылка на официальные release notes — на месте.
    EN summary: MuMu install roots are now discovered on any drive (MuMuManager dir, live processes, registry uninstall entries, Start Menu shortcuts; bounded fixed-drive sweep over Netease/MuMu folders as fallback) — no hard-coded C: paths. [V] prints the discovered full path per binary with the auto-read version and build stamp, plus the official release-notes link.

v1.22.50 (29.09.2026)

  • Автоверсии MuMu-EXE при запуске — меню автоматически находит MuMuPlayer.exe/MuMuNxMain.exe и MuMuNxUpdater.exe (каталог MuMuManager, обе известные установки, пути живых процессов) и печатает версию каждого файла со штампом сборки. У MuMu 6.x эти EXE не несут ресурса версии — каскад: FileVersion → ProductVersion → версия продукта из MuMuManager version (с пометкой) → unknown. Ручной ввод исключён.
    EN summary: Startup now auto-detects and prints MuMuPlayer/MuMuNxUpdater EXE versions (discovery via MuMuManager dir, both known install roots, live process paths; resolution: version resource → ProductVersion → MuMuManager product version → unknown, always with a build-date stamp). No manual input.

v1.22.49 (29.09.2026)

  • README: раздел про Mark-of-the-Web — почему ручная распаковка ZIP Проводником блокирует скрипты (not digitally signed) и три способа лечения: [U]/bootstrap (сами скачивают, снимают метки и подписывают), Unblock-File, распаковка tar -xf/7-Zip. Плюс строка-симптом в таблицу восстановления.
  • CI: CodeQL Advanced — анализ файлов воркфлоу (язык actions), пины по SHA, weekly-расписание; .ps1-код остаётся под DevSkim + PSScriptAnalyzer.
  • Харденинг Test-ReleaseZip — повреждённый ZIP больше не роняет [F]/-VerifyZip исключением: любое повреждение архива даёт archive: corrupt (...) и Ok=$false; новый Pester-тест фиксирует контракт «никогда не бросает», tampered-тест стал детерминированным.
    EN summary: Docs-only release: README gains a Mark-of-the-Web section (why Explorer-extracted ZIP files are blocked and the three fixes: [U]/bootstrap, Unblock-File, tar/7-Zip extraction). CI adds CodeQL Advanced over workflow files. Test-ReleaseZip hardened in both updaters to never throw on corrupt archives (Ok=$false with an "archive: corrupt" check line; new never-throws Pester test, deterministic tamper fixture).

v1.22.48 (28.09.2026)

  • Фикс self-update: [U] снова доставляет полный комплект — список загрузки в Update-FromGitHub остался на до-троичном составе из 4 файлов (v1.22.46 расширила ZIP до 8, но [U] — нет), поэтому файлы, добавленные после v1.22.45, не доходили до существующих инсталляций через [U]. Список приведён к контракту 8 файлов; дефолты rollback-функций (Build-RollbackPlan/Invoke-Rollback) расширены до того же сета — валидация бэкапов честно перечисляет недостающие файлы старых бэкапов. Новый Pester-тест фиксирует список [U] на контракте.
  • [WN] Watch MuMu network + updater — новый read-only пункт меню (секция Info): каждые 5 с логирует НОВЫЕ внешние TCP :443 подключения MuMu*-процессов, запуски MuMuNxUpdater (время, PID, имя), смену EXE-идентичности апдейтера (FileVersion / ProductVersion / LastWriteTime / полный путь) и его удалённые IP во время обновления; дедуп по PID+локальный порт+удалённый кортеж; лог C:\test\mumu-network-update.txt; выход по Q/Ctrl+C. Ничего не меняет: ни firewall, ни прокси, ни DNS, ни маршруты.
  • Фикс Diag-MumuNx (uint32) — разделы «Listening endpoints / TCP connections / UDP endpoints» были пустыми при работающем MuMu: ключи $procRows — [int] PID, OwningProcess — [uint32], хэш-таблица молча не совпадала по типу ключа. Подтверждено живым elevated-снимком (11 слушателей, ADB — только loopback).
  • Дружелюбный pre-flight в Diag-MumuNx — вместо жёсткого #requires -RunAsAdministrator (не поймать) — runtime-проверка с готовой командой запуска от администратора.
    EN summary: [U] self-update downloads the full 8-file deployed set again (the list was stuck on the pre-trio 4 files), rollback defaults widened to match, new contract test pins the list. New read-only menu entry [WN]: MuMu network + updater watcher (new external :443 connections, updater launches/EXE versions/remote IPs, PID+port dedup, Q/Ctrl+C to stop). Diag-MumuNx uint32 key-type fix (socket sections were silently empty while MuMu ran) and a friendly elevation pre-flight.

v1.22.47 (27.09.2026)

  • Version bump: $scriptVer in mumu-menu.ps1, .version, README and relnotes synchronized to 1.22.47.
  • No code changes: this release only synchronizes the version markers after v1.22.46.

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: `MuM...
Read more

MuMuManager CLI Menu v1.22.53

Choose a tag to compare

@genrihx2 genrihx2 released this 29 Sep 14:02

MuMuManager CLI Menu v1.22.53

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.53 (29.09.2026)

  • [V] startup/version block now lists the active install only - Show-MumuExeVersions resolves the directory containing the MuMuManager.exe the startup check resolved and skips any parallel second install (e.g. a leftover Netease1\MuMu), so the startup block prints a single install's MuMuPlayer.exe/MuMuNxMain.exe/MuMuNxUpdater.exe versions with the auto-read version and a build-date stamp (full discovery via Get-MumuInstallRoots remains the fallback when MuMuManager itself was not found).
  • Version bump: $scriptVer in mumu-menu.ps1, relnotes.md, README.md and .version synchronized to 1.22.53.

v1.22.52 (29.09.2026)

  • Фикс запуска под строгим pwsh-хостом — при Set-StrictMode -Version Latest из $PROFILE запуск падал на ленивом чтении сессионных таблиц ETag-кэша («cannot be retrieved because it has not been set» → «Could not check MuMu version»); таблицы декларируются сразу, плюс strict-safe чтение DisplayName в реестровом обходе.
  • Блок версий EXE — только активная установка — строки параллельной второй инсталляции (например, Netease1\MuMu) больше не дублируются; полное обнаружение осталось как fallback.
  • CI: пост-публикационный guard-аудит — release.yml диспетчеризует release-guard сразу после publish.
    EN summary: Strict-host startup fix (session tables declared up front; strict-safe DisplayName read in the registry walk — no more "Could not check MuMu version" under Set-StrictMode hosts). The EXE version block lists the active install only (no duplicate parallel-install lines). release.yml dispatches the release-guard audit right after publishing.

v1.22.51 (29.09.2026)

  • Поиск корней MuMu на любом диске — Get-MumuInstallRoots обнаруживает установку автоматически: каталог MuMuManager, живые процессы MuMu*, реестровые Uninstall-записи, ярлыки «Пуска»; при пустых быстрых источниках — ограниченный спул по всем фиксированным дискам (папки *Netease*/*MuMu*, ≤3 уровней, признак nx_main/целевой EXE). Жёстко прописанные C-пути больше не используются.
  • [V] — реальные полные пути — блок «MuMu EXE versions» печатает обнаруженный путь каждого бинарника с авто-версией (каскад FileVersion → ProductVersion → версия продукта → unknown) и штампом сборки; ссылка на официальные release notes — на месте.
    EN summary: MuMu install roots are now discovered on any drive (MuMuManager dir, live processes, registry uninstall entries, Start Menu shortcuts; bounded fixed-drive sweep over Netease/MuMu folders as fallback) — no hard-coded C: paths. [V] prints the discovered full path per binary with the auto-read version and build stamp, plus the official release-notes link.

v1.22.50 (29.09.2026)

  • Автоверсии MuMu-EXE при запуске — меню автоматически находит MuMuPlayer.exe/MuMuNxMain.exe и MuMuNxUpdater.exe (каталог MuMuManager, обе известные установки, пути живых процессов) и печатает версию каждого файла со штампом сборки. У MuMu 6.x эти EXE не несут ресурса версии — каскад: FileVersion → ProductVersion → версия продукта из MuMuManager version (с пометкой) → unknown. Ручной ввод исключён.
    EN summary: Startup now auto-detects and prints MuMuPlayer/MuMuNxUpdater EXE versions (discovery via MuMuManager dir, both known install roots, live process paths; resolution: version resource → ProductVersion → MuMuManager product version → unknown, always with a build-date stamp). No manual input.

v1.22.49 (29.09.2026)

  • README: раздел про Mark-of-the-Web — почему ручная распаковка ZIP Проводником блокирует скрипты (not digitally signed) и три способа лечения: [U]/bootstrap (сами скачивают, снимают метки и подписывают), Unblock-File, распаковка tar -xf/7-Zip. Плюс строка-симптом в таблицу восстановления.
  • CI: CodeQL Advanced — анализ файлов воркфлоу (язык actions), пины по SHA, weekly-расписание; .ps1-код остаётся под DevSkim + PSScriptAnalyzer.
  • Харденинг Test-ReleaseZip — повреждённый ZIP больше не роняет [F]/-VerifyZip исключением: любое повреждение архива даёт archive: corrupt (...) и Ok=$false; новый Pester-тест фиксирует контракт «никогда не бросает», tampered-тест стал детерминированным.
    EN summary: Docs-only release: README gains a Mark-of-the-Web section (why Explorer-extracted ZIP files are blocked and the three fixes: [U]/bootstrap, Unblock-File, tar/7-Zip extraction). CI adds CodeQL Advanced over workflow files. Test-ReleaseZip hardened in both updaters to never throw on corrupt archives (Ok=$false with an "archive: corrupt" check line; new never-throws Pester test, deterministic tamper fixture).

v1.22.48 (28.09.2026)

  • Фикс self-update: [U] снова доставляет полный комплект — список загрузки в Update-FromGitHub остался на до-троичном составе из 4 файлов (v1.22.46 расширила ZIP до 8, но [U] — нет), поэтому файлы, добавленные после v1.22.45, не доходили до существующих инсталляций через [U]. Список приведён к контракту 8 файлов; дефолты rollback-функций (Build-RollbackPlan/Invoke-Rollback) расширены до того же сета — валидация бэкапов честно перечисляет недостающие файлы старых бэкапов. Новый Pester-тест фиксирует список [U] на контракте.
  • [WN] Watch MuMu network + updater — новый read-only пункт меню (секция Info): каждые 5 с логирует НОВЫЕ внешние TCP :443 подключения MuMu*-процессов, запуски MuMuNxUpdater (время, PID, имя), смену EXE-идентичности апдейтера (FileVersion / ProductVersion / LastWriteTime / полный путь) и его удалённые IP во время обновления; дедуп по PID+локальный порт+удалённый кортеж; лог C:\test\mumu-network-update.txt; выход по Q/Ctrl+C. Ничего не меняет: ни firewall, ни прокси, ни DNS, ни маршруты.
  • Фикс Diag-MumuNx (uint32) — разделы «Listening endpoints / TCP connections / UDP endpoints» были пустыми при работающем MuMu: ключи $procRows — [int] PID, OwningProcess — [uint32], хэш-таблица молча не совпадала по типу ключа. Подтверждено живым elevated-снимком (11 слушателей, ADB — только loopback).
  • Дружелюбный pre-flight в Diag-MumuNx — вместо жёсткого #requires -RunAsAdministrator (не поймать) — runtime-проверка с готовой командой запуска от администратора.
    EN summary: [U] self-update downloads the full 8-file deployed set again (the list was stuck on the pre-trio 4 files), rollback defaults widened to match, new contract test pins the list. New read-only menu entry [WN]: MuMu network + updater watcher (new external :443 connections, updater launches/EXE versions/remote IPs, PID+port dedup, Q/Ctrl+C to stop). Diag-MumuNx uint32 key-type fix (socket sections were silently empty while MuMu ran) and a friendly elevation pre-flight.

v1.22.47 (27.09.2026)

  • Version bump: $scriptVer in mumu-menu.ps1, .version, README and relnotes synchronized to 1.22.47.
  • No code changes: this release only synchronizes the version markers after v1.22.46.

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: MuMuPlayerRemoteService, MuMuRemoteService).
    EN summary: Diagnostics trio ships in the ZIP: Watch-MumuConnections.ps1 (dedup log of NEW MuMu TCP connections), Test-MumuTunnelAB.ps1 (A/B network snapshots with diff + -Watch auto-trigger on fake-IP route change), Diag-MumuNx.ps1 (elevated read-only services/processes/connections/firewall snapshot). Release file-set contract widened 5 → 8 files; Test-ReleaseZip, [U]/bootstrap file lists, CI deployed fixture, release-guard zipcheck and T7/T8 tests updated in lockstep.

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the ...
Read more

MuMuManager CLI Menu v1.22.52

Choose a tag to compare

@genrihx2 genrihx2 released this 29 Sep 07:11

MuMuManager CLI Menu v1.22.52

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.52 (29.09.2026)

  • Фикс запуска под строгим pwsh-хостом — при Set-StrictMode -Version Latest из $PROFILE запуск падал на ленивом чтении сессионных таблиц ETag-кэша («cannot be retrieved because it has not been set» → «Could not check MuMu version»); таблицы декларируются сразу, плюс strict-safe чтение DisplayName в реестровом обходе.
  • Блок версий EXE — только активная установка — строки параллельной второй инсталляции (например, Netease1\MuMu) больше не дублируются; полное обнаружение осталось как fallback.
  • CI: пост-публикационный guard-аудит — release.yml диспетчеризует release-guard сразу после publish.
    EN summary: Strict-host startup fix (session tables declared up front; strict-safe DisplayName read in the registry walk — no more "Could not check MuMu version" under Set-StrictMode hosts). The EXE version block lists the active install only (no duplicate parallel-install lines). release.yml dispatches the release-guard audit right after publishing.

v1.22.51 (29.09.2026)

  • Поиск корней MuMu на любом диске — Get-MumuInstallRoots обнаруживает установку автоматически: каталог MuMuManager, живые процессы MuMu*, реестровые Uninstall-записи, ярлыки «Пуска»; при пустых быстрых источниках — ограниченный спул по всем фиксированным дискам (папки *Netease*/*MuMu*, ≤3 уровней, признак nx_main/целевой EXE). Жёстко прописанные C-пути больше не используются.
  • [V] — реальные полные пути — блок «MuMu EXE versions» печатает обнаруженный путь каждого бинарника с авто-версией (каскад FileVersion → ProductVersion → версия продукта → unknown) и штампом сборки; ссылка на официальные release notes — на месте.
    EN summary: MuMu install roots are now discovered on any drive (MuMuManager dir, live processes, registry uninstall entries, Start Menu shortcuts; bounded fixed-drive sweep over Netease/MuMu folders as fallback) — no hard-coded C: paths. [V] prints the discovered full path per binary with the auto-read version and build stamp, plus the official release-notes link.

v1.22.50 (29.09.2026)

  • Автоверсии MuMu-EXE при запуске — меню автоматически находит MuMuPlayer.exe/MuMuNxMain.exe и MuMuNxUpdater.exe (каталог MuMuManager, обе известные установки, пути живых процессов) и печатает версию каждого файла со штампом сборки. У MuMu 6.x эти EXE не несут ресурса версии — каскад: FileVersion → ProductVersion → версия продукта из MuMuManager version (с пометкой) → unknown. Ручной ввод исключён.
    EN summary: Startup now auto-detects and prints MuMuPlayer/MuMuNxUpdater EXE versions (discovery via MuMuManager dir, both known install roots, live process paths; resolution: version resource → ProductVersion → MuMuManager product version → unknown, always with a build-date stamp). No manual input.

v1.22.49 (29.09.2026)

  • README: раздел про Mark-of-the-Web — почему ручная распаковка ZIP Проводником блокирует скрипты (not digitally signed) и три способа лечения: [U]/bootstrap (сами скачивают, снимают метки и подписывают), Unblock-File, распаковка tar -xf/7-Zip. Плюс строка-симптом в таблицу восстановления.
  • CI: CodeQL Advanced — анализ файлов воркфлоу (язык actions), пины по SHA, weekly-расписание; .ps1-код остаётся под DevSkim + PSScriptAnalyzer.
  • Харденинг Test-ReleaseZip — повреждённый ZIP больше не роняет [F]/-VerifyZip исключением: любое повреждение архива даёт archive: corrupt (...) и Ok=$false; новый Pester-тест фиксирует контракт «никогда не бросает», tampered-тест стал детерминированным.
    EN summary: Docs-only release: README gains a Mark-of-the-Web section (why Explorer-extracted ZIP files are blocked and the three fixes: [U]/bootstrap, Unblock-File, tar/7-Zip extraction). CI adds CodeQL Advanced over workflow files. Test-ReleaseZip hardened in both updaters to never throw on corrupt archives (Ok=$false with an "archive: corrupt" check line; new never-throws Pester test, deterministic tamper fixture).

v1.22.48 (28.09.2026)

  • Фикс self-update: [U] снова доставляет полный комплект — список загрузки в Update-FromGitHub остался на до-троичном составе из 4 файлов (v1.22.46 расширила ZIP до 8, но [U] — нет), поэтому файлы, добавленные после v1.22.45, не доходили до существующих инсталляций через [U]. Список приведён к контракту 8 файлов; дефолты rollback-функций (Build-RollbackPlan/Invoke-Rollback) расширены до того же сета — валидация бэкапов честно перечисляет недостающие файлы старых бэкапов. Новый Pester-тест фиксирует список [U] на контракте.
  • [WN] Watch MuMu network + updater — новый read-only пункт меню (секция Info): каждые 5 с логирует НОВЫЕ внешние TCP :443 подключения MuMu*-процессов, запуски MuMuNxUpdater (время, PID, имя), смену EXE-идентичности апдейтера (FileVersion / ProductVersion / LastWriteTime / полный путь) и его удалённые IP во время обновления; дедуп по PID+локальный порт+удалённый кортеж; лог C:\test\mumu-network-update.txt; выход по Q/Ctrl+C. Ничего не меняет: ни firewall, ни прокси, ни DNS, ни маршруты.
  • Фикс Diag-MumuNx (uint32) — разделы «Listening endpoints / TCP connections / UDP endpoints» были пустыми при работающем MuMu: ключи $procRows — [int] PID, OwningProcess — [uint32], хэш-таблица молча не совпадала по типу ключа. Подтверждено живым elevated-снимком (11 слушателей, ADB — только loopback).
  • Дружелюбный pre-flight в Diag-MumuNx — вместо жёсткого #requires -RunAsAdministrator (не поймать) — runtime-проверка с готовой командой запуска от администратора.
    EN summary: [U] self-update downloads the full 8-file deployed set again (the list was stuck on the pre-trio 4 files), rollback defaults widened to match, new contract test pins the list. New read-only menu entry [WN]: MuMu network + updater watcher (new external :443 connections, updater launches/EXE versions/remote IPs, PID+port dedup, Q/Ctrl+C to stop). Diag-MumuNx uint32 key-type fix (socket sections were silently empty while MuMu ran) and a friendly elevation pre-flight.

v1.22.47 (27.09.2026)

  • Version bump: $scriptVer in mumu-menu.ps1, .version, README and relnotes synchronized to 1.22.47.
  • No code changes: this release only synchronizes the version markers after v1.22.46.

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: MuMuPlayerRemoteService, MuMuRemoteService).
    EN summary: Diagnostics trio ships in the ZIP: Watch-MumuConnections.ps1 (dedup log of NEW MuMu TCP connections), Test-MumuTunnelAB.ps1 (A/B network snapshots with diff + -Watch auto-trigger on fake-IP route change), Diag-MumuNx.ps1 (elevated read-only services/processes/connections/firewall snapshot). Release file-set contract widened 5 → 8 files; Test-ReleaseZip, [U]/bootstrap file lists, CI deployed fixture, release-guard zipcheck and T7/T8 tests updated in lockstep.

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the leg locally.
  • CI: release gate audits every Tests leg by exact name — dropping or renaming a leg from the matrix now blocks a release ("missing" instead of silently shrinking coverage). Last-row-wins re-run semantics kept (green→red blocks).
  • PSSA: присваивание сплат-переменной $args в tests/test-deployed-layout.ps1 переименовано в $exeArgs (PSAvoidAssignmentToAutomaticVariable, code-scanning #590/#591) — поведение идентично
  • SKILL.md: задокументирована deployed-layout нога — дерево tests/ (test-deployed-layout.ps1, тег RepoFiles в сьюте), состав матрицы tests.yml и локальный прогон через tests/run-matrix.ps1 / `tests/test...
Read more

MuMuManager CLI Menu v1.22.51

Choose a tag to compare

@genrihx2 genrihx2 released this 29 Sep 05:30

MuMuManager CLI Menu v1.22.51

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.51 (29.09.2026)

  • Поиск корней MuMu на любом диске — Get-MumuInstallRoots обнаруживает установку автоматически: каталог MuMuManager, живые процессы MuMu*, реестровые Uninstall-записи, ярлыки «Пуска»; при пустых быстрых источниках — ограниченный спул по всем фиксированным дискам (папки *Netease*/*MuMu*, ≤3 уровней, признак nx_main/целевой EXE). Жёстко прописанные C-пути больше не используются.
  • [V] — реальные полные пути — блок «MuMu EXE versions» печатает обнаруженный путь каждого бинарника с авто-версией (каскад FileVersion → ProductVersion → версия продукта → unknown) и штампом сборки; ссылка на официальные release notes — на месте.
    EN summary: MuMu install roots are now discovered on any drive (MuMuManager dir, live processes, registry uninstall entries, Start Menu shortcuts; bounded fixed-drive sweep over Netease/MuMu folders as fallback) — no hard-coded C: paths. [V] prints the discovered full path per binary with the auto-read version and build stamp, plus the official release-notes link.

v1.22.50 (29.09.2026)

  • Автоверсии MuMu-EXE при запуске — меню автоматически находит MuMuPlayer.exe/MuMuNxMain.exe и MuMuNxUpdater.exe (каталог MuMuManager, обе известные установки, пути живых процессов) и печатает версию каждого файла со штампом сборки. У MuMu 6.x эти EXE не несут ресурса версии — каскад: FileVersion → ProductVersion → версия продукта из MuMuManager version (с пометкой) → unknown. Ручной ввод исключён.
    EN summary: Startup now auto-detects and prints MuMuPlayer/MuMuNxUpdater EXE versions (discovery via MuMuManager dir, both known install roots, live process paths; resolution: version resource → ProductVersion → MuMuManager product version → unknown, always with a build-date stamp). No manual input.

v1.22.49 (29.09.2026)

  • README: раздел про Mark-of-the-Web — почему ручная распаковка ZIP Проводником блокирует скрипты (not digitally signed) и три способа лечения: [U]/bootstrap (сами скачивают, снимают метки и подписывают), Unblock-File, распаковка tar -xf/7-Zip. Плюс строка-симптом в таблицу восстановления.
  • CI: CodeQL Advanced — анализ файлов воркфлоу (язык actions), пины по SHA, weekly-расписание; .ps1-код остаётся под DevSkim + PSScriptAnalyzer.
  • Харденинг Test-ReleaseZip — повреждённый ZIP больше не роняет [F]/-VerifyZip исключением: любое повреждение архива даёт archive: corrupt (...) и Ok=$false; новый Pester-тест фиксирует контракт «никогда не бросает», tampered-тест стал детерминированным.
    EN summary: Docs-only release: README gains a Mark-of-the-Web section (why Explorer-extracted ZIP files are blocked and the three fixes: [U]/bootstrap, Unblock-File, tar/7-Zip extraction). CI adds CodeQL Advanced over workflow files. Test-ReleaseZip hardened in both updaters to never throw on corrupt archives (Ok=$false with an "archive: corrupt" check line; new never-throws Pester test, deterministic tamper fixture).

v1.22.48 (28.09.2026)

  • Фикс self-update: [U] снова доставляет полный комплект — список загрузки в Update-FromGitHub остался на до-троичном составе из 4 файлов (v1.22.46 расширила ZIP до 8, но [U] — нет), поэтому файлы, добавленные после v1.22.45, не доходили до существующих инсталляций через [U]. Список приведён к контракту 8 файлов; дефолты rollback-функций (Build-RollbackPlan/Invoke-Rollback) расширены до того же сета — валидация бэкапов честно перечисляет недостающие файлы старых бэкапов. Новый Pester-тест фиксирует список [U] на контракте.
  • [WN] Watch MuMu network + updater — новый read-only пункт меню (секция Info): каждые 5 с логирует НОВЫЕ внешние TCP :443 подключения MuMu*-процессов, запуски MuMuNxUpdater (время, PID, имя), смену EXE-идентичности апдейтера (FileVersion / ProductVersion / LastWriteTime / полный путь) и его удалённые IP во время обновления; дедуп по PID+локальный порт+удалённый кортеж; лог C:\test\mumu-network-update.txt; выход по Q/Ctrl+C. Ничего не меняет: ни firewall, ни прокси, ни DNS, ни маршруты.
  • Фикс Diag-MumuNx (uint32) — разделы «Listening endpoints / TCP connections / UDP endpoints» были пустыми при работающем MuMu: ключи $procRows — [int] PID, OwningProcess — [uint32], хэш-таблица молча не совпадала по типу ключа. Подтверждено живым elevated-снимком (11 слушателей, ADB — только loopback).
  • Дружелюбный pre-flight в Diag-MumuNx — вместо жёсткого #requires -RunAsAdministrator (не поймать) — runtime-проверка с готовой командой запуска от администратора.
    EN summary: [U] self-update downloads the full 8-file deployed set again (the list was stuck on the pre-trio 4 files), rollback defaults widened to match, new contract test pins the list. New read-only menu entry [WN]: MuMu network + updater watcher (new external :443 connections, updater launches/EXE versions/remote IPs, PID+port dedup, Q/Ctrl+C to stop). Diag-MumuNx uint32 key-type fix (socket sections were silently empty while MuMu ran) and a friendly elevation pre-flight.

v1.22.47 (27.09.2026)

  • Version bump: $scriptVer in mumu-menu.ps1, .version, README and relnotes synchronized to 1.22.47.
  • No code changes: this release only synchronizes the version markers after v1.22.46.

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: MuMuPlayerRemoteService, MuMuRemoteService).
    EN summary: Diagnostics trio ships in the ZIP: Watch-MumuConnections.ps1 (dedup log of NEW MuMu TCP connections), Test-MumuTunnelAB.ps1 (A/B network snapshots with diff + -Watch auto-trigger on fake-IP route change), Diag-MumuNx.ps1 (elevated read-only services/processes/connections/firewall snapshot). Release file-set contract widened 5 → 8 files; Test-ReleaseZip, [U]/bootstrap file lists, CI deployed fixture, release-guard zipcheck and T7/T8 tests updated in lockstep.

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the leg locally.
  • CI: release gate audits every Tests leg by exact name — dropping or renaming a leg from the matrix now blocks a release ("missing" instead of silently shrinking coverage). Last-row-wins re-run semantics kept (green→red blocks).
  • PSSA: присваивание сплат-переменной $args в tests/test-deployed-layout.ps1 переименовано в $exeArgs (PSAvoidAssignmentToAutomaticVariable, code-scanning #590/#591) — поведение идентично
  • SKILL.md: задокументирована deployed-layout нога — дерево tests/ (test-deployed-layout.ps1, тег RepoFiles в сьюте), состав матрицы tests.yml и локальный прогон через tests/run-matrix.ps1 / tests/test-deployed-layout.ps1

v1.22.44 (25.09.2026)

  • «Token rejected — retrying without auth...» на каждый запрос: отклонённый GitHub'ом сохранённый токен оставался активным до конца сессии — каждый запрос заново проходил цикл «с токеном → 401 → повтор без авторизации». Теперь токен отключается один раз на уровне script-scope с подсказкой «re-save via menu [K]», дальше всё анонимно (репозиторий публичный); централизованный guard добавлен и в Invoke-GitHubApiGet (releases/branches/tags/compare раньше не различали Bad credentials вовсе), и в bootstrap — где прежний сброс был переменной-тенью и не работал

v1.22.43 (25.09.2026)

  • Release-гейт стал самодостаточным: перед публикацией релиза workflow сам запускает Tests-матрицу на SHA тега — переиспользует уже идущий run, иначе диспетчеризует tests.yml по --ref <тег> и ждёт до 25 минут; после зелёного рана — аудит ног (bootstrap-detector + все pester-unit), fail-closed на red/missing/timeout
  • **Еженедельная ZIP-проверка в re...
Read more

MuMuManager CLI Menu v1.22.50

Choose a tag to compare

@genrihx2 genrihx2 released this 29 Sep 04:54

MuMuManager CLI Menu v1.22.50

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.50 (29.09.2026)

  • Автоверсии MuMu-EXE при запуске — меню автоматически находит MuMuPlayer.exe/MuMuNxMain.exe и MuMuNxUpdater.exe (каталог MuMuManager, обе известные установки, пути живых процессов) и печатает версию каждого файла со штампом сборки. У MuMu 6.x эти EXE не несут ресурса версии — каскад: FileVersion → ProductVersion → версия продукта из MuMuManager version (с пометкой) → unknown. Ручной ввод исключён.
    EN summary: Startup now auto-detects and prints MuMuPlayer/MuMuNxUpdater EXE versions (discovery via MuMuManager dir, both known install roots, live process paths; resolution: version resource → ProductVersion → MuMuManager product version → unknown, always with a build-date stamp). No manual input.

v1.22.49 (29.09.2026)

  • README: раздел про Mark-of-the-Web — почему ручная распаковка ZIP Проводником блокирует скрипты (not digitally signed) и три способа лечения: [U]/bootstrap (сами скачивают, снимают метки и подписывают), Unblock-File, распаковка tar -xf/7-Zip. Плюс строка-симптом в таблицу восстановления.
  • CI: CodeQL Advanced — анализ файлов воркфлоу (язык actions), пины по SHA, weekly-расписание; .ps1-код остаётся под DevSkim + PSScriptAnalyzer.
  • Харденинг Test-ReleaseZip — повреждённый ZIP больше не роняет [F]/-VerifyZip исключением: любое повреждение архива даёт archive: corrupt (...) и Ok=$false; новый Pester-тест фиксирует контракт «никогда не бросает», tampered-тест стал детерминированным.
    EN summary: Docs-only release: README gains a Mark-of-the-Web section (why Explorer-extracted ZIP files are blocked and the three fixes: [U]/bootstrap, Unblock-File, tar/7-Zip extraction). CI adds CodeQL Advanced over workflow files. Test-ReleaseZip hardened in both updaters to never throw on corrupt archives (Ok=$false with an "archive: corrupt" check line; new never-throws Pester test, deterministic tamper fixture).

v1.22.48 (28.09.2026)

  • Фикс self-update: [U] снова доставляет полный комплект — список загрузки в Update-FromGitHub остался на до-троичном составе из 4 файлов (v1.22.46 расширила ZIP до 8, но [U] — нет), поэтому файлы, добавленные после v1.22.45, не доходили до существующих инсталляций через [U]. Список приведён к контракту 8 файлов; дефолты rollback-функций (Build-RollbackPlan/Invoke-Rollback) расширены до того же сета — валидация бэкапов честно перечисляет недостающие файлы старых бэкапов. Новый Pester-тест фиксирует список [U] на контракте.
  • [WN] Watch MuMu network + updater — новый read-only пункт меню (секция Info): каждые 5 с логирует НОВЫЕ внешние TCP :443 подключения MuMu*-процессов, запуски MuMuNxUpdater (время, PID, имя), смену EXE-идентичности апдейтера (FileVersion / ProductVersion / LastWriteTime / полный путь) и его удалённые IP во время обновления; дедуп по PID+локальный порт+удалённый кортеж; лог C:\test\mumu-network-update.txt; выход по Q/Ctrl+C. Ничего не меняет: ни firewall, ни прокси, ни DNS, ни маршруты.
  • Фикс Diag-MumuNx (uint32) — разделы «Listening endpoints / TCP connections / UDP endpoints» были пустыми при работающем MuMu: ключи $procRows — [int] PID, OwningProcess — [uint32], хэш-таблица молча не совпадала по типу ключа. Подтверждено живым elevated-снимком (11 слушателей, ADB — только loopback).
  • Дружелюбный pre-flight в Diag-MumuNx — вместо жёсткого #requires -RunAsAdministrator (не поймать) — runtime-проверка с готовой командой запуска от администратора.
    EN summary: [U] self-update downloads the full 8-file deployed set again (the list was stuck on the pre-trio 4 files), rollback defaults widened to match, new contract test pins the list. New read-only menu entry [WN]: MuMu network + updater watcher (new external :443 connections, updater launches/EXE versions/remote IPs, PID+port dedup, Q/Ctrl+C to stop). Diag-MumuNx uint32 key-type fix (socket sections were silently empty while MuMu ran) and a friendly elevation pre-flight.

v1.22.47 (27.09.2026)

  • Version bump: $scriptVer in mumu-menu.ps1, .version, README and relnotes synchronized to 1.22.47.
  • No code changes: this release only synchronizes the version markers after v1.22.46.

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: MuMuPlayerRemoteService, MuMuRemoteService).
    EN summary: Diagnostics trio ships in the ZIP: Watch-MumuConnections.ps1 (dedup log of NEW MuMu TCP connections), Test-MumuTunnelAB.ps1 (A/B network snapshots with diff + -Watch auto-trigger on fake-IP route change), Diag-MumuNx.ps1 (elevated read-only services/processes/connections/firewall snapshot). Release file-set contract widened 5 → 8 files; Test-ReleaseZip, [U]/bootstrap file lists, CI deployed fixture, release-guard zipcheck and T7/T8 tests updated in lockstep.

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the leg locally.
  • CI: release gate audits every Tests leg by exact name — dropping or renaming a leg from the matrix now blocks a release ("missing" instead of silently shrinking coverage). Last-row-wins re-run semantics kept (green→red blocks).
  • PSSA: присваивание сплат-переменной $args в tests/test-deployed-layout.ps1 переименовано в $exeArgs (PSAvoidAssignmentToAutomaticVariable, code-scanning #590/#591) — поведение идентично
  • SKILL.md: задокументирована deployed-layout нога — дерево tests/ (test-deployed-layout.ps1, тег RepoFiles в сьюте), состав матрицы tests.yml и локальный прогон через tests/run-matrix.ps1 / tests/test-deployed-layout.ps1

v1.22.44 (25.09.2026)

  • «Token rejected — retrying without auth...» на каждый запрос: отклонённый GitHub'ом сохранённый токен оставался активным до конца сессии — каждый запрос заново проходил цикл «с токеном → 401 → повтор без авторизации». Теперь токен отключается один раз на уровне script-scope с подсказкой «re-save via menu [K]», дальше всё анонимно (репозиторий публичный); централизованный guard добавлен и в Invoke-GitHubApiGet (releases/branches/tags/compare раньше не различали Bad credentials вовсе), и в bootstrap — где прежний сброс был переменной-тенью и не работал

v1.22.43 (25.09.2026)

  • Release-гейт стал самодостаточным: перед публикацией релиза workflow сам запускает Tests-матрицу на SHA тега — переиспользует уже идущий run, иначе диспетчеризует tests.yml по --ref <тег> и ждёт до 25 минут; после зелёного рана — аудит ног (bootstrap-detector + все pester-unit), fail-closed на red/missing/timeout
  • Еженедельная ZIP-проверка в release-guard: ZIP последнего релиза скачивается, .sha256-sidecar проверяется, SHA256 каждого из 5 файлов сверяется с git show <tag>:<file> — ловит подмену/обрезку/недозагрузку ассета даже после публикации; violations — в тот же marker-scoped issue
  • Фикс гейта — якорный regex отсекал ноги матрицы (найдено репетицией на живом теге): фильтр ^(bootstrap-detector|pester-unit)$ не совпадал с именами вида pester-unit (5.7.1 / powershell) — гейт блокировал бы каждый релиз; заменено на префиксное совпадение
  • Фикс дедупликации чек-ранов: прежний sort -u оставлял алфавитно-первую строку (failure) — тег после зелёного re-run блокировался бы ложно; теперь берётся последняя строка на имя

v1.22.42 (25.09.2026)

  • CI-матрица Pester: pester-unit в tests.yml теперь гоняет сьют на ОБОИХ движках — Windows PowerShell 5.1 и pwsh 7 — на закреплённом Pester 5.7.1 через композитный экшен .github/actions/pester-unit, плюс «канареечная» нога на предустановленном в раннере Pester (сегодня 6.x), которая ловит дрейф движка/Pester з...
Read more

MuMuManager CLI Menu v1.22.49

Choose a tag to compare

@genrihx2 genrihx2 released this 29 Sep 04:02

MuMuManager CLI Menu v1.22.49

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.49 (29.09.2026)

  • README: раздел про Mark-of-the-Web — почему ручная распаковка ZIP Проводником блокирует скрипты (not digitally signed) и три способа лечения: [U]/bootstrap (сами скачивают, снимают метки и подписывают), Unblock-File, распаковка tar -xf/7-Zip. Плюс строка-симптом в таблицу восстановления.
  • CI: CodeQL Advanced — анализ файлов воркфлоу (язык actions), пины по SHA, weekly-расписание; .ps1-код остаётся под DevSkim + PSScriptAnalyzer.
  • Харденинг Test-ReleaseZip — повреждённый ZIP больше не роняет [F]/-VerifyZip исключением: любое повреждение архива даёт archive: corrupt (...) и Ok=$false; новый Pester-тест фиксирует контракт «никогда не бросает», tampered-тест стал детерминированным.
    EN summary: Docs-only release: README gains a Mark-of-the-Web section (why Explorer-extracted ZIP files are blocked and the three fixes: [U]/bootstrap, Unblock-File, tar/7-Zip extraction). CI adds CodeQL Advanced over workflow files. Test-ReleaseZip hardened in both updaters to never throw on corrupt archives (Ok=$false with an "archive: corrupt" check line; new never-throws Pester test, deterministic tamper fixture).

v1.22.48 (28.09.2026)

  • Фикс self-update: [U] снова доставляет полный комплект — список загрузки в Update-FromGitHub остался на до-троичном составе из 4 файлов (v1.22.46 расширила ZIP до 8, но [U] — нет), поэтому файлы, добавленные после v1.22.45, не доходили до существующих инсталляций через [U]. Список приведён к контракту 8 файлов; дефолты rollback-функций (Build-RollbackPlan/Invoke-Rollback) расширены до того же сета — валидация бэкапов честно перечисляет недостающие файлы старых бэкапов. Новый Pester-тест фиксирует список [U] на контракте.
  • [WN] Watch MuMu network + updater — новый read-only пункт меню (секция Info): каждые 5 с логирует НОВЫЕ внешние TCP :443 подключения MuMu*-процессов, запуски MuMuNxUpdater (время, PID, имя), смену EXE-идентичности апдейтера (FileVersion / ProductVersion / LastWriteTime / полный путь) и его удалённые IP во время обновления; дедуп по PID+локальный порт+удалённый кортеж; лог C:\test\mumu-network-update.txt; выход по Q/Ctrl+C. Ничего не меняет: ни firewall, ни прокси, ни DNS, ни маршруты.
  • Фикс Diag-MumuNx (uint32) — разделы «Listening endpoints / TCP connections / UDP endpoints» были пустыми при работающем MuMu: ключи $procRows — [int] PID, OwningProcess — [uint32], хэш-таблица молча не совпадала по типу ключа. Подтверждено живым elevated-снимком (11 слушателей, ADB — только loopback).
  • Дружелюбный pre-flight в Diag-MumuNx — вместо жёсткого #requires -RunAsAdministrator (не поймать) — runtime-проверка с готовой командой запуска от администратора.
    EN summary: [U] self-update downloads the full 8-file deployed set again (the list was stuck on the pre-trio 4 files), rollback defaults widened to match, new contract test pins the list. New read-only menu entry [WN]: MuMu network + updater watcher (new external :443 connections, updater launches/EXE versions/remote IPs, PID+port dedup, Q/Ctrl+C to stop). Diag-MumuNx uint32 key-type fix (socket sections were silently empty while MuMu ran) and a friendly elevation pre-flight.

v1.22.47 (27.09.2026)

  • Version bump: $scriptVer in mumu-menu.ps1, .version, README and relnotes synchronized to 1.22.47.
  • No code changes: this release only synchronizes the version markers after v1.22.46.

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: MuMuPlayerRemoteService, MuMuRemoteService).
    EN summary: Diagnostics trio ships in the ZIP: Watch-MumuConnections.ps1 (dedup log of NEW MuMu TCP connections), Test-MumuTunnelAB.ps1 (A/B network snapshots with diff + -Watch auto-trigger on fake-IP route change), Diag-MumuNx.ps1 (elevated read-only services/processes/connections/firewall snapshot). Release file-set contract widened 5 → 8 files; Test-ReleaseZip, [U]/bootstrap file lists, CI deployed fixture, release-guard zipcheck and T7/T8 tests updated in lockstep.

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the leg locally.
  • CI: release gate audits every Tests leg by exact name — dropping or renaming a leg from the matrix now blocks a release ("missing" instead of silently shrinking coverage). Last-row-wins re-run semantics kept (green→red blocks).
  • PSSA: присваивание сплат-переменной $args в tests/test-deployed-layout.ps1 переименовано в $exeArgs (PSAvoidAssignmentToAutomaticVariable, code-scanning #590/#591) — поведение идентично
  • SKILL.md: задокументирована deployed-layout нога — дерево tests/ (test-deployed-layout.ps1, тег RepoFiles в сьюте), состав матрицы tests.yml и локальный прогон через tests/run-matrix.ps1 / tests/test-deployed-layout.ps1

v1.22.44 (25.09.2026)

  • «Token rejected — retrying without auth...» на каждый запрос: отклонённый GitHub'ом сохранённый токен оставался активным до конца сессии — каждый запрос заново проходил цикл «с токеном → 401 → повтор без авторизации». Теперь токен отключается один раз на уровне script-scope с подсказкой «re-save via menu [K]», дальше всё анонимно (репозиторий публичный); централизованный guard добавлен и в Invoke-GitHubApiGet (releases/branches/tags/compare раньше не различали Bad credentials вовсе), и в bootstrap — где прежний сброс был переменной-тенью и не работал

v1.22.43 (25.09.2026)

  • Release-гейт стал самодостаточным: перед публикацией релиза workflow сам запускает Tests-матрицу на SHA тега — переиспользует уже идущий run, иначе диспетчеризует tests.yml по --ref <тег> и ждёт до 25 минут; после зелёного рана — аудит ног (bootstrap-detector + все pester-unit), fail-closed на red/missing/timeout
  • Еженедельная ZIP-проверка в release-guard: ZIP последнего релиза скачивается, .sha256-sidecar проверяется, SHA256 каждого из 5 файлов сверяется с git show <tag>:<file> — ловит подмену/обрезку/недозагрузку ассета даже после публикации; violations — в тот же marker-scoped issue
  • Фикс гейта — якорный regex отсекал ноги матрицы (найдено репетицией на живом теге): фильтр ^(bootstrap-detector|pester-unit)$ не совпадал с именами вида pester-unit (5.7.1 / powershell) — гейт блокировал бы каждый релиз; заменено на префиксное совпадение
  • Фикс дедупликации чек-ранов: прежний sort -u оставлял алфавитно-первую строку (failure) — тег после зелёного re-run блокировался бы ложно; теперь берётся последняя строка на имя

v1.22.42 (25.09.2026)

  • CI-матрица Pester: pester-unit в tests.yml теперь гоняет сьют на ОБОИХ движках — Windows PowerShell 5.1 и pwsh 7 — на закреплённом Pester 5.7.1 через композитный экшен .github/actions/pester-unit, плюс «канареечная» нога на предустановленном в раннере Pester (сегодня 6.x), которая ловит дрейф движка/Pester заранее, а не по репорту пользователя
  • Фикс из матрицы — Get-ReleaseInfo.PublishedAt: PS 5.1 ConvertFrom-Json оставляет ISO-даты строками, pwsh 7 конвертирует в [datetime] — свойство было движко-зависимым; явный каст [datetime] закрепил контракт для обоих движков (на 5.1 это был бы сырой string). Матрица поймала это на первом же прогоне: 1 тест из 170 красный на 5.1, зелёный на 7
  • Раннер tests/run-pester.ps1: новые параметры -PesterVersion / -ModuleDir (приватная копия Pester поверх PSModulePath) — CI и локальный прогон используют один и тот же скрипт; установка Pester движко-осведомлённая (PSResourceGet на Core, PowerShellGet + NuGet-провайдер на 5.1)

v1.22.41 (25.09.2026)

  • **Get-ReleaseInfo — мёртвые заголовки...
Read more

MuMuManager CLI Menu v1.22.48

Choose a tag to compare

@genrihx2 genrihx2 released this 28 Sep 12:13

MuMuManager CLI Menu v1.22.48

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.48 (28.09.2026)

  • Фикс self-update: [U] снова доставляет полный комплект — список загрузки в Update-FromGitHub остался на до-троичном составе из 4 файлов (v1.22.46 расширила ZIP до 8, но [U] — нет), поэтому файлы, добавленные после v1.22.45, не доходили до существующих инсталляций через [U]. Список приведён к контракту 8 файлов; дефолты rollback-функций (Build-RollbackPlan/Invoke-Rollback) расширены до того же сета — валидация бэкапов честно перечисляет недостающие файлы старых бэкапов. Новый Pester-тест фиксирует список [U] на контракте.
  • [WN] Watch MuMu network + updater — новый read-only пункт меню (секция Info): каждые 5 с логирует НОВЫЕ внешние TCP :443 подключения MuMu*-процессов, запуски MuMuNxUpdater (время, PID, имя), смену EXE-идентичности апдейтера (FileVersion / ProductVersion / LastWriteTime / полный путь) и его удалённые IP во время обновления; дедуп по PID+локальный порт+удалённый кортеж; лог C:\test\mumu-network-update.txt; выход по Q/Ctrl+C. Ничего не меняет: ни firewall, ни прокси, ни DNS, ни маршруты.
  • Фикс Diag-MumuNx (uint32) — разделы «Listening endpoints / TCP connections / UDP endpoints» были пустыми при работающем MuMu: ключи $procRows — [int] PID, OwningProcess — [uint32], хэш-таблица молча не совпадала по типу ключа. Подтверждено живым elevated-снимком (11 слушателей, ADB — только loopback).
  • Дружелюбный pre-flight в Diag-MumuNx — вместо жёсткого #requires -RunAsAdministrator (не поймать) — runtime-проверка с готовой командой запуска от администратора.
    EN summary: [U] self-update downloads the full 8-file deployed set again (the list was stuck on the pre-trio 4 files), rollback defaults widened to match, new contract test pins the list. New read-only menu entry [WN]: MuMu network + updater watcher (new external :443 connections, updater launches/EXE versions/remote IPs, PID+port dedup, Q/Ctrl+C to stop). Diag-MumuNx uint32 key-type fix (socket sections were silently empty while MuMu ran) and a friendly elevation pre-flight.

v1.22.47 (27.09.2026)

  • Version bump: $scriptVer in mumu-menu.ps1, .version, README and relnotes synchronized to 1.22.47.
  • No code changes: this release only synchronizes the version markers after v1.22.46.

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: MuMuPlayerRemoteService, MuMuRemoteService).
    EN summary: Diagnostics trio ships in the ZIP: Watch-MumuConnections.ps1 (dedup log of NEW MuMu TCP connections), Test-MumuTunnelAB.ps1 (A/B network snapshots with diff + -Watch auto-trigger on fake-IP route change), Diag-MumuNx.ps1 (elevated read-only services/processes/connections/firewall snapshot). Release file-set contract widened 5 → 8 files; Test-ReleaseZip, [U]/bootstrap file lists, CI deployed fixture, release-guard zipcheck and T7/T8 tests updated in lockstep.

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the leg locally.
  • CI: release gate audits every Tests leg by exact name — dropping or renaming a leg from the matrix now blocks a release ("missing" instead of silently shrinking coverage). Last-row-wins re-run semantics kept (green→red blocks).
  • PSSA: присваивание сплат-переменной $args в tests/test-deployed-layout.ps1 переименовано в $exeArgs (PSAvoidAssignmentToAutomaticVariable, code-scanning #590/#591) — поведение идентично
  • SKILL.md: задокументирована deployed-layout нога — дерево tests/ (test-deployed-layout.ps1, тег RepoFiles в сьюте), состав матрицы tests.yml и локальный прогон через tests/run-matrix.ps1 / tests/test-deployed-layout.ps1

v1.22.44 (25.09.2026)

  • «Token rejected — retrying without auth...» на каждый запрос: отклонённый GitHub'ом сохранённый токен оставался активным до конца сессии — каждый запрос заново проходил цикл «с токеном → 401 → повтор без авторизации». Теперь токен отключается один раз на уровне script-scope с подсказкой «re-save via menu [K]», дальше всё анонимно (репозиторий публичный); централизованный guard добавлен и в Invoke-GitHubApiGet (releases/branches/tags/compare раньше не различали Bad credentials вовсе), и в bootstrap — где прежний сброс был переменной-тенью и не работал

v1.22.43 (25.09.2026)

  • Release-гейт стал самодостаточным: перед публикацией релиза workflow сам запускает Tests-матрицу на SHA тега — переиспользует уже идущий run, иначе диспетчеризует tests.yml по --ref <тег> и ждёт до 25 минут; после зелёного рана — аудит ног (bootstrap-detector + все pester-unit), fail-closed на red/missing/timeout
  • Еженедельная ZIP-проверка в release-guard: ZIP последнего релиза скачивается, .sha256-sidecar проверяется, SHA256 каждого из 5 файлов сверяется с git show <tag>:<file> — ловит подмену/обрезку/недозагрузку ассета даже после публикации; violations — в тот же marker-scoped issue
  • Фикс гейта — якорный regex отсекал ноги матрицы (найдено репетицией на живом теге): фильтр ^(bootstrap-detector|pester-unit)$ не совпадал с именами вида pester-unit (5.7.1 / powershell) — гейт блокировал бы каждый релиз; заменено на префиксное совпадение
  • Фикс дедупликации чек-ранов: прежний sort -u оставлял алфавитно-первую строку (failure) — тег после зелёного re-run блокировался бы ложно; теперь берётся последняя строка на имя

v1.22.42 (25.09.2026)

  • CI-матрица Pester: pester-unit в tests.yml теперь гоняет сьют на ОБОИХ движках — Windows PowerShell 5.1 и pwsh 7 — на закреплённом Pester 5.7.1 через композитный экшен .github/actions/pester-unit, плюс «канареечная» нога на предустановленном в раннере Pester (сегодня 6.x), которая ловит дрейф движка/Pester заранее, а не по репорту пользователя
  • Фикс из матрицы — Get-ReleaseInfo.PublishedAt: PS 5.1 ConvertFrom-Json оставляет ISO-даты строками, pwsh 7 конвертирует в [datetime] — свойство было движко-зависимым; явный каст [datetime] закрепил контракт для обоих движков (на 5.1 это был бы сырой string). Матрица поймала это на первом же прогоне: 1 тест из 170 красный на 5.1, зелёный на 7
  • Раннер tests/run-pester.ps1: новые параметры -PesterVersion / -ModuleDir (приватная копия Pester поверх PSModulePath) — CI и локальный прогон используют один и тот же скрипт; установка Pester движко-осведомлённая (PSResourceGet на Core, PowerShellGet + NuGet-провайдер на 5.1)

v1.22.41 (25.09.2026)

  • Get-ReleaseInfo — мёртвые заголовки: $headers (Accept / User-Agent / Authorization) собирались и игнорировались — транспорт Invoke-GitHubGet принимает только URL и таймаут
  • Update-FromGitHub — сбои снова различимы: причина приходит из Get-ReleaseInfo через -Failure, и [U]/[UP] рендерят прежние сообщения (подсказки по rate limit, текст ошибки API, «No releases found on remote») вместо одной общей строки
  • Тесты: контракт -Failure и запуск рендера по каждому виду сбоя; фикстура диагностики больше не показывает модальный диалог загрузчика Windows

v1.22.40 (24.09.2026)

  • Меню [U]/[UP] — функция Get-ReleaseInfo: структурированные данные последнего GitHub-релиза (тег, $scriptVer блоба, дата, автор, ассеты с URL) в одном переиспользуемом вызове; причина сбоя отдаётся вызывающему через -Failure (no-release / rate-limit / api / transport), поэтому [U]/[UP] рендерят прежние сообщения — подсказки по rate limit, текст ошибки API и сетевой сбой
  • Update-FromGitHub — рефакторинг: инлайн-fetch releases/latest заменён на Get-ReleaseInfo, поведение обработки ошибок сохранено 1-в-1
  • CI/Dependabot: лейбл dependencies создан и указан ко...
Read more

MuMuManager CLI Menu v1.22.47

Choose a tag to compare

@genrihx2 genrihx2 released this 28 Sep 07:48

MuMuManager CLI Menu v1.22.47

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.47 (27.09.2026)

  • Version bump: $scriptVer in mumu-menu.ps1, .version, README and relnotes synchronized to 1.22.47.
  • No code changes: this release only synchronizes the version markers after v1.22.46.

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: MuMuPlayerRemoteService, MuMuRemoteService).
    EN summary: Diagnostics trio ships in the ZIP: Watch-MumuConnections.ps1 (dedup log of NEW MuMu TCP connections), Test-MumuTunnelAB.ps1 (A/B network snapshots with diff + -Watch auto-trigger on fake-IP route change), Diag-MumuNx.ps1 (elevated read-only services/processes/connections/firewall snapshot). Release file-set contract widened 5 → 8 files; Test-ReleaseZip, [U]/bootstrap file lists, CI deployed fixture, release-guard zipcheck and T7/T8 tests updated in lockstep.

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the leg locally.
  • CI: release gate audits every Tests leg by exact name — dropping or renaming a leg from the matrix now blocks a release ("missing" instead of silently shrinking coverage). Last-row-wins re-run semantics kept (green→red blocks).
  • PSSA: присваивание сплат-переменной $args в tests/test-deployed-layout.ps1 переименовано в $exeArgs (PSAvoidAssignmentToAutomaticVariable, code-scanning #590/#591) — поведение идентично
  • SKILL.md: задокументирована deployed-layout нога — дерево tests/ (test-deployed-layout.ps1, тег RepoFiles в сьюте), состав матрицы tests.yml и локальный прогон через tests/run-matrix.ps1 / tests/test-deployed-layout.ps1

v1.22.44 (25.09.2026)

  • «Token rejected — retrying without auth...» на каждый запрос: отклонённый GitHub'ом сохранённый токен оставался активным до конца сессии — каждый запрос заново проходил цикл «с токеном → 401 → повтор без авторизации». Теперь токен отключается один раз на уровне script-scope с подсказкой «re-save via menu [K]», дальше всё анонимно (репозиторий публичный); централизованный guard добавлен и в Invoke-GitHubApiGet (releases/branches/tags/compare раньше не различали Bad credentials вовсе), и в bootstrap — где прежний сброс был переменной-тенью и не работал

v1.22.43 (25.09.2026)

  • Release-гейт стал самодостаточным: перед публикацией релиза workflow сам запускает Tests-матрицу на SHA тега — переиспользует уже идущий run, иначе диспетчеризует tests.yml по --ref <тег> и ждёт до 25 минут; после зелёного рана — аудит ног (bootstrap-detector + все pester-unit), fail-closed на red/missing/timeout
  • Еженедельная ZIP-проверка в release-guard: ZIP последнего релиза скачивается, .sha256-sidecar проверяется, SHA256 каждого из 5 файлов сверяется с git show <tag>:<file> — ловит подмену/обрезку/недозагрузку ассета даже после публикации; violations — в тот же marker-scoped issue
  • Фикс гейта — якорный regex отсекал ноги матрицы (найдено репетицией на живом теге): фильтр ^(bootstrap-detector|pester-unit)$ не совпадал с именами вида pester-unit (5.7.1 / powershell) — гейт блокировал бы каждый релиз; заменено на префиксное совпадение
  • Фикс дедупликации чек-ранов: прежний sort -u оставлял алфавитно-первую строку (failure) — тег после зелёного re-run блокировался бы ложно; теперь берётся последняя строка на имя

v1.22.42 (25.09.2026)

  • CI-матрица Pester: pester-unit в tests.yml теперь гоняет сьют на ОБОИХ движках — Windows PowerShell 5.1 и pwsh 7 — на закреплённом Pester 5.7.1 через композитный экшен .github/actions/pester-unit, плюс «канареечная» нога на предустановленном в раннере Pester (сегодня 6.x), которая ловит дрейф движка/Pester заранее, а не по репорту пользователя
  • Фикс из матрицы — Get-ReleaseInfo.PublishedAt: PS 5.1 ConvertFrom-Json оставляет ISO-даты строками, pwsh 7 конвертирует в [datetime] — свойство было движко-зависимым; явный каст [datetime] закрепил контракт для обоих движков (на 5.1 это был бы сырой string). Матрица поймала это на первом же прогоне: 1 тест из 170 красный на 5.1, зелёный на 7
  • Раннер tests/run-pester.ps1: новые параметры -PesterVersion / -ModuleDir (приватная копия Pester поверх PSModulePath) — CI и локальный прогон используют один и тот же скрипт; установка Pester движко-осведомлённая (PSResourceGet на Core, PowerShellGet + NuGet-провайдер на 5.1)

v1.22.41 (25.09.2026)

  • Get-ReleaseInfo — мёртвые заголовки: $headers (Accept / User-Agent / Authorization) собирались и игнорировались — транспорт Invoke-GitHubGet принимает только URL и таймаут
  • Update-FromGitHub — сбои снова различимы: причина приходит из Get-ReleaseInfo через -Failure, и [U]/[UP] рендерят прежние сообщения (подсказки по rate limit, текст ошибки API, «No releases found on remote») вместо одной общей строки
  • Тесты: контракт -Failure и запуск рендера по каждому виду сбоя; фикстура диагностики больше не показывает модальный диалог загрузчика Windows

v1.22.40 (24.09.2026)

  • Меню [U]/[UP] — функция Get-ReleaseInfo: структурированные данные последнего GitHub-релиза (тег, $scriptVer блоба, дата, автор, ассеты с URL) в одном переиспользуемом вызове; причина сбоя отдаётся вызывающему через -Failure (no-release / rate-limit / api / transport), поэтому [U]/[UP] рендерят прежние сообщения — подсказки по rate limit, текст ошибки API и сетевой сбой
  • Update-FromGitHub — рефакторинг: инлайн-fetch releases/latest заменён на Get-ReleaseInfo, поведение обработки ошибок сохранено 1-в-1
  • CI/Dependabot: лейбл dependencies создан и указан корректно; upload-sarif → v4.38.1 (per-language CodeQL bundles)

v1.22.39 (22.09.2026)

  • Меню [G] View logs: свёртка стек-логгера — голые фреймы Name:Method(Type) и пустые продолжения того же тега скрываются, каждая ошибка печатается одной строкой, итог [stack] collapsed N stack line(s) (проверено на реальном логе: 24 строки → 6 сообщений)
  • Документация: дата релиза v1.22.37 в README и relnotes приведена к фактическому published_at (22.09.2026 — релиз пересёк полночь UTC)

v1.22.38 (22.09.2026)

  • Меню [5] Create instance: исправлены вызовы Write-Debug (PSSA: позиционные параметры → одна интерполированная строка)

v1.22.37 (22.09.2026)

  • Меню [5] Create instance: панельный редизайн — рамка с версией Android, дифф-детекция нового инстанса (честный итог вместо слепого «Done!»), маркер <-- new в списке

v1.22.36 (21.09.2026)

Сравнение

Предыдущая версия v1.22.46
Текущая версия v1.22.47
Коммитов 2

Коммиты

483c412 fix(changelog): restore v1.22.46/v1.22.45 entries clobbered by the v1.22.47 bump
0092d1a chore(release): bump to v1.22.47 - MuMu network diagnostics trio in the ZIP

Установка

Быстрый запуск (одна команда):

irm https://raw.githubusercontent.com/genrihx2/MuMuManager-CLI-Menu/main/mumu-menu.ps1 -OutFile $env:TEMP\mumu-menu.ps1; & $env:TEMP\mumu-menu.ps1

Git clone (с автообновлением через [U]):

git clone https://github.com/genrihx2/MuMuManager-CLI-Menu.git
cd MuMuManager-CLI-Menu
.\mumu-menu.ps1

Верификация

curl -sL https://github.com/genrihx2/MuMuManager-CLI-Menu/releases/download/v1.22.47/MuMuManager-CLI-Menu-v1.22.47.zip.sha256 -o MuMuManager-CLI-Menu-v1.22.47.zip.sha256
Get-FileHash MuMuManager-CLI-Menu-v1.22.47.zip -Algorithm SHA256 | Select -Expand Hash
# Сравнить с содержимым MuMuManager-CLI-Menu-v1.22.47.zip.sha256

Метрики

Размер ZIP 172 KB
Файлов 8
SHA256 `ce1dae8aaca...
Read more

MuMuManager CLI Menu v1.22.46

Choose a tag to compare

@genrihx2 genrihx2 released this 27 Sep 08:26
384cd10

MuMuManager CLI Menu v1.22.46

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.46 (27.09.2026)

  • Диагностическая троица в комплекте — release ZIP теперь несёт 8 файлов: добавлены read-only инструменты сетевой диагностики MuMu. Watch-MumuConnections.ps1 — опрос TCP-таблицы раз в 5 с, в лог только НОВЫЕ установленные подключения MuMu*-процессов (дедуп по 5-tuple+PID — кто, куда и когда, без дублей по долгоживущим сессиям). Test-MumuTunnelAB.ps1 — снимки сети A/B с diff: подключения, source-адреса, default/fake-IP маршруты, route-lookup по каждому адресату, адаптеры, прокси; режим -Watch сам ловит исчезновение/появление 198.18.* (переключение туннеля) и снимает B + отчёт без ручного вызова. Diag-MumuNx.ps1 — запуск от администратора: сервисы и процессы MuMu с командными строками, слушатели, TCP/UDP с DNS-резолвингом адресатов, firewall-правила MuMu → лог MuMuNx-*.txt. Ни один скрипт не меняет VPN, маршрутизацию или прокси.
  • Контракт файла-сета: 5 → 8 файлов — синхронно обновлены: Test-ReleaseZip в обоих апдейтерах (строгая проверка missing/extras), списки самобновления [U] и bootstrap-update (новые файлы доставляются на существующие инсталляции), fixture deployed-layout ноги CI (tests/test-deployed-layout.ps1), недельный zipcheck в release-guard (EXPECTED_COUNT=8), T7/T8 тесты (stub-фикстуры и «file set: OK (8 files)»). Старые инсталляции (список из 5) по-прежнему обновляются без ошибок: их списки — подмножество.
  • Проверено на живой системе: вотчер поймал «Network error»-фон MuMuPlayer 6.8.0 — циклический рестарт MuMuNxUpdater (новый PID каждые 30–60 с), fake-IP туннель (198.18.0.1, Wintun, default route) и периодические 10-секундные ступоры HTTPS до api.mumuglobal.com при полностью живом хосте; elevated-снимок выявил две параллельные инсталляции MuMu (Netease\MuMuPlayer + Netease1\MuMu) и отсутствие MuMuNxService.exe (реальные сервисы: MuMuPlayerRemoteService, MuMuRemoteService).
    EN summary: Diagnostics trio ships in the ZIP: Watch-MumuConnections.ps1 (dedup log of NEW MuMu TCP connections), Test-MumuTunnelAB.ps1 (A/B network snapshots with diff + -Watch auto-trigger on fake-IP route change), Diag-MumuNx.ps1 (elevated read-only services/processes/connections/firewall snapshot). Release file-set contract widened 5 → 8 files; Test-ReleaseZip, [U]/bootstrap file lists, CI deployed fixture, release-guard zipcheck and T7/T8 tests updated in lockstep.

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the leg locally.
  • CI: release gate audits every Tests leg by exact name — dropping or renaming a leg from the matrix now blocks a release ("missing" instead of silently shrinking coverage). Last-row-wins re-run semantics kept (green→red blocks).
  • PSSA: присваивание сплат-переменной $args в tests/test-deployed-layout.ps1 переименовано в $exeArgs (PSAvoidAssignmentToAutomaticVariable, code-scanning #590/#591) — поведение идентично
  • SKILL.md: задокументирована deployed-layout нога — дерево tests/ (test-deployed-layout.ps1, тег RepoFiles в сьюте), состав матрицы tests.yml и локальный прогон через tests/run-matrix.ps1 / tests/test-deployed-layout.ps1

v1.22.44 (25.09.2026)

  • «Token rejected — retrying without auth...» на каждый запрос: отклонённый GitHub'ом сохранённый токен оставался активным до конца сессии — каждый запрос заново проходил цикл «с токеном → 401 → повтор без авторизации». Теперь токен отключается один раз на уровне script-scope с подсказкой «re-save via menu [K]», дальше всё анонимно (репозиторий публичный); централизованный guard добавлен и в Invoke-GitHubApiGet (releases/branches/tags/compare раньше не различали Bad credentials вовсе), и в bootstrap — где прежний сброс был переменной-тенью и не работал

v1.22.43 (25.09.2026)

  • Release-гейт стал самодостаточным: перед публикацией релиза workflow сам запускает Tests-матрицу на SHA тега — переиспользует уже идущий run, иначе диспетчеризует tests.yml по --ref <тег> и ждёт до 25 минут; после зелёного рана — аудит ног (bootstrap-detector + все pester-unit), fail-closed на red/missing/timeout
  • Еженедельная ZIP-проверка в release-guard: ZIP последнего релиза скачивается, .sha256-sidecar проверяется, SHA256 каждого из 5 файлов сверяется с git show <tag>:<file> — ловит подмену/обрезку/недозагрузку ассета даже после публикации; violations — в тот же marker-scoped issue
  • Фикс гейта — якорный regex отсекал ноги матрицы (найдено репетицией на живом теге): фильтр ^(bootstrap-detector|pester-unit)$ не совпадал с именами вида pester-unit (5.7.1 / powershell) — гейт блокировал бы каждый релиз; заменено на префиксное совпадение
  • Фикс дедупликации чек-ранов: прежний sort -u оставлял алфавитно-первую строку (failure) — тег после зелёного re-run блокировался бы ложно; теперь берётся последняя строка на имя

v1.22.42 (25.09.2026)

  • CI-матрица Pester: pester-unit в tests.yml теперь гоняет сьют на ОБОИХ движках — Windows PowerShell 5.1 и pwsh 7 — на закреплённом Pester 5.7.1 через композитный экшен .github/actions/pester-unit, плюс «канареечная» нога на предустановленном в раннере Pester (сегодня 6.x), которая ловит дрейф движка/Pester заранее, а не по репорту пользователя
  • Фикс из матрицы — Get-ReleaseInfo.PublishedAt: PS 5.1 ConvertFrom-Json оставляет ISO-даты строками, pwsh 7 конвертирует в [datetime] — свойство было движко-зависимым; явный каст [datetime] закрепил контракт для обоих движков (на 5.1 это был бы сырой string). Матрица поймала это на первом же прогоне: 1 тест из 170 красный на 5.1, зелёный на 7
  • Раннер tests/run-pester.ps1: новые параметры -PesterVersion / -ModuleDir (приватная копия Pester поверх PSModulePath) — CI и локальный прогон используют один и тот же скрипт; установка Pester движко-осведомлённая (PSResourceGet на Core, PowerShellGet + NuGet-провайдер на 5.1)

v1.22.41 (25.09.2026)

  • Get-ReleaseInfo — мёртвые заголовки: $headers (Accept / User-Agent / Authorization) собирались и игнорировались — транспорт Invoke-GitHubGet принимает только URL и таймаут
  • Update-FromGitHub — сбои снова различимы: причина приходит из Get-ReleaseInfo через -Failure, и [U]/[UP] рендерят прежние сообщения (подсказки по rate limit, текст ошибки API, «No releases found on remote») вместо одной общей строки
  • Тесты: контракт -Failure и запуск рендера по каждому виду сбоя; фикстура диагностики больше не показывает модальный диалог загрузчика Windows

v1.22.40 (24.09.2026)

  • Меню [U]/[UP] — функция Get-ReleaseInfo: структурированные данные последнего GitHub-релиза (тег, $scriptVer блоба, дата, автор, ассеты с URL) в одном переиспользуемом вызове; причина сбоя отдаётся вызывающему через -Failure (no-release / rate-limit / api / transport), поэтому [U]/[UP] рендерят прежние сообщения — подсказки по rate limit, текст ошибки API и сетевой сбой
  • Update-FromGitHub — рефакторинг: инлайн-fetch releases/latest заменён на Get-ReleaseInfo, поведение обработки ошибок сохранено 1-в-1
  • CI/Dependabot: лейбл dependencies создан и указан корректно; upload-sarif → v4.38.1 (per-language CodeQL bundles)

v1.22.39 (22.09.2026)

  • Меню [G] View logs: свёртка стек-логгера — голые фреймы Name:Method(Type) и пустые продолжения того же тега скрываются, каждая ошибка печатается одной строкой, итог [stack] collapsed N stack line(s) (проверено на реальном логе: 24 строки → 6 сообщений)
  • Документация: дата релиза v1.22.37 в README и relnotes приведена к фактическому published_at (22.09.2026 — релиз пересёк полночь UTC)

v1.22.38 (22.09.2026)

  • Меню [5] Create instance: исправлены вызовы Write-Debug (PSSA: позиционные параметры → одна интерполированная строка)

v1.22.37 (22.09.2026)

  • Меню [5] Create instance: панельный редизайн — рамка с версией Android, дифф-детекция нового инстанса (честный итог вместо слепого «Done!»), маркер <-- new в списке

v1.22.36 (21.09.2026)

  • Меню [G] View logs: поиск [6] — подстрока без учёта регистра, подсветка совпадений, несовпадающие строки приглушены, сводка с счётчиком

v1.22.35 (21.09.2026)

  • Меню [G] View logs: snapshot-дефолт фильтра — errors-only (E) на пустой Enter; live сохраняет полный поток, дефолт показывается в промпте

Сравнение

Предыдущая версия v1.22.45
Текущая версия v1.22.46
Коммитов 7

Коммиты

384cd10 Merge PR #51: Release v1.22.46 - MuMu network diagnostics trio in the ZIP
a83e808 fix(tests): T7 drift fixtures must carry the v1.22.46 diagnostic files
14dd9d2 chore(release): bump to v1.22.46 - MuMu network diagnostics trio in the ZIP
08344f3 Merge PR #50: feat(diag) - MuMu network diagnostics trio (watcher, tunnel A/B, Nx snapshot)
efb49f1 feat(diag): MuMu network diagnostics trio (watcher, tunnel A/B, Nx snapshot)
8b6f12b Merge PR #49: docs(skill) - sanity-run procedure on a live install in SKILL.md
18368c6 docs(skill): sanity-run procedure on a live install (repo-vs-install drift check)

Установка

Быстрый запуск (одна команда):

irm https://raw.githubusercontent.com/genrihx2/MuMuManager-CLI-Menu/main/mumu-menu.ps1 -OutFile $env:TEMP\mumu-menu.ps1; & $env:TEMP\mumu-menu.ps1

Git clone (с автообновлением через [U]):

git clone https://github.com/genrihx2...
Read more

MuMuManager CLI Menu v1.22.45

Choose a tag to compare

@genrihx2 genrihx2 released this 26 Sep 11:19
cfe9678

MuMuManager CLI Menu v1.22.45

Интерактивное PowerShell-меню для управления MuMu Emulator через MuMuManager.exe.

Что нового

v1.22.45 (26.09.2026)

  • CI: deployed-layout Pester leg — the suite runs inside a fixture holding only the deployed file set (mumu-menu.ps1, bootstrap-update.ps1, README.md, SKILL.md, .version); repo-only files excluded (relnotes.md, RELEASE-RUNBOOK.md, update-readme.ps1, tests/). Tests tagged RepoFiles are excluded (172 of 173); both engines — PowerShell 5.1 and pwsh 7 — against the SAME copy (tests/test-deployed-layout.ps1). CI job pester-unit (deployed layout / both engines); composite action gets a layout input (repo|deployed); run-matrix.ps1 replays the leg locally.
  • CI: release gate audits every Tests leg by exact name — dropping or renaming a leg from the matrix now blocks a release ("missing" instead of silently shrinking coverage). Last-row-wins re-run semantics kept (green→red blocks).
  • PSSA: присваивание сплат-переменной $args в tests/test-deployed-layout.ps1 переименовано в $exeArgs (PSAvoidAssignmentToAutomaticVariable, code-scanning #590/#591) — поведение идентично
  • SKILL.md: задокументирована deployed-layout нога — дерево tests/ (test-deployed-layout.ps1, тег RepoFiles в сьюте), состав матрицы tests.yml и локальный прогон через tests/run-matrix.ps1 / tests/test-deployed-layout.ps1

v1.22.44 (25.09.2026)

  • «Token rejected — retrying without auth...» на каждый запрос: отклонённый GitHub'ом сохранённый токен оставался активным до конца сессии — каждый запрос заново проходил цикл «с токеном → 401 → повтор без авторизации». Теперь токен отключается один раз на уровне script-scope с подсказкой «re-save via menu [K]», дальше всё анонимно (репозиторий публичный); централизованный guard добавлен и в Invoke-GitHubApiGet (releases/branches/tags/compare раньше не различали Bad credentials вовсе), и в bootstrap — где прежний сброс был переменной-тенью и не работал

v1.22.43 (25.09.2026)

  • Release-гейт стал самодостаточным: перед публикацией релиза workflow сам запускает Tests-матрицу на SHA тега — переиспользует уже идущий run, иначе диспетчеризует tests.yml по --ref <тег> и ждёт до 25 минут; после зелёного рана — аудит ног (bootstrap-detector + все pester-unit), fail-closed на red/missing/timeout
  • Еженедельная ZIP-проверка в release-guard: ZIP последнего релиза скачивается, .sha256-sidecar проверяется, SHA256 каждого из 5 файлов сверяется с git show <tag>:<file> — ловит подмену/обрезку/недозагрузку ассета даже после публикации; violations — в тот же marker-scoped issue
  • Фикс гейта — якорный regex отсекал ноги матрицы (найдено репетицией на живом теге): фильтр ^(bootstrap-detector|pester-unit)$ не совпадал с именами вида pester-unit (5.7.1 / powershell) — гейт блокировал бы каждый релиз; заменено на префиксное совпадение
  • Фикс дедупликации чек-ранов: прежний sort -u оставлял алфавитно-первую строку (failure) — тег после зелёного re-run блокировался бы ложно; теперь берётся последняя строка на имя

v1.22.42 (25.09.2026)

  • CI-матрица Pester: pester-unit в tests.yml теперь гоняет сьют на ОБОИХ движках — Windows PowerShell 5.1 и pwsh 7 — на закреплённом Pester 5.7.1 через композитный экшен .github/actions/pester-unit, плюс «канареечная» нога на предустановленном в раннере Pester (сегодня 6.x), которая ловит дрейф движка/Pester заранее, а не по репорту пользователя
  • Фикс из матрицы — Get-ReleaseInfo.PublishedAt: PS 5.1 ConvertFrom-Json оставляет ISO-даты строками, pwsh 7 конвертирует в [datetime] — свойство было движко-зависимым; явный каст [datetime] закрепил контракт для обоих движков (на 5.1 это был бы сырой string). Матрица поймала это на первом же прогоне: 1 тест из 170 красный на 5.1, зелёный на 7
  • Раннер tests/run-pester.ps1: новые параметры -PesterVersion / -ModuleDir (приватная копия Pester поверх PSModulePath) — CI и локальный прогон используют один и тот же скрипт; установка Pester движко-осведомлённая (PSResourceGet на Core, PowerShellGet + NuGet-провайдер на 5.1)

v1.22.41 (25.09.2026)

  • Get-ReleaseInfo — мёртвые заголовки: $headers (Accept / User-Agent / Authorization) собирались и игнорировались — транспорт Invoke-GitHubGet принимает только URL и таймаут
  • Update-FromGitHub — сбои снова различимы: причина приходит из Get-ReleaseInfo через -Failure, и [U]/[UP] рендерят прежние сообщения (подсказки по rate limit, текст ошибки API, «No releases found on remote») вместо одной общей строки
  • Тесты: контракт -Failure и запуск рендера по каждому виду сбоя; фикстура диагностики больше не показывает модальный диалог загрузчика Windows

v1.22.40 (24.09.2026)

  • Меню [U]/[UP] — функция Get-ReleaseInfo: структурированные данные последнего GitHub-релиза (тег, $scriptVer блоба, дата, автор, ассеты с URL) в одном переиспользуемом вызове; причина сбоя отдаётся вызывающему через -Failure (no-release / rate-limit / api / transport), поэтому [U]/[UP] рендерят прежние сообщения — подсказки по rate limit, текст ошибки API и сетевой сбой
  • Update-FromGitHub — рефакторинг: инлайн-fetch releases/latest заменён на Get-ReleaseInfo, поведение обработки ошибок сохранено 1-в-1
  • CI/Dependabot: лейбл dependencies создан и указан корректно; upload-sarif → v4.38.1 (per-language CodeQL bundles)

v1.22.39 (22.09.2026)

  • Меню [G] View logs: свёртка стек-логгера — голые фреймы Name:Method(Type) и пустые продолжения того же тега скрываются, каждая ошибка печатается одной строкой, итог [stack] collapsed N stack line(s) (проверено на реальном логе: 24 строки → 6 сообщений)
  • Документация: дата релиза v1.22.37 в README и relnotes приведена к фактическому published_at (22.09.2026 — релиз пересёк полночь UTC)

v1.22.38 (22.09.2026)

  • Меню [5] Create instance: исправлены вызовы Write-Debug (PSSA: позиционные параметры → одна интерполированная строка)

v1.22.37 (22.09.2026)

  • Меню [5] Create instance: панельный редизайн — рамка с версией Android, дифф-детекция нового инстанса (честный итог вместо слепого «Done!»), маркер <-- new в списке

v1.22.36 (21.09.2026)

  • Меню [G] View logs: поиск [6] — подстрока без учёта регистра, подсветка совпадений, несовпадающие строки приглушены, сводка с счётчиком

v1.22.35 (21.09.2026)

  • Меню [G] View logs: snapshot-дефолт фильтра — errors-only (E) на пустой Enter; live сохраняет полный поток, дефолт показывается в промпте

v1.22.34 (21.09.2026)

  • Меню [G] View logs: фильтр тишины [5] — скрывает известный шум (Play Store, vsync, GC, binder) в snapshot/live с счётчиком скрытых строк

v1.22.33 (21.09.2026)

  • Меню [3] Shutdown и [4] Restart: панельный редизайн — guard «ALREADY STOPPED», верифицированный итог выключения, статус-линия по факту состояния, честный итог загрузки

v1.22.32 (21.09.2026)

Сравнение

Предыдущая версия v1.22.44
Текущая версия v1.22.45
Коммитов 7

Коммиты

cfe9678 Merge PR #48: release v1.22.45 - deployed-layout CI leg + exact-name release gate
9a5bb29 chore(release): bump to v1.22.45 - deployed-layout CI leg + exact-name release gate
5695977 Merge PR #47: fix PSSA $args automatic-variable alerts (#590/#591)
08b3475 fix(test): rename $args splat to $exeArgs (PSSA PSAvoidAssignmentToAutomaticVariable)
42c513d Merge PR #46: deployed-layout Tests leg + exact-name release gate
169bea1 ci(release): gate audits Tests legs by exact name - a dropped leg blocks the release
d73ea76 ci(tests): run the Pester suite in a deployed-layout fixture (repo-vs-install drift guard)

Установка

Быстрый запуск (одна команда):

irm https://raw.githubusercontent.com/genrihx2/MuMuManager-CLI-Menu/main/mumu-menu.ps1 -OutFile $env:TEMP\mumu-menu.ps1; & $env:TEMP\mumu-menu.ps1

Git clone (с автообновлением через [U]):

git clone https://github.com/genrihx2/MuMuManager-CLI-Menu.git
cd MuMuManager-CLI-Menu
.\mumu-menu.ps1

Верификация

curl -sL https://github.com/genrihx2/MuMuManager-CLI-Menu/releases/download/v1.22.45/MuMuManager-CLI-Menu-v1.22.45.zip.sha256 -o MuMuManager-CLI-Menu-v1.22.45.zip.sha256
Get-FileHash MuMuManager-CLI-Menu-v1.22.45.zip -Algorithm SHA256 | Select -Expand Hash
# Сравнить с содержимым MuMuManager-CLI-Menu-v1.22.45.zip.sha256

Метрики

Размер ZIP 159 KB
Файлов 5
SHA256 5e2ccdcc379456f5...

Требования: Windows 10/11 · PowerShell 5.1+ · MuMu Emulator 6.x

VirusTotal verdicts

File SHA-256 Malicious Suspicious Harmless Report
MuMuManager-CLI-Menu-v1.22.45.zip 5e2ccdcc379456f570ba99378ee34d5b9193282f11ed3fdb4847827feed1ef7f 0 0 0 report
mumu-menu.ps1 (from ZIP) e05e4f31e69d19cc3123eb110f9307c89ebcf8e96812d8e8b7e3892ced288514 0 0 0 report
SKILL.md (from ZIP) d317403a8393af7aa170b39d8f6e4a1423c236f3b1dd798cbe87ffa22bb48e5e 0 0 0 report

Status: CLEAN - 0 malicious / 0 suspicious (CI scan 2026-09-26, scan run)

Verify the download yourself
sha256sum -c MuMuManager-CLI-Menu-v1.22.45.zip.sha256