# Uso y actualización de ArmadaFetch 0.2.2

Esta entrega no se instala ni se ejecuta automáticamente en el Compaq. Se parte de
0.2.1, que tiene mediciones físicas aportadas por el administrador. 0.2.2 se prueba
solo en servidor/VM hasta realizar la validación física explícita de este documento.
No hace falta retirar la CompactFlash, reiniciar ni cambiar servicios.

## Verificación y actualización manual

En el servidor, obtener el paquete y su SHA-256 por un canal confiable. Un checksum
comprueba integridad; no constituye firma ni demuestra origen por sí solo.

```sh
cd /home/cgpt/armada_distro/artifacts/armadafetch
sha256sum -c armadafetch-0.2.2-i586.apkg.sha256
```

Transferir por el SSH existente a una ruta persistente ext4; ejemplo sin SFTP/scp:

```sh
ssh -o StrictHostKeyChecking=yes root@IP_DEL_ARMADA \
  'cat > /home/cgpt/armadafetch-0.2.2-i586.apkg' < armadafetch-0.2.2-i586.apkg
ssh -o StrictHostKeyChecking=yes root@IP_DEL_ARMADA \
  'cat > /home/cgpt/armadafetch-0.2.2-i586.apkg.sha256' < armadafetch-0.2.2-i586.apkg.sha256
```

Cuando se autorice la instalación, en el notebook como root:

```sh
cd /home/cgpt
sha256sum -c armadafetch-0.2.2-i586.apkg.sha256 &&
apkg verify armadafetch &&
apkg upgrade /home/cgpt/armadafetch-0.2.2-i586.apkg &&
apkg verify armadafetch &&
/usr/local/bin/armadafetch --version
```

Debe mostrar `armadafetch 0.2.2`. Conservar el paquete original 0.2.1 para reversión:

```sh
apkg upgrade /home/cgpt/armadafetch-0.2.1-i586.apkg &&
apkg verify armadafetch &&
armadafetch --version
```

Se prueban ambos recorridos en la VM, usando apkg real, sin cambiar su formato,
resolver dependencias ficticias ni omitir verificaciones. El apkg v1 desplegado
admite `upgrade ARCHIVO`, **no `upgrade --dry-run`**. Si ya existe ArmadaFetch,
`install --dry-run` puede rechazarlo por estar instalado: eso no valida una actualización.
Para un sistema de pruebas sin ArmadaFetch sí corresponde:

```sh
apkg install --dry-run /home/cgpt/armadafetch-0.2.2-i586.apkg
apkg install /home/cgpt/armadafetch-0.2.2-i586.apkg
apkg verify armadafetch
apkg files armadafetch
apkg remove armadafetch
```

Se requiere el reconocimiento legítimo de musl base (apkg 0.1.1 o rama 0.2.1 ya
entregados); no registrar una musl ficticia ni suprimir la dependencia. No se actualiza
el gestor en esta entrega. Ante interrupciones seguir `apkg recover` de su versión.

APKG/1 instala solo seis archivos regulares en /usr/local/bin y
/usr/local/share/armadafetch: ejecutable, LICENSE, README.txt, config.example,
logos.txt y hardware.example. No enlaces, hooks, servicios ni archivos /etc.
La configuración local queda fuera del paquete y se conserva al actualizar/eliminar.
APKG/1 puede crear directorios con umask 077; en una primera instalación, preparar
solo los directorios públicos que falten con modo 0755, sin cambiar los existentes:

```sh
for d in /usr/local /usr/local/bin /usr/local/share /usr/local/share/armadafetch; do
    if [ ! -e "$d" ]; then mkdir -m 0755 "$d" || exit 1; fi
done
```

## Identidad manual opcional

Si DMI/device tree no identifican el equipo, el administrador puede crear
`/etc/armadammx-hardware.conf` después de comprobar físicamente el modelo:

```ini
vendor=Compaq
model=Armada 1573DM
```

No es un comando ejecutable. ASCII imprimible, máximo 2048 bytes, vendor/model
únicos, modelo obligatorio, sin comillas ni expansiones. No declara cachés, CPU,
frecuencias o capacidades. La salida lleva [configured]. No se copia automáticamente
el ejemplo del paquete, y el archivo ni siquiera se lee sin solicitar hardware.
DMI/device tree válidos tienen prioridad; la configuración nunca los sobrescribe.

## Opciones y ejemplos

```sh
armadafetch --help
armadafetch --version
armadafetch --minimal
armadafetch --full --no-logo
armadafetch --fields hardware,cache,zram --no-logo
armadafetch --fields network-detail --no-logo
armadafetch --fields battery
armadafetch --style neofetch --logo armada --blocks
armadafetch --style screenfetch --logo compact
armadafetch --style fastfetch --sections --bars
armadafetch --style hyfetch --palette rainbow
armadafetch --style hyfetch --palette ocean
armadafetch --style hyfetch --palette sunset
armadafetch --style hyfetch --stripes 196,208,226,46,21,93
armadafetch --wrap
armadafetch --no-wrap
armadafetch --no-logo --color never
armadafetch --color auto
armadafetch --palette classic
armadafetch --units bytes --fields memory,swap,zram
armadafetch --plain
armadafetch --json
```

Perfiles independientes inspirados visualmente en sus nombres, no compatibilidad
completa con las herramientas originales. Logos originales ASCII de 7 bits:
armada, compact, minimal, none/--no-logo; adaptación automática al ancho de terminal.
Wrap predeterminado prioriza espacios y continúa valores largos sin perder bytes;
solo divide tokens que exceden el ancho disponible; --no-wrap marca ~.
Los límites de seguridad de buffers siguen vigentes y se marcan [truncated].
ANSI 256 solo para ocean/sunset/stripes; classic usa colores básicos. Auto desactiva
color con stdout redirigido, TERM=dumb o NO_COLOR no vacío. Always lo fuerza;
never lo elimina. JSON y TSV siempre van sin ANSI y sin ajuste de líneas.
JSON conserva el formato plano de cadenas/null; --json-details está pospuesto.

Configuración opcional /etc/armadafetch.conf y $HOME/.config/armadafetch/config:
key=value literal, máximo 4096 bytes, sin ejecución ni expansión. CLI tiene prioridad;
--no-config omite ambos y --config FILE elige uno explícito. Claves conservadas:
style, fields, logo, palette, color, units, stripes; nuevas: wrap, bars, sections,
blocks (yes/no). Ejemplo instalado solo en /usr/local/share/armadafetch/config.example.

zram se limita a dispositivos activos como swap, cuatro detalles como máximo.
Distingue configuración lógica, datos originales, comprimidos, memoria física,
ocupación swap y los dos ratios. No divide por cero ni calcula un porcentaje de
ahorro ficticio. Cache se refiere a cpu0; la única firma revisada 0/5/8/1 de GenuineIntel con MMX
puede usar L1 16+16 KiB marcada [CPU specification]. L2 permanece unknown sin
evidencia. Sin coincidencia documental, sysfs o CPUID útil, se conserva unknown.
Las velocidades virtuales se marcan reported speed; no representan rendimiento
de VPN ni enlace físico. Ver cache-0.2.1.md para fuentes y límites.
network-detail conserva IFF_UP/operstate/IP independientes, contadores acumulados,
no velocidades de transferencia calculadas ni afirmaciones de tinc sin evidencia.
APM conserva la salida física -1 ? y no deduce autonomía/desgaste/salud.

## Benchmark y mediciones físicas posteriores

`elapsed_us` y `cpu_us` son deltas del mismo intervalo dentro de main, hasta
render/flush. `diagnostic_elapsed_us` y `diagnostic_cpu_us` separan la inspección
RSS/PSS; el formateo del diagnóstico queda fuera de ambos. main.c permanece
idéntico a 0.2.1. Unidades us no garantizan resolución us, especialmente en QEMU
con reloj CPU basado en jiffies. No confundir tiempo interno con lanzamiento externo.

RSS/PSS son muestras posteriores; maxrss es el máximo de vida y puede incluir
el lanzador previo a exec. source_open_attempts incluye intentos fallidos y smaps;
no es una medida del total de syscalls. Las trazas del servidor se entregan aparte.

La prueba física de 0.2.2 **no se ha realizado**. Cuando se autorice, puede medirse
sin actualizar el ejecutable administrado: transferir el binario entregado con
nombre de candidato y verificar su hash obtenido por canal confiable. Conservar
la copia estable antes de cualquier actualización:

```sh
cp -p /usr/local/bin/armadafetch /home/cgpt/armadafetch-0.2.1-baseline
/home/cgpt/armadafetch-0.2.1-baseline --no-config --version
# Candidato entregado/verificado por separado, aún no instalado mediante apkg:
/home/cgpt/armadafetch-0.2.2-candidate --no-config --version
sh /home/cgpt/benchmark-ab.sh \
  /home/cgpt/armadafetch-0.2.1-baseline \
  /home/cgpt/armadafetch-0.2.2-candidate 30
```

El script compara default, minimal, full, network, network-detail, packages, cache
hyfetch, alternando A/B. No instala nada ni crea archivos temporales; la copia y
transferencia de binarios son operaciones explícitas del administrador. Capturar
la salida desde el cliente SSH en Debian, sin registrar archivos en CompactFlash:

```sh
ssh -o StrictHostKeyChecking=yes root@IP_DEL_ARMADA \
  'sh /home/cgpt/benchmark-ab.sh /home/cgpt/armadafetch-0.2.1-baseline /home/cgpt/armadafetch-0.2.2-candidate 30' \
  > armadafetch-comparison.txt
python3 scripts/armadafetch/summarize-ab.py < armadafetch-comparison.txt \
  > armadafetch-comparison.json
```

El JSON conserva todas las muestras, mediana/media/mínimo/máximo/desviación y
cambio porcentual. Mantener condiciones iguales de carga, redirección, entorno,
configuración y terminal. No ejecutar simultáneamente compilaciones o transferencias
pesadas. Repetir la serie si su variabilidad impide distinguir un cambio relevante.

Referencia física 0.2.1: default (15 muestras) mediana 14.213 ms, PSS 143 KiB,
RSS 608 KiB, pico 728 KiB y 12 aperturas; full (5 muestras) 42.781 ms, PSS 168 KiB,
pico 728 KiB y 50 aperturas. Cero hijos. Los puntos originales en us son millares;
no son tiempos inferiores al microsegundo. No se recibieron muestras crudas.
El objetivo de 13 ms y PSS <160 KiB es orientativo y solo puede aceptarse tras medir.

Revisar visualmente terminales de 80, 132 y 237 columnas, además de estrechas:

```sh
/home/cgpt/armadafetch-0.2.2-candidate --no-config --fields cache,hardware --no-logo
/home/cgpt/armadafetch-0.2.2-candidate --no-config --fields zram,network-detail,network,flags --no-logo --wrap
/home/cgpt/armadafetch-0.2.2-candidate --no-config --full --no-logo --no-wrap
/home/cgpt/armadafetch-0.2.2-candidate --no-config --full --json
```

Deben conservarse Hardware `Compaq Armada 1573DM [configured]`, cachés
`L1 I 16 KiB; L1 D 16 KiB [CPU specification]; L2 unknown`, APM y estadísticas
zram. No cambiar `/etc/armadammx-hardware.conf`. TUN/TAP con operstate unknown
sigue administrativamente UP si lo indican sus flags. Su velocidad es reportada
por el controlador, no rendimiento físico. No activar escaneos ni consultas de red.

Una diferencia relevante obliga a detener la aceptación y revisar los registros;
no se elimina 0.2.1. Si la actualización fue interrumpida, utilizar `apkg recover`
según la versión instalada antes de otra operación. No restaurar solamente la BD
ni sobrescribir manualmente archivos administrados: recuperación y `apkg verify`
deben dejar coherentes archivos y registro. Tras recuperar puede revertirse con
el paquete 0.2.1 verificado mediante el comando `apkg upgrade` indicado arriba.
No detener servicios ni reiniciar el equipo para probar o revertir ArmadaFetch.
