function cmd::list::_precompute_all() {
  # Peer data
  declare -gA p_ips=() p_rules=() p_subtypes=() p_last_ts=() p_last_evt=()
  while IFS="|" read -r name ip rule subtype last_ts last_evt; do
    [[ -z "$name" ]] && continue
    p_ips["$name"]="$ip"
    p_rules["$name"]="${rule:-—}"
    p_subtypes["$name"]="$subtype"
    p_last_ts["$name"]="$last_ts"
    p_last_evt["$name"]="$last_evt"
  done < <(json::peer_data "$(ctx::clients)" "$(ctx::meta)" "$(ctx::events_log)")

  # WireGuard handshakes + endpoints
  declare -gA wg_handshakes=() wg_endpoints=()
  while IFS=$'\t' read -r pubkey ts; do
    [[ -n "$pubkey" ]] && wg_handshakes["$pubkey"]="$ts"
  done < <(wg show "$(config::interface)" latest-handshakes 2>/dev/null)
  while IFS=$'\t' read -r pubkey endpoint; do
    [[ -n "$pubkey" ]] && wg_endpoints["$pubkey"]="$endpoint"
  done < <(wg show "$(config::interface)" endpoints 2>/dev/null)

  # Block/restricted status
  declare -gA p_blocked=() p_restricted=()
  cmd::list::_precompute_block_status p_blocked p_restricted

  # Public keys
  declare -gA p_pubkeys=()
  local dir
  dir="$(ctx::clients)"
  for kf in "${dir}"/*_public.key; do
    [[ -f "$kf" ]] || continue
    local kname
    kname=$(basename "$kf" _public.key)
    p_pubkeys["$kname"]=$(cat "$kf" 2>/dev/null || echo "")
  done

  # Groups
  has_groups=false
  declare -gA peer_group_map=()
  local groups_dir
  groups_dir="$(ctx::groups)"
  local group_files=("${groups_dir}"/*.group)
  if [[ -f "${group_files[0]}" ]]; then
    has_groups=true
    while IFS=":" read -r peer_name group_name; do
      [[ -n "$peer_name" ]] && peer_group_map["$peer_name"]="$group_name"
    done < <(json::peer_group_map "$groups_dir")
  fi

  # Transfer/activity data — keyed by pubkey
  declare -gA p_rx=() p_tx=() p_activity=()
  while IFS="|" read -r pubkey rx tx level; do
    [[ -z "$pubkey" ]] && continue
    p_rx["$pubkey"]="$rx"
    p_tx["$pubkey"]="$tx"
    p_activity["$pubkey"]="$level"
  done < <(json::peer_transfer "$(config::interface)")
}