Skip to content

Specter v1.4.2

Choose a tag to compare

@dpejoh dpejoh released this 26 May 20:50
· 232 commits to main since this release

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 packages instead of two

HMA Config

  • Fixed silent empty download: printf chokes on 521KB variable in busybox ash — pass target file directly to download() instead
  • download() hardened: User-Agent header, non-empty output validation, reliable temp cleanup

Boot & Description

  • keybox_info.sh backgrounded at boot (non-blocking)
  • Catalog + Google revocation analysis restored for boot/install-time description (keybox source, version, revocation status)
  • security_patch.sh runs at boot so description shows patch date without WebUI
  • Redundant refresh_desc.sh calls pruned from 4 feature scripts; redundant keybox_info.sh calls 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.sh checks 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.all for 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: none prevents 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)
  • decodeURIdecodeURIComponent bug fix for contributor links
  • Responsive contributors grid (auto-fit instead of fixed 1fr 1fr)
  • data-i18n attributes on preset chips (declarative translation)

Other

  • target_applied marker removed — obsolete since target_merge.sh handles 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'
  • .gitignore updated with web/ workspace patterns
  • keybox_format field removed from device info; serial/is_private added 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, and settings put global oem_unlock_allowed removed from hardening (zero detection impact, only hides the UI toggle)

Infrastructure

Contributors

  • @myst-25 — architecture review, recommendations, and UI/UX improvements (PR #4)