This is the dedicated record of roadmap rows that have fully closed. It was
split out of ROADMAP.md on 2026-05-28 so the active
roadmap holds only open work. Full per-release prose lives in
CHANGELOG.md; this file is the checklist-level audit
trail. Long-form historical context is under
archive/.
- P1 AppManagerNG shipped docs and privacy rebaseline — packaged
manual identity, official distribution/source links, translation guidance,
donation copy, and contact surfaces now point at AppManagerNG/SysAdminDoc
instead of upstream App Manager.
BUILDING.rst,PRIVACY_POLICY.rst,README.md,CONTRIBUTING.md,PROJECT_CONTEXT.md, and default English UI copy now describe the fork's current package identity, release channel,floss/fullsplit, optional network features, VirusTotal/Pithus/debloat behavior, and support links. Verification::docs:buildDocs :app:processFlossDebugResources :app:compileFlossDebugJavaWithJavac. Full JVM suite remains blocked by an Android Studio JBR/Robolectric VM crash observed during this pass; focused touched-area test result XML recorded 23 tests, 0 failures, 0 errors.
- P1 oversized installer icon clamp — installer parse-success dialogs
now route APK icons through
InstallerIconSanitizerbefore handing them toDialogTitleBuilder, preserving bounded bitmap/non-bitmap icons, scaling oversized bitmap and drawable sources to a 96 dp edge budget, and falling back to the platform default activity icon when icon rendering fails. Focused verification in this checkout::app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.apk.installer.InstallerIconSanitizerTest, which also executed:app:compileFullDebugJavaWithJavac. Manual install-dialog walkthrough with a pathological APK icon remains device-gated.
- P2 App Info action rail priority controls — App Info horizontal
actions now use stable IDs and resolve through a default priority model that
keeps Launch, Freeze/Unfreeze, and Force-stop ahead of rare or destructive
actions while pruning unsupported actions. The overflow menu adds "Customize
action rail" so users can pin available actions to the front or reset to
defaults, and action buttons now expose explicit content descriptions.
Focused verification:
:app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.details.info.AppInfoActionOrderResolverTest. Manual phone-width checks with force-stop, frozen, archived, and data-only packages remain device-gated. - P1 Debloater Put back install-existing restore — Debloater selection
mode now exposes Put back for selected removed debloat/system rows, shows a
restore confirmation with already-installed selections reported as skips, and
starts a new
OP_INSTALL_EXISTINGbatch op for the restorable package/user targets. The batch worker invokesPackageInstallerCompat.installExisting()through the existing privileged installer path, records low-risk operation-history metadata, and surfaces restored/failed result notifications. Focused verification::app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.debloat.DebloaterPutBackPlanTest --tests io.github.muntashirakon.AppManager.batchops.BatchOpsInstallExistingTextTest. Manual remove-for-user -> put-back round trip remains device-gated. - P1 in-app Wireless ADB pairing-code fallback — Wireless ADB pairing
now keeps the foreground service as the single mDNS scan/pairing owner while
publishing a shared pairing state for in-app UI. The Manual path opens an
in-app code dialog that shows the discovered pairing port, validates a
six-digit code, submits it through the same service action as notification
RemoteInput, and keeps retry/cancel semantics connected to the existingOps.pairAdb()waiter. Pairing notifications also expose an "Enter in app" action for devices where inline notification replies are unavailable. Focused verification::app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.adb.AdbPairingRequestTest. Manual normal-device and Quest/multi-window Wireless ADB walkthroughs remain device-gated. - P2 Terminal active privilege-provider routing — Terminal startup now
resolves and labels the current shell route as local, root, Shizuku, or ADB,
attempts to bind the active LocalServices-backed provider before falling back,
and keeps the local
sh -iprocess as an explicit fallback instead of a silent substitute. Startup failures, route fallbacks, process exits, and dead-process writes are surfaced in the Terminal UI. Focused verification::app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.terminal.TerminalRouteTest. Manual local, root/Shizuku, and wireless-ADB command walkthroughs remain device-gated. - P2 Mode of Operation lifecycle-safe apply and rollback — Settings ->
Mode of Operation now runs a single guarded apply transaction: the selected
mode is initialized as a candidate without first writing the stored
preference, Apply is ignored while a switch is in flight, terminal success
commits the candidate, terminal failure restores the previous mode with a
visible rollback toast, and fragment destruction clears the pending
transaction so late callbacks cannot commit a dismissed flow. The root-backed
Shizuku "Switch to ADB mode" shortcut uses the same guarded path. Focused
verification:
:app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.settings.ModeOfOpsApplyStateTest. Manual ADB and Shizuku mode-switch walkthroughs remain device-gated. - P1 DexOpt root-only execution sanitization — DexOpt batch execution
now clones and sanitizes serialized
DexOptOptionsbefore expanding the package loop, preserving root/system behavior while stripping stale profile-reset and immediate force-dexopt requests for non-root/ADB/Shizuku runs. The worker records a single skipped-root-only-options reason instead of surfacing raw per-package PackageManagerSecurityExceptionfailures, and the dialog uses the same root/system helper for checkbox gating. Focused verification::app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.apk.dexopt.DexOptOptionsTest. Manual ADB DexOpt replay with a stale serialized profile-reset option remains device-gated. - P3 File Manager Open with defaults and keyboard focus — File Manager
now stores Open with handlers per extension or per file, routes file-row taps
through a saved handler when available, labels the context action as "Change
open with" when a default exists, exposes the previously hidden Always open /
Only for this file controls, and adds a Clear default dialog action while
keeping the OS chooser icon as a fallback. The search control now starts
iconified and cleared so the picker does not request keyboard focus on open.
Focused verification:
:app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.fm.FmOpenWithDefaultsTest. Manual Android open/repeat/reset and soft-keyboard walkthrough remains device-gated. - P2 installer notification final-state wording — installer completion
now applies the same concrete final title/body to the foreground progress
notification and the completion alert instead of mutating the last progress
body to a generic "Done". Success and failure subjects still come from the
existing installer status formatter, and failure details remain available
through the expanded BigText body when present. Focused verification:
:app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.apk.installer.PackageInstallerServiceTest. Manual background install success/failure notification walkthrough remains device-gated. - P2 optional extended metadata for app-list exports — App-list export
now keeps the legacy CSV/JSON/XML/Markdown shapes by default while an explicit
"Extended" choice adds user id, system/disabled/hidden/suspended/stopped
state, requested/granted permission counts, split count, installer, and
source/public source paths where the format supports them. The export dialog
offers Basic vs Extended after the format choice, and importer compatibility is
preserved because the richer JSON fields remain optional. Focused
verification:
:app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.apk.list.ListExporterTest. - P2 generic manifest
<meta-data>explorer — App Info now surfaces a "Manifest metadata" tag when the target APK declares arbitrary application, activity, service, receiver, or provider<meta-data>rows. The dialog groups rows by declaring owner, formats string/boolean/integer/resource values safely, and copies a tab-separated owner/name/value/type export. The binary manifest parser now preserves typed metadata rows, including resource-backed references. Focused verification::app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.apk.parser.ManifestParserTest --tests io.github.muntashirakon.AppManager.details.info.ManifestMetadataInfoTest. - P1 Backup Extras restore coverage audit — the Backup/Restore Extras
row now expands into a compact current-mode coverage summary for runtime
permissions, app-ops, data/battery policy, MagiskHide/DenyList,
notification-listener grants, URI grants, SSAID, and freeze method. Restore
now records bounded per-extra skip/failure warnings into batch results and
Operation History export/detail metadata instead of silently no-oping
unsupported Extras subtypes. Focused verification:
:app:compileFullDebugJavaWithJavac :app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.backup.BackupExtrasCoverageTest --tests io.github.muntashirakon.AppManager.history.ops.OperationJournalMetadataTest. - P2 Privacy & Security API surfaces — App Info now exposes SDK Runtime
manifest declarations, Domain Verification and same-user deep-link conflicts,
archived-package state plus Archive/Unarchive requests, MTE/memory-tagging
posture, Health Connect manifest permission posture, Credential Manager
provider declarations, and Restricted Settings diagnostics through
target-scoped sources. Focused evidence remains
SdkSandboxInfoTest,DomainLinkConflictDetectorTest,DomainLinksOptionTest,AppArchiveManagerTest,FreezeOptionTest,MemoryTaggingInfoTest,HealthConnectInfoTest,CredentialProviderManifestInfoTest, andRestrictedSettingsDiagnosticsTest. API-35 archiving walkthroughs and non-caller-scoped live-state source proof are tracked in the gated roadmap buckets. - P2 In-app Tasker plugin + Quick Settings tile suite + DocumentsProvider
—
AutomationUriActivity, signature-gatedAutomationReceiver, the Locale-compatibleTaskerPluginEditActivity/TaskerPluginFireReceiver,QuickFreezeTileService,ForceStopTileService, andAppManagerDocumentsProviderare registered and host-covered. The plug-in signs and verifiesam://automation bundles, the QS suite supports Android 13+ one-tap add flows for freeze-profile and pinned force-stop actions, and the read-only SAF provider exposes backup/profile roots with traversal guards. Focused evidence remainsAppManagerDocumentsProviderTest,AutomationRequestTest,AutomationIntentsTest,TaskerPluginBrokerTest,QuickFreezeTileControllerTest,QuickFreezeTileServiceTest,ForceStopTileControllerTest, andForceStopTileServiceTest; runtime Tasker/QS/SAF walkthroughs are tracked in the device bucket. - P2 Macrobenchmark module + Baseline Profile + UIAutomator smoke pack
— the benchmark module now covers cold startup, main-list scroll frame timing,
and Backup settings time-to-interactive through shared UIAutomator journeys.
Baseline Profile generation records startup, list-scroll, and Backup settings
paths; the androidTest smoke pack now verifies main launch, batch-selection
surface entry for freeze/backup/component actions, and One-Click Ops
rule/backup surface launch. Focused verification:
:benchmark:compileDebugJavaWithJavac :app:compileFullDebugAndroidTestJavaWithJavac. Online macrobenchmark/profile generation and API 26/30/34/35 smoke execution remain device-gated. - P3 MMRL + LSPosed module browser — Settings -> Privileges now exposes
a hidden-until-root Modules row that reads Magisk/MMRL
/data/adb/modules/*/module.propand LSPosed/data/adb/lspd/**/module.propmetadata without mutating module state. The dialog lists module name, version, source, status markers, author, description, and path with a copy action, while non-root states keep the row hidden. Focused verification::app:testFullDebugUnitTest --tests io.github.muntashirakon.AppManager.runner.RootModuleInfoTest :app:compileFullDebugJavaWithJavac. A rooted-device module walkthrough remains device-gated.
- T19-C configured backup-root duplicate APK scanning — One-Click Ops
duplicate-APK scans now include the configured AppManager backup directory
when it resolves to a local filesystem root, while
ApkDuplicateScanRootsdeduplicates overlapping roots and canonical file hits. - T19-C File Manager selected duplicate APK cleanup — File Manager
multi-select now offers "Find duplicate APK files" for at least two readable
local APK-like files, scans only that selection, reviews redundant copies with
the existing duplicate labels, authenticates deletion, and deletes through the
shared
ApkDuplicateOperations/Pathscleanup path. - T19-C base-APK extraction for APK bundles — One-Click Ops
duplicate-APK scanning now extracts a temporary base APK from
.apks/.apkm/.xapkbundles for package/version/signing-certificate metadata, while retaining the original bundle path and size for deletion/reclaim decisions. - T19-B App Details uninstalled-package convenience entry — App
Details now opens data-only
MATCH_UNINSTALLED_PACKAGESrecords without resolving a missing APK, and App Info exposes a guarded Clear data action to complete leftover-data cleanup from the details screen. - T19-B dedicated
op_historycleanup audit type — leftover-folder deletion now records one high-risk, non-replayable Cleanup history row with selected/deleted counts, reclaimed bytes, and target previews; Operation History includes a Cleanup filter chip. - T19-B result-list export action — One-Click Ops leftover-folder
review now has an "Export results" action that shares selected rows as TSV
(package, kind, size bytes, path), backed by
LeftoverExportFormattertests for stable columns and formula-like field defusing. - EI-07 Scheduled-backup "Why did this skip?" — terminal scheduled-backup results persist a bounded last-run skipped-package detail payload (package, user, reason, newest existing-backup time), and Settings -> Backup/Restore -> "Schedule status" now opens a diagnostics surface with the concrete package-level skip reasons instead of only the aggregate recent-skip count.
- NF-20 Running Apps background-run rule persistence —
RunningAppsViewModel.preventBackgroundRun()saves its AppOps change to the rule store (OP_RUN_IN_BACKGROUND, plusOP_RUN_ANY_IN_BACKGROUNDon Android P+) so the action survives reboot / rule re-apply. - NF-21 One-Click Ops multi-volume cache trim —
trimCaches()now iterates every known storage volume UUID; per-volume failures are surfaced without aborting the batch; UUID selection pinned by tests.
- NF-19 Activity Interceptor result bridge — structured result handoff preserves root/Shizuku/ADB routing context.
- NF-22 Activity launch builder — App Details activity launch supports extras, flags, and intent actions before dispatch.
- NF-23 Logcat structured export polish — JSON/CSV export plus visible
match/count affordances for filtered logs in
LogViewerActivity.
- NF-24 Scanner organization summary — per-organization summary rows + category filter chips on the scanner/library view.
- NF-25 File Manager bulk rename — selected-files rename flow with preview, conflict detection, rollback-friendly results.
- EI-11 Code Editor search close button — close affordance added without losing the current query state.
- EI-12 Code Editor line separator rewrite — TODO-backed regex replaced with a safe line-separator conversion routine.
- EI-13 Main list select all matching active chip — selects the current filtered/chip-matched set without selecting hidden rows.
- EI-15 SharedPrefs atomic writes — SharedPrefs edits moved to the atomic-file pattern so failed writes do not corrupt XML.
- NF-28 Receivers send broadcast — guarded send-broadcast action with user/profile routing preserved.
- NF-29 Services start/stop — guarded service start/stop with clear privilege and Android-version failure messages.
- NF-27 Providers query inspector — provider query UI with safe projection/selection inputs and exportable results.
- NF-26 File Manager hex/binary viewer — read-only binary viewer for non-text files.
- EI-14 BarChart manual minimum value — explicit minimum axis value without breaking auto-scaling.
- EI-16 Dex viewer API caveat — API <26 behavior caveat surfaced in the Dex viewer.
- NF-09 Routine scheduler executor —
RoutineWorker, boot receiver, Settings UI, last-run diagnostics, disable-on-failure on top ofProfileTriggerStore. WorkManager state/attempt/stop-quota/next-run/API-36 pending-reason diagnostics exposed for scheduled auto-backup and routine schedules. - NF-10 Premium Polish Phase 2 — restrained Material components, accessibility review, normalized the v2 control-shape contract away from pill/oval text backdrops, synced staged design resources, added a JVM guard test.
- WorkManager quota and stop-reason instrumentation for scheduled backup and routine scheduling.
- Material Components 1.14 / minSdk 23 decision — hold
min_sdk = 21through v0.6.x; reopen on a named forced-decision trigger. Memo:docs/policy/2026-05-26-minsdk-23-decision.md; ledger:docs/policy/minsdk-21-ceiling.md.
- CI red since before 2026-05-25 — closed 2026-05-26: the five
Robolectric-backed classes (
ZipFileSystemTest,ZipDocumentFileTest,OABConverterTest,TarUtilsTest,SettingsSearchIndexTest) carry a class-level@Ignore("env-fixture missing pre-2026-05-25")so CI returns to green. Re-enable per-class once a Robolectric fixture refresh lands.
- T18-A Per-app overlay management (
AppDetailsOverlaysFragment+AppDetailsOverlayItem); closed by audit 2026-05-26. - T18-B
app-manager://+am://deep-link contract; shipped through v0.5.0, documented indocs/intent-api.md. - T18-C Unfreeze on shortcut launch with optional re-freeze on phone
lock;
FreezeUnfreeze.launchApp+FLAG_ON_UNFREEZE_OPEN_APP/FLAG_FREEZE_ON_PHONE_LOCKED/FreezeUnfreezeService. - T18-D Certificate SHA-256 chip in App Info; shipped 2026-05-02.
- T19-A App Details Storage panel completeness audit; Storage/Cache
block shows code/data/cache/obb/media/total via
PackageSizeInfo. Backup-archive sibling-row data layer shipped viaBackupArchiveSizeAggregator(9 JVM tests). - T21-A Landscape / w600dp density overrides (factory iter-7 dimens overrides + libcore mirror).
- T21-B Launcher shortcuts for scheduled backup (iter-94 pinned Settings action + static launcher shortcut).
- T21-C Material 3 result notifications for long-running operations
(iter-95 foreground progress notification + API 36
Notification.ProgressStyle). - T21-D In-app per-app language picker (iter-121 managed-package locale;
AppManagerNG-self locale picker in Settings -> Appearance via
AppCompatDelegate.setApplicationLocales). - T21-J Material You dynamic-color audit — source-path audit clean;
regression guard
DynamicColorContractTest; audit indocs/audits/2026-05-26-material-you-dynamic-color.md. Manual device walkthrough remains open (tracked under device-verification in the active roadmap).
EI-01/02/03, NF-02/03/04/05/07/14/15/18, EI-05/06/08/09/10, and the Component Rules preview all shipped in v0.5.0 (Discovery & Polish). NF-06 shipped its Pro Mode explainer correction (hero card deferred — see active roadmap). NF-13 parked (no MuntashirAkon/jadx-android 1.5.5 tag).