╔════════════════════════════════════════════════════════════════════════════╗
║           LISTA COMPLETA DE COMANDOS BASH USADOS Y PARA QUÉ               ║
╚════════════════════════════════════════════════════════════════════════════╝

CATEGORÍA 1: DETECTAR EL SISTEMA OPERATIVO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. uname -s
   Uso:    Detectar el SO (Darwin=macOS, Linux=Linux)
   Salida: Darwin
   Por qué: El install.sh usa esto para elegir cómo instalar deps

2. uname -m
   Uso:    Detectar arquitectura del procesador
   Salida: arm64 (también: x86_64, aarch64)
   Por qué: Saber si es Intel, Apple Silicon, o ARM64 Linux

3. uname -a
   Uso:    Información completa del sistema
   Salida: Darwin rigzin.local 25.1.0 Darwin Kernel...
   Por qué: Ver kernel version, hostname, arquitectura todo junto

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 2: INFORMACIÓN DE RUST (RUSTC)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

4. rustc --version
   Uso:    Ver versión de Rust instalada
   Salida: rustc 1.91.1 (ed61e7d7e 2025-11-07)
   Por qué: Verificar que sea compatible (1.75+)

5. rustc --print host-tuple  ⭐ LA MÁS IMPORTANTE
   Uso:    Obtener el target triple del sistema actual
   Salida: aarch64-apple-darwin
   Por qué: ESTO es lo que Cargo usa para elegir qué compilar
           - aarch64-apple-darwin = Mac M1/M2/M3
           - x86_64-apple-darwin = Mac Intel
           - aarch64-unknown-linux-gnu = Linux ARM64
           - x86_64-unknown-linux-gnu = Linux Intel

6. rustc --version --verbose
   Uso:    Info detallada de Rust (LLVM version, etc)
   Salida: Muestra release, commit, LLVM version
   Por qué: Debug si hay problemas de compatibilidad

7. rustc --print cfg
   Uso:    Ver características del CPU que Rust detecta
   Salida: target_arch="aarch64", target_os="macos", etc.
   Por qué: Rust usa esto para #[cfg(...)] en el código
           Los desarrolladores pueden hacer código específico para cada arch

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 3: INFORMACIÓN DE RUSTUP (TOOLCHAIN MANAGER)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

8. rustup default
   Uso:    Ver qué toolchain es el default
   Salida: stable-aarch64-apple-darwin (default)
   Por qué: Saber si está configurado correctamente

9. rustup toolchain list
   Uso:    Ver todos los toolchains instalados
   Salida: stable-aarch64-apple-darwin
           stable-x86_64-unknown-linux-gnu
           nightly-aarch64-apple-darwin
           etc.
   Por qué: Ver si tenemos múltiples versiones/targets

10. rustup target list | grep installed
    Uso:   Ver qué TARGETS están instalados para compilar
    Salida: aarch64-apple-darwin (installed)
            x86_64-apple-darwin (installed)
            x86_64-unknown-linux-gnu (installed)
    Por qué: ESTO determina si podemos hacer cross-compilation
            Si solo tienes aarch64-apple-darwin → solo puedes compilar para Mac ARM
            Si también tienes x86_64-unknown-linux-gnu → puedes compilar para Linux

11. rustup which rustc
    Uso:   Saber dónde está instalado rustc
    Salida: /Users/jesusperezlorenzo/.rustup/toolchains/stable-aarch64-apple-darwin/bin/rustc
    Por qué: Verificar que esté en el lugar correcto

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 4: INFORMACIÓN AVANZADA DE RUST
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

12. rustc --print sysroot
    Uso:   Encontrar dónde está la std library y targets instalados
    Salida: /Users/jesusperezlorenzo/.rustup/toolchains/stable-aarch64-apple-darwin
    Por qué: Verificar que todo esté en el lugar correcto

13. rustc --print sysroot | xargs -I {} ls {}/lib/rustlib/
    Uso:   Listar todos los targets disponibles en este toolchain
    Salida: aarch64-apple-darwin
            aarch64-apple-ios
            x86_64-apple-darwin
            x86_64-unknown-linux-gnu
            etc.
    Por qué: Ver exactamente qué targets puedes compilar

14. rustc --print target-list | head -20
    Uso:   Ver TODOS los targets que Rust teóricamente soporta (100+)
    Salida: Muestra todas las combinaciones posibles
    Por qué: Investigación académica, ver opciones disponibles

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 5: INFORMACIÓN DE CARGO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

15. cargo --version
    Uso:   Ver versión de cargo
    Salida: cargo 1.91.1 (ea2d97820 2025-10-10)
    Por qué: Asegurar que sea compatible

16. cargo metadata --format-version=1 --no-deps
    Uso:   Obtener info JSON sobre el workspace
    Salida: JSON con todos los crates, sus nombres, tipos, etc.
    Por qué: Automatizar acceso a información del proyecto

17. cargo build --release --dry-run
    Uso:   Ver qué HARÍA cargo sin compilar realmente
    Salida: Muestra qué se compilaría, sin hacerlo
    Por qué: Preview seguro antes de compilar largo

18. cargo build --release -v
    Uso:   Ver cada comando que cargo ejecuta (verbose mode)
    Salida: Muestra cada línea de rustc, rustcflags, etc.
    Por qué: Debug para entender exactamente qué hace cargo

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 6: INVESTIGACIÓN DEL PROYECTO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

19. ls -la .cargo/
    Uso:   Ver si existe config de cargo personalizada
    Salida: total 0 (vacío) O archivos config.toml
    Por qué: Si existe .cargo/config.toml, afecta cómo compila

20. cat .cargo/config.toml
    Uso:   Ver configuración personalizada de compilación
    Salida: [build] sections, [target.x86_64-unknown-linux-gnu] etc.
    Por qué: Cargo usa esto para cross-compilation y flags especiales

21. grep -A 10 "\[profile.release\]" Cargo.toml
    Uso:   Ver las optimizaciones de release en el proyecto
    Salida: opt-level = 3
            lto = true
            strip = true
    Por qué: Entender cómo se optimiza el build

22. cat Cargo.toml | grep resolver
    Uso:   Ver la versión de resolver que usa el workspace
    Salida: resolver = "2"
    Por qué: Afecta cómo se resuelven dependencias

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 7: INSPECCIÓN DEL TARGET DIRECTORY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

23. du -sh target/debug target/release
    Uso:   Ver tamaño de builds
    Salida: 12G     target/debug
            2.4G    target/release
    Por qué: Comparar debug vs release, ver espacio usado

24. cat target/.rustc_info.json
    Uso:   Ver info cacheada del host (target, features, etc)
    Salida: JSON con target_arch, target_os, CPU features
    Por qué: Entender qué detectó Cargo en el build anterior

25. ls -lh target/release/deps/ | head
    Uso:   Ver archivos compilados (.rlib, .dylib, .o)
    Salida: libaho_corasick-43a015cbf5e800e6.rlib (2.2M)
    Por qué: Verificar que se compiló correctamente

26. ls -lh target/release/
    Uso:   Listar ejecutables en target/release
    Salida: workspace, workspace-tui, workspace-dashboard
    Por qué: Verificar que se generaron los binarios

27. file target/release/workspace
    Uso:   Ver información del binario compilado ⭐
    Salida: Mach-O 64-bit executable arm64
            O: ELF 64-bit LSB pie executable, x86-64
    Por qué: VERIFICAR que se compiló para la arquitectura correcta

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 8: CROSS-COMPILATION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

28. rustup target add x86_64-unknown-linux-gnu
    Uso:   Instalar capacidad de compilar para Linux desde macOS
    Salida: (no output, solo instala)
    Por qué: Agregar un nuevo target para cross-compilation

29. cargo build --release --target x86_64-unknown-linux-gnu
    Uso:   Compilar explícitamente para un target DIFERENTE
    Salida: Crea target/x86_64-unknown-linux-gnu/release/
    Por qué: Cross-compilation (compilar para otro SO)

30. ls -lh target/x86_64-unknown-linux-gnu/release/
    Uso:   Ver binarios compilados para Linux
    Salida: workspace, workspace-tui, etc. (para Linux)
    Por qué: Verificar cross-compilation funcionó

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 9: ANÁLISIS DE BINARIOS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

31. file target/release/workspace
    Uso:   Ver arquitectura del binario (LA MÁS IMPORTANTE)
    Salida: Mach-O 64-bit executable arm64
            O: ELF 64-bit LSB pie executable, x86-64
    Por qué: CONFIRMAR que se compiló para la arquitectura CORRECTA
             Si en Mac ves "x86-64" hay un problema
             Si en Linux ves "arm64" hay un problema

32. nm target/release/workspace | head
    Uso:   Ver símbolos en el binario
    Salida: (vacío si está stripped)
    Por qué: Debug si sospechas problema en compilación

33. ldd target/release/workspace  (solo Linux)
    Uso:   Ver librerías dinámicas que necesita
    Salida: libstdc++.so.6, libc.so.6, etc.
    Por qué: Verificar dependencias dinámicas

─────────────────────────────────────────────────────────────────────────────

CATEGORÍA 10: BUILD Y COMPILACIÓN
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

34. cargo build --workspace
    Uso:   Compilar en debug (rápido, para desarrollo)
    Salida: Compiling workspace-core v0.1.0...
    Por qué: Build rápido durante desarrollo

35. cargo build --release --workspace
    Uso:   Compilar en release (lento, optimizado)
    Salida: Compiling workspace-core v0.1.0...
    Por qué: Build para producción, con optimizaciones

36. cargo check --workspace
    Uso:   Verificar errores sin generar binarios
    Salida: Checking workspace-core v0.1.0...
    Por qué: Feedback rápido sin compilar completo

37. cargo test --workspace --lib --release
    Uso:   Ejecutar tests con binarios optimizados
    Salida: test result: ok. X passed...
    Por qué: Validar que todo funciona antes de release

╔════════════════════════════════════════════════════════════════════════════╗
║                         RESUMEN CLAVE PARA TI                             ║
╚════════════════════════════════════════════════════════════════════════════╝

PARA ENTENDER CÓMO ELIGE CARGO EL TARGET, ESTOS 5 SON SUFICIENTES:

1. uname -s && uname -m
   → Ver qué SO y arquitectura tienes

2. rustc --print host-tuple
   → VER EXACTAMENTE QUÉ TARGET USA RUST (la clave)

3. rustup target list | grep installed
   → Ver qué targets puedes compilar

4. cargo build --release -v
   → Ver cada comando que ejecuta cargo/rustc

5. file target/release/workspace
   → CONFIRMAR que el binario es para la arquitectura correcta

════════════════════════════════════════════════════════════════════════════

ESTOS 5 COMANDOS RESUELVEN EL 99% DE PROBLEMAS DE TARGET SELECTION:

✓ ¿Por qué no compila para mi arquitectura? → file target/release/workspace
✓ ¿Cuál es mi target? → rustc --print host-tuple
✓ ¿Puedo compilar para Linux? → rustup target list
✓ ¿Qué está haciendo cargo? → cargo build -v
✓ ¿Qué SO tengo? → uname -s

════════════════════════════════════════════════════════════════════════════
