adds docs/m2pack-integration.md covering the signature boundary, runtime key env-var delivery, telemetry opt-in, backward compatibility and expected on-disk layout. README gains a short "Release formats" section pointing at the new doc, and CHANGELOG tracks the [Unreleased] entries. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Changelog
All notable changes to metin-launcher are tracked here. Format loosely
follows Keep a Changelog; dates are Europe/Prague.
[Unreleased]
Added
- Release format dispatch. The manifest now carries an optional top-level
formatfield (defaults tolegacy-json-blob) and the orchestrator resolves anIReleaseFormatstrategy viaReleaseFormatFactory. M2PackFormat: new release format that lists.m2ppack archives plus aruntime-key.jsonsidecar. The launcher never opens or decrypts.m2parchives; it only places them next to the client root and loads the runtime key after apply.RuntimeKeymodel +IRuntimeKeyDeliverystrategy.EnvVarKeyDeliveryis the MVP implementation and forwardsM2PACK_MASTER_KEY_HEX,M2PACK_SIGN_PUBKEY_HEXandM2PACK_KEY_IDto the child process scoped toProcessStartInfo.Environmentonly.SharedMemoryKeyDeliveryis documented as a stub and throws until the Windows receiver lands.GameProcess.BuildStartInfonow accepts an optionalRuntimeKey?and forwards it through the env-var delivery.ClientAppliedReporter: opt-in best-effort telemetry ping that fires once after a successful apply with a 5-second cap. Disabled by default (LauncherConfig.TelemetryUrlTemplate == ""). Failures are always swallowed and logged as warnings.docs/m2pack-integration.mddocumenting the signature boundary, runtime key delivery, telemetry, backward compatibility and file layout.- ~60 new tests across
RuntimeKeyTests,EnvVarDeliveryTests,LegacyJsonBlobFormatTests,M2PackFormatTests,ReleaseFormatFactoryTests,ClientAppliedReporterTests,UpdateOrchestratorFormatDispatchTestsand extendedGameProcessTests. Total suite is ~92 tests.
Changed
UpdateOrchestratordispatches throughReleaseFormatFactoryafter signature verification. The legacy flow is preserved byte-for-byte for manifests without aformatfield; the only visible difference is that the complete log line now readsformat=legacy-json-blob.UpdateOrchestrator.ResultgainedFormatandRuntimeKeyslots so the headless entry point can forward the runtime key intoGameProcess.Launch.
Security
- A signed manifest carrying an unknown
formatvalue is refused outright rather than silently falling back to legacy, preventing a downgrade attack vector in the event of a signing key compromise. - Env vars produced by
EnvVarKeyDeliveryare scoped to the spawned child's environment only. The launcher never mutates its own process environment, so other processes on the machine and later code in the launcher itself cannot read the key.