chore(memory): BDR-083 + LRN-141/142 + journal + CHANGELOG + TODO W0-W8
BDR-083 records what was taken from unlazy and, more usefully, what was refused and why. LRN-141: an external skill's machinery encodes its threat model, not yours — take the invariants, refuse the machinery. LRN-142: structure locks are fixed-string, so reflowing a doctrine paragraph reds them; fix the doc, not the lock.
This commit is contained in:
@@ -1144,3 +1144,42 @@ branch) → LOT3 mis-merge trap; + 3 doctor false-warns (LRN-047 class).
|
||||
comment anchored to measured ~11.4k (LRN-088). False "92% CRITICAL" → ~5% comfortable.
|
||||
- [x] Verify — suites green (71/13/32/19/20/13 + RC 5/5); doctor 0 false-warn; shellcheck clean.
|
||||
+docs(changelog) Unreleased entry (706abff). Gate passed on GO 2026-07-03. Finish pending.
|
||||
|
||||
## 2026-08-24 — contract gates: plancher déterministe (feature/contract-gates)
|
||||
Source: analyse du skill `unlazy` (Leonxlnx/unlazy, 2.1.0). Verdict: son
|
||||
architecture de vérification n'apprend rien (contrat+verifier frais+boucles
|
||||
bornées ⊂ déjà en place). Le trou réel: **entre l'exécuteur et GATE 1 il n'y a
|
||||
aucun plancher déterministe** — GATE 1 est un dispatch LLM, et `PROOF:` est une
|
||||
ligne que le verifier ÉCRIT (rien ne l'empêche structurellement de la produire
|
||||
sans rien exécuter). Palier 2 retenu (user, 2026-08-24).
|
||||
|
||||
PRIS d'unlazy: critère porteur d'oracle exécutable (CHECK/EXPECT/EVIDENCE),
|
||||
fail-closed (exit 0 ET marqueur), evidence pending = NOT-MET, `ABANDON: <id>
|
||||
<raison>` comme handoff visible non supprimable, les 4 règles d'écriture de
|
||||
gates falsifiables, la discipline 4 passes.
|
||||
REFUSÉ: Stop hook `decision:"block"` (contredit "STOP + escalade humaine" et
|
||||
"merge sur signal humain"), approval store `~/.unlazy/approved` (résout
|
||||
l'exécution de ledgers hérités non fiables — pas notre menace), arbre
|
||||
`.unlazy/<scope>/` (4e arbre de bookkeeping ⇒ mort de la config), `tree N`
|
||||
(désavoué par ses propres docs), le checker Node 28k (stack lib = 100% bash,
|
||||
Health Stack = shellcheck).
|
||||
|
||||
- [x] W0 branche feature/contract-gates depuis develop (via lib/gitflow.sh)
|
||||
- [x] W1 `lib/gates.sh` — parse ACCEPTANCE CRITERIA, exécute fail-closed
|
||||
(exit 0 ET EXPECT), réécrit EVIDENCE dans le contrat. Sous-commandes
|
||||
`run` (exécute+écrit) / `status` (parse seul, jamais d'exécution, jamais
|
||||
d'écriture). rc 0=MET · 2=UNMET/malformé · 3=ABANDONED.
|
||||
- [x] W2 `lib/contract-interview.md` — STEP 3 gagne CHECK/EXPECT/EVIDENCE
|
||||
optionnels par critère + les 4 règles de falsifiabilité; template mis à
|
||||
jour; ABANDON dans Lifecycle; ligne de poids par flow.
|
||||
- [x] W3 `agents/verifier.md` — EVIDENCE fail-closed (coché+pending = NOT-MET),
|
||||
bucket ABANDONED, verdict `CONFORME` impossible si abandon présent.
|
||||
- [x] W4 `lib/verify-secure-loop.md` — GATE 0 déterministe avant GATE 1
|
||||
(rouge ⇒ re-dispatch exécuteur sans brûler un verifier).
|
||||
- [x] W5 `agents/feater.md` + `agents/bugfixer.md` — discipline 4 passes.
|
||||
- [x] W6 `lib/tests/gates.test.sh` — comportemental sur gates.sh (fail-closed,
|
||||
exit≠0 avec marqueur = FAIL, pending, ABANDON, malformé, status
|
||||
n'exécute pas) + locks de structure sur W2/W3/W4/W5.
|
||||
- [x] W7 shellcheck + bash -n + `make test` complet.
|
||||
- [x] W8 CHANGELOG + registres (BDR + LRN + journal).
|
||||
- [ ] W9 PAS de merge — gate humain explicite.
|
||||
|
||||
Reference in New Issue
Block a user