4.0 KiB
4.0 KiB
Task: Build HTTP2-disabled diagnostic package
Identity
- Task ID: 20260819-disable-http2-package-b84c7e
- Mode: Feature
- Branch: codex/20260819-disable-http2-package-b84c7e-disable-http2-package
- Worktree: D:\mk-disable-http2-b84c7e
- Base commit:
9ff79e9681 - Owner: codex-root
- Status: Completed
Scope
- Build a Windows x64 diagnostic installer from local
mainbase9ff79e9with Chromium HTTP/2 disabled globally so the user can A/B the observed request fan-out stall against HTTP/1.1. - Keep the source change limited to Electron Main startup and a focused ordering regression test; do not change Quote, authentication, retry, timeout, Renderer, or server behavior.
Intent And Constraints
- Apply Chromium's
disable-http2command-line switch beforeapp.whenReady(), window creation, or network initialization. - Treat the installer as diagnostic evidence, not a permanent protocol policy or a fix for the independent unbounded shared authentication flights.
- Build with the exact pnpm version pinned by
packageManager; do not commit generated packages, downloaded runtimes, caches, or secrets. - Keep all work in
D:\mk-disable-http2-b84c7e; the main worktree remains owned by a superseded packaging record and is not modified. - The user previously prohibited sub-agents; implementation and validation are performed directly without delegated or reviewer agents.
Outcome
- Added
app.commandLine.appendSwitch('disable-http2')at Electron Main bootstrap, before the single-instance lock andapp.whenReady(). - Added a focused regression test that guards the switch and its startup ordering.
- Built the Windows x64 diagnostic installer
release/Makelore-2.0.0-win-x64.exewithout installing it or interrupting the user's running client. - The package reuses the installed client's repository-validated, versioned Learning Player (
htmlSha256748d6d7c74d9d0ba444e0c051a50010f7070e7d6e46442b1e60f1e2be80fd020) so the transport switch remains the intended A/B variable.
Verification
- Red test:
pnpm exec vitest run tests/unit/http2-diagnostic-bootstrap.test.ts --reporter=verbosefailed before implementation because the switch was absent. - Green test: the same focused Vitest command passed after implementation (1 test).
pnpm run typecheckpassed.pnpm exec eslint electron/main/index.ts tests/unit/http2-diagnostic-bootstrap.test.tspassed.pnpm run build:vitepassed; only pre-existing Vite chunk/dynamic-import warnings were emitted.- Packaged Main inspection found
disable-http2indist-electron/main/index-Cn0aQm66.jsat byte offset 500965, beforerequestSingleInstanceLockat 501868 andwhenReadyat 511598. pnpm run verify:publish-runtimepassed (npm 11.6.2).pnpm run verify:artifact:win -- --allow-dirty --installer .\\release\\Makelore-2.0.0-win-x64.exepassed for Electron 43.4.0, Node 24.18.1, OpenCode 1.18.9, Python, uv 0.10.0, npm 11.6.2, native modules, and Unicode-copy proof.- Packaged
package.jsonreports version2.0.0; installer FileVersion and ProductVersion are both2.0.0. - Installer size: 302,025,645 bytes; SHA-256:
1C4E4E67F29A58E81705CA258E171200576BE41B313B4CD794D49CD296B479EE. - Authenticode status is
NotSigned, consistent with the local unsigned packaging configuration. git diff --checkpassed.
Follow-ups
- The user should exit the currently running Makelore instance, install the diagnostic package, reproduce the same Quote PATCH flow, and compare whether global pending requests and
net::ERR_HTTP2_PROTOCOL_ERRORdisappear. - If the stall remains under forced HTTP/1.1, resume diagnosis at the shared authentication/request single-flight path rather than treating HTTP/2 as the root cause.
- If the stall disappears, capture server/proxy and Chromium NetLog evidence before deciding whether to keep a protocol workaround or repair the HTTP/2 path.
Promotion Candidates
- Keep the startup switch temporary until the A/B result is known; do not promote it as a permanent release policy without evidence.