Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions docs/_memory/VAULT-DIGEST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!-- vault:begin -->
# Knowledge Vault — Digest (auto-généré par lovecraft)

> Synthèse des entrées pertinentes de `docs/_memory/`. Dernière MAJ : 2026-05-23.
> Ne pas éditer manuellement — régénéré à chaque `lovecraft memory distribute`.
> Chargé à la demande (pointé depuis `CLAUDE.md`), pas à chaque session — surface
> via godspeed (00) phase 1.5, bruce, ou lecture directe.

### 🔴 Lessons critiques (severity: critical)
- **[npm workspaces + peerDeps — conflit TypeScript silencieux](03-lessons/npm-workspaces-peerdeps-typescript-conflict.md)** — Dans un monorepo npm workspaces, `npm install` déclenche la résolution de tous les membres ; un `typescript@^6` dans un sous-package peut entrer en conflit avec le peerDep `typescript@^5` d'un autre — CI rouge chronique pendant des semaines.

### ⚠️ Lessons à retenir
- **[CI rouge chronique = signal mort](03-lessons/ci-rouge-chronique-signal-mort.md)** — Un CI cassé masque toutes les vraies régressions ; traiter comme urgence P0 même si ça tourne en prod.
- **[Installateur Go — interface Installable + 6 types concrets](03-lessons/installateur-go-interface-installable-6-types.md)** — `fsCopyFile` sans dryRun, `LoadCLIRegistry` fail-soft intentionnel, `compileAgents()` avant `createDirs()` — invariants critiques du CLI Go ulk.

### 🧩 Patterns recommandés
- **[CI hardening checklist — 4 lignes YAML à fort impact](04-patterns/ci-hardening-checklist-4-lignes-yaml.md)** — Quatre ajouts minimalistes qui éliminent ~30% des runs inutiles et bloquent les jobs runaway.
- **[Wrapper Bash → Go CLI (pattern minimal)](04-patterns/wrapper-bash-go-cli.md)** — 7 lignes : build local si binaire absent, exec propre, aucun PATH système requis.
<!-- vault:end -->
64 changes: 64 additions & 0 deletions docs/backlog/2026-06-01-FEAT-agent-id-automation/CARD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
title: Automatiser les IDs d'agents — fin de la numérotation manuelle
type: feature
status: todo
assigned: task-runner
description: La numérotation manuelle des agents a dépassé sa capacité (collision harvey #73 / thor #73). Générer l'ID automatiquement et faire échouer la CI sur toute collision via un golden test.
created: 2026-06-01
edited: 2026-06-01
links:
- "[[2026-06-01-milestone-consolidation-maturite]]"
- "[[2026-06-01-FEAT-agent-usage-stats]]"
priority: high
effort: S
tags: [ulk, registry, agents, ci, golden-test, governance]
---

# Automatiser les IDs d'agents — fin de la numérotation manuelle

**CONSOLIDATION-2** · [P0] · 🔴 critical

Chantier de l'epic [[2026-06-01-milestone-consolidation-maturite]].

## Pourquoi

L'historique git porte la preuve que la numérotation manuelle a dépassé sa
capacité : `harvey #73` puis `thor #73`, suivis d'un commit
« renumber to resolve #73 collision ». Deux agents ont partagé un numéro et
**la CI n'a rien bloqué**. Un système qui repose sur un humain pour garantir
l'unicité d'un identifiant dans un espace de 75+ entrées est cassé par design.

## Quoi faire

Deux options à arbitrer (proposer la #A par défaut) :

### Option A (recommandée) — ID auto-attribué + invariant CI

1. `generate-registry.cjs` attribue le **prochain numéro libre** à tout nouvel
agent sans ID, au lieu de le laisser à l'auteur.
2. Golden test (`framework/tests/agents-golden.test.mjs`) qui **échoue** si :
- deux agents partagent un numéro,
- un ID référencé dans `CLAUDE.md` / site / routing bruce n'existe pas,
- un trou de numérotation non documenté apparaît.
3. La CI exécute ce test → impossible de merger une collision.

### Option B — abandonner les numéros

Identifier les agents par leur seul nom (bruce, thor…) ; les numéros
deviennent cosmétiques/historiques. Plus radical, casse les références `#NN`
existantes dans la doc et le routing.

## Critères d'acceptation

- [ ] Décision A vs B tranchée et notée dans le CARD
- [ ] (A) `generate-registry.cjs` attribue l'ID automatiquement, idempotent
- [ ] Golden test échoue sur collision de numéro — vérifié en injectant un doublon
- [ ] Golden test échoue sur référence d'ID orpheline (`#NN` cité mais inexistant)
- [ ] CI câblée pour exécuter ce test sur chaque PR
- [ ] `.claude/rules/agents-authoring.md` mis à jour : « ne jamais attribuer un
numéro à la main »

## Notes

Petit effort, fort levier : ferme définitivement une classe entière de bugs
silencieux. À faire tôt dans l'epic — avant d'ajouter quoi que ce soit d'autre.
84 changes: 84 additions & 0 deletions docs/backlog/2026-06-01-FEAT-agent-usage-stats/CARD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
title: ulk agents stats — mesurer l'usage réel des agents
type: feature
status: todo
assigned: task-runner
description: Croiser le registry avec accountability.jsonl pour produire un rapport d'usage réel par agent (invocations / 30j) et identifier la traîne morte candidate à l'archivage. Réconcilie aussi le comptage divergent (95 / 76 / 171).
created: 2026-06-01
edited: 2026-06-01
links:
- "[[2026-06-01-milestone-consolidation-maturite]]"
- "[[2026-06-01-FEAT-agent-id-automation]]"
priority: high
effort: M
tags: [ulk, cli, agents, metrics, consolidation, accountability]
---

# ulk agents stats — mesurer l'usage réel des agents

**CONSOLIDATION-1** · [P0] · 🔴 critical

Premier chantier de l'epic [[2026-06-01-milestone-consolidation-maturite]].
On ne peut pas décider quoi archiver sans donnée. Ce chantier produit la donnée.

## Pourquoi

Le repo contient **171 fichiers `.md` d'agents**, alors que `CLAUDE.md` annonce
« 95 agents » et le registry « prochain #76 ». Trois chiffres divergents = on a
perdu la trace de ce qui est réellement vivant. Un harness à 40 agents vivants
bat un harness à 171 dont la majorité dort : moins de surface, moins de tokens
chargés (`tools/list`, registry), navigation plus claire.

La donnée d'usage existe déjà : le hook `--with-accountability` écrit
`.ulk-reports/accountability.jsonl` (audit trail des mutations) et
`/ai-adoption` exploite les signaux git. Il manque juste l'agrégation par agent.

## Quoi faire

### 1. Réconcilier le comptage

- Définir **une source de vérité unique** pour le nombre d'agents
(`framework/agents/registry.json`).
- Auditer l'écart 171 fichiers vs 95 annoncés : variantes multi-provider
(`AGENTS.md`/`GEMINI.md`/`.gemini/agents/`) ? doublons ? agents legacy non
retirés ? Documenter la ventilation.
- Corriger `CLAUDE.md` et tout endroit citant un compte d'agents pour pointer
vers le chiffre canonique.

### 2. Commande `ulk agents stats`

Nouvelle sous-commande Go (`framework/cli/cmd/`), pur local, 0 token :

```
ulk agents stats [--since 30d] [--json] [--dead]
```

- Croise le registry (liste des agents déclarés) avec les invocations réelles
inférées de `.ulk-reports/accountability.jsonl` (+ fallback : signaux git,
mentions dans l'historique des sessions si disponibles).
- Sortie : par agent → `invocations (N) · dernière utilisation · statut`.
- `--dead` : ne liste que les agents jamais invoqués sur la fenêtre → candidats
à l'archivage.
- `--json` : consommable par 2b3 (checkpoint) et obiwan (métriques produit).

### 3. Procédure d'archivage

- Définir où vont les agents archivés (`docs/_archive/agents-legacy-<date>/` ou
flag `archived: true` dans le registry).
- Documenter la procédure dans `.claude/rules/agents-authoring.md`.

## Critères d'acceptation

- [ ] Comptage d'agents réconcilié : `CLAUDE.md`, registry et nombre de fichiers
racontent la même histoire (ou l'écart est documenté et justifié)
- [ ] `ulk agents stats` implémenté avec tests Go (`framework/cli/cmd/`)
- [ ] `ulk agents stats --dead` produit une liste exploitable de candidats
- [ ] `--json` validé contre un schéma (réutiliser `framework/schemas/`)
- [ ] Procédure d'archivage documentée dans `.claude/rules/agents-authoring.md`
- [ ] Rapport d'usage initial committé comme baseline (snapshot 2026-06-01)

## Notes

⚠️ Ne **rien archiver** dans ce chantier — il produit seulement la donnée et la
procédure. La décision d'archivage se prend au niveau de l'epic, à la lumière du
rapport. Mesurer avant de couper.
54 changes: 54 additions & 0 deletions docs/backlog/2026-06-01-FEAT-backlog-grooming-routine/CARD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: Routine de grooming backlog — discipline de WIP
type: feature
status: todo
assigned: godspeed
description: 21 cards todo s'accumulent (la plus vieille du 30 avril, un mois). Aucune limite de WIP. Paradoxal pour un projet qui livre un Kanban (status-board) et un agent checkpoint (2b3). Routine hebdo godspeed qui force close/repriorise/tue toute card todo > 30 jours.
created: 2026-06-01
edited: 2026-06-01
links:
- "[[2026-06-01-milestone-consolidation-maturite]]"
priority: medium
effort: S
tags: [ulk, backlog, grooming, wip, flow, godspeed, routine]
---

# Routine de grooming backlog — discipline de WIP

**CONSOLIDATION-8** · [P1] · 🟠 warning

Chantier de l'epic [[2026-06-01-milestone-consolidation-maturite]].

## Pourquoi

État du backlog au 2026-06-01 : **21 `todo`** · 49 `done` · 3 `blocked` ·
3 `backlog` · 1 `wip`. La card todo la plus ancienne date du **30 avril** — un
mois sans mouvement. Aucune limite de WIP n'est appliquée.

C'est paradoxal : ulk *livre* un Kanban (`@ulk/status-board`) et un agent
checkpoint (2b3) censés imposer la discipline de flow. Le cordonnier est mal
chaussé. Un backlog qui ne fait que grossir n'est pas un backlog, c'est un
cimetière — et il noie les vraies priorités (dont les 8 cards de cet epic).

## Quoi faire

- Routine `godspeed` hebdomadaire (déjà recommandée dans CLAUDE.md / routines) :
toute card `todo` ou `backlog` > 30 jours est **triée** → close · repriorisée
explicitement · ou tuée (archivée avec raison).
- Définir une **limite de WIP** soft (ex : ≤ N cards `wip`/`todo` actives à la
fois) et la rendre visible dans le status-board.
- Rapport de grooming : delta hebdo (ouvertes / fermées / tuées) consommé par
obiwan (métriques produit) et 2b3 (checkpoint).

## Critères d'acceptation

- [ ] Routine de grooming définie (`/schedule` godspeed weekly)
- [ ] Toute card > 30 jours est forcée à une décision (close/repriorise/tue)
- [ ] Limite de WIP soft définie et affichée dans status-board
- [ ] Premier grooming exécuté : les 21 todo actuelles triées
- [ ] Rapport de grooming hebdo (delta ouvertes/fermées/tuées)

## Notes

Premier grooming à faire dans la foulée : les cards OPS du 31/05 et les tasks
apple du 18/05 sont les candidats évidents à re-trancher.
131 changes: 131 additions & 0 deletions docs/backlog/2026-06-01-FEAT-dogfooding-self-optimization/CARD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
---
title: Dogfooding — faire tourner les outils d'ulk sur ulk
type: feature
status: todo
assigned: task-runner
description: ulk prêche l'économie de tokens mais ne l'applique pas à lui-même. CLAUDE.md = ~4005 tokens chargés à chaque session. Faire tourner caveman-compress + /context-audit sur le repo, en CI, et publier le score. Test de crédibilité ultime + meilleur argument marketing.
created: 2026-06-01
edited: 2026-06-01
links:
- "[[2026-06-01-milestone-consolidation-maturite]]"
- "[[2026-06-01-FEAT-token-benchmark-harness]]"
priority: high
effort: M
tags: [ulk, dogfooding, tokens, context, caveman, ci, credibility]
---

# Dogfooding — faire tourner les outils d'ulk sur ulk

**CONSOLIDATION-6** · [P0] · 🔴 critical

Chantier de l'epic [[2026-06-01-milestone-consolidation-maturite]]. Le plus
rentable, et le meilleur coup de com.

## Pourquoi

**L'ironie la plus forte du repo : ulk prêche l'économie de tokens mais ne
l'applique pas à lui-même.** Mesures réelles (2026-06-01) :

- `CLAUDE.md` = **16 020 chars / 256 lignes ≈ 4 005 tokens**, chargé à *chaque*
session, dans *chaque* projet ulk. C'est le fichier le plus lu de tout
l'écosystème.
- Sections les plus lourdes : `Agent System` (2 273 c), `Performance & Token
Economy` (1 821 c — l'ironie maximale), `Skills (opt-in)` (1 662 c),
`Knowledge Vault` (1 615 c, auto-généré), `CLI Tools` (1 321 c).
- **19 renvois de protocole** (`_shared/`, `.claude/rules/`, `@.`) déjà
externalisables — du contenu qui pourrait vivre hors du fichier toujours-chargé.

ulk *livre* les outils pour corriger ça mais ne les pointe pas vers l'intérieur :
- `caveman-compress` annonce **−46% sur CLAUDE.md** — jamais appliqué au sien.
- `/context-audit` (score 0-100, détecte le CLAUDE.md bloaté) — pas en CI sur sa
propre config.

> Si ulk ne peut pas optimiser son propre CLAUDE.md, pourquoi un utilisateur le
> croirait sur le sien ? À l'inverse : « ulk a réduit son propre contexte de X%,
> voici comment » est le meilleur argument marketing possible.

## Quoi faire

### 1. Mesurer la baseline (fait — à committer)

- Snapshot : 4 005 tokens, ventilation par section ci-dessus.

### 2. Dégraisser CLAUDE.md

- Externaliser les sections détaillées vers `.claude/rules/` / `_shared/`
(chargés à la demande, pas à chaque session) : candidats prioritaires =
`Skills (opt-in)` (déjà partiellement dans `install-reference.md`),
détails CLI, Multi-LLM.
- Garder dans CLAUDE.md le strict essentiel + pointeurs.
- Cible : **réduction significative et mesurée** des ~4 005 tokens.

### 3. CI auto-dogfooding

- Job CI qui exécute `/context-audit` (ou son équivalent scriptable) sur le repo
et **publie le score** (badge / commentaire PR).
- `caveman-compress --dry-run` sur CLAUDE.md → rapporte le gain potentiel.
- Optionnel : seuil bloquant si CLAUDE.md dépasse un budget de tokens défini.

## Critères d'acceptation

- [ ] Baseline tokens committée (4 005 + ventilation)
- [ ] CLAUDE.md dégraissé, réduction mesurée et chiffrée
- [ ] Aucune perte d'info critique (les renvois externalisés restent accessibles)
- [ ] CI publie le score context-audit du repo à chaque PR
- [ ] Le chiffre de réduction est exploité (README / site / CHANGELOG)

## Notes

Garde-fou : externaliser ≠ perdre. Tout ce qui sort de CLAUDE.md doit rester
trouvable via un renvoi explicite. Le but est de déplacer le contenu rarement
nécessaire hors du chemin toujours-chargé, pas de l'effacer.

## Résultat — Passe 1 (2026-06-01) : déduplication sûre

Retrait de **duplication pure** (contenu déjà présent dans les fichiers
pointés), zéro perte d'information, bloc `vault:*` intact :

| | chars | ~tokens | lignes |
|---|---|---|---|
| Avant | 16 020 | 4 005 | 256 |
| Après | 14 944 | 3 736 | 249 |
| **Delta** | **−1 076** | **−269** | **−7** |

**−6%**, validé : `export.go` ne lit pas CLAUDE.md (AGENTS.md/GEMINI.md non
impactés), 7 pointeurs préservés. Coupes :
- Skills (opt-in) : 2 paragraphes design/gstack → 1 pointeur `install-reference.md`
- Effort + Dynamic Workflows : prose verbeuse → essentiel + pointeurs existants
- Multi-LLM : table d'alias modèles → pointeur `multi-provider-protocol.md`

### Passe 2 — Knowledge Vault externalisé (✅ 2026-06-01, arbitré)

Décision utilisateur : externaliser le Knowledge Vault. Fait.

| | chars | ~tokens |
|---|---|---|
| Après passe 1 | 14 944 | 3 736 |
| Après passe 2 | **13 595** | **3 398** |
| **Total vs baseline** | **−2 425 (−15%)** | **−607** |

Le bloc `<!-- vault:begin -->...<!-- vault:end -->` vit désormais dans
`docs/_memory/VAULT-DIGEST.md` ; `CLAUDE.md` garde un pointeur
`@docs/_memory/VAULT-DIGEST.md`. La logique `lovecraft memory distribute` a été
retargetée (6 fichiers sources : `vault-memory.md`, `memory-protocol.md`,
`auto-dream-protocol.md`, `34-gandalf.md` Phase 5, `47-lovecraft.md`, +
régénération des compilés). Tests : 685/689, **0 régression nouvelle** (les 4
échecs georges/managed-agents sont préexistants, confirmés sur arbre propre).

**Tradeoff assumé** : les lessons critiques ne remontent plus automatiquement à
chaque session brute — elles surfacent via godspeed (00) phase 1.5 / bruce, ou
lecture du pointeur. Acceptable car la plupart des sessions n'ont pas besoin du
vault, et le coût (~400 tok) était payé partout.

**Reste (non bloquant)** : ~9 articles `docs/presentation/blog/` décrivent encore
le vault « dans CLAUDE.md » (narratif, pas fonctionnel) — à rafraîchir en
follow-up. **Agent System** (2 273 c) non touché : arbitré « ne pas réduire ».

### Passe 3 — CI auto-dogfooding (⏸️ dépend de #7)

Ne pas câbler le job context-audit sur GitHub Actions tant que
[[2026-06-01-TASK-coordinate-detachment-maturity]] n'a pas tranché l'infra CI
qui subsiste (`OPS-REMOVE-GH-WORKFLOWS`).
Loading