Skip to content

feat(laws): v4.2.0 — laws layer de-dup, tier legibility, post-promotion audit#84

Merged
fermonterom merged 1 commit into
mainfrom
fix/laws-v4.2.0
Jul 5, 2026
Merged

feat(laws): v4.2.0 — laws layer de-dup, tier legibility, post-promotion audit#84
fermonterom merged 1 commit into
mainfrom
fix/laws-v4.2.0

Conversation

@fermonterom

Copy link
Copy Markdown
Owner

Origen

Pregunta de Fer: "¿son las laws la mejor forma de hacer esto, o son ruido?" Investigado con datos medidos + contra-análisis adversarial de 3 agentes que refutó las ideas invasivas (encoger a 5-7, demotar gotchas, parar auto-promoción) y confirmó las quirúrgicas. Rationale completa en docs/DESIGN-laws-v4.2.md.

Fixed

  • Doble inyección (bug medido): read-instructions (41 inyecciones PreToolUse redundantes) + pref-fix (17) existían como ley Y como instinct activo. injector-engine.js ahora salta candidatos con ley gemela laws/{id}.txt; manual_swap_promote archiva el instinct fuente como ya hacía auto_promote_to_law (fix de raíz).
  • advisor-escalation adelgazada 1505→717 chars (era el 26% del presupuesto de leyes).
  • Regresión bash-cat-use-read de v4.1.0: el negative-lookahead de reducción de ruido excluía también targets legítimos (cat file.py | head, tail file.json | grep) donde Read/Grep ES mejor, rompiendo el contrato de test_reflex_matchers. Revertido en seed + live.

Added

  • Split de presentación por tier (session-start.py + core/laws-meta.default.json): las leyes se renderizan en dos bloques [principios] vs [herramienta] para que los principios no se diluyan con gotchas mecánicos. Retrocompatible (sin meta → un bloque).
  • law_audit() + CLI law-audit (distill_engine.py): por ley {id, tier, age_days, dup_active_instinct, backing_instinct_noise}.law-audit.json. Legibilidad periódica para podar leyes con datos (medir "ley seguida" es irresoluble sin trigger, confirmado por el adversarial).

Rechazado como falso positivo (adversarial)

  • Scoping por dominio: solo 2-3 leyes son de dominio de proyecto; el resto son universales de tooling → maquinaria nueva injustificada.
  • Demotar 7 gotchas a instinct: riesgo de trigger-miss (se promovieron porque son universales y ya pasaron trigger-gating).
  • Encoger a 5-7 curadas a mano: sin evidencia de que el contenido sea malo; coste <0.5%.

Verificación

  • Suite completa verde: 39/39 suites, 0 fallos. Test pair + módulos afectados + test_reflex_matchers (28/0 tras el fix).
  • Desplegado v4.1.0→v4.2.0 vía install.sh (con seed de laws-meta en install.sh/ps1) y verificado end-to-end: dos bloques, law-audit CLI, guard del injector.

🤖 Generated with Claude Code

…on audit

Follow-up to "are laws the right mechanism or noise?" — investigated with measured
data + a 3-agent adversarial pass that refuted the invasive ideas (shrink, demote,
stop auto-promotion) and confirmed the surgical ones. Rationale: docs/DESIGN-laws-v4.2.md.

Fixed:
- Double injection (measured): read-instructions (41x) + pref-fix (17x) existed as
  law AND active instinct. injector-engine.js now skips candidates with a laws/{id}.txt
  twin; manual_swap_promote archives the source instinct like auto_promote already did.
- advisor-escalation trimmed 1505->717 chars (was 26% of the law budget).
- bash-cat-use-read v4.1.0 regression: the noise-reduction lookahead also excluded
  legit targets (cat file.py | head); reverted to satisfy test_reflex_matchers contract.

Added:
- Law presentation split by tier (session-start.py + core/laws-meta.default.json):
  [principios] vs [herramienta] blocks so principles aren't diluted. Backward compatible.
- law_audit() + law-audit CLI (distill_engine.py) for periodic legibility.

Rejected as misdiagnoses (adversarial): domain-scoping (payoff negligible), demoting
gotchas (trigger-miss risk), hand-curating to 5-7 (no evidence content is bad).

Full suite green (39/39). Deployed v4.1.0 -> v4.2.0 and verified end-to-end.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@fermonterom
fermonterom merged commit 21272e1 into main Jul 5, 2026
@fermonterom
fermonterom deleted the fix/laws-v4.2.0 branch July 5, 2026 00:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant