Repository navigation
ci(macos): make notarization resumable from signed checkpoints - #219
Merged
Merged
Conversation
sosan
added a commit
to sosan/quorb
that referenced
this pull request
Oct 30, 2026
…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>
sosan
added a commit
to sosan/quorb
that referenced
this pull request
Oct 30, 2026
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related issue / Issue relacionada
Refs #118 (sin cierre automático).
ODD: corrección del flujo de distribución macOS aprobado, para evitar perder el bundle cuando Apple tarda más que el runner. La primera apertura real con cuarentena de #118 sigue pendiente.
Scope / Alcance
publish: truey Environment protegido; revalida la release, no sobrescribe assets y conserva el rollback por ID propio.In Progressno publica ni reenvía.Exclusiones: no cambios de versión, Windows/updater, claves, políticas del Environment, ni ejecución de firma/notarización/publicación. Esta PR no autoriza lanzar ninguno de los workflows. Los intentos antiguos sin checkpoint no pueden recuperarse con este flujo: el primer uso necesita una compilación y envío nuevos.
Carga de revisión: 23 archivos, +2045/-554 (2599 líneas tocadas). El mantenedor eligió explícitamente una entrega única tras conocer el tamaño; se mantienen pruebas y documentación completas, sin recortar para ajustarse al umbral orientativo.
Tipo: mantenimiento/tooling (
type:chore)..github/{workflows,security-drafts}/macos-release.yml.github/{workflows,security-drafts}/macos-release-resume.ymlscripts/macos-notary-{checkpoint,submit,artifact}*.mjsscripts/macos-release-resume*.mjsscripts/verify-macos-bundle{,.test}.mjsscripts/macos-release-workflow.test.mjs,package.jsondocs/build-macos.md,docs/code-signing{,.en}.mdCoordination / Coordinación
Contribuidor: @egdev6.
Evidencia de coordinación: #118 está abierta,
status:approvedy asignada a @egdev6; implementación y PR solicitadas por el mantenedor. Sin PR abierta solapada en la consulta previa. Base local y remota comprobadas en9e98d57193bbc5d216abddb0aa46ba90d8a0614fantes de crear el commit.Acceptance and validation / Aceptación y validación
Acceptedexige UUID y hash del DMG original en el log; pendiente/rechazado no publican; solo grapa el DMG retenido; verifica firma, autoridad/team, metadata/ARM64, ticket y Gatekeeper; publicación opt-in sin overwrite y con rollback solo de asset propio.main; no se incluyen en artifacts.contents: writesolo en el job de publicación.npm test: exit 0, 785 Vitest + 296 Node.npm run typecheck: exit 0.git diff --checkygit diff --cached --check: exit 0.mainy el Environment protegido.R3-001enscripts/macos-release-resume.mjs:63–74yR4-large-artifact-extractionenscripts/macos-notary-artifact.mjs:160–162.log.sha256, servicio real de artifacts, montaje DMG, Gatekeeper, Windows nativo y primera apertura con cuarentena. Los tests usan fixtures/procesos/API simulados; una discrepancia de UUID/hash o ausencia del campo esperado bloquea la publicación. Shellcheck dedicado no ejecutado; no se añaden scripts shell independientes. Skills: no aplica.mainy run propio/manual/protegido. La comprobación de ancestros usa el snapshotorigin/maindel checkout. Ninguna de estas limitaciones acreditó un bypass externo en la revisión.Una PR abierta no implica integración. Release, secretos y firma requieren autorización separada.