MAN ENOUGH BROWSER EDITION - SOURCE AND REPRODUCTION Written November 2, 2026, America/New_York Original game code/data and all source disc images remain owned by their original creators. The supplied English DOS v1.10 installation is run through emulation; this is not recovered editable game source. The browser wrapper is readable directly in ../play/index.html and ../play/save-backups.js. Runtime changes are supplied as preservation-lazy-cd-source.js and audio-boost-source.js here and under ../vendor/. The first addition mounts the unchanged ISO files through bounded HTTP ranges and excludes CD files from differential save packing. The audio addition explicitly selects the official 2048-frame ScriptProcessor fallback and routes its output through the controlled GainNode, DynamicsCompressor and final WaveShaper sample ceiling. The Worklet route in the pinned UI bypassed that GainNode. The fallback is a deprecated main-thread API, so scheduling depends on main-thread load. Gain defaults to 24x with a 1x to 40x range. The 4097-point WaveShaper clamps to plus/minus 0.95 with no oversampling; the compressor remains before it for normal dynamics. QA checks actual digital gain/mute and raw/output sample levels rather than inferring sound from slider text. It does not measure speaker loudness. The selected backend is DOSBox-X from emulators 8.5.2; its original WASM bytes are unchanged. DOSBox-X preserves clean video updates where the standard backend left stale scanlines in this game. build-browser-runtime.cjs recreates the small boot ZIP and the pinned vendor runtime from the supplied installation. Run it only into a NEW EMPTY directory: node build-browser-runtime.cjs --game-dir /path/to/menough \ --output /new/stage/dos/man-enough --cache /private/build-cache \ --url-path /dos/man-enough Requires Node.js20+ and tar. The game directory must contain the eight original installation files plus cd/man1.iso and cd/man2.iso. game-inputs.json records exact expected bytes and SHA-256 values; the helper refuses different inputs. It fetches the exact js-dos 8.5.3 and emulators 8.5.2 npm packages with checksum verification. It refuses a nonempty output and never writes into the original game directory. The website wrapper, dated notes, media, source/license records and release gate are maintained separately; this helper does not publish or reconstruct them. Corresponding upstream source archives are retained alongside this document. upstream-source.json records exact npm-published git commits, archive URLs, sizes and hashes, including the DOSBox, DOSBox-X and Sokol source submodules and pinned gl4es source referenced by the emulators CMake build. Extract each archive into its own ordinary working directory, then place submodule archives at the recorded destination within the emulators source tree. The upstream Dockerfile, CMakeLists, targets and gulp scripts describe native compilation. Standard compiler/system dependencies are obtained from their official distributions; no native compiler upgrade or new WASM build was performed for this restoration. The js-dos source is at commit506dfd2a99f56bc4e393a716125ae94e58eb3fba. The emulators source is at commit6bbf0925d221a7304ea8e0dda1e89b8dc01569b2. See ../vendor/GPL-2.0.txt and NOTICE.txt. The pinned npm packages are distribution inputs, while the corresponding source archives include readable source/build files. Source maps are retained to make the distributed JavaScript inspectable. Save backups use namespace COSOM-ManEnough-DOS-EN-v1 and JSON format cosom-man-enough-dos-save version1. Only the original numeric ####.SAV files are restored. Emulator RAM, executable/configuration replacements, CD images and personal diagnostic snapshots are excluded. Actual verification and remaining limits are recorded in ../release.json and the dated development note. For a small isolated js-dos UI patch comparison without copying original discs: node build-browser-runtime.cjs --patch-player-only /pinned/pristine/js-dos.js \ --output /new/separate/js-dos.js The helper asserts exactly one pristine compressor-insertion hook and one audioWorklet:!0 hook, then selects audioWorklet:!1 and applies the controlled compressor/ceiling route. Compare the generated SHA-256 with the candidate. It refuses to overwrite the patch-only output. This option never copies discs. AI PLAY PREVIEW — November 3, 2026, America/New_York AI Play recognizes original rendered conversation choices and selected scene images, then sends ordinary mouse/keyboard input to the unchanged DOS program. The choice policy uses original conversation score operands and a stable original-slot tie break. It recognizes displayed text before choosing a number. Original program, discs, emulator WASM, audio patch and save namespace are retained. Use AI Play to start or continue, Pause AI to pause the game, and Take over for manual control. Trusted mouse/keyboard input inside the game also takes over. Hidden/unfocused windows, save operations, uncertain screens and input/recognition failures stop autonomous input. AI state is not written into original saves. This preview handles conversations and supported screens. Paintball navigation is not reliable enough for unattended play and intentionally pauses for manual control before another round. Unrecognized activities also require Take over. Resume AI after the activity. This is not a verified complete campaign player. Source: source/ai-play-source-1.2.1.zip; readable play/ai-*-1.2.0.js modules, play/player-1.2.0.js and original-data reference JSON files. The source archive includes source/license notes and reproducible read-only extraction tools. Exact acceptance and remaining limits are recorded in release.json and the November 3 development note. Resource coverage is distinct from full campaign acceptance; do not infer a verified complete playthrough from extracted choices. EXTRACTION Run tools/extract-ai-data.cjs --help and tools/extract-hotspots.cjs --help in the source archive. Inputs are the unchanged game directory, the existing media image index and indexed PNGs. Each tool verifies source identities and opens original inputs read-only. Output goes to a separate selected file. Native font/grid recognition was calibrated on actual DOSBox-X frames; background points are original image samples. Browser observation runs in a dedicated worker to limit interference with the existing audio fallback. STARTUP FIX — 1.2.1 AI waits for the original MAN program to start before screen recognition. A DOS loading screen is not treated as an uncertain gameplay scene. PHONE STARTUP FIX — 1.2.2 — November 3, 2026, America/New_York The current player uses data/man-enough-1.2.2.jsdos. Only its DOSBox autoexec CD mount line changes: IMGMOUNT status output is redirected to DOS NUL. The original installed game files, lazy-CD manifest, two disc images, emulator WASM, audio route and save namespace COSOM-ManEnough-DOS-EN-v1 are unchanged. The old boot bundle is retained for the earlier release. The original player reproduced a black screen and native unreachable trap on a physical Samsung Z Fold4 in Chrome 156. The stack reached DOS_WriteFile from IMGMOUNT::MountIso; that caller lacks Asyncify instrumentation in the pinned core. Redirecting mount status avoids a yielding BIOS console write through that frame. This is a startup configuration workaround, not a game rewrite. The clean candidate, with the normal WebGL renderer and original vendor files, played its opening cafe video on the physical phone. Touch keyboard Escape reached the title screen. AI Play and Pause AI were exercised separately. Physical phone listening, a complete touch playthrough, iOS/Safari and later campaign/save coverage are not established by those observations. On phones, Start game launches the original game. The sidebar keyboard opens touch keys. AI Play can watch supported conversations; Pause AI and Take over remain available. Desktop mouse/keyboard are recommended for manual activities. Readable current player: play/player-1.2.2.js. Current configuration: dosbox.conf. Reproducible original-bundle update: source/prepare-mobile-boot-1.2.2.ps1 (PowerShell 7). Its four explicit parameters select the original boot bundle, a new output bundle, a configuration copy and a separate verification report. It verifies the original bundle identity, copies all members, changes only the mount command, refuses to overwrite output and verifies the new ZIP members. The runtime packaging helper also includes the same mount redirection. See dev-blog/2026-11-03-phone-startup/ and release.json for scope and checks. PHONE AUDIO/PERFORMANCE — 1.2.3 — November 3, 2026, America/New_York Coarse touch devices now use a fixed 12,000-cycle guest CPU budget. The tested Samsung could fall behind real time at 25,000 cycles. Desktop launch keeps the previous 25,000-cycle configuration. The original game, discs and WASM are unchanged. On supported browsers, PCM moves directly from the emulator worker to a dedicated AudioWorklet. The new processor uses fixed-rate linear resampling from the reported source rate to the hardware rate. It does not apply adaptive tempo, pitch shifting or WSOLA time stretching. A bounded180 ms prebuffer/rebuffer target absorbs delivery jitter. The previous controlled ScriptProcessor fallback remains available when the Worklet route cannot initialize. Every route retains the controlled 24x default gain,1x–40x adjustment, mute, compressor and +/-0.95 sample ceiling. The old upstream Worklet's direct destination connection is replaced; it cannot bypass the wrapper gain. The read-only CD filesystem prefetches at most two following 1 MiB blocks with at most two asynchronous requests. Demand/prefetch data share the same32 MiB LRU. All responses require206, exact Content-Range and exact byte count. Prefetch failure falls back to ordinary demand reading. CD files remain excluded from save archives; no original media bytes are changed and no full-disc download is forced. Counters stay in the local page. Scope: physical Samsung Z Fold4 Chrome 156 and desktop Edge launch/controls were tested. Phone source-clock intervals kept real-time pace after lowering the CPU budget. Some initial CD loading and scene transitions still produced missing output intervals in the instrumented tests. The tests establish an improvement, not gap-free playback for every network, scene or phone. Final perceptual smoothness confirmation and a complete phone campaign are not established. The processor/route tests run the actual JavaScript in a Node VM: a 440 Hz input remained440Hz; a 20-second stream with repeated100 ms packet holds avoided the tested underflows; gain/mute routing and cleanup were checked. These are not speaker measurements. Older digital-signal gain/RMS/ceiling measurements belong to the earlier fallback release; the shared processing chain is retained. REBUILD First build the approved1.2.2 baseline with the retained pinned runtime helper. Then run: node source/patch-mobile-runtime-1.2.3.mjs --base-vendor --output-vendor The patcher verifies all base identities and reproduces eight changed/retained runtime files. Copy the1.2.3 NOTICE, launch HTML and play/player-1.2.3.js with it. Readable additions: mobile-audio-bridge-1.2.3.js, pcm-worklet-source-1.2.3.js and read-ahead-source-1.2.3.js in this source directory. Original corresponding-source archives/licenses remain retained. Keep the original boot bundle1.2.2 and both ISO images. Save namespace remains COSOM-ManEnough-DOS-EN-v1.