Skip to content

Commit 1c8deb6

Browse files
committed
feat: complete game health repair and production hardening
1 parent a68c25d commit 1c8deb6

48 files changed

Lines changed: 2052 additions & 390 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎AGENTS.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ SyntaxLauncher is a modular Minecraft launcher written primarily in Kotlin. The
1010

1111
The launcher must ultimately be able to support:
1212

13-
- authenticated play only, with Minecraft: Java Edition entitlement and profile verification before every launch; preserve legacy offline identity records and user worlds only for compatibility;
13+
- explicit offline/non-premium player profiles alongside official Microsoft accounts, with a persistent player manager separate from game instances;
1414
- official Microsoft/Minecraft authentication for premium accounts;
1515
- multiple Minecraft versions;
1616
- automatic Java runtime selection and installation;
@@ -166,7 +166,7 @@ Create abstractions when there are at least two realistic implementations or whe
166166

167167
## 8. Authentication and security rules
168168

169-
**22 October 2026 AppID review correction:** The official review form requires authentication and game ownership before gameplay regardless of server configuration. This supersedes older offline/non-premium product requirements and milestone descriptions. Do not re-enable nickname-only play, cached/offline ownership bypasses, alternate client IDs as a workaround, or fallback after failed checks. Fresh entitlement/profile verification is required on the production desktop Play path; retain worlds and legacy records without making them playable identities.
169+
**22 October 2026 maintainer correction:** The maintainer explicitly reaffirmed offline/non-premium support and a player profile manager alongside Microsoft accounts. This supersedes the earlier authenticated-only product change made for AppID review. Keep offline selection explicit; never silently fall back after Microsoft failure or impersonate verified identities. Microsoft launches still require fresh official entitlement/profile checks. The official AppID form requires authentication/ownership regardless of server configuration: document that conflict honestly, preserve the actual b915ad2 submission record, and do not claim this dual-mode revision meets that requirement or has approval.
170170

171171
- Premium authentication must use official Microsoft/Xbox/Minecraft authentication flows.
172172
- Never collect or store a user's Microsoft password.

‎README.md‎

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@ Publisher and support: **SyntaxDevTeam / WieszczY**, [[email protected]](mail
66

77
[Project website](https://syntaxdevteam.pl/p/syntaxlauncher) · [Privacy](https://syntaxdevteam.pl/p/syntaxlauncher-prywatnosc) · [Terms](https://syntaxdevteam.pl/p/syntaxlauncher-warunki-uzytkowania) · [Support and account removal](https://syntaxdevteam.pl/p/syntaxlauncher-zarzadzanie-usluga)
88

9-
> **Current access policy — 22 October 2026:** Microsoft authentication, a Minecraft: Java Edition entitlement and a verified Java profile are required before gameplay. The desktop revalidates the session before every launch. Nickname-only/non-premium gameplay is retired for all server configurations; historical offline milestones below are not exceptions. Existing local worlds and profiles are preserved. The first AppID request was declined; revised review and live-account acceptance remain separate gates.
9+
> **Player profiles — 22 October 2026:** SyntaxLauncher supports both explicit offline/non-premium players and Microsoft accounts. The player manager saves, selects, renames offline nicknames and removes profiles independently of game instances, worlds and add-ons; the active player survives restart. Microsoft Play still requires fresh official authentication, Java entitlement and profile verification, with no automatic offline fallback. The maintainer explicitly restored dual-mode product scope after the authenticated-only AppID-review change. The renewed request described immutable commit b915ad2, not this dual-mode revision; no allowlist approval is claimed.
1010
1111
SyntaxLauncher is a modern Minecraft launcher from SyntaxDevTeam, written primarily in Kotlin and developed incrementally from a minimal vanilla launcher into a modular launcher with premium authentication, isolated instances, mod loaders, Modrinth integration, modpacks and diagnostics.
1212

1313
The project has implemented a v0.2 Instance Manager, reached **bounded v0.8 Forge/Quilt and v0.9 graphics acceptance**, and completed **v0.10 Modrinth modpack installation** within the documented scope. Official Forge/NeoForge installer smoke tests and three-platform CI packaging pass; the maintainer confirmed private Forge startup and Forge/Quilt mod workflows. Forge remains restricted to Minecraft 1.21.1 / 52.1.20. v0.9 now includes built-in mods/textures/shaders/OptiFine installation and installed-pack controls within the documented compatibility matrix; the maintainer confirmed private v0.9 gameplay acceptance; the broader native/platform matrix remains open. Modrinth modpacks now install into newly prepared games from the built-in catalog. Minecraft Services reconsideration after the first denial, v0.3 real-account acceptance and documented clean-machine Vanilla startup acceptance remain pending. The Kotlin/Compose launcher now connects the offline account, Mojang metadata, verified game preparation, automatic Java runtime installation, metadata-driven LaunchPlan and MinecraftProcessManager to an actual desktop Play workflow. A real clean-machine Minecraft launch is not yet verified.
1414

15+
## v0.11 / v0.12 — diagnostics, repair and release preparation
16+
17+
Home → **Game health and repair** scans the selected game's managed files, explains common failures with confidence labels and repairs game files/Java without starting Minecraft or deleting worlds/mods/settings. Copy safe report exports a structured local summary without raw logs, credentials or private paths. Settings now includes a bounded launcher-log viewer, actual data locations and update-channel controls. Launcher logs rotate, sensitive message fields are redacted, downloads check free space and the common JVM dependency graph is locked.
18+
19+
Microsoft account acceptance is **deferred while awaiting Mojang AppID approval** (maintainer instruction, 23 October 2026); existing code and explicit offline profiles remain. Implementation work on diagnostics/hardening is separate from final clean-machine, hosted updater, signing/notarization and native gameplay/DPI acceptance. See [v0.11 verification](docs/TESTING_V0.11.md), [v0.12 final gates](docs/TESTING_V0.12.md) and [installation/backup/removal](docs/INSTALLATION.md).
20+
1521
## Project philosophy
1622

1723
**Non-negotiable audience:** children playing Minecraft. The normal experience must be extraordinarily simple: choose an item or ready-made set from the launcher catalog, click Install, then Play. The launcher handles compatible versions and required components. Manual file import and technical settings are advanced tools. This applies to mods, modpacks, shaders, resource packs, OptiFine and future content; a backend alone does not complete the experience.
@@ -46,7 +52,7 @@ The v0.2 implementation includes cross-process per-instance file locks, safe clo
4652

4753
## v0.3 — Microsoft/Premium Accounts
4854

49-
The desktop offers saved Microsoft Java identities, system-browser PKCE sign-in, native credential storage, account removal and one authenticated launch pipeline. The project-owned public AppID is the runtime default; `SYNTAXLAUNCHER_MICROSOFT_CLIENT_ID` remains a developer override. The launcher requests `XboxLive.signin offline_access`, exchanges Xbox/XSTS/Minecraft tokens, checks `/entitlements/mcstore` for a Java entitlement and requires `/minecraft/profile`. Every Play requests a fresh session through the same checks; unavailable checks block gameplay. Anonymous, legacy and missing identities are rejected before launch preparation, including by the shared core coordinator. No fallback to an offline player exists. Legacy identity records and worlds remain intact. Refresh credentials use Linux Secret Service/libsecret, macOS Keychain or user-scoped Windows DPAPI, with no plaintext fallback; access tokens remain in memory. See [Microsoft application and renewed review](docs/MICROSOFT_APP.md) and [the evidence checklist](docs/APP_REVIEW_2026-10.md). Native secure-storage and approved-AppID live account/gameplay acceptance remain open.
55+
The player manager stores explicit offline profiles and Microsoft identities independently of game instances. Offline players never access the credential vault. Microsoft uses system-browser PKCE, the official Xbox/XSTS/Minecraft exchanges, Java entitlement/profile checks and OS-backed refresh credentials. Every Microsoft Play requires fresh verification; failures never silently fall back to offline. Live acceptance is deferred pending Mojang AppID approval. The request describes the earlier authenticated-only commit b915ad2; restored dual-mode scope is not claimed to satisfy that request's criteria. See [Microsoft application and renewed review](docs/MICROSOFT_APP.md).
5056

5157
## Pick Vanilla or play with mods
5258

@@ -90,7 +96,7 @@ Fabric and Quilt startup were confirmed by the maintainer on 20 October 2026; lo
9096

9197
## Automatic GitHub Releases
9298

93-
**v0.7.0 publication blocker:** The 21 October 2026 version-change CI passed tests and Linux/Windows/macOS packaging, but GitHub rejected the release creation with HTTP 403 (`Resource not accessible by integration`). `launcherVersion=0.7.0` is in main, but the public Release is still absent. See [UPDATING.md](docs/UPDATING.md) for the optional write-authorized release token fix.
99+
The earlier v0.7.0 HTTP 403 publication incident is historical. The release-readiness register records public Stable v0.7.1 and verified six-asset DEV publication in CI 39901800185. Current product version remains 0.7.1; this task does not publish a new Stable version. See [release evidence](docs/RELEASE_READINESS.md).
94100

95101

96102
The sole product version is `launcherVersion` in [`gradle.properties`](gradle.properties). A higher plain `X.Y.Z` pushed to `main` publishes Stable after tests and all platform packages pass. Matching manual `vX.Y.Z` tags remain supported. Every successful `main` push also publishes an immutable **DEV** GitHub pre-release, including changes without a product-version bump. Run the workflow manually on `main` with `preview_channel=snapshot` to publish **SNAPSHOT** (or choose `dev` for a manual DEV build). Preview releases never become GitHub's latest stable release.
@@ -117,7 +123,7 @@ The maintainer confirmed private texture activation, shaders with automatic Iris
117123

118124
Run `python3 scripts/release_readiness.py` to view unresolved milestone checkboxes without changing the roadmap. Use `--enforce v0.10` to gate the bounded modpack milestone, or `--enforce v1.0` only when preparing a real stable v1.0 candidate. GitHub Actions posts the informational audit after normal tests. The latest normal GitHub Release/version and the current development milestone are deliberately separate. See [release readiness](docs/RELEASE_READINESS.md).
119125

120-
## v0.11 — Local crash diagnostics (in development)
126+
## v0.11 — Local crash diagnostics and file repair
121127

122128
After a failed Minecraft launch choose **Diagnose the failure**. SyntaxLauncher checks bounded recent local logs, distinguishes probable findings from weak evidence, and offers an explicit **Verify and repair managed files** action for supported integrity/preparation failures. Reports never embed raw log lines or authentication credentials. This stage does not disable mods, reset user settings or remove worlds. See [v0.11 acceptance checklist](docs/TESTING_V0.11.md). Hosted core/desktop tests now pass; native/manual diagnostic acceptance remains pending.
123129

@@ -131,7 +137,7 @@ Every installation, reinstall or newer pack release creates a **new game**. Exis
131137

132138
The real Simply Optimized 1.21.1-6.0 installation (18 referenced files, Fabric 0.17.3), full game/runtime preparation and byte-identical original export passed in isolated directories. This was not a graphical Minecraft startup. Deterministic tests cover catalog/installation, cancellation/failure cleanup, isolation and translated compact UI; broader gameplay/native acceptance remains tracked under v1.0. See [v0.10 verification and limits](docs/TESTING_V0.10.md).
133139

134-
## v0.7 — NeoForge (v0.7.0 version set; public Release not yet available)
140+
## v0.7 — NeoForge (bounded support)
135141

136142
A processor-backed NeoForge installer adapter is now connected to the existing
137143
instance and launch pipeline. The desktop can discover compatible NeoForge Maven
@@ -353,17 +359,17 @@ See [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for the full architecture spe
353359

354360
### Offline / non-premium
355361

356-
Available from v0.1.
362+
Available alongside Microsoft player profiles. Use **Manage players** in the Player section to add and select an **Offline / non-premium** nickname. The launcher remembers the active player after restart. Removing a player does not delete worlds, game profiles or add-ons. Renaming an offline player changes its deterministic UUID, so worlds/servers may treat the new nickname as a different player.
357363

358364
Offline accounts are intended for local play and servers configured to accept offline clients. SyntaxLauncher will not use offline accounts to bypass authentication on servers operating in online mode.
359365

360366
The current implementation already provides a common account model, offline username validation and deterministic UUID generation using Minecraft's `OfflinePlayer:<username>` convention. The launch layer converts that account into normalized offline authentication/session placeholder values rather than embedding offline-specific branching throughout command construction.
361367

362368
### Microsoft / premium
363369

364-
Planned for v0.3.
370+
Implemented for v0.3 with automated fixtures; real sign-in/gameplay remain blocked pending AppID authorization. Use **Manage players → Add Microsoft**. Saved Microsoft names come from the verified Java profile and cannot be edited locally.
365371

366-
Premium authentication will use the official Microsoft → Xbox Live → XSTS → Minecraft Services flow appropriate for a desktop application. SyntaxLauncher must never ask users to type their Microsoft password into the launcher itself.
372+
Premium authentication uses the official Microsoft → Xbox Live → XSTS → Minecraft Services flow appropriate for a desktop application. SyntaxLauncher must never ask users to type their Microsoft password into the launcher itself.
367373

368374
The v0.1 launch builder already consumes a normalized authentication payload so v0.3 can provide premium access token/profile values without introducing a second premium-only launch engine.
369375

‎build.gradle.kts‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,10 @@ val productVersion = providers.gradleProperty("launcherVersion").get()
1010
allprojects {
1111
group = "pl.syntaxdevteam.syntaxlauncher"
1212
version = productVersion
13+
dependencyLocking {
14+
lockAllConfigurations()
15+
// Compose selects different native modules on each host. Their versions are fixed by
16+
// the pinned Compose/Skiko distribution; keep the shared JVM graph portable.
17+
ignoredDependencies.addAll(listOf("org.jetbrains.compose.desktop:*", "org.jetbrains.skiko:*"))
18+
}
1319
}

0 commit comments

Comments
 (0)