Releases: wnunezc/MFA-Forge
Release list
MFA-Forge v1.0.2
MFA-Forge v1.0.2
Changes
- keep the Win32 owner thread responsive while agent and MCP wait for
stdio - add bounded Windows Hello and native prompt supervision
- expose additive process, instance and session identity in health responses
- harden the persistent workspace engine against dead or unresponsive child processes
- use a vendored
winit 0.30.13Windows patch to avoid mixed-DPI drag flicker and oversized window growth until the upstream fix is released - add CI guardrails for localization keys, public API documentation debt and production panic boundaries
Temporary dependency patch
MFA-Forge 1.0.2 overrides winit through [patch.crates-io] and uses
vendor/winit-0.30.13-dpi-drag. The vendored copy is based on the official
winit 0.30.13 source with a narrow Windows WM_DPICHANGED change for
mixed-DPI monitor drags. This reduces release risk for the Windows desktop
hotfix, but it is still a temporary non-upstream dependency. Replace it with the
official crates.io version as soon as the upstream project publishes the fix.
Issue closure matrix
| Issue | Closure evidence |
|---|---|
| #1 Extensive improvement rules | Addressed as the 1.0.2 architecture audit plus targeted implementation: lifecycle blocking removed, native waits bounded, public health/session identity expanded, secret-safe audit boundaries preserved, app-data preferences moved behind storage, oversized storage/update/dialog responsibilities split, and release discipline documented. Requirements unrelated to MFA-Forge's current scope remain non-applicable rather than implemented as speculative features. |
| #2 Agent/MCP unresponsive after unlock | Fixed by the shared stdio runtime, dedicated stdin reader, Win32 message pumping while idle, EOF/error/close handling, bounded Windows Hello/native waits, persistent engine hardening, one-hour soak evidence, and no new WER Application Hang 1002 during validation. |
| #3 Move audit/preferences/GUI file access behind ports | GUI preferences and main-window state path now use mfa_forge_storage::app_data / preferences; audit JSONL append/read/summarize/compact now lives in mfa_forge_storage::audit_log, while GUI keeps only audit-entry semantics/redaction. |
| #4 Split oversized modules by existing responsibilities | Storage repository IO, directory-registry normalization and history helpers were split into private modules; GUI update actions moved to app_actions::update; update dialog moved to dialogs::update. Large inline test sections remain where they need private access; they are not product runtime responsibilities. |
| #5 Reduce cryptographic test contention | Tests now use a fast-test-kdf feature only in test builds/dev-dependencies, while production builds continue to use Argon2id 64 MiB / 3 iterations. A dedicated test asserts production-strength parameters remain available. |
Test timing evidence
Initial timing on the Windows host before test KDF isolation showed repeated
Argon2 contention: mfa-forge-storage about 128.6s, mfa-forge-application
about 168.6s, and GUI MCP timing exceeded the 180s measurement window while
contending for Cargo/test locks.
After isolating fast test KDF parameters from production builds:
cargo test -p mfa-forge-storage: 1.46scargo test -p mfa-forge-application: 4.61scargo test -p mfa-forge-gui agent::mcp: 10.25s
Validation required before publication
- full Rust quality gates
- persistent agent and MCP Windows smoke
- one-hour active soak without new Application Hang event 1002
- optional extended eight-hour soak after the blocking release gates
- installed upgrade from
1.0.1to1.0.2 - GUI language smoke in English, Español, Français, हिन्दी and 中文
- GitHub
workflow_dispatchbuild artifact validated without publishing a release
Publication boundary
1.0.2 is the approved GitHub release line. GitHub publication uses tag
v1.0.2, MSI asset MFA-Forge-1.0.2-x64.msi, and checksum asset
MFA-Forge-1.0.2-x64.msi.sha256.txt. Winget publication is a separate PR
against microsoft/winget-pkgs; until that PR is accepted, winget may still
show wnunezc.MFA-Forge 1.0.1.
Assets
MFA-Forge-1.0.2-x64.msiMFA-Forge-1.0.2-x64.msi.sha256.txt
MFA-Forge v1.0.1
MFA-Forge v1.0.1
Changes
- aligned MSI publisher metadata to
wnunezc - preserved the Visual C++ runtime prerequisite for winget publication
- recorded OpenGL 2.0 and
VCRUNTIME140.dlldependency evidence in release validation
Assets
MFA-Forge-1.0.1-x64.msiMFA-Forge-1.0.1-x64.msi.sha256.txt
MFA-Forge v1.0.0
MFA-Forge 1.0.0
1.0.0 is the first stable public release of MFA-Forge.
Scope
- stable version:
1.0.0 - stable tag:
v1.0.0 - intended MSI asset:
MFA-Forge-1.0.0-x64.msi - intended checksum asset:
MFA-Forge-1.0.0-x64.msi.sha256.txt
Stable baseline
- release line promoted from the validated
RC26code line - launcher-driven startup update path already validated on the installed edge
RC25 -> RC26 - bundled i18n corrections included for
Español,Français,हिन्दी, and中文
Validation gate
cargo fmt --all -- --checkcargo check --workspacecargo clippy --workspace --all-targets -- -D warningscargo test --workspacecargo build --workspace --releasecargo wix --package mfa-forge-gui --no-build --target-bin-dir target/release --output target/rc/MFA-Forge-1.0.0-x64.msi
Local pre-publication evidence
- local MSI path:
target/rc/MFA-Forge-1.0.0-x64.msi - local pre-publication SHA256:
F6FDBB11289B9957CD8FBDF245B4281D740CD24EA8E829282FDD39E4FD22813E
Public release evidence
- published tag:
v1.0.0 - release URL:
https://github.com/wnunezc/MFA-Forge/releases/tag/v1.0.0 - workflow URL:
https://github.com/wnunezc/MFA-Forge/actions/runs/25581377233 - public MSI asset:
MFA-Forge-1.0.0-x64.msi - public checksum asset:
MFA-Forge-1.0.0-x64.msi.sha256.txt - public SHA256:
4551CEBF7492E68808DF1204916AB24A503F9E2422AC0636CEFABC9E6BD95455 - local/public MSI hashes are not byte-identical in this line either
MFA-Forge v0.1.26-rc.26
MFA-Forge 0.1.26-rc.26
0.1.26-rc.26 is the public RC cut to validate the literal installed edge RC25 -> RC26 with automatic launcher startup on GUI open, before unlock, using the helper handoff path for passive MSI apply.
Scope
- release line:
RC26 - numeric version:
0.1.26 - RC tag:
v0.1.26-rc.26 - intended MSI asset:
MFA-Forge-RC26-x64.msi - intended checksum asset:
MFA-Forge-RC26-x64.msi.sha256.txt
Validation target
- exact installed baseline: local
RC25 - exact target: published
RC26 - exact path to prove:
RC25 installed -> open GUI -> launcher discovers RC26 -> helper copy -> checksum verification -> passive MSI update -> installed binaries become 0.1.26
Local pre-publication evidence
- local MSI path:
target/rc/MFA-Forge-RC26-x64.msi - local pre-publication SHA256:
A3BEA4E2736A94CF0A4C28C8D2D349C358C1983BF8A36533D1A9B2CAF5BAE1A3
Public release evidence
- published tag:
v0.1.26-rc.26 - prerelease URL:
https://github.com/wnunezc/MFA-Forge/releases/tag/v0.1.26-rc.26 - workflow URL:
https://github.com/wnunezc/MFA-Forge/actions/runs/25573838338 - public MSI asset:
MFA-Forge-RC26-x64.msi - public checksum asset:
MFA-Forge-RC26-x64.msi.sha256.txt - public SHA256:
C41442E5DCDF5D4BDA5BC1CB403D8FC3953D10A03BBFFB66D305DF12A3B515A5 - local/public MSI hashes are not byte-identical in this line either
Installed validation result
- exact baseline installed before the test:
mfa-forge-gui.exe->0.1.25mfa-forge-agent.exe->0.1.25mfa-forge-mcp.exe->0.1.25mfa-forge-launcher.exe->0.1.25
- exact trigger executed:
- clear
C:/Users/wnune/AppData/Local/OpsZone/MFA-Forge/data/updates/startup - open
C:/Users/wnune/AppData/Local/MFA-Forge/bin/mfa-forge-gui.exe
- clear
- observed updater path:
- launcher auto report created
- helper copy created in startup dir
- public MSI and checksum downloaded to startup dir
- checksum verified: expected = actual =
C41442E5DCDF5D4BDA5BC1CB403D8FC3953D10A03BBFFB66D305DF12A3B515A5 - installer command:
msiexec.exe /i C:\Users\wnune\AppData\Local\OpsZone\MFA-Forge\data\updates\startup\MFA-Forge-RC26-x64.msi /passive - install result:
exit_code = 0
- post-update installed versions:
mfa-forge-gui.exe->0.1.26mfa-forge-agent.exe->0.1.26mfa-forge-mcp.exe->0.1.26mfa-forge-launcher.exe->0.1.26
- conclusion:
- the literal edge
RC25 installed -> open GUI -> update to RC26 before unlockis validated end to end
- the literal edge
MFA-Forge v0.1.24-rc.24
MFA-Forge 0.1.24-rc.24
0.1.24-rc.24 is the public RC cut to validate the literal installed edge RC23 -> RC24 with automatic launcher startup on GUI open, before unlock.
Scope
- release line:
RC24 - numeric version:
0.1.24 - RC tag:
v0.1.24-rc.24 - intended MSI asset:
MFA-Forge-RC24-x64.msi - intended checksum asset:
MFA-Forge-RC24-x64.msi.sha256.txt
Validation target
- exact installed baseline: local
RC23 - exact target: published
RC24 - exact path to prove:
RC23 installed -> open GUI -> launcher discovers RC24 -> checksum verification -> Windows Installer handoff -> installed binaries become 0.1.24
Local pre-publication evidence
- local MSI path:
target/rc/MFA-Forge-RC24-x64.msi - local pre-publication SHA256:
976F781E2AC11EEB981B88D00DF979F848DB952CB291DAAC2A07A9317251927C
MFA-Forge v0.1.22-rc.22
MFA-Forge 0.1.22-rc.22
0.1.22-rc.22 is the first public RC in this line where the installed product is expected to auto-check GitHub for a newer prerelease when the GUI opens, delegating discovery, checksum verification, and MSI handoff to mfa-forge-launcher.exe.
Scope
- release line:
RC22 - numeric version:
0.1.22 - RC tag:
v0.1.22-rc.22 - intended MSI asset:
MFA-Forge-RC22-x64.msi - intended checksum asset:
MFA-Forge-RC22-x64.msi.sha256.txt
User-facing updater behavior
- the installed GUI now triggers the launcher-driven update check when the main window opens
- the launcher now discovers the latest GitHub prerelease RC instead of assuming a hard-coded immediate next RC
- the manual update action remains available and now checks for the latest published prerelease RC as well
Validation target for this release
- exact installed baseline: local
RC21installed on the host - exact release target: published
RC22GitHub prerelease assets - exact path to prove:
RC21 installed -> open GUI -> launcher discovers RC22 -> checksum verification -> Windows Installer handoff -> installed binaries become 0.1.22
Release gate
cargo fmt --all -- --checkcargo check --workspacecargo clippy --workspace --all-targets -- -D warningscargo test --workspacecargo build --workspace --releasecargo wix --package mfa-forge-gui --no-build --target-bin-dir target/release --output target/rc/MFA-Forge-RC22-x64.msi(Get-FileHash -LiteralPath 'target/rc/MFA-Forge-RC22-x64.msi' -Algorithm SHA256).Hash
Local pre-publication evidence
- local MSI path:
target/rc/MFA-Forge-RC22-x64.msi - local pre-publication SHA256:
95BE534DA8185493A67E3012E5E38C71FAE828A063D684B75E993249398110B0
Evidence to finalize after publication
- GitHub release URL and workflow run
- public MSI checksum
- launcher report from the installed
RC21host msiexecresult for theRC21 -> RC22update- installed post-update binary versions
- post-update GUI and
mfa-forge-mcpsmoke
MFA-Forge v0.1.20-rc.20
MFA-Forge 0.1.20-rc.20
0.1.20-rc.20 closes the RC19 updater gap by restoring mfa-forge-launcher.exe to the installed MSI surface, adding an explicit GUI handoff for the next RC line, and validating the real RC19 -> RC20 upgrade path on the user installation with the published prerelease assets.
Scope
- release line:
RC20 - numeric version:
0.1.20 - RC tag:
v0.1.20-rc.20 - GitHub prerelease URL:
https://github.com/wnunezc/MFA-Forge/releases/tag/v0.1.20-rc.20 - MSI asset:
MFA-Forge-RC20-x64.msi - checksum asset:
MFA-Forge-RC20-x64.msi.sha256.txt
User-facing changes
- the installed MSI now includes
mfa-forge-launcher.exe - the GUI now exposes a deliberate
Install next RC updateaction instead of implying any auto-update on app open - RC20 does not claim
open MFA-Forge and it updates itself; the validatedRC19 -> RC20path is the RC20 MSI upgrade over the installed RC19 baseline
Engineering changes
- workspace and package version advanced to
0.1.20 crates/gui/wix/main.wxsnow packagesmfa-forge-launcher.exeas an installed per-user binary- the GUI gained an explicit RC-update dialog that stages the next RC through the installed launcher
crates/cli/src/launcher.rsno longer carries RC18-specific prerelease copy in errors- release docs and architecture notes now distinguish the validated manual
RC19 -> RC20edge from the future launcher-driven path available after RC20 is installed
Validation evidence
Commands executed locally before publication:
pwsh -Command "cargo fmt --all -- --check"pwsh -Command "cargo check --workspace"pwsh -Command "cargo clippy --workspace --all-targets -- -D warnings"pwsh -Command "cargo test --workspace"pwsh -Command "cargo build --workspace --release"pwsh -Command "cargo wix --package mfa-forge-gui --no-build --target-bin-dir target/release --output target/rc/MFA-Forge-RC20-x64.msi"pwsh -Command "(Get-FileHash -LiteralPath 'target/rc/MFA-Forge-RC20-x64.msi' -Algorithm SHA256).Hash"
Manual findings captured during this RC20 pass:
- baseline before the published-asset proof:
C:/Users/wnune/AppData/Local/MFA-Forge/bin/was restored to publishedRC19(0.1.19) and did not containmfa-forge-launcher.exe - exact public-asset upgrade command executed against the installed published
RC19baseline:msiexec /i D:\OpsZone\DevWorkspace\Projects\Desktop\MFA-Forge\target\rc\published-rc20\MFA-Forge-RC20-x64.msi /passive /L*V D:\OpsZone\DevWorkspace\Projects\Desktop\MFA-Forge\target\rc\update-proof\msiexec-install-published-rc20-over-published-rc19.log
msiexecresult: exit code0- post-upgrade installed inventory now includes:
mfa-forge-gui.exemfa-forge-agent.exemfa-forge-mcp.exemfa-forge-launcher.exe
- post-upgrade installed versions confirmed:
mfa-forge-gui.exe->0.1.20mfa-forge-agent.exe->0.1.20mfa-forge-mcp.exe->0.1.20mfa-forge-launcher.exe->0.1.20
- GUI smoke:
- installed
mfa-forge-gui.exestarted successfully - process remained alive after
8s CloseMainWindow()succeeded and the process exited with code0
- installed
- local surface smoke:
- installed
mfa-forge-mcp.exeansweredinitializesuccessfully - reported
serverInfo.version = 0.1.20
- installed
Packaging evidence:
- release build:
target/release - local pre-publication MSI generation:
target/rc/MFA-Forge-RC20-x64.msi - local pre-publication checksum generation:
target/rc/MFA-Forge-RC20-x64.msi.sha256.txt - local pre-publication SHA256:
1BAAE242E1937100E8E313AA30AAEC4B5FE82823AD31DB464796DFC39B099007 - published RC19 asset used as restored baseline:
target/rc/published-rc19/MFA-Forge-RC19-x64.msi - published RC20 asset used for the final proof:
target/rc/published-rc20/MFA-Forge-RC20-x64.msi - published RC20 checksum asset:
target/rc/published-rc20/MFA-Forge-RC20-x64.msi.sha256.txt - published RC20 SHA256:
9B40572462B4699E5D8F720EC72A04E19002A55093E8FA762ABC8C265FBDF1E5 - installed-upgrade log:
target/rc/update-proof/msiexec-install-published-rc20-over-published-rc19.log - workflow run:
https://github.com/wnunezc/MFA-Forge/actions/runs/25537176391
Release truth for RC20
- validated path for the user installation today: manual MSI upgrade from published installed
RC19to publishedRC20 - launcher-driven path for future RCs: available only after RC20 is installed, because RC20 is the first installed line in this arc that actually ships
mfa-forge-launcher.exe - startup auto-update on GUI open: not implemented and not claimed
- important packaging note: the workflow-produced public MSI differs from the pre-publication local MSI, so the final proof and checksum evidence for RC20 are anchored to the published release assets
MFA-Forge v0.1.19-rc.19
MFA-Forge 0.1.19-rc.19
0.1.19-rc.19 advances the public prerelease line after RC18. This candidate focuses on scanner hygiene for test fixtures, English-first UI localization with persisted language selection, and a navigable in-app help surface with localized guides.
Scope
- release line:
RC19 - numeric version:
0.1.19 - RC tag:
v0.1.19-rc.19 - MSI asset:
MFA-Forge-RC19-x64.msi - checksum asset:
MFA-Forge-RC19-x64.msi.sha256.txt
User-facing changes
- the GUI now defaults to English
- secondary UI languages are configurable: Espanol, Francais, Hindi, and Chinese
- language preference is persisted alongside the GUI theme preference
- MFA-Forge now includes an embedded help window with section navigation and search
- localized help guides now explain purpose, workflow, and operational expectations instead of only naming surfaces
Engineering changes
- deterministic Base32 test-secret helpers replace repeated high-entropy hardcoded secrets in tests and fixtures
- help rendering is integrated through embedded Markdown guides per language
- agent prompt windows, loader flows, dialogs, status bar, and main GUI surfaces were aligned with the English-first UI layer
- release docs were advanced from RC18 references to RC19 references
Validation evidence
Commands executed locally:
pwsh -Command "cargo fmt --all -- --check"pwsh -Command "cargo check --workspace"pwsh -Command "cargo clippy --workspace -- -D warnings"pwsh -Command "cargo test --workspace"pwsh -Command "cargo build --workspace --release"pwsh -Command "cargo wix --package mfa-forge-gui --no-build --nocapture --target-bin-dir target/release --output target/rc/MFA-Forge-RC19-x64.msi"pwsh -Command "(Get-FileHash -LiteralPath 'target/rc/MFA-Forge-RC19-x64.msi' -Algorithm SHA256).Hash"
Manual findings captured during this RC19 pass:
- the embedded help window originally showed red
eguiduplicate-ID diagnostics - the issue was fixed by assigning distinct
id_saltvalues to the help window scroll areas - post-fix compilation passed again
Packaging evidence:
- release build:
target/release - MSI generation:
target/rc/MFA-Forge-RC19-x64.msi - MSI size:
11,194,368bytes - checksum generation:
target/rc/MFA-Forge-RC19-x64.msi.sha256.txt - SHA256:
6778E8BB625DADF8C5C79DCF7A2A0DBC8D54539113F47EE62FBC07B71E30EDB5 - WiX warnings observed:
ICE91for the per-userBininstall path, matching the current packaging model - GitHub prerelease URL: pending
Manual smoke still recommended after MSI creation:
- GUI unlock on installed RC19
- help window navigation and search in each language
mfa-forge-agentunlock and closemfa-forge-mcpunlock and close- password-rotation prompt deny/approve clarity
- launcher-driven update path from installed
RC18toRC19
MFA-Forge v0.1.18-rc.18
MFA-Forge 0.1.18-rc.18
0.1.18-rc.18 is the first public prerelease line for the launcher-driven update flow from installed RC17.
Release assets
- primary MSI:
MFA-Forge-RC18-x64.msi - checksum:
MFA-Forge-RC18-x64.msi.sha256.txt - RC tag:
v0.1.18-rc.18 - release channel: GitHub prerelease
Highlights
- separate
mfa-forge-launcherbinary for release discovery, checksum verification, and MSI handoff - Windows-only GUI, local agent session, and minimal MCP server remain unchanged in scope
- validated local
RC17 -> RC18upgrade path through the launcher flow - MSI packaging hardened to replace installed binaries correctly during upgrade
Validation summary
-
cargo fmt --all -- --check -
cargo clippy --workspace --all-targets -- -D warnings -
cargo test --workspace -
cargo build --workspace --release -
cargo wix --package mfa-forge-gui --no-build --target-bin-dir target/release --output target/rc/MFA-Forge-RC18-x64.msi - SHA256 generated for
MFA-Forge-RC18-x64.msi - launcher detects RC18 release metadata and asset name
- launcher verifies checksum before install handoff
- installed
RC17upgrades cleanly toRC18 - final public prerelease publication
Evidence
- MSI path:
target/rc/MFA-Forge-RC18-x64.msi - SHA256:
83508AAABE4FE8430F6C68584CD1A06AC011C3C229F22C615713CC1F0FABAECA - local upgrade proof from
RC17toRC18: completed successfully - installed product version after upgrade:
0.1.18
Known limitations
- no loopback API
- no updater daemon
- no broader client-scoped policy model yet
- no stable release publication yet
Out of scope
- new MCP surfaces
- GUI relayout
- stable
1.0.0release work