Repository navigation
Conversation
El workflow w3-evidence.yml vive en w2-fase-a; GitHub solo ofrece para dispatch los workflows presentes en la rama por defecto del repo. Se añade aquí (mismo contenido, sin cambios) para que aparezca en el desplegable de "Run workflow" del fork y se pueda lanzar con ref=w2-fase-a. Co-Authored-By: Claude Code <noreply@anthropic.com>
El run falló en el primer paso: `windows-latest` es ahora la imagen windows-2025-vs2026, sin WSL instalado. Las imágenes con WSL preinstalado son windows-2022 y windows-2019 (el lab W0 corrió en la que entonces era latest). Se fija windows-2022 y se añade una comprobación explícita de WSL al inicio, para que su ausencia se reporte con un mensaje claro en vez de un exit code opaco. Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: [CC] <noreply@anthropic.com>
…ev6#90 Trasplanta a main el contrato `WslAdapter` y su implementación real contra `wsl.exe`, junto con el lab W3 que lo acredita con WSL real: - src-tauri/src/wsl/: Fase A (mod.rs contrato + mock determinista, errors.rs) y Fase B (real.rs RealWslAdapter, process.rs lanzador con cancelación acotada nivel 1). Solo depende de cli_process + std. - lib.rs: expone `pub mod wsl`. - src-tauri/examples/wsl-wslenv-probe.rs: harness que mide WSLENV por el lanzamiento real del adaptador (run_command -> env_with -> ProcessRunner con env_clear().envs()); no es un binario del producto. - .github/workflows/w3-evidence.yml + scripts/wsl-f14-probe.rs: el lab de evidencia — Gap 1 (pidfile endurecido, kill acotado, testigo ajeno), Gap 1b (timeout del host), Gap 2 (F14 doble frontera por la vía real) y Gap 3 (WSLENV por el adaptador real, allowlist x ramas + no-duplicar). El lab ejercita el código real y en WSL real destapó y corrigió un bug de shell_strategy (exec no ejecuta builtins -> SCRIPT_COMMAND_V). Incluye el Caso I estricto (debe escalar a KILL) y el contrato nonpath=ausente. Co-Authored-By: Claude Code <noreply@anthropic.com>
|
@sosan gracias por traer el adaptador y la evidencia. Al ampliar la revisión del head
Siguen pendientes el |
egdev6#90) - real.rs: el test shell_strategy_uses_command_v_script_not_exec movía `runner` en `adapter(runner)` y luego leía `runner.calls()` (E0382 del CI). FakeRunner ya deriva Clone (Arc<Mutex>), así que se pasa `runner.clone()` y el test conserva el acceso a las llamadas reales. - real.rs: eliminar `let mut args = args;` redundante en list_distributions_uses_verbose_list_without_distro. - wsl-wslenv-probe.rs: documentar en parse_env la limitación del salto de línea en el formato `env` (valores con `=` se conservan enteros). - docs/i18n-inventory.md: regenerado (el módulo wsl/ añade textos i18n). Hallazgo de revisión descartado tras verificación: `exec "$@"` con `$@` entrecomillado NO re-evalúa $(...) en los posicionales (confirmado en shell real); no hay inyección por variables de entorno, y read_file usa run_scoped a propósito para conservar la cancelación acotada. Co-Authored-By: Claude Code <noreply@anthropic.com>
|
@sosan gracias. He revisado el head Resuelto en
|
…nes) en feat/wsl-adapter Trae a la rama de la PR el main vigente de egdev6/quorb (f3897bc, incluye egdev6#207 y egdev6#219). docs/i18n-inventory.md se regenera desde el árbol fusionado en un commit aparte para que el header refleje el head real. Co-Authored-By: Claude Code <noreply@anthropic.com>
1. shell_strategy no confunde error WSL con ausencia de Bash: `control_raw` devuelve el output crudo, así que se clasifica con `errors::classify`: si la salida contiene un token WSL reconocido (p. ej. WSL_E_DISTRO_NOT_FOUND porque la distro desapareció entre la enumeración y la sonda), se propaga el error real en vez de caer a `ShPosix` como estrategia válida. El fallback a `ShPosix` queda solo para el caso normal `command -v` sin bash (salida vacía, sin token). Regresión: shell_strategy_propagates_wsl_distro_loss_not_sh_posix. 2. kill_remote_process no escala tras observar la muerte: si una sonda `kill -0` ve el PID muerto, se rompe y NO se vuelve a comprobar ni se envía KILL (un `kill -0` posterior podría devolver 0 porque el PID fue reutilizado por otro proceso — señalizar al proceso equivocado). La identidad de la instancia se protege observando la desaparición, no volviendo a preguntar por el número. Test determinista case_disappears_then_reappears: PID que desaparece y reaparece con otra identidad → no recibe KILL. 3. session_path usa semántica del GUEST (POSIX), no del host Windows: `Path::is_absolute()` en Windows devuelve false para `/home/u/...` y true para `C:\...`, justo al revés del guest. Nuevo helper `is_guest_absolute` (empieza por `/`) y tests: una ruta Windows explícita se rechaza en modo WSL, y `/etc/passwd` como relativa del proveedor se rechaza aunque en Windows no sea "absoluta". docs/i18n-inventory.md regenerado tras integrar main del upstream (incluye egdev6#207 y egdev6#219) y los cambios de este commit. Co-Authored-By: Claude Code <noreply@anthropic.com>
El gate compara el hash del árbol `src-tauri/src/` con el declarado, así que los cambios de los 3 hallazgos lo dejaban desactualizado (aunque los textos no hubieran cambiado). Regenerado desde el árbol actual. Co-Authored-By: Claude Code <noreply@anthropic.com>
|
@egdev6 aplicados los 3 hallazgos de tu revisión y regenerado el inventario. CI completo en verde sobre el head final y W3 re-ejecutado sobre ese mismo head. Hallazgos aplicados (commit
|
| Check | Resultado |
|---|---|
| Tests and build (Windows) | ✅ pass |
| Tests and build (Linux) | ✅ pass |
| Tests and bundle (macOS ARM64) | ✅ pass |
| Secrets scan | ✅ pass |
| Static code safety | ✅ pass |
W3 re-ejecutado sobre este head (cb075d1): run 41123308916 → ✅ success. Artefacto w3-evidence.
GAP1: PASS
GAP1B: PASS
GAP2: PASS (24/24)
GAP3: PASS (26/26; 13 por distro)
VERDICT GLOBAL: PASS
Tests del módulo WSL en local: 73 passed / 0 failed.
|
@sosan, revisé el head Quedan dos puntos antes de integrar:
Mantendría la PR sin integrar hasta resolver ambos puntos. Esta revisión fue estática más contraste de evidencia remota, sin ejecutar código de la PR. |
Adaptador WSL (Fase A+B) + lab W3 de evidencia — issue #90
Trae a
mainel adaptador WSL de Quorb con su contrato inyectable y el lab que lo acredita con WSL real.Qué incluye
src-tauri/src/wsl/— solo depende decli_process+ std (sin deps nuevas en Cargo.toml):WslAdapter(mod.rs),MockWslAdapterdeterminista, errores tipados (errors.rs).RealWslAdaptercontrawsl.exe(real.rs), lanzador con cancelación acotada nivel 1 (process.rs), pidfile endurecido.lib.rs: exponepub mod wsl.Lab de evidencia W3 (no es código de producto):
src-tauri/examples/wsl-wslenv-probe.rs: mide WSLENV por el lanzamiento REAL del adaptador (run_command→env_with→ ProcessRunner conenv_clear().envs()), con absent ≠ empty..github/workflows/w3-evidence.yml+scripts/wsl-f14-probe.rs: Gap 1 (pidfile, kill acotado, testigo), Gap 1b (timeout del host), Gap 2 (F14 doble frontera por la vía real), Gap 3 (WSLENV allowlist × ramas + no-duplicar).Hallazgo del lab
Al ejercitar el adaptador real (como pidió la revisión), el lab destapó que
shell_strategyusabaexec "$@"concommand -v bash— perocommandes un builtin, no un binario, así que fallaba con 127 en ambas distros. Corregido conSCRIPT_COMMAND_V(command -v "$1"), y el exit code de la sonda se trata como respuesta (no error): sin bash →ShPosix.Evidencia
Run del lab sobre este head (
6efc038): 41050473110 → ✅ success,VERDICT GLOBAL: PASS— GAP1 PASS, GAP1B PASS, GAP2 PASS (24/24), GAP3 PASS (26/26, 13 por distro). Artefactow3-evidence.🤖 Generated with Claude Code