Content
# My Boo — HTML5 port
Love2D / Love.js / TPLove Project. Current status: **Inspector accepted by the human; waiting for Poki review** (2026-10-17). MM-DOS MyBoo is waiting; the human will request review. BOO-P3-010 first-input attribution is human-accepted. The human reports the rebuilt release is good and passes Poki Inspector, including the release-cleanup/transient-transport checkpoint (BOO-P3-012). Poki review remains external/pending. BOO-P3-008 graphics diagnostics remain separate. [Detailed plan and evidence](WEB_PORT_PLAN.md), [blockers and resolutions](web_phase3/PHASE3_BLOCKERS_AND_RESOLUTIONS.md).
The game is on `lovejs-port`. The existing Windows replication documentation checkpoint is preserved; the implemented web port is checkpointed on lovejs-port and its required shared fixes are published at the exact core checkpoint below. The workspace's deferred/buildable registry is unchanged; use the direct game commands below. Shared Windows/SSH/toolchain setup remains in the tp-bootstrap README.
## Current decisions and Project Plan
- Preserve pet care, rooms, tutorial, earned economy/unlocks, all **28 minigames**, items, SQLite saves and original timing. Portrait maximum aspect remains 2.17.
- Explicit web-only exclusions: missing `ParentalControl` package and `tests/tp-busted-tests`. Authored package manifest, .gitmodules and their original gitlinks remain intact. Generated manifests remove only ParentalControl. There is no substitute package or fake success. Access requests to Tapps remain useful for native/test completeness; they no longer block this approved web scope.
- The first SDK-free None build also disables IAP/ad purchases. Normal earned purchases and owned items remain. Automatic IAP/reward-promotion entry points are suppressed; the shared unavailable-ad adapter never grants rewards. Native runs retain the normal policy.
- Exact selected dependencies are in `web_phase3/dependency-baseline.json`: published framework `62ebdddb`, Spine `393cbecc`, shared core `695a79f5f`, standalone TPLua `1d83bf4`, plus reviewed package fixes. Builders verify the exact source revisions and tracked cleanliness. No sibling game source is a build input.
- Next: human request Poki review; MM-DOS remains waiting. The rebuilt Poki candidate is human-reported good and Inspector-approved. CrazyGames Basic remains a separate SDK-free candidate requiring its own portal validation.
BOO-P3-004 source handoff: shared TPAds now exports the original "closedInterstitial" legacy event name while preserving an existing global. It does not emit ad events or grant rewards. Focused actual-source tests reproduce the old failure and pass room creation/entry with engine doubles; web policy, diagnostic contracts and exact source guards also pass. Rebuild with the existing NativeDiagnostics command below, then verify box reveal, room/tab/lamp response and no new callback errors. No playable rebuild or gameplay test was performed by the agent.
My Boo now enables shared branded loading with its canonical Boo artwork, localized byte-download/preparation feedback and preserved readiness handoff. The ZIP has seven explicit runtime files including loading-art.png. Its original playable tutorial remains unchanged. The accepted-input gate requires a real completed primary canvas click/tap plus a successful pet/box/navigation action; loader clicks and automatic room entry cannot start reporting. ?pokiDebug=1 enables bounded input/lifecycle traces. The exact current core pin is 695a79f5f6f1b07f37cff75a3af2bd5c96dce672 with 31 prior reviewed hashes retained as audit history; concurrent shared tutorial/graphics edits are documented in blocker notes. Human acceptance of the rebuilt release and Inspector is recorded; no independent claim about elimination of every BOO-P3-008 log message is made.
BOO-P3-011 resolved: My Boo now pins shared core 56d0ecb50d19a280c89cf8a0c2624f3918fbcb14 with the same 26 exact reviewed source hashes. Production source guards, lifecycle/readiness regressions and P4 toolchain preflight pass (4,711 Lua files). No shared checkout or My Pet Shop changes. Human rebuild/Inspector acceptance remains pending.
## Release diagnostics and transient lifecycle transport
P4 sets BuildInfo.debug=false. GameMain disables only LÖVE deprecation output for web release builds; native and development builds keep their diagnostic behavior. Shared Physics uses World:getBodies() in update, debug draw and shutdown rather than the deprecated getBodyList alias. No console.error or general stderr filter is installed. Steam/TestLab capability notices, resize warnings and actual graphics errors are investigated separately and remain visible; the stored last_run.log is older evidence, not validation of this candidate.
shell-config.ps1 enables QuietRoutineDiagnostics for all web shells. The shared loader replaces Emscripten dependency-filename lists with count summaries and prints the known scheduler advisory without a large error stack. Runtime, graphics, audio, startup, persistence and unknown stderr messages retain their original error path. Use ?loaderDebug=1 to restore full dependency dumps/advisory output; ?pokiDebug=1 enables bounded SDK/input/lifecycle traces. Combine as ?loaderDebug=1&pokiDebug=1. Full-data -NativeDiagnostics builds retain native troubleshooting; P4 still preserves assertions, safety checks and the 1 MiB stack.
Poki RequestRoot=/tmp matches the shared adapter's new(requestFile, '/tmp'). Both my_boo_poki_lifecycle_request.txt and its .input token now live outside IDBFS's /home/web_user mount. Payloads, blockers, accepted click/tap gate and dedup are unchanged. Existing saves and old saved queue files are left intact; the new consumer never scans or deletes them. No save reset or migration is required. CrazyGames Basic stays SDK-free. Published core 695a79f5f6f1b07f37cff75a3af2bd5c96dce672 contains the reviewed fixes. Production now requires that exact revision and no tracked local edits; the temporary dirty-source exception is retired. The 31 prior hashes remain as reviewedCoreSourceHashes audit data, avoiding checkout-line-ending dependence for clean published sources. Cache/output and native safety guards remain enabled.
Focused no-build checks: tests/release_diagnostics_contracts.py, tests/quiet_console_contracts.js, tests/portal_lifecycle_contracts.py, tests/release_readiness_contracts.py, tests/test-diagnostic-source.ps1 and web_phase3/test-shell.ps1 for both portals. Rebuild with the P4 command below and a fresh ZIP name; check the strip is absent, dependency output is summarized, first-action/start/stop/pause events still pass Inspector, and customization/progression survives reload. Test loaderDebug detail separately. Genuine errors must stay visible; record a new console log if any persist.
## P4 / MinSizeRel — HUMAN Poki upload candidate
```powershell
# From C:\Projects\tapps\my-virtual-pet-3; do not add -NativeDiagnostics
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -PokiRelease -EnableNativeWasm -ReleaseZip web_phase3/my-boo-poki-p4-review-clean001.zip
```
This uses a separate MinSizeRel cache and outputs web_phase3/out-my-boo-poki-p4boot. Assertions, overflow checks, 1 MiB stack and no-IAP/no-ads remain enabled. Only structural duplicates/editor-only/resolution variants are removed; all base content is retained. Existing ZIPs are protected: use a new filename for a later checkpoint.
Serve that output as below for local verification, then use the new root ZIP for your Poki hosted/Inspector tests. Record actual ZIP/transfer/loading size before calling it upload-size accepted. Verify new manifest structuralProfile=true, nativeBuildType=MinSizeRel, nativeDiagnostics=false, nativeSafetyChecks=true, nativeStack.stackBytes=1048576. P4 quiets verbose tracing and the known informational scheduler advisory; genuine GL/Lua/native errors remain visible. The existing full-data diagnostics candidate remains available for investigation. For CrazyGames Basic P4 use explicit -Portal CrazyGames -P4BootDataProfile instead of -PokiRelease.
No-playable-build checks: test-p4.ps1, test-shell.ps1 -Portal Poki -P4BootDataProfile, and build_phase3.ps1 -PokiRelease -CheckToolchainOnly. Real profile/package and hosted acceptance remain human-owned.
P4 retention exception (2026-10-17): read-only inventory of the current full-data input found 3,991 resolution-variant files and one orphan metadata file, src/assets/Events/Easter2016-sheet-ipad.lua. Preserve that exact authored file through Get-BooRetainedVariants / the shared RetainedResolutionVariants parameter; it is included in required files and retained byte-for-byte. Do not invent a base file or silently prune it. Other orphan variants still fail before writes, and default sibling behavior is unchanged. The canonical profiler change is included in My Boo's fourteen exact owner-source hashes. Fixtures cover this explicit retention and rejection of an unlisted orphan.
## Portal candidates — HUMAN build/run
Use the existing diagnostic source exception; these commands retain NativeDiagnostics and the 1 MiB stack. No-IAP/no-ads applies to all targets. The shared native diagnostic cache may be reused between these game targets; their Lua configuration and outputs are separate.
```powershell
# From C:\Projects\tapps\my-virtual-pet-3
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -Portal Poki -EnableNativeWasm -NativeDiagnostics -ReleaseZip web_phase3/my-boo-poki-validation.zip
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -Portal CrazyGames -EnableNativeWasm -NativeDiagnostics -ReleaseZip web_phase3/my-boo-crazygames-basic-validation.zip
```
Outputs are web_phase3/out-my-boo-poki and web_phase3/out-my-boo-crazygames. ZIPs must have new filenames; existing named archives are protected. To run either locally, change into that output directory and run the copied serve_with_headers.py with the pinned workspace Python as below, then open http://127.0.0.1:8089. Stop the old server first. Same-origin local targets intentionally share existing progression; use separate browser profiles if you need independent saves. Keep per-target build_manifest.json and console logs. No hosted upload was performed.
Poki uses the canonical SDK shell and requires a fresh completed primary canvas click/tap accepted by Boo, the tutorial box or navigation after loader handoff before gameplayStart; `?pokiDebug=1` exposes shared lifecycle tracing. Verify loading-finished once, pet/tutorial/outdoor/minigame play, pause/results/customization/popup stop, nested blockers, tab hide/show, actual timer/physics/audio pause and save/reload. Follow with hosted Poki Inspector testing. CrazyGames Basic is SDK-free: confirm the intended/current submission tier before upload; it is not CrazyGames SDK integration. All 28 mode paths are mapped, but this is not human gameplay acceptance of every mode.
Focused checks without a playable build:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\test-shell.ps1 -Portal Poki
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\test-shell.ps1 -Portal CrazyGames
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\test-shell.ps1 -Portal None
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -Portal Poki -NativeDiagnostics -CheckToolchainOnly
```
Full-data diagnostics are qualification candidates; decoded/source/ZIP sizes do not prove portal download-size acceptance. Structural P4/MinSizeRel remains separate. Shared owner fixes are published at the exact core revision above; sibling consumer pins remain unchanged.
## Current diagnostic handoff — BOO-P3-002
Shared `tplove-core` fixes are published at `695a79f5f6f1b07f37cff75a3af2bd5c96dce672`. Production verifies the exact commit and rejects tracked local edits; the legacy source-override branch remains tested only in a disposable fixture. Diagnostics, safety assertions, 1 MiB stack and separate cache/output protections remain available. Old failure logs/manifests are historical evidence; do not overwrite them to imply newer validation.
From the game root, the current HUMAN build/run commands are:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -NativeDiagnostics -CheckToolchainOnly
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -EnableNativeWasm -NativeDiagnostics -NativeBuildDir web_phase3/native-wasm-build-diagnostics -OutputDir web_phase3/out-my-boo-diagnostics
Set-Location .\web_phase3\out-my-boo-diagnostics
C:\Projects\tapps\webtools\emsdk\python\3.13.3_64bit\python.exe .\serve_with_headers.py
```
Diagnostic defaults select those separate cache/output paths; explicitly selecting the original full-data cache/output is rejected. Use port 8089 as before. Save the full browser console to a **new** diagnostic log filename, retaining the original `last_run.log`, original output and its manifest. Look for `[TPLOVE][GL-DIAG][lookup]`, `[init]`, `[upload]` and `[filter]`, the active resolved image path, initial/current procedure values, and the final original exception or diagnostic null-procedure message. The first 256 upload pairs and 128 filter calls are logged, plus at most four later anomalous filter records; active path tracking continues after normal logging stops. Generated/raw textures may be labeled as such or have no file path. A diagnostic run is evidence gathering, not a fix or successful gameplay acceptance.
## Standard build and run
From `C:\Projects\tapps\my-virtual-pet-3`, using the sibling `tplove-core`, `tplua` and workspace `webtools`:
```powershell
# Source/toolchain checks; no compilation or playable package.
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -CheckToolchainOnly
# Disposable full-data input and qualification; no playable compilation.
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -PackageInputOnly
# SDK-free shell fixture; temporary HTML only, using installed pinned CLI dependencies.
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\test-shell.ps1
# HUMAN: compile the native runtime and package the full-data game.
powershell -NoProfile -ExecutionPolicy Bypass -File .\web_phase3\build_phase3.ps1 -EnableNativeWasm
# HUMAN: serve that output, then open http://127.0.0.1:8089
Set-Location .\web_phase3\out-my-boo-emu
C:\Projects\tapps\webtools\emsdk\python\3.13.3_64bit\python.exe .\serve_with_headers.py
```
The execution-policy flag affects that process only. Default native build type is RelWithDebInfo, with a dedicated `web_phase3/native-wasm-build` cache. For a diagnostic human build use `-EnableNativeWasm -NativeDiagnostics -NativeBuildDir web_phase3/native-wasm-build-diagnostics -OutputDir web_phase3/out-my-boo-diagnostics`. Do not reuse another game's cache/output. Packaging installs the pinned Love.js CLI 11.4.1 locally if needed; no engine/dependency upgrade is requested.
Assembly uses ignored `web_phase3/input`, preserves all base content and package mirrors, and checks both generated manifests. The actual generated JS/data loader is verified only after the human playable packaging stage. Output `build_manifest.json` records source baseline, startup hashes, build flags and six runtime artifact hashes/decoded bytes. A source/package check is not a browser run.
## Cheat Sheet / human acceptance
- First startup: keep the console log; expect `[MY_BOO][READY]` after original startup/tutorial setup, a visible pet/tutorial, working controls and BGM/SFX after trusted input. Report the first error/stack rather than only the loading screen.
- Follow the original tutorial; feed/clean/sleep/play, visit rooms/external area, customize and purchase with earned currency, use photo/caption/back, then save/reload and restart the browser. Check all 28 modes through start, controls, results/reward, exit/re-entry and unlock persistence. No shipped free unlocks were introduced.
- Check mouse/touch, resizing/portrait/landscape browser frames, text/countdowns, Spine/physics/particles, popup/menu/tab overlap and audio resume. R1 reuses existing game/core suspension; fine-grained portal gameplay mapping is later work. Native social/gallery/push callbacks and external connectivity remain browser qualification surfaces.
- Keep this game on **http://127.0.0.1:8089**. Origin changes create a different storage scope. Generated AppConfig uses authored default bundle `com.tapps.virtual.pet.free.myboo`; shared core establishes `TappsGames/com.tapps.virtual.pet.free.myboo` before user-data IO. Do not rename this identity to the legacy TPConfig bundle.
- **Fresh player:** close game tabs, clear all site data for that exact origin (IndexedDB/IDBFS and local storage), then reload. This destroys that origin's progression; clearing HTTP cache alone does not reset saves. Use a retained-save run as well as a separate fresh-player run.
- No-IAP/no-ad build: paid currency storefront/subscription entry and automatic ad/IAP offers must not transact or grant rewards. Earned purchases, existing ownership and normal rewards should remain intact.
## Verification recorded
Source/toolchain preflight and full-data package-input qualification passed. Actual Lua 5.5 parsed 4,709 canonical/shared and 4,734 assembled Lua files. Resource gate checked 483 configured audio references, eight Lua bitmap fonts/images, both SQLite templates (read-only quick_check), and all 28 minigame metadata/entry modules. Focused actual-source tests passed for countdown formatting, canonical manager enumeration, native policy bypass, IAP/ad refusal with earned delegation, and unsuccessful legacy rewarded callbacks. Selected framework globals/scheduler/timer/transition/startup rejection tests passed. PowerShell syntax and Git whitespace checks passed.
The original Busted suite cannot run without tp-busted-tests. No native configure/compilation, playable packaging, server/browser/editor, ZIP, upload or gameplay test was performed by the agent. Recommend reviewing and checkpointing this R0/R1 slice on lovejs-port before your build; no commit/push was made in this task.
## Historical branch-retention notes
# Documento de Update
* Branchs que não devem ser apagadas, pois ainda não foram mergeadas na dev, por falta de testes.
* portMinigameBooMix.BOO-3009
* portMinigameSlice
* refactorBasketBoo.BOO-3007
* refactorBooHop.BOO-158
* Não apagar também a branch "feature/amazon-free-time.BOO-4242" pois ela tem a versão do BOO sem social, IAP, lojas, bundles, e AD. Ela pode vir a ser util no futuro, caso a Amazon deseje mais alguma parceria.