From 8397354caab583b01c1de315ef8e335e294a692e Mon Sep 17 00:00:00 2001 From: Bastien Chanot Date: Wed, 8 Jul 2026 17:22:52 +0200 Subject: [PATCH] =?UTF-8?q?chore(memory):=20backmerge=20=E2=80=94=20LRN-11?= =?UTF-8?q?7=20fork=20orphans=20code=20+=20consolidated=20B=20journal=20+?= =?UTF-8?q?=20backlog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/memory/journal.md | 2 ++ .claude/memory/learnings.md | 8 ++++++++ .claude/tasks/TODO.md | 26 ++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/.claude/memory/journal.md b/.claude/memory/journal.md index 9b8860b..3709132 100644 --- a/.claude/memory/journal.md +++ b/.claude/memory/journal.md @@ -368,3 +368,5 @@ rules: - Adversarial review of the whole 9-job series (release/1.0.0..develop) → `.audit/review-release-1.0.0.md`: 1 BLOQUANT + 5 à corriger + 5 mineurs, 10 verified false-positives. 2 sub-agent verdicts overturned (job7 gitleaks hook inert [[LRN-114]], contract tool-grant FP [[LRN-115]]). Jobs 4/5/6/8 CLEAN, validator-analyzer contract SOUND. J4-16 follow-up above CLOSED: trailer twins found in bugfixer/feater/hotfixer. - Remediation `chore/review-remediation` (unmerged, human gate): A1 trailer purge (3 templates) + whole-surface sweep; A2 gitleaks hook re-installed (`install-hook`) + negative-secret gate proven; A4 strict-YAML quote (seo/security-auditor); A5 geo own-policy (user-approved, PERMISSIVE default kept, false CLAUDE.md attribution dropped); A8 path-b PROVEN — /seo+/geo AUTO items land on disk via L1 (no silent no-op); fil-rouge `lib/tests/run-review-guards.sh` (5 guards, teeth-verified); A3 backfill LRN-098/101 + EVAL-015 + BLK-016 + PORTED rtk fix e58037c (was live-broken on develop, ~460K tokens/30d); A6 guard 280→320 + [[BDR-062]] (supersede BDR-031's 275 target). make test GREEN throughout. - Capitalized: [[LRN-113]] partial-fix+guard (structural), [[LRN-114]] hook-drift, [[LRN-115]] analyzer report-grants (FP1), [[LRN-116]] release fix missing from develop, [[BDR-062]] density realign, [[EVAL-021]] the review, [[EVAL-022]] M5 pins trace. Noted un-back-merged release chores beyond A3: e65796f (SC1091 lint silence) — left for a future reconcile. +- Full back-merge release/1.0.0→develop (`chore/backmerge-release-full`, unmerged): the RC fork had left ~6 functional fixes orphaned on develop, silently. PORTED via cherry-pick, make test green each: `095d881` drop find-skills, `a1093ca` make-update TTY-guard (proven: EOF-die exit1 → guarded exit0), `4c5e862` rtk update-path version-guard (complements the `e58037c` install bridge already ported), `c76479f` design-motion sync, `e65796f` SC1091 lint. B soak journal (find-skills day1 / TTY #3 / rtk-update #4) folded here, not cherry-picked — divergent journal tails conflict (STOP-on-conflict honored, extract-consolidate fallback). C all covered/skip: `93e43c0` attribution + `ae8ad86` model already on develop; `188a9a7` docs → /doc backlog (README missing semgrep/scan-secrets/verify+secure/ctx7). Registry (LRN-098/101, EVAL-015, BLK-016) already backfilled in the review run. Gate: 23/23 release-only commits classified, 0 orphan functional, 0 missing registry; make test GREEN, review-guards 5/0. version.txt stays 4.0.0 (fork intentional, D — `eb93050`). +- [[LRN-117]]: the fork silently orphaned functional CODE on develop (not just memory); the review back-merge caught ~half. Detecting it needs a code-level drift check (advisory, backlogged) — registry-sequence gaps alone miss it. diff --git a/.claude/memory/learnings.md b/.claude/memory/learnings.md index a9838b0..411692f 100644 --- a/.claude/memory/learnings.md +++ b/.claude/memory/learnings.md @@ -132,6 +132,7 @@ rules: | LRN-114 | 2026-07-08 | editing a hook GENERATOR (_gitflow_emit_pre_commit) does NOT update the INSTALLED hook (.githooks/pre-commit) — silent drift; T10 diffs the allow/block verdict not content, T16 emits fresh in a throwaway repo → job7 gitleaks backstop inert on the repo 8 days | after editing a template-generated artifact: reinstall (install-hook) + a gate that diffs installed==emit | | LRN-115 | 2026-07-08 | analyzer Edit/Write grants (seo/geo/validator) are NOT dead: needed to write the REPORT (VALIDATE/SEO/GEO.md); the "never edit" rule targets CODE, instruction-level (same as the patron) — verified false-positive | do NOT re-flag as a tool-grant defect; a report-only agent keeps Write for its own report | | LRN-116 | 2026-07-08 | memory backfill release→develop: a BLK marked "resolved" can have its RESOLUTION (code) missing from develop — BLK-016 resolved on release but rtk fix e58037c never back-merged → bug LIVE on develop | before backfilling a resolved blocker: verify the fix CODE is on the target branch, not just the registry entry | +| LRN-117 | 2026-07-08 | a release/develop fork silently orphans FUNCTIONAL code on develop, not just memory — RC soak fixes (find-skills, make-update TTY, rtk version-guard) lived only on release for the fork's duration; the review's memory back-merge caught only ~half | at release-finish/reconcile: list develop..release commits touching non-registry code (excl. merges/version) for back-merge review — a registry-gap check alone misses code | --- @@ -1180,3 +1181,10 @@ rules: - **fix**: ported e58037c to develop (13-line idempotent bridge), THEN backfilled BLK-016 resolved. General: before backmerging a resolved blocker, grep the target for the fix's code signature. - **future application**: gitflow divergence review — enumerate release-only COMMITS that touch code, not just memory; a feature can be parallel-merged while its RC-branch fix is orphaned. - **cousin**: [[LRN-036]] (PATH profile drift), [[LRN-047]] (silent degradation). + +## LRN-117 — A release/develop fork silently orphans functional CODE on develop, not just memory +- **pattern**: cutting release/1.0.0 and continuing on develop, the RC-branch bug fixes (find-skills drop `095d881`, make-update TTY guard `a1093ca`, rtk update-path version-guard `4c5e862`, rtk install bridge `e58037c`, SC1091 lint `e65796f`) landed ONLY on release. They were live-broken on develop for the whole fork duration (rtk compression dead, `make update` dies non-interactively). The review's memory back-merge caught the registry gaps and one code fix (rtk bridge); a full back-merge found ~5 more functional commits. +- **why it hides**: registry-sequence gaps (missing LRN/BLK/EVAL ids) are easy to detect; orphaned CODE has no sequence to check. A feature can be parallel-merged to both branches while an RC-branch fix commit is never back-merged, and nothing flags it. +- **fix**: at release-finish / in /reconcile, list `develop..release/*` commits touching functional files (exclude merges, `.claude/**`, version.txt/CHANGELOG) and present them for back-merge review. Advisory, NOT a hard make-test gate — cherry-picks land with new SHAs so the source commit stays in the range; automatic "already-ported?" equivalence is unreliable and would false-positive. Backlogged. +- **future application**: any long-lived fork (release/*, long feature) — audit CODE divergence, not just declared/registry state ([[LRN-034]] narrated ≠ ground truth, applied to branches). +- **cousin**: [[LRN-116]] (a resolved blocker's fix can be missing from develop), [[BDR-054]] (supersession-trace discipline). diff --git a/.claude/tasks/TODO.md b/.claude/tasks/TODO.md index 6f0bdbb..c3550de 100644 --- a/.claude/tasks/TODO.md +++ b/.claude/tasks/TODO.md @@ -1,5 +1,31 @@ # TODO +## 2026-07-08 — full back-merge release/1.0.0→develop (chore/backmerge-release-full) +Genèse : la revue avait porté ~5/19 commits ; back-merge complet demandé. Cherry-pick par +catégorie, 1 commit atomique/item, make test après chaque code. Branche non mergée (gate humain). +- [x] A CODE (5 cherry-picks, make test GREEN chacun) : 095d881 drop find-skills (5a1fff5), + a1093ca TTY-guard make-update (ce07e55, prouvé EOF exit1→exit0), 4c5e862 rtk version-guard + (3049250, complète le pont e58037c déjà porté — fichiers/concerns distincts), c76479f + design-motion sync (82ce02c), e65796f SC1091 lint (fcdb157, shellcheck 0 SC1091). +- [x] B JOURNAL : cherry-pick direct conflicte (tails journal divergents) → STOP honoré, + fallback note consolidée sous journal 2026-07-08. TODO /deploy ca9fa8f skip (release-specific). +- [x] C DÉCISION/DOUBLON tous skip vérifiés : 93e43c0 attribution + ae8ad86 model (opus[1m]=Opus4.8) + déjà sur develop ; a623514/74d3804/2b4e740 registres déjà backfillés (run revue) ; + 188a9a7 docs → backlog /doc ci-dessous. +- [x] D fork version 1eb5b08/eb93050 intouchés — version.txt reste 4.0.0. +- [x] GATE FINAL : 23/23 commits release-only classifiés, 0 code orphelin, 0 entrée registre + manquante ; make test GREEN + review-guards 5/0. Capitalize [[LRN-117]] structurel. + +### Backlog (issu du back-merge) +- [ ] **/doc** — README develop ne documente pas semgrep / scan-secrets / verify+secure pipeline / + ctx7 (delta de 188a9a7, non porté car base README divergente job3 + CHANGELOG version-entangled). + Une passe /doc doit combler ces sujets sur le README réécrit de develop. +- [ ] **release-drift advisory** ([[LRN-117]]) — check qui liste les commits `develop..release/*` + touchant du CODE fonctionnel (exclut merges, `.claude/**`, version.txt/CHANGELOG) pour revue + de back-merge. Advisory, PAS un gate make-test dur : les cherry-picks landent avec de nouveaux + SHA → le commit source reste dans le range → équivalence "déjà porté ?" non fiable automatiquement + (faux positifs). Cible : étape release-finish ou /reconcile, pas run-review-guards. + ## 2026-07-08 — review remediation (chore/review-remediation) Genèse : `.audit/review-release-1.0.0.md` (revue adversariale des 9 jobs). GO user, ordre imposé. Déviation justifiée : 1 branche (pas 1/EP) car le gate fil-rouge (step 6)