Roadmap
← POPSLoader docs ยท view on GitHub โ
Last updated: 2026-06-21 (BETA-13 in progress)
ROADMAP
This is the forward plan. For current runtime state, the canonical Known-Issues list, the Preservation Contracts, the Behavioral Invariants, and the per-case Hardware Status, see STATE.md โ those volatile/shared facts live there and are not re-enumerated here.
Status Snapshot
- Public release is still BETA-12 (shipped 2026-06-18; BETA-11 2026-06-15). BETA-13 is the in-progress rolling candidate, not yet cut. The active dev branch is
BETA-13-PLAY(created offBETA-12-PLAY@8d1e67a);BETA-12-PLAYis now archival/frozen.rolling-release.ymlwas repiped to publish fromBETA-13-PLAY(tip moves per push; seegit log). - The 2026-06 (BETA-12-era) deliverables: HDD-resident settings save + in-app HDD
.hide(boot-partition RW take-over viaEnsureBootPartitionWritable), PAL native 640ร512 full-screen render + auto-revert display-change confirm, thebdma_mode.txtmarker rename (legacy names still read), the POPSTARTER Memory Card Folder toggle + BDMAโบfolder interlock, the launch-args auto-launch consumer, and the live CI luac syntax gate. See STATE.md > Repo-Verified Runtime State for the detail. - The BETA-13 session added: gated analog-stickโd-pad fold + frame-counted nav auto-repeat + frame-counted description scroll (all hardware-confirmed), the Boot sound On/Off setting (hardware-confirmed), the layered
cover_default.png+cover_missing.pngcover placeholder (replacing the removedMISSING.png, โ62 KB ELF), the OPL-style Overscan (CRT inset) render-inset adjuster, the HDD save-after-scan fix + Proposal A scan-slot steering, a 6-finding Codex audit pass, and POPSTARTER.ELF / SMB-pack release-zip packaging. See STATE.md > Repo-Verified Runtime State. - Hardware status, preservation contracts, and known issues are tracked in STATE.md โ see STATE.md > Reported Hardware Status, > Preservation Contracts, and > Known Issues. In short: D-10/D-14/D-15, DKWDRV-from-MC, and BOOT.ELF-from-USB (L-07) remain hardware-PASS contracts; U-10 (BOOT.ELF from HDD-booted POPSLoader), DKWDRV-from-custom-HDD-path, and the Class-A HOSDmenu / some-wLE start failures are now RESOLVED (no longer known-broken); the 2026-06 HDD/PAL/BDMA features are implemented / boot on PCSX2 / HDD RW confirmed on hardware (provato) / full flow validating on hardware.
- CAUTION โ load-order regression risk. A boot brick (PLDR.HDD methods defined before
PLDR.HDDexisted) made recent HDD-feature rolling builds un-bootable; fixedd4b04be(2026-06-17). Runtime nil-global / type / load-order errors are invisible toluac -pand CI โ only the syntax gate is automated. Re-test HDD-feature builds on PCSX2/hardware before trusting a green CI.
Infrastructure landed post-release:
- .github/workflows/rolling-release.yml โ automated rolling-release artifact publication on push to BETA-13-PLAY and on PR events.
- docs/archive/DOCUMENTATION_FOLLOWUP_AUDIT.md โ handoff plan for the post-BETA-10-5 doc cleanup work (now completed; see "Documentation cleanup" under Secondary Work).
HDD (exFAT), SMB (v1), ILINK remain intentionally unimplemented menu entries.
Immediate Priorities
1) Cut BETA-13
- The BETA-13 input/UX/cover work is in and the headline items are hardware-confirmed: up/down + analog-stick nav land on individual items with smooth continuous scroll (oldman63), boot sound saves and survives reboot (oldman63), and "everything working fantastically" on the latest rolling (Nuno6573). See STATE.md > Reported Hardware Status.
- Remaining BETA-13 eyeballs before the cut (none currently believed broken โ all "awaiting a look"): the Overscan (CRT inset) render-inset on a real CRT; the
cover_default.png+cover_missing.pngoverlay registration against the jewel-case window on both NTSC and PAL; the description right-stick scroll feel; and the HDD Proposal A scan-slot steering (deliberate HW test โ see #5 below). - Cutting BETA-13 needs the tree-adopting merge to
master(the proven-s ours+read-tree+ verify-empty-diff mechanic;masterdiverges from the dev branch, so a plain merge is wrong). See the release git-mechanics captured for BETA-12.
2) os.clock() timer-unit sweep
- Root-cause fact (also recorded in DECISIONS / ARCHITECTURE / AGENTS):
Timer.getTime()returns microseconds on PS2 (it is a rawclock()tick;CLOCKS_PER_SECis 1e6 on the ee toolchain). The UI historically treated it as milliseconds, so every_mstiming ran ~1000ร too fast. Nav auto-repeat and description scroll were already moved to frame-counting (the canonical Enceladus idiom โ sibling launchers OSDMenu-Configurator and RETROLauncher frame-count too), which fixed the visible breakage. - Still on the ยตs-as-ms footing, masked (not visibly broken) by a per-frame clamp: the
MIN_ACTION_MS = 220action debounce (bin/POPSLDR/ui.lua:622, gated againstmax_stepโ 33 msdtclamps) and the transition / carousel timers. The proposed fix is a sweep toos.clock()(stock Lua, returns seconds, already pre-converted, currently unused anywhere inbin/POPSLDR/*.lua).
3) Settings UI redesign (Berion mockup) โ gated
- Blocked on Berion's mockup PNGs landing at
C:\Users\natha\Documents\assets\and being committed todocs/mockups/. Without the visual oracle, the Lua port is hard to start. - The original launch-path hardware blockers (D-10/D-14/D-15/DKWDRV-MC/BOOT.ELF, and now U-10) are settled. However, the 2026-06 HDD-resident settings save, in-app HDD
.hide, and PAL-512 features are still validating on hardware (boot on PCSX2; HDD RW confirmed on hardware by provato; full flows not yet broadly hardware-confirmed). Per the maintainer, don't kick off the redesign until those settle, so the redesign builds on a verified settings/persistence base. See STATE.md > Reported Hardware Status. - Scope: Context menu, Settings (per-category pages superseding the OPL focused-list), Joypad configuration, On-screen keyboard. Boot/splash and game list are out of scope.
- Full implementation prompt and per-screen pixel specs live in
docs/archive/GUI_OVERHAUL_PROMPT.md.
4) Layer C full lazy IRX loading
- Precursor (pre-IRX device classification hint) landed in PR #458.
mmcemandeferral โ SHIPPED (PR #471, merged; commitd10ec56). MMCE boots load mmceman eagerly (gate atsrc/main.cpp:503); USB/MC/MX4SIO/HDD boots defer it and lazy-load on demand viaPLDR.EnsureMmceReadyOnce()(bin/POPSLDR/system.lua:1206โSystem.ensureMmceman+System.reinitPad). MMCE pad-input behavior hardware-confirmed (FifthFox, commit9f2d550). The vendored mmceman blob was later dropped in favor of ps2sdk'smmceman(noiop/embed/mmceman.irxin-tree).ds34btdeferral (Bluetooth pads) โ queued. Needs a settings toggle ("Enable BT Pads", default off) or auto-detect, otherwise it breaks BT-pad-only users.usbddeferral โ queued, HIGH RISK.ds34usb(USB DS3/4 pads, the most common pad type) depends onusbd. Withoutusbd, USB pads stop working. Cannot ship without a robust opt-in or careful boot-time decision.- Expected gain per the audit in
docs/archive/LAUNCH_HYGIENE.md: 30-50% pre-Lua startup time reduction once all three deferrals land.
5) Display, HDD, and UX verification
- Overscan (CRT inset) โ new OPL-style render-inset shipped but not yet eyeballed on a CRT.
Screen.setOverscan(permille)/getOverscan()(src/luaScreen.cpp) drive agraphics.cpptransform that wraps everygsKit_prim_*draw site inOVX()/OVY()(identity at permille 0, so inert by default; math identical to OPLrmSetOverscan). The live adjuster is Settings โ "Overscan (CRT inset)" (bin/POPSLDR/ui.lua:3632, ยฑ5 step, live preview, discard restores). Confirm the inset on a real CRT. - HDD Proposal A โ the game scan now steers off the live boot pfs slot (
b159a43; the boot/settings partition lives on the boot slot, "NEVER reuse"), and the boot RW mount is re-validated on the save path so settings save after a scan (8d1e67a). Still wants a deliberate HW test (Nuno) that game partitions still mount/list when forced off the boot slot. See STATE.md and memoryreference-hdd-pfs-slot-model. U-06targets the PAL native 640ร512 full-screen render (the menu fills the screen, no letterbox; NTSC is 640ร448). On PAL hardware confirm the full-screen fill and the auto-revert display-change confirm prompt (reverts if the new mode isn't confirmed, like OPL). See STATE.md > Reported Hardware Status (U-06row).- Re-run
U-08/U-09on slower/large libraries to judge whether busy overlays communicate activity clearly enough.
6) Coverage and documentation
- Add concrete run logs for: D-13 device switching without runtime locks, S-09 keyboard layout persistence, U-11 boot-device label display.
Resolved Since BETA-10-5 (no longer blocking)
The items previously parked here as "pragmatically accepted / known-broken" are now resolved โ see STATE.md > Known Issues (Recently resolved) and > Reported Hardware Status for the canonical record:
- U-10 BOOT.ELF from HDD-booted POPSLoader โ RESOLVED via PR #479 (
reboot_iop=0). Investigation archived underdocs/archive/U10_INVESTIGATION.md. - DKWDRV from custom HDD path โ RESOLVED via PRs #486/#487 (partition-aware path + live pfs-slot scan).
- Class-A start failures (HOSDmenu / some wLaunchELF builds) โ RESOLVED (maintainer-confirmed 2026-06-15).
- HDD read-write โ achieved via the
EnsureBootPartitionWritableboot-partition remount take-over (the launcher owns its boot pfs slot and remounts it RW), not the oldps2hdd-osd.irxโps2hdd.irxIRX-swap probe. provato confirmed the HDD is RW-writable on real hardware; the old swap-probe item is dropped. HDD-resident settings save + in-app HDD.hidenow ship on this path (still validating the full flow on hardware).
Secondary Work
1) Unimplemented menu paths
HDD (exFAT),SMB (v1),ILINKโ intentionally not implemented; surface "not supported" if entered.
2) Art/asset behavior
- Keep current cover behavior stable: sidecar PNG beside the selected
.VCD, plushdd0:__common/POPS/ART/<title>.pngfor HDD titles. - The no-cover / preview-off cover box now draws the layered
cover_default.pngbase (+cover_missing.pngoverlay when a game has no cover);MISSING.pngwas removed and is no longer a fallback anywhere;default.pngstays an optional legacy cover override. The canonical detail (asset layering, the embed-mechanism's 3 coordinated edit sites, the ELF-size delta) lives in STATE.md > Cover art โ don't re-enumerate it here.
3) Install/build clarity
- Keep CI package layout and docs synchronized.
ps2dev/ps2devimage is pinned tov2.0.0in.github/workflows/compilation.ymland.github/workflows/rolling-release.yml(post-release pin at commitba8f0d0).- The embedded-Lua syntax gate (
luac5.4 -ponbin/POPSLDR/*.lua+etc/boot.lua) is now LIVE โ it used to silently skip because the ps2dev image shipped noluac; the workflows nowapk add lua5.4and hard-fail on a syntax error. It catches SYNTAX only โ runtime nil-global / type / load-order errors stay invisible to CI (see thed4b04beload-order boot brick). See STATE.md > CI / release. - Rolling release workflow publishes a single
POPSLOADER-rolling-release.zipasset to the canonicalrolling-releaseGitHub Release; both push-to-BETA-13-PLAYand PR events overwrite the same asset (last-write-wins). - Redistributable launcher in the zips.
POPSTARTER.ELF(the redistributable POPStarter homebrew launcher โ the POPS engine binaries are not redistributable and are not shipped) now ships in both zips:rolling-release.ymlputs it at the zip root next toPOPSLOADER.ELFand inPOPS/, and also ships aPOPSTARTER/pack folder (BDMA/SMB modules) +POPS/PATCH_5.BINat the rolling root;compilation.yml(the strict-verifiedPS1_POPSLOADER/install zip) shipsPOPSTARTER.ELFinPS1_POPSLOADER/(next toPOPSLOADER.ELF) andPOPS/.
4) Settings UI redesign
- 2026-05-19/20 OPL-style focused-list shipped (Settings page rewrite). Hardware verification deferred per the launch-path retest sequence.
- Berion-mockup-driven GUI overhaul is queued (see #5 below). The OPL focused list is intended to be replaced when that overhaul lands, so further iteration on the focused list is paused unless a specific bug appears.
5) Full GUI overhaul (Berion mockups)
- 2026-05-24: graphics-team mockups by Berion and the matching PNG asset set landed (
f8fec64). Full implementation prompt and per-screen pixel specs live indocs/archive/GUI_OVERHAUL_PROMPT.md. - Scope: Context menu, Settings (per-category pages superseding the OPL focused-list), Joypad configuration, On-screen keyboard. Boot/splash and game list are out of scope.
- Prereq: the launch-path hardware verification (DKWDRV-on-HDD, wLaunchELF, U-10) has now settled โ all resolved (see STATE.md > Known Issues). The remaining gate is the 2026-06 HDD-resident settings save + in-app HDD
.hide+ PAL-512 features, which are still validating on hardware; the category-page Settings model in the prompt replaces the OPL focused-list, so coordinate retest sequencing once those settle. - Mockup HTML/JSX wrapper from Berion's package is referenced by the prompt but not yet committed; either commit the mockup files or use a screenshot/hosted-mockup oracle before starting the Lua port.
6) Documentation cleanup (per docs/archive/DOCUMENTATION_FOLLOWUP_AUDIT.md) โ DONE 2026-06-17
- Completed 2026-06-17. The doc set was consolidated: the volatile status facts were merged into the canonical
STATE.md(including the formerTRUTHSHEET.md), the obsolete/superseded docs were archived underdocs/archive/, and the doc set was de-duplicated so each fact lives in exactly one place. The original three-PR plan (source-of-truth sync, agent/handoff cleanup, architecture/component/release polish) is folded into this consolidation. - Was out of scope (and stayed so): any change to runtime code or to CI/build/release workflows; this was doc-only.
Deferred Ideas
- Additional themes/skins.
- Broader network/backend support after SMB and ILINK have defined baselines.
- More ambitious artwork cache policy after current launch/runtime issues are stable.