Reimplementación de dos aportaciones de @NestorPVsf que quedaron bloqueadas por deriva de base, no por calidad.
Origen y crédito
El diseño original es de @NestorPVsf en los PRs #9 (laws tier) y #12 (reflexes), portado a su vez desde fs-cortex, de Fernando Montero, bajo licencia MIT. Ambos créditos se conservan en el código, en CHANGELOG.md y en docs/FEATURES.md. Las ramas cortex-fusion-laws y cortex-fusion-reflexes quedan como referencia de implementación y no se borran.
Por qué se cerraron los PRs originales
Se abrieron contra v4.6.x. main va ya por v4.9.0 y v4.8.0 extrajo Plexus (breaking), así que ambos quedaron en CONFLICTING sobre CHANGELOG.md, docs/FEATURES.md, install.sh e install.bat.
Medido con git merge-tree, los conflictos son uniones mecánicas: cada lado añade su chmod/copy y su bloque Step 5c, y se resuelven conservando ambos. Lo que no aparece como conflicto es el coste real:
tests/test-installer-hardening.sh (llegado con v4.8.1, posterior al PR) fija en 7 el número de hooks en cuatro asserts — T1, T8, T19, T21 — contando hooks reales vía count_sinapsis_hooks. El tier de laws añade un SessionStart que lo lleva a 8 y rompe los cuatro sin un solo marcador de conflicto.
- En
core/settings.template.json, "_hooks_total": 7 se auto-fusiona sin conflicto porque ambas ramas cambiaron 6→7 de forma independiente. Son sietes distintos: el de main incluye PreCompact y excluye SessionStart, el del PR al revés. El fichero resultante tendría 8 hooks declarando 7.
Mantener los PRs abiertos esperando un rebase que la base vuelve a invalidar no le hace justicia al trabajo. Se cierran y se rehacen aquí.
Alcance
De #9 — laws tier (~382 LOC que se portan limpias):
core/_laws-injector.sh (~93 LOC) + hook SessionStart
seeds/laws/ — 5 leyes semilla + README
tests/test-laws.sh (~184 LOC)
commands/promote.md — promoción de instinct a law
De #12 — reflexes (~387 LOC limpias):
core/_reflex-merge.mjs (~100 LOC), merge idempotente
seeds/reflexes.json — 5 reglas pasivas
tests/test-reflexes.sh (~235 LOC)
Ajustes obligatorios sobre v4.9.0
core/settings.template.json: _hooks_total a 8, con SessionStart y PreCompact en el breakdown. El campo no tiene consumidores en código (es documentación), pero un valor que miente es peor que ninguno.
tests/test-installer-hardening.sh: actualizar los 4 asserts de 7 a 8 hooks. Verificado hoy sobre v4.9.0 en un HOME limpio: el instalador registra 7 (PreToolUse 4, PostToolUse 1, Stop 1, PreCompact 1).
install.sh / install.bat: conservar el chmod/copy de _precompact-guard.sh y la nota de hands-off de Plexus (v4.8.0) al añadir los bloques Step 5c. Actualizar los contadores de los mensajes finales ("6 hook scripts…").
.github/workflows/tests.yml: registrar test-laws.sh y test-reflexes.sh.
- Cuidado con dos trampas del bloque
node -e de _session-learner.sh si el port lo toca: no admite comilla simple literal (cierra el string de bash — ver comentario en el propio fichero), y su stderr va al log desde v4.9.0.
Nota
@NestorPVsf: si retomas esto, dilo por aquí y te lo reasigno — el port es tuyo y prefiero que lo firmes tú. Cerrar los PRs no es un rechazo del trabajo, es que la base se movió dos versiones menores mientras esperaban y prefiero no pedirte un tercer rebase sobre algo que seguirá moviéndose.
Reimplementación de dos aportaciones de @NestorPVsf que quedaron bloqueadas por deriva de base, no por calidad.
Origen y crédito
El diseño original es de @NestorPVsf en los PRs #9 (laws tier) y #12 (reflexes), portado a su vez desde fs-cortex, de Fernando Montero, bajo licencia MIT. Ambos créditos se conservan en el código, en
CHANGELOG.mdy endocs/FEATURES.md. Las ramascortex-fusion-lawsycortex-fusion-reflexesquedan como referencia de implementación y no se borran.Por qué se cerraron los PRs originales
Se abrieron contra v4.6.x.
mainva ya por v4.9.0 y v4.8.0 extrajo Plexus (breaking), así que ambos quedaron en CONFLICTING sobreCHANGELOG.md,docs/FEATURES.md,install.sheinstall.bat.Medido con
git merge-tree, los conflictos son uniones mecánicas: cada lado añade suchmod/copyy su bloqueStep 5c, y se resuelven conservando ambos. Lo que no aparece como conflicto es el coste real:tests/test-installer-hardening.sh(llegado con v4.8.1, posterior al PR) fija en 7 el número de hooks en cuatro asserts — T1, T8, T19, T21 — contando hooks reales víacount_sinapsis_hooks. El tier de laws añade unSessionStartque lo lleva a 8 y rompe los cuatro sin un solo marcador de conflicto.core/settings.template.json,"_hooks_total": 7se auto-fusiona sin conflicto porque ambas ramas cambiaron 6→7 de forma independiente. Son sietes distintos: el demainincluyePreCompacty excluyeSessionStart, el del PR al revés. El fichero resultante tendría 8 hooks declarando 7.Mantener los PRs abiertos esperando un rebase que la base vuelve a invalidar no le hace justicia al trabajo. Se cierran y se rehacen aquí.
Alcance
De #9 — laws tier (~382 LOC que se portan limpias):
core/_laws-injector.sh(~93 LOC) + hookSessionStartseeds/laws/— 5 leyes semilla + READMEtests/test-laws.sh(~184 LOC)commands/promote.md— promoción de instinct a lawDe #12 — reflexes (~387 LOC limpias):
core/_reflex-merge.mjs(~100 LOC), merge idempotenteseeds/reflexes.json— 5 reglas pasivastests/test-reflexes.sh(~235 LOC)Ajustes obligatorios sobre v4.9.0
core/settings.template.json:_hooks_totala 8, conSessionStartyPreCompacten el breakdown. El campo no tiene consumidores en código (es documentación), pero un valor que miente es peor que ninguno.tests/test-installer-hardening.sh: actualizar los 4 asserts de 7 a 8 hooks. Verificado hoy sobre v4.9.0 en unHOMElimpio: el instalador registra 7 (PreToolUse 4, PostToolUse 1, Stop 1, PreCompact 1).install.sh/install.bat: conservar elchmod/copyde_precompact-guard.shy la nota de hands-off de Plexus (v4.8.0) al añadir los bloquesStep 5c. Actualizar los contadores de los mensajes finales ("6 hook scripts…")..github/workflows/tests.yml: registrartest-laws.shytest-reflexes.sh.node -ede_session-learner.shsi el port lo toca: no admite comilla simple literal (cierra el string de bash — ver comentario en el propio fichero), y sustderrva al log desde v4.9.0.Nota
@NestorPVsf: si retomas esto, dilo por aquí y te lo reasigno — el port es tuyo y prefiero que lo firmes tú. Cerrar los PRs no es un rechazo del trabajo, es que la base se movió dos versiones menores mientras esperaban y prefiero no pedirte un tercer rebase sobre algo que seguirá moviéndose.