apple-codesign 0.29 rejects --ad-hoc. Generate a self-signed P12 and
sign darwin .app bundles with --p12-file so Linux CI produces a sealed
signature instead of failing postPackage.
rebuildConfig:false still ran @electron/rebuild (spread of false is a
no-op), which can stall for many minutes when packaging arm64 on x64 CI
under "Finalizing package". Use onlyModules:[] to truly skip rebuilds,
pre-download Electron zips with timeouts before forge package, point
packager at electronZipDir, and kill any single host package after 8m.
Rolling release runners stall or fail fetching apple-codesign releases.
Ship linux-x64 and linux-arm64 binaries under tools/rcodesign/ and install
from the checkout so the ad-hoc macOS signing step is offline and fast.
Only ship native prebuilds for the target platform/arch (~80MB instead
of ~500MB of multi-arch blobs), skip redundant GUI rebundles, cache
Electron downloads across hosts, and strip more packaging-only deps so
"Finalizing package" no longer crawls multi-hundred-MB asars six times.
apple-codesign binaries moved from indygreg/apple-codesign to
indygreg/apple-platform-rs with tags apple-codesign/<version>, which
caused a 404 in the rolling release workflow.
Electron postinstall and ssh2/cpu-features node-gyp run silently after
deprecation warnings and often hang forever on Gitea runners. Install
with --ignore-scripts, then only run esbuild's installer; forge still
downloads per-target Electron during package.
Copy runtime logos/favicons into assets/ and package icons into build/, then use them for the titlebar, favicons, dock/window icons, and docs so packaging and the UI no longer rely on placeholder marks.
Keep quick Add peer (and Peers shortcut) in the sidebar footer; full
saved-peer list, counts, and actions live on a new Peers view that is
reachable offline for managing keys.
Override Bootstrap outline/solid button variants and nav-tabs/pills
for dark surfaces, align settings subtabs with brand green, and
improve list-group, kbd, and dashboard danger actions contrast.
Return the active tunnel for the same host:port:protocol instead of
starting a second Holesail instance; coalesce concurrent creates.
UI disables the create button and shows “already exists” feedback.
Stop falling back to Node builtin names (process/crypto/…) which
bare-module cannot resolve. Detect Bare via globalThis.Bare and drop
bare-process (use global pid instead).
Map Node builtins to bare-* via package.json imports and dual-load
with which-runtime so holesailBareControl runs on Bare without
MODULE_NOT_FOUND for crypto/fs/http/net.
pear-run worker RPC timed out from the Electron UI. Run real holesail
in Bare index.js (holesailBareControl) and have the UI call localhost
HTTP instead of loading bare-tcp in the renderer.
pear-electron cannot load bare-tcp (require.addon) in the renderer.
Use pear-run + workers/holesail-local.cjs so the actual holesail package
runs under Bare; Node still loads holesail in-process. Add connect
fallback modal with copy URL.
Load holesail via dynamic ESM import (no createRequire) so Pear can connect local tunnels. Route confirmations through a designed modal with icons and animations instead of native dialogs.
Close sockets on unload without forgetting saved peers, merge roster
writes so empty in-memory state cannot erase peers.json, and restyle the
minimized sidebar as a clean icon-only rail with compact peer dots.
Map Docker deploy failures to actionable how-to-fix messages, keep full
detail through RPC sanitization, and stop top-center toasts from doubling
the live job tray so operators only see one notification per action.
Ship the modern dashboard, job tray log follow, container overflow actions, stacks search, activity history, role-gated controls, invite form with copy token, first-connect checklist, and mark Track C done on the roadmap.
Add Settings UI to configure many Portainer-format template catalogs (not just one), merge them on fetch, drop duplicates by image/stack/title, and show source counts on the Deploy view.
Save configured connections to ~/.config/peardock/cache/peers.json (with localStorage migration), unwrap protomux REQUEST_ERROR causes for real messages, and quiet/dedupe background RPC failures so the notification tray is not flooded.
Add a visible toast stack, fix presentError double-notify, wire density and auto-refresh settings, gate destructive confirms, improve empty/skeleton/search on resource lists, and enable browser history plus keyboard palette navigation.
Restructure the dashboard into a height-contained grid so stats, panels, and actions fill the content pane; only individual cards scroll when their content is long.
Contain dashboard layout so views scroll inside the content pane without horizontal bleed, wrap long system values, and keep the peers panel bottom-sticky growing up to four rows before scrolling.
Keep peer action buttons from overflowing with stable truncation and short labels, move reset peers into Settings with an infinitely scrollable peer list, and harden waitForPeerResponse so success replies without a message (listVolumes) no longer throw.
Always store configured connections in localStorage (with invite/alias), restore and re-dial on boot, and free the sidebar so every nav item stays reachable via a scrollable nav plus an Add peer modal.
Reserve space for window controls and split the titlebar clusters so brand and chrome no longer collide. Replace the full-screen status spinner with lightweight activity jobs in the event tray.
Batch typing into short frames, send UTF-8 instead of base64 for text,
exempt stream methods from the general rate limit, and skip heavy
middleware on terminalInput/resize for lower latency.
Production-grade xterm FitAddon resize, binary-safe I/O, TTY-safe
server streams, demuxed log viewer with line buffering, and auto-dismiss
deploy job panel without the full-screen spinner.
Debounce template search, harden deploy/duplicate/template flows with
reliable RPC and better form controls (switches/sliders). Raise muted
and secondary text contrast across styles so copy stays readable.