Skip to content

chore: alpha 4 release - #335

Open
bobtista wants to merge 52 commits into
mainfrom
release/alpha-4
Open

chore: alpha 4 release#335
bobtista wants to merge 52 commits into
mainfrom
release/alpha-4

Conversation

@bobtista

Copy link
Copy Markdown

Summary

Alpha 4 release vehicle, replacing #229.

release/alpha-4 points at 8e073394a9b4215e6eb927a4eb354cc55504b10b — the release candidate pinned in #307 — and carries exactly the 52 Alpha 4 commits. Nothing else.

Why this replaces #229

#229 merged developmentmain, so its diff followed development wherever it went. After #328, #329 and #331 merged, it carried 55 commits: the 52 Alpha 4 blockers plus three Alpha 5 platform commits. Alpha 4 would have shipped the macOS host and the platform-neutral manifest model without anyone editing the PR.

The Alpha 5 work sits contiguously at development's tip, and the pinned RC is a clean ancestor, so the split needed no history rewriting, no cherry-picking and no force-push:

17bc745  #331  macOS service registrations   ┐
34f98db  #329  macOS host                    ├─ Alpha 5, stays on development
a82537d  #328  cross-platform platform work  ┘
8e07339  ← this branch. Alpha 4, 52 commits.

#229 is closed rather than repointed: its development base is what caused the mixing, and leaving it open invites someone merging it later and shipping Alpha 5 by accident.

What this restores

Three #307 boxes were verified against 8e07339 and then invalidated when development moved. They hold again for this branch:

  • Record the exact release-candidate commit SHA
  • Update the release PR to contain that candidate
  • Confirm the release PR contains no unrelated changes

Re-verified on this branch: 52 commits, all PR-numbered Alpha 4 merges, and zero references to #328, #329 or #331.

CI was green on 8e07339 — runs 30454365599 (push) and 30454371473 (pull_request), covering Build Windows and Build Linux.

What still gates the release — unchanged by this split

Per #307, this must not merge merely because it is mergeable:

  • Revoke and rotate the UploadThing credential. Mandatory and independent of release timing: the pre-fix(security): remove client-side UploadThing credentials #300 build XOR-obfuscated the token with a random key and wrote both into ApiConstants.cs, so published v0.0.1–v0.0.3 artifacts contain a recoverable token.
  • Remove obsolete repository secrets (needs admin)
  • Review provider-account activity
  • Packaged Windows validation on a real machine — 9 checks
  • Packaged Linux validation on a real machine — 8 checks
  • One human maintainer approval, from someone other than @bobtista

main requires linear history, so this lands as a squash or rebase merge — a merge commit is not permitted. Rebase preserves the 52 commits individually; squash collapses them, which is what made main and development diverge at alpha 3.

After this merges

development will still not be a descendant of main, so the Alpha 5 release PR would re-present all 52 already-released commits. Rebasing development onto main immediately after this lands fixes that permanently, but needs an admin to lift non_fast_forward — no bypass actors are configured on either ruleset.

Related

undead2146 and others added 30 commits December 28, 2025 19:38
…trols

- Added `NullableDecimalToIntConverter` to handle data conversion between View and ViewModel.
- Defined a new "phantom" style for `NumericUpDown` to match the existing minimalist UI.
- Replaced `TextBlock` value displays with `NumericUpDown` controls for Gamma, Audio volumes, Font sizes, and Camera settings.
- Adjusted Grid column widths to accommodate interactive input fields.
Added manual folder picker for Retail GameInstallations without registry
…227)

Fixed GameSettings not persisting whenever the profile was saved.
… resolution (#225)

* fix(deps): ensure disabled game installation is auto-resolved when required by client

* feat(local): add GameType selection and validation for local content

* feat(game-profiles): hide GameInstallation from UI
…ate detection (#228)

Upon launching a GameProfile that has a GeneralsOnline GameClient, a check for an update will be made. 
When an update is available it will download the new release, remove the old GameClient and MapPack, reconcile the profiles with the new release, then continue with launching the game.
Users can now subscribe to development branches to receive notifications for every new push or update
…xternal JSON (#205)

This commit lays the foundation for the Provider Defition framework whereby publishers can become ContentProviders in GenHub.
… management (#235)

- Added a GameType filter for Generals and Zero Hour.
- Updated the selected ContentType button to highlight when active.
- Centered all ContentItems.
- Organized ContentItems into a brick-style layout.
- Replaced the add/remove buttons with a click action on the ContentItem itself.
- Set the "Delete" button to be visible only on hover.
Added a section under settings for the following data directories; workspace, profiles, manifests and CAS-pool,
…234)

Removed old local content dialog properties and methods from GameProfileSettingsViewModel.
Enhanced UI with drag-and-drop support for file and folder imports.
…age and multi-instance debugging support (#239)

*   Added persistent storage for manual game installations and multi-instance debugging support.
*   Improved update reliability with HTTP retries, GitHub API caching, and enhanced error handling.
*   Refactored constants and implemented automated cleanup for orphaned workspace directories.
…port and GitHub rate limit tracking (#237)

This update introduces a persistent notification feed with history tracking and a redesigned bell UI featuring dynamic unread badges. It adds support for multi-action notifications with styled buttons and integrates a GitHub rate limit tracker to provide real-time API usage warnings. The core notification architecture has been refactored into record types for better immutability, alongside service enhancements for managing read states and history. Additionally, the UI features a new custom title bar and redesigned toasts, backed by comprehensive unit tests to ensure thread safety and reliability.
…y launching (#241)

* feat: Implement SteamLauncher for game directory preparation and proxy launching

- Added SteamLauncher service to manage game directory preparation for Steam-tracked profiles.
- Introduced ProxyConfig for configuring the proxy launcher with target executable and working directory.
- Implemented methods for deploying the proxy launcher and creating necessary configuration files.
- Enhanced manifest generation to support backup executable handling from the Steam Proxy Launcher.
- Updated SteamManifestPatcher to improve executable validation logic.
- Refactored HardLinkStrategy to prioritize file deduplication based on content type.
- Improved error handling and logging throughout the game installation and manifest processes.
- Updated documentation to reflect changes in detection and manifest creation workflows.

* fix: resolve proxy launcher not replacing generals.exe

* chore: resolve greptile comments

* fix: resolve GameProfileSettingsWindow drag to resize from fullscreen
)

* feat: add GitHub Pages deployment workflow and landing page assets

* feat: Add Replay Manager tool with drag-and-drop functionality and file management
- Implemented ReplayManagerView for managing replay files.
- Added drag-and-drop support for importing replay files (.rep, .zip).
- Enhanced ToolsViewModel to include Replay Manager services.
- Updated UI styles for better visual consistency.
- Introduced EnumToBoolConverter and EqualsToConverter for improved data binding.
- Added documentation for Replay Manager features and usage.
- Registered Replay Manager services in the dependency injection module.

* feat(tools): enhance map/replay managers and refine tools sidebar ui

* feat(tools): enhance map/replay managers and refine tools sidebar ui

* feat(tools): enhance map/replay managers and refine tools sidebar ui

* fix: resolve build version mismatch and the add local content DragDrop not working admin
…odding utilities (#247)

Users can now add individual executables, or tools to be ran in a gameprofile. 
Tools or executables like WorldBuilder.exe, WNDeditor, ParticleEditor, Discord.exe, Notepad.exe, or any other program or tool they desire.
mnoserat and others added 22 commits January 24, 2026 00:06
Added a new info tab with 3 sections:
- GenHub Guide 
- GeneralsOnline
- Zerohour FAQ

Moreover the sidebar got redesigned to be reusable .
…dy existing genhub workspaces adjacent to the current game installation (#262)
…x state persistence and race conditions

Implemented mute/unmute support in the notifications feed with proper UI indicators and command bindings. Converted mute operations to async with reliable persistence via UserSettingsService and added CancellationToken support. Fixed race conditions affecting mute state and ensured state updates only occur after successful persistence.

Improved notification badge sizing, positioning, and count handling. Refactored bindings to rely on ViewModel state, removed dead code, and resolved StyleCop issues. Includes UI fixes, cleanup, and reliability improvements.
…th genpatcher registry. (#273)

This PR fixes the Controlbar and Hotkeys not being converted and packed correctly into  `.big` files.
…gement (#261)

* GeneralsOnline, CommunityOutpost and TheSuperhackers will auto-update and reconcile GameProfiles that have outdated content replacing them with the updated content.
@community-outpost community-outpost deleted a comment from kilo-code-bot Bot Jul 30, 2026
@community-outpost community-outpost deleted a comment from coderabbitai Bot Jul 30, 2026
@community-outpost community-outpost deleted a comment from greptile-apps Bot Jul 30, 2026
@undead2146

Copy link
Copy Markdown
Member

Note that GeneralsOnline Online is currently unplayable due to their EAC changes they made a while ago.

I opened #336 to address this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants