Files
archy/docs/1.8-alpha-improvements-tracker.md
2026-06-11 00:24:54 -04:00

34 KiB

1.8-alpha Improvements Tracker

Last updated: 2026-06-11 00:17 EDT

This tracks the user-facing improvement list that must land with the 1.8-alpha container migration release and the next ISO cut produced from that release. It is intentionally separate from the container handoff docs, but should be treated as release and ISO smoke-test scope.

Status legend:

  • todo: not started.
  • in-progress: active local work or validation.
  • blocked: needs host access, hardware, credentials, a product decision, or an external artifact.
  • done: implemented and validated for this release.
  • defer?: candidate to explicitly defer from 1.8-alpha after product review.

Resume protocol:

  1. Read this file after docs/NEXT_TERMINAL_HANDOFF.md.
  2. Keep every user-requested improvement represented here until it is either done or explicitly moved out of 1.8-alpha by product decision.
  3. When implementation starts, change status to in-progress and add the file, test, host, or design decision being worked.
  4. Mark done only after the change is implemented and validated locally or on the release validation host, as appropriate.
  5. Before cutting the next ISO, run this checklist as part of ISO smoke testing.

Active-session note, 2026-06-10 05:48 EDT: resumed from docs/NEXT_TERMINAL_HANDOFF.md; no .198 host actions have been run yet. The immediate tracker-affecting local gate is rerunning the focused Rust container::image_versions::tests validation for the Nextcloud false-update row, then continuing lifecycle/control-plane truthfulness work.

Resume-save checkpoint, 2026-06-10 08:32 EDT: the current pass stayed on the fixes backlog, not app migration. No .198 host actions were run, no dev server was intentionally left running, and no long-running validation command is expected to still be active. Continue from the in-progress Make tabs info load quickly or show loading states row or the next unresolved fixes-backlog row.

Active-session progress: git diff --check passed. Focused image-version Rust validation is still inconclusive because the tool PTY stayed open with no active compiler process visible, a bounded 300s retry using the normal workspace target exited 124 before test output, and a fresh 600s retry in /tmp/archy-cargo-image-versions-2 also exited 124 after compiling into the archipelago crate without reaching test output. The Nextcloud false-update row remains in-progress. A local lifecycle fix is in progress so migrated single-orchestrator app stops return immediately with a transitional state instead of blocking the UI while Podman cleanup runs; cargo fmt --check and focused backend compile check passed, and git diff --check is clean. Latest credentials backlog follow-up added backend PhotoPrism credentials, centered the mobile credential pre-launch modal in My Apps and the icon grid, and passed focused frontend tests, type-check, backend compile check, cargo fmt --check, and git diff --check. Web5 Connected Nodes Messages/Requests, Web5 Identities, and DWN message browsing now preserve visible content during refresh/failure and show compact refresh labels instead of replacing populated tabs with loading panels; focused tests and type-check passed. Server Network overview, Network Interfaces, and Tor Services cards now keep visible values during refresh or refresh failure and show compact refresh labels instead of reverting to skeletons or false empty states; focused test and type-check passed. The standalone Credentials view now keeps credential rows visible during refresh/failure and shows Refreshing credentials...; focused test and type-check passed. Lightning Channels now keeps existing channels visible during refresh/failure and shows Refreshing channels...; focused test and type-check passed. Peer Files now keeps existing peer catalog items visible during Tor refresh/failure and shows Refreshing peer files...; focused test, type-check, and git diff --check passed. Cloud peer cards now remain visible during federation peer-list refresh/failure with Refreshing peer nodes...; focused test, type-check, and git diff --check passed. The Web5 Verifiable Credentials summary now keeps credential rows visible during refresh/failure with Refreshing credentials...; focused test, type-check, and git diff --check passed. Web5 Nostr Relays now keeps relay stats visible during refresh/failure with Refreshing relays...; focused test, type-check, and git diff --check passed. Web5 Domains now keeps registered-name counts visible during refresh/failure with Refreshing domains...; focused test, type-check, and git diff --check passed. Settings Backups now keeps existing backup rows visible during refresh/failure with Refreshing backups...; focused test, type-check, and git diff --check passed. Settings Transport Preferences now keeps preference controls visible during refresh/failure with Refreshing transport preferences...; focused test, type-check, and git diff --check passed. Settings VPN status now keeps current connection details visible during refresh/failure with Refreshing VPN status...; focused test, type-check, and git diff --check passed. Web5 Federation now shows Refreshing federation... during summary refresh and keeps existing node counts/DID visible on refresh failure; focused test, type-check, and git diff --check passed. Mesh map denied-location behavior now has component coverage proving browser location denial reports that peer positions can still appear without requiring local location; focused test, type-check, and git diff --check passed. Companion/app-session mobile tab-app handling now keeps apps that require a new tab inside the mobile session fallback instead of auto-opening an external tab and closing; focused app-session, launcher, and config tests passed with type-check and git diff --check. Nostr Discoverable Nodes now keeps discovered rows visible during relay refresh or relay failure and shows Searching relays...; focused test, type-check, and git diff --check passed. App Store/App Details screenshot sections now render only real screenshot metadata and no longer show fake placeholder tiles when no assets exist; focused App Details content and marketplace handoff tests, type-check, and git diff --check passed. Home now has an App Store recommendations card driven by uninstalled core/recommended marketplace apps; the recommendations respect installed aliases so apps drop out after install and move into normal My Apps/Home behavior. Focused helper tests, type-check, git diff --check, and the Playwright Home dashboard smoke passed. Easy Mode goal configure steps now route to their owning app/screen, verify steps have an explicit Check & Continue action, and configure/info/verify actions start goal progress before completing the step; focused goal action/store tests, type-check, and git diff --check passed. Setup path selection no longer shows the disabled Connect Existing (Coming Soon) option; Fresh Start and Restore from Seed are the only visible choices and route correctly. Focused onboarding option/composable tests, type-check, and git diff --check passed. Header responsiveness follow-up restored the primary My Apps/App Store/Websites navigation to persistent desktop tabs at md+ on My Apps, Discover, and Marketplace; removed the desktop primary dropdowns; kept mobile dropdown behavior; delayed App Store category collapse by lowering the search reserve and header gap; and removed the My Apps desktop category dropdown. Focused Marketplace/App config tests, type-check, and scoped git diff --check passed. Browser smoke against the already-running local Vite/mock session is still next.

Done criteria for this tracker:

  • Code/UI items: implemented, covered by targeted test or manual smoke check, and no known regression against the container migration work.
  • Runtime/container items: validated on the release host named in docs/NEXT_TERMINAL_HANDOFF.md, then included in ISO smoke test scope.
  • Product-decision items: documented decision plus implementation task if the decision keeps it in 1.8-alpha.
  • External/hardware items: hardware/document/access obtained, or explicitly deferred from the release by product decision.

Release-Critical Runtime Gates

Item Status Release question / blocker
Check logs of every server for errors and fix blocked Needs explicit target server list. Current docs name .198; are there more production validation hosts?
Go through issues on gate blocked Need location of "gate" issue tracker/board and access details.
Sort out container tagging so databases, backend, etc are sorted properly in-progress Tie to manifest/catalog metadata and My Apps grouping.
Sort out supplementary container naming so it is better in-progress Needs naming convention for dependencies: app-prefixed service names vs role-first names.
Figure out how we offer updates to apps todo Product/runtime design needed: manual update, scheduled checks, or auto-update by app tier.
Figure out how we provide different versions for Bitcoin to download and keep updated automatically todo Requires release policy for Knots/Core versions and whether users may pin old versions.
Make sure all credentials are given for apps without registration in-progress File Browser now exposes credentials on App Details and in the pre-launch interstitial. Backend package.credentials returns the secured File Browser password from /var/lib/archipelago/secrets/filebrowser/password when present, with admin/admin fallback matching the install hook. PhotoPrism now exposes manifest-backed admin / archipelago credentials from both backend package.credentials and the frontend fallback. My Apps and mobile icon-grid credential pre-launch modals are vertically centered on mobile. Covered by appCredentials.test.ts, AppIconGrid.test.ts, local type-check, backend compile check, cargo fmt --check, and git diff --check. Grafana was not added because GRAFANA_ADMIN_PASSWORD is not resolved to a known repo default/secret. Remaining no-registration apps still need inventory.
Nextcloud always shows update, and how are apps actually updated? in-progress Nextcloud manifest/catalog metadata is aligned to the pinned nextcloud:29 image, and update detection now ignores registry-host-only image changes while still reporting real same-repo tag drift. Catalog drift check passed. Backend focused test was added but local validation hit a Rust linker/incremental artifact failure, then bounded retries exited 124 before test output, including a 600s fresh-target retry on 2026-06-10. Broader app update UX/policy design still needed.
Make sure Tor is solid as having to rotate addresses to get it to work todo Needs .198/target-host Tor logs and reproducible failure case.
Fix fleet it does not seem to work done Fleet data now preserves existing nodes during refresh, exposes an explicit refreshing state, sorts online nodes first, avoids duplicate history fetches when selecting a node, accepts backend entries and legacy history response shapes for per-node charts, and uses readable loading/auto-refresh UI. Covered by useFleetData.test.ts, local type-check, targeted tests, and user visual review of the Fleet header/card treatment.
Check Beta Telemetry and how it works done Telemetry is opt-in via analytics-config.json; the background reporter runs every 15 minutes only when enabled, saves telemetry-latest.json, writes local Fleet reports/history under telemetry-fleet/, and optionally POSTs a telemetry.ingest JSON-RPC envelope to TELEMETRY_COLLECTOR_URL. The systemd unit now reads optional /var/lib/archipelago/telemetry.env, and deploys write that file when TELEMETRY_COLLECTOR_URL is exported in scripts/deploy-config.sh. Manual and periodic report schemas now both include metric percentages and container inventory, and the Fleet UI normalizes older reports with missing fields. Covered by local type-check, useFleetData.test.ts, cargo check -p archipelago, deploy-script syntax check, and git diff --check. Remaining ops step: choose the real collector URL, deploy it, restart the service, and confirm central Fleet ingest.
Get Netbird working todo Requires app/runtime validation and credentials/config expectations.
Sort out how we are going to manage lightning channel creation todo Product design needed for UX, safety limits, fees, and peer selection.
Make sure old health notifications do not return on refresh/new login when stale/out of date done Health toasts now require a current app-linked unhealthy package state and hide stale package health notifications after 30 minutes on reload/new login. Backend monitoring notifications now prune duplicate active alerts and old generic alerts before pushing new ones. Covered by HealthNotifications.test.ts, local type-check, targeted frontend tests, and backend notification unit test work.
Fix BTCPay issue from desktop file "BTCPay Issues" blocked Need file contents or path to that desktop artifact.
Check Nostr Discoverable Nodes and get it working correctly in-progress Discover modal now keeps discovered rows visible during relay refresh/failure and shows Searching relays... instead of dropping to an empty state. Covered by DiscoverModal.test.ts, local type-check, and git diff --check. Needs live relay/trust validation before marking done.
Make sure update password is working properly done Backend now returns separate SSH update status so a successful web password change is not reported as a full failure when optional SSH password update fails. Settings modal shows success plus SSH warning and stays open for review. Covered by local type-check, focused modal/RPC tests, auth unit test, cargo check -p archipelago, and git diff --check.
Do UI performance and general performance improvements todo Needs profiling target; start with obvious loading/render issues.
Make sure companion app is all working well, had issues with tab apps in-progress Mobile app-session now keeps apps that require a new tab inside the session fallback instead of auto-opening an external tab and closing immediately. Covered by AppSessionMobileNewTab.test.ts, existing app-session config tests, app launcher tests, local type-check, and git diff --check. Broader companion smoke test still needed before marking done.
Even though performance is better, on reboot/restart backend/update show checking-containers notification instead of no apps done My Apps now shows a dedicated Checking containers card when initial backend data has loaded but server-info.status-info.containers-scanned is still false and no apps are ready to render, instead of falling through to the no-apps empty state. A follow-up UI pass preserves the last known app list when a later scanner/backoff update reports an empty package map with containers-scanned=false, and shows a refresh status banner above the grid. Validated by local type-check, targeted tests, and git diff --check; follow-up validation passed npm test -- --run src/views/apps/__tests__/appPackageCache.test.ts and npm run type-check.
Check mesh core is picking up public channel/other devices, not just Archipelago ones blocked Needs Meshtastic hardware/radio environment.
Make tabs info load quickly or show loading states in-progress Fleet now has initial loading/background-refresh states, and node history keeps showing while the next sample is fetched instead of blanking out. Web5 Connected Nodes Trusted/Observers tabs now show loading instead of empty states while peer data is pending and keep existing lists visible during refresh; Messages and Requests now also keep populated lists visible during refresh/failure. Web5 Shared Content now keeps My Content visible during refresh/failure with Refreshing shared content..., and Browse Peers keeps current same-peer results visible during refresh with Refreshing peer content... instead of replacing lists with full loading panels. Web5 Identities now keeps the identity list visible during refresh/failure with Refreshing identities...; Web5 DWN message browsing keeps stored messages visible during refresh/failure with Refreshing messages.... The Web5 Verifiable Credentials summary keeps credential rows visible during refresh/failure with Refreshing credentials.... Web5 Nostr Relays keeps relay stats visible during refresh/failure with Refreshing relays.... Web5 Domains keeps registered-name counts visible during refresh/failure with Refreshing domains.... Web5 Federation keeps summary node counts/DID visible during refresh/failure with Refreshing federation.... Server Network overview, Network Interfaces, and Tor Services cards now keep visible values during refresh/failure with Refreshing network..., Refreshing interfaces..., and Refreshing Tor services.... Credentials keeps credential rows visible during refresh/failure with Refreshing credentials.... Settings Backups keeps backup rows visible during refresh/failure with Refreshing backups.... Settings Transport Preferences keeps preference controls visible during refresh/failure with Refreshing transport preferences.... Settings VPN status keeps current connection details visible during refresh/failure with Refreshing VPN status.... Lightning Channels keeps existing channels visible during refresh/failure with Refreshing channels.... Peer Files keeps existing peer catalog items visible during Tor refresh/failure with Refreshing peer files.... Cloud keeps existing peer cards visible during federation peer-list refresh/failure with Refreshing peer nodes.... Covered by focused Web5/Server/Credentials/Backups/Transport/VPN/Lightning/Peer Files/Cloud tests and local type-check. Broader tab-info audit still needed for other slow panels before marking done.
Add states about why Bitcoin address is not ready in-progress Receive Bitcoin on-chain flows now reject blank LND address responses and translate common LND/Bitcoin readiness failures into user-facing reasons: wallet locked, wallet uninitialized, Bitcoin/LND still syncing, LND unreachable, or LND REST/newaddress transport issues. The receive modals now show a live “checking wallet readiness” message while the request is in flight. Backend lnd.newaddress now errors if LND returns an error or no address. Needs live wallet-state smoke test before marking done.
Add new Bitcoin wallets easily and securely todo Product/security design needed.
Add the new gate instead of gate blocked Need definition of "new gate" and target integration.
Local Nostr signer app should ask which account after logout/re-login todo Needs signer/session state validation.
See what apps can migrate to local Nostr signer sign-in todo Needs app-by-app auth inventory.
Make server name change change the host name in-progress Settings label changed to Hostname. server.set-name now persists the display name, derives a Linux-safe hostname slug, attempts sudo -n hostnamectl set-hostname, and returns non-fatal hostname warning fields if OS update fails. Covered by hostname slug unit test, local type-check, cargo check -p archipelago, and git diff --check. Impact audit: mDNS/SSH/Tailscale labels may change; already-created app configs using old HOST_MDNS (notably Fedimint derived env) are not automatically rewritten by hostnamectl, so this needs release-host smoke validation before marking done.
Sort out HTTPS certificate, what is best way? todo Needs product decision: self-signed local CA, ACME DNS, Tailscale certs, or reverse proxy model.

User Interface And App Experience

Item Status Release question / blocker
LND Channels then back/back gets stuck between LND detail and channels done App Details back now routes explicitly to the parent surface, and Lightning Channels back replaces history so browser back no longer bounces between LND detail and Channels. Validated by local type-check and targeted tests.
Add a Meshtastic icon done Added meshcore.svg asset and manifest-owned icon metadata. Catalog generation is idempotent and strict catalog drift is clean.
Improve default app icon fallback done Missing/broken app icons now fall back to the centered Archipelago A mark using the same black fill and gradient-border treatment as the custom UI icon asset, instead of the old generic placeholder. Applied to My Apps cards, mobile icons, Marketplace cards, and App Details. Validated by local type-check, targeted tests, Rust check, and git diff --check.
Use favicon for Portainer apps? todo Need decision: use upstream favicons dynamically or ship curated icons.
Settings for apps blocked Needs definition: per-app config screen, runtime env vars, credentials, or install options?
Update SearXNG app icon blocked Needs user-provided/approved icon asset. User said to move past this until they can make icons.
Once an app is installed remove recommended/core pills done Marketplace cards hide tier badges when installed. Validated by MarketplaceAppCard.test.ts, targeted Vitest, type-check, and git diff --check.
Get Bitcoin / LND UI fully done with all options and controls todo Large feature area; needs scope for 1.8-alpha vs post-release.
Fix intro always showing on new browser sessions done Splash gating now checks the backend onboarding-complete state before showing the intro when this browser has no local intro flag. Already-onboarded nodes skip the splash and seed neode_intro_seen; fresh installs still show it. Covered by introSplash.test.ts, local type-check, targeted tests, and git diff --check.
Fix App Store tabs/categories/search overflow done Discover/App Store and Marketplace render one shared App Store section list. Follow-up after user review restored the primary My Apps/App Store/Websites navigation to persistent desktop tabs at md+ on My Apps, Discover, and Marketplace; mobile keeps dropdown behavior. App Store category collapse now happens later by starting uncollapsed and using a smaller header gap/search reserve, and the My Apps category dropdown no longer appears on desktop. Covered by local type-check, focused Marketplace/App config tests, and scoped git diff --check; browser smoke remains the next resume step.
Add a test harness for all of the application in-progress Lifecycle harness exists; need expand UI/e2e coverage definition.
Fix app details screen links done App Details sidebar no longer renders dead href="#" links. It now renders only real manifest website/marketing, upstream/wrapper repo, and support URLs, and hides the Links card when no usable URLs exist. Covered by AppSidebar.test.ts, local type-check, targeted tests, and git diff --check.
Fix FIPS anchoring, update FIPS todo Needs expected FIPS UX/API behavior.
Fix generate receive address not working on nodes and identify wallet management todo Needs wallet API/backend validation.
Fix mesh page on larger screens so it scales nicely done Mesh keeps the tabbed tools layout on normal desktop/1920px widths and only splits Off-Grid Bitcoin, Dead Man, and Map into separate stacked containers on very large screens (>=2560px wide and >=1200px tall). The desktop tools column now fills its panel instead of using a wrapper scroll container. Validated by local type-check, targeted tests, and git diff --check.
Mesh map should handle denied location permission and still show other devices in-progress Mesh map now treats browser geolocation as optional in the UI: denied local location reports that peer locations can still appear, and the empty hint waits for mesh device positions instead of saying location sharing is required. Covered by MeshMap.test.ts. Needs browser smoke test with denied location plus a peer coordinate message before marking done.
Make tablet-size Meshtastic scrollable done Tablet/mobile Mesh tools panels now have bounded heights and internal scrolling so the selected Bitcoin/Dead Man/Map panel can scroll without blowing out the page. Validated by local type-check, targeted tests, and git diff --check.
Make mobile screens have gap below lowest container and tab bar done Dashboard route panels, including the separate Chat/Mesh branch, now use mobile tab-bar bottom clearance so the lowest content clears the bottom tab bar.
Add Trusted tab to Connected Nodes container and have Peers and Observers done Connected Nodes now labels trusted peers as Trusted and splits federation nodes with trust_level: observer into the Observers tab. Observer nodes are excluded from Trusted, shown with their own count/badge, and refresh from the same live federation list. Validated by local type-check and targeted tests.
Add more tree navigation to cloud files so they do not all go back to first screen done Cloud folder navigation now persists the current folder path in the route query so refresh/browser back keeps nested folders instead of resetting to the section root. The Cloud back button now walks up to the parent folder before returning to Cloud home. Covered by cloudPath.test.ts, local type-check, targeted tests, and git diff --check.
Fix visible UI refreshing on find nodes screens done Federation node auto-refresh no longer blanks/replaces the visible node lists after the initial load. Existing nodes stay visible during background refreshes, covered by NodeList.test.ts, local type-check, targeted tests, and git diff --check.
Remove dead UI components/ones that are coming soon done Removed the dead Web3/coming-soon Network card, disabled local-network placeholder button, and the non-interactive Spotlight AI Assistant coming-soon block. Verified active UI no longer contains explicit Coming soon copy outside historical release-note text. Covered by local type-check and git diff --check.
Hide Web3 container on network for now and move FIPS Mesh up done Network page now places the live FIPS Mesh card in the top overview grid where the dead Web3 card was, removes the duplicate lower FIPS card, and updates the Home Network description to remove Web3 language. Validated by local type-check, targeted tests, and git diff --check.
Make cool screens less hidden: Find Nodes, Fleet, Monitoring, etc. done Existing Web5 summary cards now expose Monitoring, Find Nodes/Federation, and Fleet directly. Federation card has separate Find Nodes and Fleet actions instead of hiding Find Nodes behind Fleet. Covered by Web5Federation.test.ts, local type-check, targeted tests, and git diff --check.
Fix dashboard container/card square rendering corruption done Generalized the App Store compositor workaround to dashboard scroll-panel glass cards/buttons/inputs and removed transform-based stagger movement so Chromium/Brave no longer paints random large black square/rectangle layers over containers. Kept the Web5 bottom-action placement change. Validated by local type-check, targeted tests, and git diff --check.
Move constrained card header actions to bottom buttons done Web5 summary actions and Network actions for Add Device, Scan WiFi, Restart Tor, and Add Service now stay in the card header only on very wide screens; otherwise they render at the card bottom as full-width or 50/50 buttons. Button icons were removed from those action buttons. Validated by local type-check, targeted tests, and git diff --check.
Work on setup screens function and flows in-progress Onboarding setup choice now shows only usable paths: Fresh Start and Restore from Seed. Removed the disabled Connect Existing (Coming Soon) option, and covered default Fresh routing plus Restore routing with OnboardingOptions.test.ts; useOnboarding.test.ts, local type-check, and git diff --check passed. Broader onboarding/setup audit still needed before marking done.
Work on Easy Mode experience in-progress Easy Mode goal configure steps now route to their owning app/screen instead of silently completing without navigation; verify steps now expose a Check & Continue action; configure/info/verify actions start goal progress before completing the active step. Covered by goalStepActions.test.ts, existing goal store tests, local type-check, and git diff --check. Broader Easy Mode product scope still needed before marking done.
Update My Apps homescreen to show most-used apps instead of hardcoded done App launches are recorded locally through the app launcher, and the Home My Apps card now shows the top three installed user apps by launch count/recency with a running-app/name fallback when there is no history. Covered by appUsage.test.ts, existing app launcher tests, local type-check, targeted tests, and git diff --check.
Improve Full Archive Node dependent apps UX todo Already partly represented by Bitcoin-pruned install block; needs broader dependency UX.
Fix incorrect modals that are wrong color and are not full-screen overlay done Custom Teleport modals that still used the old light bg-black/10 overlay now use the same full-screen bg-black/60 overlay treatment as BaseModal/newer modals. Verified no fixed modal overlays retain bg-black/10; validated by local type-check, targeted tests, and git diff --check.
Prevent modals from allowing background scroll done Added shared scroll-lock composable, root-level body lock, wheel/touch containment, and explicit dashboard route-panel locking. User validated the background no longer scrolls behind modal overlays.
Look over gamepad navigation todo Needs focused controller-nav pass.
App Store screenshots in-progress Placeholder policy fixed: Marketplace App Details and installed App Details now render screenshot sections only when real screenshot metadata exists, and otherwise hide the fake placeholder tiles. Metadata can be string URLs or { src, alt } objects. Covered by AppContentSection.test.ts, useMarketplaceApp.test.ts, local type-check, and git diff --check. Needs actual screenshot assets/metadata before marking done.
Fix App Detail page issues; container controls are not good done App Details container controls now disable while start/stop/restart/update/uninstall RPCs are running and show action-specific progress labels. Header actions collapse into the bottom 50/50 grid below 1280px to avoid tablet/smaller desktop overlap. Credentials now show a loading state while package credentials are being fetched. Covered by AppHeroSection.test.ts, AppSidebar.test.ts, local type-check, targeted tests, and git diff --check.
Add setup instructions for apps that need them done App Details now renders a dedicated Setup Instructions card from static-files.instructions when present, so apps can show install/setup notes without a new schema. Covered by AppSidebar.test.ts, local type-check, and git diff --check.
Add press-and-hold option for apps on mobile app screen done Mobile My Apps icons now support long press/context menu to open the app detail/options screen while a normal tap still launches the app. Space key opens the same options path for keyboard users. Covered by AppIconGrid.test.ts, local type-check, targeted tests, and git diff --check.
Side-load: add port-not-available validation done Sideload modal now validates app ID collisions, malformed host:container mappings, reserved Archipelago/package host ports, and host ports already exposed by installed packages before queueing install. Backend install remains the final bind authority. Covered by sideloadValidation.test.ts, local type-check, targeted tests, and git diff --check.
Delete app data option and uninstall warning done Uninstall dialogs in My Apps and App Details now include a clear warning plus a Delete app data and reset it choice. Leaving it off preserves app data for later reinstall; checking it passes preserve_data=false through package.uninstall so the app is fully reset. Covered by AppsUninstallModal.test.ts, rpc-client.test.ts, local type-check, targeted tests, and git diff --check.
Add App Store container with recommended apps that change to Home Screen done Home now shows up to three uninstalled core/recommended App Store apps and routes clicks through the existing Marketplace App Details handoff. Installed aliases are honored, so recommendations disappear once the app is installed and the app moves into normal My Apps/Home behavior. Follow-up layout polish moved Cloud back into the second card slot, moved Recommended Apps into Cloud's previous slot, and placed Quick Start inside the grid next to Wallet to avoid an odd-width row. Covered by homeRecommendations.test.ts, local type-check, git diff --check, and Playwright Home dashboard smoke against local Vite/mock backend.
Add QR code to download mobile companion app in login-triggered modal and improve modal done Companion intro modal now renders a QR code on desktop and a direct download button on mobile. It reads VITE_COMPANION_APK_URL and falls back to /packages/archipelago-companion.apk.zip; the APK zip is now published at neode-ui/public/packages/archipelago-companion.apk.zip so the modal can serve it immediately. Covered by local type-check, git diff --check, and manual file placement verification.
Video calling Picture-in-Picture blocked Need referenced document or desired provider/library.
Card-based loading visuals on App Store pages done Discover and Marketplace now show app-card skeleton grids while community/Nostr catalog data is loading and no cards are available yet, instead of a centered spinner/empty state. Validated by local type-check, targeted tests, and git diff --check.

External / Hardware Items

Item Status Release question / blocker
Buy a HaLow device and start integration blocked Requires hardware purchase and driver/device target. Not a code-only 1.8-alpha item unless hardware is available now.