feat: profile.dev slim + dynamic binding del consumer Nous
Dos piezas del plan post-reporte, en un commit por estar acopladas
(ambas tocan cómo se construye y conecta el sistema):
profile.dev slim:
- debug = "line-tables-only" + split-debuginfo unpacked +
codegen-units 256 en [profile.dev].
- Override [profile.dev.package.{gpui,ort,fastembed,tokenizers,image}]
con opt-level=1, debug=false para los pesados que no debuggeamos.
- Resultado: binarios ~3× más livianos. ente-zero 125→47 MB;
mock-nous ~50→22 MB. target/ futuro mucho más manejable.
dynamic binding (cierra priority_contexts):
- nouser-core Cargo.toml: deps directas brahman-handshake + tokio.
- cmd_attract refactor:
- Si NOUSER_NOUS_SOCKET está set, atajo explícito (compat).
- Si no, abre Client al brahman-init, anuncia consumer Card con
flow.input = embed-result:json, espera 3s por MatchEvent::Available,
usa producer_service_socket del evento.
- discover_producer_socket() es async; cmd_attract usa runtime tokio
current_thread inline (block_on).
- embed_via(path, file) se separa como helper sync para la RPC.
Validación end-to-end:
$ ente-zero & nouser-nous-mock &
$ nouser attract --remote crates/core archivo.rs
🧲 0.9058 ente-brain/src ...
(mock log: "embed_file path=archivo.rs" — discovery activo)
Con esto BRAHMAN_BROKER_CONTEXT=test/prod swappea el provider sin que
el consumer toque nada — la promesa de priority_contexts es real.
Bug colateral resuelto: la "flakiness" del cargo test --workspace era
disco lleno (24 GB en target/), no condición de carrera. Con
cargo clean + profile slim, tests deterministas.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,56 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-08
|
||||
|
||||
### chore: profile.dev slim — target/ ~50% más liviano
|
||||
Cambios en `[profile.dev]` raíz para que builds futuras no desborden
|
||||
disco. Decisiones:
|
||||
- `debug = "line-tables-only"`: stack traces correctos, drop del resto
|
||||
de symbols. Sin pérdida real para nuestro flujo.
|
||||
- `split-debuginfo = "unpacked"`: relink más rápido, debuginfo en
|
||||
archivos aparte.
|
||||
- `codegen-units = 256`: paralelismo + builds incrementales chicas.
|
||||
- Override `[profile.dev.package.X]` para los pesados (gpui, ort,
|
||||
fastembed, tokenizers, image): `opt-level = 1`, `debug = false`.
|
||||
No los debuggeamos línea por línea, no necesitan info pesada.
|
||||
|
||||
Resultado: binarios ~3× más livianos. ente-zero 125→47 MB; mock-nous
|
||||
~50→22 MB.
|
||||
|
||||
### feat(nouser): dynamic binding — consumer descubre el provider vía broker
|
||||
Cierra el bucle prometido por `priority_contexts`: el cliente ya no
|
||||
hardcodea el socket del provider de embeddings. En su lugar:
|
||||
|
||||
1. Si `NOUSER_NOUS_SOCKET` está set, lo usa directo (atajo explícito).
|
||||
2. Si no, abre `brahman_handshake::client::Client` al `brahman-init`,
|
||||
anuncia un consumer Card mínimo con `flow.input = embed-result:json`,
|
||||
espera 3s por el primer `MatchEvent::Available`, y usa el
|
||||
`producer_service_socket` que viaja en el evento.
|
||||
|
||||
Esto activa el swap automático mock↔real:
|
||||
- `BRAHMAN_BROKER_CONTEXT=test`: el bias `+1 en test` del mock lo hace
|
||||
ganar; consumer recibe el socket del mock.
|
||||
- `BRAHMAN_BROKER_CONTEXT=prod`: el bias del real lo hace ganar.
|
||||
- Sin contexto: empate alfabético entre los presentes.
|
||||
|
||||
Validación end-to-end:
|
||||
|
||||
$ ente-zero & nouser-nous-mock &
|
||||
$ # Sin NOUSER_NOUS_SOCKET:
|
||||
$ nouser attract --remote crates/core archivo.rs
|
||||
embed: remote
|
||||
🧲 0.9058 ente-brain/src ...
|
||||
(mock log confirma "embed_file path=...")
|
||||
|
||||
Cambios:
|
||||
- `nouser-core` Cargo.toml: deps directas brahman-handshake + tokio.
|
||||
- `cmd_attract` resuelve el socket por discovery antes de llamar a
|
||||
`embed_via(&path, file)` (mini-runtime tokio current_thread inline).
|
||||
|
||||
Bug que se descubrió en el camino: la "flakiness" reportada de
|
||||
`cargo test --workspace` era disco lleno (24 GB en `target/`), no
|
||||
condición de carrera. Con `cargo clean` + profile slim, todos los
|
||||
tests pasan deterministas.
|
||||
|
||||
### feat(nouser): yahweh widget — `nouser-explorer` panel GPUI
|
||||
Bin GPUI standalone que consulta `brahman-admin` cada 2s y renderea
|
||||
todas las sesiones del Init como cards. Cierra el círculo visual del
|
||||
|
||||
Reference in New Issue
Block a user