# ForgeFlow 0.3.0 release notes Release date: 2026-07-24 Release type: self-service test release ## Goal Version 0.3.0 closes the gap between a functional developer preview and a build that can be configured and tested by its owner without sharing credentials with a developer. The release concentrates on setup guidance, deterministic preflight checks, safe diagnostics and server-side allowlisting. ## Setup and readiness - Replaced the lightweight onboarding with a five-step setup wizard. - Added a computer readiness preflight for Git, Git identity, writable app data, writable diagnostics and OS credential encryption. - Added a Gitea validation stage before setup completion. - Added visible repository discovery results. - Added safe setup diagnostics before Gitea is connected. - Added a comprehensive start page and end-to-end setup guide. - Added a JSON-capable command-line doctor for local environment validation. ## Deployment preflight A deployment now receives a visible preflight before confirmation and a second mandatory backend validation immediately before dispatch. Checks include: - linked local Git repository; - allowed deployment branch; - clean working tree; - configured upstream; - local/remote ahead and behind state; - exact full SHA on the remote branch; - local deploy and rollback workflow files; - remote workflow visibility through Gitea; - Gitea Actions API availability; - deployment status endpoint; - application health endpoint. Optional environment checks can warn without hiding required failures. Deployment cannot bypass the mandatory checks through the renderer. ## Diagnostic logging - Added ordered structured JSONL logging in the Electron app-data directory. - Added daily files, size rotation and retention pruning. - Added configurable logging level, retention and file-size policy. - Added process, renderer, Git, repository, Gitea, IPC, preflight and deployment diagnostics. - Added per-launch session IDs and per-operation deployment request IDs. - Added a no-throw logging design so diagnostic storage does not crash the app. - Added local clear and open-folder controls. ## Secret and privacy protection - Added recursive sensitive-key detection, including camelCase variants. - Added bearer/basic/token/password/API-key/client-secret redaction. - Added runtime-secret replacement. - Added URL credential, token query parameter and private-key redaction. - Added common hosting-token pattern redaction. - Added user-home and source-root path aliases. - Added strict privacy mode with deterministic identifier hashing. - Stopped automatically ingesting or persisting raw runner logs; full output stays in Gitea. - Added fail-closed bundle auditing before the ZIP is written. - Added SHA-256 output for every generated support bundle. No Gitea token, SSH key or server password is needed by the developer to use these diagnostics. ## Support bundle contents A support bundle can contain: - manifest and safety audit; - system and application version information; - sanitized public configuration; - sanitized repository state; - sanitized operation history; - latest preflight report; - safe diagnostic status; - redacted JSONL logs. It intentionally excludes protected token blobs, authorization headers, private keys, source files, Git diffs, environment dumps and raw runner output. ## Server deployment hardening - Moved target definitions to a root-owned `/etc/forgeflow/targets.conf` file. - Added exact repository/environment allowlisting. - Made the server status URL mandatory and require matching SHA plus request ID before success. - Added configuration ownership and permission checks. - Added absolute and restricted path validation. - Added exact remote-SHA and branch ancestry validation. - Added per-target `flock` locking. - Added Docker Compose result and health verification. - Added current, previous, requested SHA, request ID and exit code to server status output. - Added a restrictive sudoers template for the runner. - Added explicit deploy and rollback workflow request-ID inputs. - Added backend repository re-resolution so renderer-supplied paths and identities cannot select an arbitrary local folder or Gitea repository. - Captured pre-dispatch Actions run IDs so polling cannot attach to an older run with the same commit SHA. - Required repository, environment, live SHA, requested SHA, request ID, zero server exit code and explicit health success before marking a release complete. - Restricted rollback to the exact previous SHA currently reported by the server status endpoint. ## User interface - Added a dedicated Diagnostics workspace. - Added system and deployment preflight presentation. - Added diagnostic policy controls. - Added Standard and Strict support-bundle export. - Added support-bundle checksum and reveal action. - Added readiness explanations to onboarding. - Replaced duplicate sidebar navigation with a compact safe-diagnostics state. ## Validation - 39 required project files validated. - 35 JavaScript files passed syntax checks. - 36 of 36 automated tests passed. - Two real temporary Git remotes remain part of the integration suite. - New tests cover redaction, diagnostic rotation/export, support ZIP generation, fail-closed safety auditing, preflight and Gitea workflow-file checks. ## Known boundaries - The release is not code-signed. - A platform-native installer is not guaranteed by the source ZIP alone. - The private Gitea, runner and server environment still requires the documented local acceptance test. - Application-specific compose commands and health endpoints remain target configuration, because they cannot be inferred safely. - No redactor can mathematically identify an arbitrary unknown secret printed by custom third-party code; raw runner logs therefore remain only in the trusted Gitea Actions interface, and exported bundles should still be inspected before sharing.