Specter v1.4.2
v1.4.2
Performance
- Network check 3× faster: 1 DNS + 1 HTTP (7s max) vs 6 retries (21s)
- One-pass keybox_info.json read in desc.sh; skip refresh if description unchanged
- TEE readiness: retry loop (5× 500ms) instead of fixed sleep
- Action pipeline sources desc.sh directly instead of full boot_core.sh
- Target merge uses single
pm list packagesinstead of two
HMA Config
- Fixed silent empty download:
printfchokes on 521KB variable in busybox ash — pass target file directly todownload()instead download()hardened: User-Agent header, non-empty output validation, reliable temp cleanup
Boot & Description
keybox_info.shbackgrounded at boot (non-blocking)- Catalog + Google revocation analysis restored for boot/install-time description (keybox source, version, revocation status)
security_patch.shruns at boot so description shows patch date without WebUI- Redundant
refresh_desc.shcalls pruned from 4 feature scripts; redundantkeybox_info.shcalls pruned from keybox.sh refreshKeyboxStatus(exec)param to skip shell re-exec when data is fresh- Keybox install flow manually calls
refresh_desc.sh+refreshKeyboxStatus(false)to avoid redundant re-exec keybox_info.shchecks network before catalog download for reliability
WebUI
- Dynamic i18n: English statically imported; others fetched at runtime with localStorage cache (76K bundle)
- AMOLED theme mode with true-black CSS overrides, segmented button, translations
Promise.allfor refresh button — device, keybox, and catalog fetch in parallel- Catalog analysis moved to browser
fetch()— parallel catalog + Google revocation check - Enriched keybox data written back to disk + description refreshed after analysis
- Network chip uses hardcoded MD3 reference colors (green/red) for unambiguous readability across Monet themes
- Global
user-select: noneprevents accidental text selection on mobile (with input/contenteditable exceptions) - App Targeting overlay back button correctly routed via
history.back()— no longer triggers global nav - Copy buttons for terminal output and activity history entries (one-tap with toast feedback)
decodeURI→decodeURIComponentbug fix for contributor links- Responsive contributors grid (
auto-fitinstead of fixed1fr 1fr) data-i18nattributes on preset chips (declarative translation)
Other
target_appliedmarker removed — obsolete sincetarget_merge.shhandles incremental updates- Theme:
cfgSet('theme_preset', 'monet')restored so switching to Monet persists across reboot - Color mapping: low-saturation wallpaper colors resolve to
'blue'preset instead of'grey' .gitignoreupdated withweb/workspace patternskeybox_formatfield removed from device info;serial/is_privateadded to KeyboxInfoJson- Dead code removed: 4 unused i18n keys from all languages, dead imports (spawnScript, cfgFlush, appendToOutput), APP_CATALOG constant, refreshControlToggles import
- OEM unlock toggle no longer suppressed —
ro.oem_unlock_supported,sys.oem_unlock_allowed, andsettings put global oem_unlock_allowedremoved from hardening (zero detection impact, only hides the UI toggle)
Infrastructure
- VitePress documentation site split to separate repo
specter-web - Deployed via Cloudflare Pages at specter.dpejoh.com
Contributors
- @myst-25 — architecture review, recommendations, and UI/UX improvements (PR #4)