SDD 26 §7.bis: el camino de native messaging existe, con su sonda y su control

Antes de escribir el crate del host en tawasuyu había que saber si el mecanismo
funciona en nuestro build. Funciona, y el cuadro deja las cuatro cosas que hacen
falta para escribirlo: dónde va el manifiesto (/usr/lib/mozilla, no el appdir),
qué instala de verdad la extensión (el escaneo de distribution/extensions, NO el
install_url de la política), que el host tiene que ser un proceso largo, y que el
único error que nombra la causa es el del puerto de connectNative.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNFzrqFBEt6W7maGJKf2Xs
This commit is contained in:
Sergio
2026-09-07 20:27:30 +00:00
co-authored by Claude Opus 5
parent c13be792ab
commit 1bebeab818
+25 -1
View File
@@ -816,6 +816,30 @@ proyecto nuevo. El binario vive en tawasuyu (es suite, no build system); `atuq`
dep y le deja el manifiesto de native messaging en su sitio. **El nombre del crate se decide en
tawasuyu y con su regla 10 puesta** — acá no se bautiza nada de allá.
### 7.bis El camino EXISTE, y tres cosas que no eran obvias (2026-09-07)
Antes de escribir un crate contra un mecanismo hay que saber si el mecanismo funciona en NUESTRO
build —propio, rebrandeado, con `MOZ_REQUIRE_SIGNING` vacío—, así que se puso una **sonda**:
extensión de diez líneas con permiso `nativeMessaging` y un host de tres que contesta `{"ok":true}`.
Vive en `scripts/test-atuq-nativo.py`, con control negativo:
positivo MENSAJE {"ok":true}
control DESCONECTADO No such native application puente_atuq
El control no sólo falla: **nombra la causa**, que es lo que confirma que la ruta del manifiesto es
la que se probó. Lo que hay que saber para escribir el host:
| Qué | Medido |
|---|---|
| Dónde va el manifiesto | **`/usr/lib/mozilla/native-messaging-hosts/`**, NO el appdir. Sale de `XRESysNativeManifests`, un `/usr/lib/mozilla` compilado; el rebranding a `atuq` no lo mueve |
| Cómo se instala la extensión | por el **escaneo de `distribution/extensions/`**. `ExtensionSettings.install_url` con `file://` no instala nada, ni con `force_installed` ni con el XPI dentro del appdir, y **sin una línea de log** |
| Forma del host | un proceso **largo**: si escribe la respuesta y sale, Gecko cierra el puerto sin entregarla — `onDisconnect` «sin error y sin mensaje», el peor informe posible |
| Con qué diagnosticar | el error del puerto de `connectNative`. `sendNativeMessage` devuelve «An unexpected error occurred» para todo y no distingue nada |
⚠ La tercera fila del cuadro corrige una lectura fácil de `policies.json`: los dos mecanismos
apuntan a los mismos ficheros y se tapan uno al otro, así que la política PARECE ser la que instala.
Fija y configura; instalar, no.
## 8. Plan, por unidades de trabajo
Cada una cierra sola, se commitea y se pushea. El orden no es preferencia: cada una destraba a la
@@ -834,7 +858,7 @@ siguiente.
| 4.e | **v0.3: página de inicio y pestaña nueva** por extensión de sistema; exigió `MOZ_REQUIRE_SIGNING` vacío | y con eso queda destrabada la unidad 6 (`sct`) | rebuild de firefox |
| 4.f | **Los códecs, medidos** ✅ 2026-09-07 — H.264+AAC, VP9+Opus, AV1, MP3 y FLAC reproducen; arreglado el `LD_LIBRARY_PATH` que dejaba al RDD sin ffvpx (AV1 muerto en silencio) y nacido `scripts/test-atuq-codecs.sh` con control negativo | «se ve el vídeo», que ningún auditor de ELF podía responder | — |
| 4.c | `MOZ_BUILD_DATE` determinista ✅ — `BuildID=19700101000001`, con guardián en install y **`why-differs` 56/56 sobre dos builds reales** | el invariante de reproducibilidad | — |
| 5 | Host de native messaging (tawasuyu) | los verbos del §6 | 4 |
| 5 | Host de native messaging (tawasuyu)**camino COMPROBADO 2026-09-07** (§7.bis): sonda extensión↔proceso nativo con control negativo, y las tres trampas medidas (dónde va el manifiesto, qué instala de verdad, y que el host tiene que ser un proceso largo) | los verbos del §6 | 4 |
| 6 | `sct` v1 (extensión + testigo) | el diferenciador que nadie tiene | 5 |
| 7 | Descargas al CAS | 6.2, y alimenta 6.9 | 5 |
| 8 | Archivo + RAG | 6.3 | 5, 7 |