Le Punisher (85) rejoint les souverains — release totale radicale — et deux agents pivots changent d'identité : sauron (ex-obiwan) et peon (ex-2b3), visuels inclus.
Changed
- **Renommage `obiwan` (61) → `sauron`** — le Chief Product Officer devient l'Œil : vision panoptique du portefeuille produit, épithète « l'œil qui voit tout le portefeuille ». Rapports `docs/reports/sauron-*`, invocation `/ulk:sauron` (« obiwan » conservé en alias legacy). Renommage transverse : agents, protocoles `_shared/`, règles, CLI Go, miroirs commands, site (fiche + sphère oracles + descriptions FR), golden test.
- **Renommage `2b3` (08) → `peon`** — le checkpoint de fin de session devient le Péon (Warcraft II/III) : défini par sa fonction, dos voûté, répliques cultes VF câblées sur le style caveman (« Zug-zug » = phase reçue · « Dabu » = phase ok · « Travailler, travailler… » = pipeline en cours · « Encore du travail ? » = commit scellé). Invocation `/ulk:peon` (« 2b3 » conservé en alias legacy), mémoire `.claude/agent-memory-local/ulk-peon/`, managed agent `ulk ma peon`, fiche site sphère gardiens. L'historique (CHANGELOG, `docs/audits/`, backlog archivé) garde les anciens noms.
- **Illustrations définitives** — `sauron.jpg` (Œil de Sauron, © New Line Cinema / Warner Bros.), `peon.jpg` (péon orc Warcraft, © Blizzard Entertainment), `punisher.jpg` (couverture © Marvel Comics) + entrée `AGENT_ILLUSTRATIONS` et crédits `illustrations.ts` à jour.
- **Purge `docs/_inbox`** — 600 fichiers de triage supprimés (−129 500 lignes), README `docs/` réorganisé par dossiers, palette source déplacée vers `docs/visuels/`.
Added
- **Agent `punisher` (85) — release totale radicale** — orchestrateur qui exécute la release complète de bout en bout, là où `blackemperor mode=release` rend un verdict et `mode=ship` livre vite : gate GO/NO-GO (délégué à blackemperor 18), **rangement radical du repo** (fichiers errants, cartes done archivées, code mort, TODO fantômes), doc scellée (CHANGELOG Keep-a-Changelog, README, CLAUDE.md via shuri 01 + `/claude-md-improver`, générateurs projet), **site régénéré + build de contrôle**, et **kit de communication** dans un dossier dédié `docs/release/vX.Y.Z/` (RELEASE-NOTES, posts par canal x/linkedin/bluesky/mastodon, email partenaires, note interne — rédaction déléguée à brigitte 24, skill `avoid-ai-writing`). Règle d'or « prépare tout, ne publie rien » : `refuses:` sur force-push, push main, `gh pr merge`, `gh release create` ; tag local non poussé, publication humaine. Golden test + fiche site (sphère souverains). Spec : `docs/backlog/archive/2026-07-18-spec-punisher-release-totale/CARD.md`.
- **Suite d'invariants cohérence C5–C8** (`framework/tests/agents-coherence.test.mjs`) — refs archivées (C5), numéros `nom (NN)` (C6), `loads_skills` résolvables (C7), count opus ↔ table de justification model-policy (C8) ; table d'alias slug↔nom installée `framework/skills-aliases.json` + résolveur, fixtures golden otto (C4). Issu de l'audit cohérence roster 2026-07-17.
Fixed
- **Handoffs vers agents archivés** — les renvois vivants vers Ranma (31) redirigés vers tony (50) mode=audit ; handoff skills-radar (archivé) → sauron (61). Bruce annonce le bon compte d'agents (83).
- **5 skills fantômes retirées** des `loads_skills` de sauron (ex-obiwan) — plugins opt-in, pas des skills registry.
- **Collisions de routage à la saisie** — anti-triggers croisés gandalf/xavier, mot-clé « audit visuel » désambiguïsé (visual-auditor/agathe), identifiant brique, `extends` alphabétique (#355, #348, #347).
- **`DESIGN.md` casing** (#354, merci @Devil1716), `bonjour.sh` dépendance `jq`, crash `govulncheck` dans le hook pre-push.
Intégration design (`impeccable`), autopilote de backlog (`otto`), récupération d'espace disque (`ulk reclaim`) et vérification de mise à jour quotidienne.
Added
- **Intégration `impeccable` (design)** — skill/plugin de **direction artistique + lint déterministe** (pbakaus, bâtie sur `frontend-design` d'Anthropic) : `/impeccable init` (→ `PRODUCT.md`/`DESIGN.md`), 23 commandes `/impeccable` (craft, critique, bolder, quieter, distill, audit…) et **46 détecteurs d'anti-patterns exécutés sans LLM ni clé API**. Câblée en `loads_skills` des 5 agents design (stark 58, agathe 60, brique 01, visual-auditor 03, agamotto 17) et positionnée **complémentaire** à `hallmark` dans `_shared/design-source-protocol.md` §5ter (règle de coexistence : `docs/design.md` reste la source de vérité ; le `DESIGN.md`/`PRODUCT.md` d'impeccable l'alimentent). Install : `npx impeccable install`.
- **Agent `otto` (84) — autopilote ticket→PR (#338)** — orchestrateur qui déroule le backlog : délègue l'implémentation, ouvre une PR draft, attend le merge avant de passer au suivant. Nouveau protocole `_shared/executor-protocol.md` (retry borné sur gate échoué, blocage séquentiel une unité en vol par working tree, report sans *silent caps*), câblé aussi dans task-runner (04).
- **`ulk reclaim` (#284)** — récupération d'espace disque : scanne les répertoires régénérables (dépendances, sorties de build, caches d'outils). **Dry-run par défaut** (`--apply` pour agir), heuristique de sûreté (noms génériques `dist`/`build`/`out`/`target` réclamés seulement à côté d'un manifeste projet), flags `--older-than N` / `--only deps,build,cache` / `--json`.
- **Vérification de mise à jour** — check **quotidien** propose-only (binaire ulk, agents/skills, CLIs requises manquantes) piloté par Bruce (25) Phase 0.6, et **rappel mensuel** de la maintenance native `/checkup` (alias de `/doctor`), gated 1×/mois calendaire. Pur shell, 0 token, jamais appliqué sans accord.
- **Intégration `grill-me` / `grilling` (interview pré-build, #350)** — skills externes (mattpocock/skills, MIT) qui **stress-testent un plan/design avant le build** : interrogatoire descendant l'arbre de décision **une question à la fois** (réponse recommandée jointe, faits cherchés dans l'environnement, pas d'action avant *shared understanding*). `grill-me` = front door user-invoquée stateless (`/grill-me`) ; `grilling` = primitive model-invoquée. Nouveau protocole `_shared/grilling-protocol.md` (coexistence avec `triple-questioning` agent-interne et le questionnaire de tony, sans doublon), enregistrement registry (`skills-sources.json`), référence dans `base-rules.md` + `agents/CLAUDE.md`, et `loads_skills: grill-me` sur les 4 porteurs canoniques : tony (50), bruce (25), obiwan (61), shuri (01). Artefacts d'install locaux gitignorés (non vendorés, réinstallés via `ulk skills update`).
Fixed
- **Dérive des miroirs `framework/commands/`** — `task-runner` (source enrichie d'`_shared/executor-protocol.md` sans régénération du miroir) et `otto` (miroir de l'agent 84 jamais généré) resynchronisés via `generate-commands.cjs` (idempotent, déterminisme vérifié).
Correctif. Deux skills promises depuis toujours et jamais installées, plus la porte d'entrée de session (`/ulk:bonjour`) et ses défauts de robustesse.
Fixed
- **`HookModule` n'installait jamais la skill qu'il promettait** — `handoff-hook` et `context-mode` annonçaient « Unlocks : Skill … » dans leur pédagogie, mais `HookModule` n'exposait que `scriptSrc` + `configSrc` : aucun champ n'installait de skill. Les deux `SKILL.md` étaient versionnés dans `framework/community-skills/` et copiés **nulle part**. L'installateur imprimait la promesse et n'en tenait que la moitié, sans erreur ni avertissement. `HookModule` accepte désormais `communitySubdir` + `skillPrefix` (même contrat que `SkillModule`), et `Uninstall` honore `removeGlobs`. **`/ulk:handoff` et `/context-mode` s'installent enfin réellement.**
- **Test de non-régression sur la classe entière** — `TestModulePromisingSkillInstallsOne` échoue si un module dont `Unlocks` mentionne « Skill » n'en déclare aucune. Vérifié par mutation : rouge sans le correctif.
- **`bonjour.sh` — ancrage à la racine du dépôt** — le script supposait `cwd == racine` sans jamais l'imposer. Lancé depuis un sous-dossier, il ne plantait pas : il rendait silencieusement « mode obsidian » et « rien à lister » sur un projet `faru` peuplé, et semait un `.claude/state/` orphelin dans chaque répertoire d'invocation (chaque dossier avait alors son propre tampon de gate). Une sortie fausse sans erreur est pire qu'un échec franc.
- **`bonjour.sh` — borne réelle sur les appels réseau** — sans coreutils, macOS n'a ni `timeout` ni `gtimeout` : l'ancien fallback exécutait la commande **nue**. La promesse « un brief matinal ne bloque jamais l'ouverture d'une session » était fausse précisément sur la plateforme principale. Remplacé par un watchdog bash pur, sans dépendance.
- **`bonjour.sh` — fenêtre des PR mergées** — « PR récemment mergées » remontait les 5 dernières sans filtre temporel, fussent-elles vieilles de six mois. Ajout de `--search "merged:>=<dernier brief>"`.
- **`bonjour.sh` — `force` amputait la fenêtre du lendemain** — `force` est un rejeu, pas un nouveau brief ; il avançait pourtant la borne de collecte, vidant le bloc « Hier (toi) » du brief suivant. La borne n'avance plus qu'au premier brief du jour.
- **`feedback-loop` (16) — dégradation gracieuse** — l'agent sortait en erreur dès que `accountability.jsonl` était absent, alors que 2 de ses 4 patterns ne dépendent que de `git log`. Il dégrade désormais au sous-ensemble git-only au lieu d'échouer.
Added
- **`/ulk:bonjour` (#336)** — brief de début de journée, symétrique de `2b3` : le cycle de session avait une porte de sortie, pas de porte d'entrée. Urgences (CI rouge, PR à relire, issues P0, cartes `blocked`) · **collisions** (fichiers modifiés des deux côtés, toi *et* l'amont) · activité du remote · commits de la veille · cartes `wip`/`todo` · un cap. Collecte en pur shell (`framework/tools/bonjour.sh`), read-only, gaté 1×/jour. Câblé dans Bruce (25) Phase 0.7, non bloquant.
Trois axes : automatisation full-local (label-to-pr, seed sentinel, gate sécurité), refonte de l'installateur (T1–T8 #324, défauts opt-out), et extension mobile/Apple (tim/illidan/buzz, 5 skills Swift).
Added
- **Pipeline `label-to-pr` (#325)** — module opt-in `--with-label-to-pr` : une issue GitHub `agent-ready` déclenche un `/loop` local → robocop (11) en GitHub Issue Mode → PR draft. Skill + script `label-to-pr.sh`, 100 % full-local (aucun cloud).
- **Seed `.ulk/config.json` (#313)** — l'installateur sème la config projet en mode `remind` : le hook sentinel est **réellement actif** après install (fail-safe no-op hors projets ulk).
- **Module `hooks-resync`** (`--with-hooks-resync`) — resynchronise `.git/hooks/` depuis `scripts/hooks/` au SessionStart : le gate full-local est toujours présent et à jour (clone frais, worktree neuf, désync multi-sessions). Catalogue CLI : 53 → **55 modules**.
- **Cycle mobile app-builder complet (#327)** — `tim` (81), `illidan` (82), `buzz` (83) ; roster 78 → **81 agents**. `happy` gagne un mode implement BaaS (Supabase/Firebase).
- **Prompt Library câblée (#317)** — intégrée dans `bruce` (25) et `blackemperor` (18).
- **Champ `outcome` faru + checkpoint obiwan Phase Ship (#315)** — alignement AIDD.
- **Champ `featured` (#251)** — peuplé dans le contrat `ulk agents list`.
- **5 skills Apple spécialisées** — bundle `swift-skills` : 7 → 12 skills (widgets, intents, IAP, CloudKit…) + registry swiftui-performance.
- et 2 autres changements…
Changed
- **Installateur T1–T8 (#324)** — catalogue = source unique des flags (T1), module `vps` absorbé via `RemoveGlobs` (T2), `NoopModule` justifiés (T3), profils déclaratifs via `base.Profiles` (T4), dedup du re-sign `~/.local/bin/ulk` (T5), help `--profile` dérivé de `ProfileNames` (T7), gardes anti-drift + tests de couverture flags/profils (T8).
- **Accountability + sentinel actifs par défaut (#313)** — `enabledByDefault` au premier install, opt-out `--without-accountability` / `--without-sentinel`. Comble le Gap #1 (Sécurité) de l'audit AIDD : ownership traçable des mutations IA. Installs existantes intactes.
- **Toggle `auto-skill-review`** — câblé vers l'état runtime auto-dream (`state/auto-skill-review.json`).
- **Voice FR-first (#301)** — contrat CLI + casse marque site francisés ; re-audit minitel : cohérence copy 8/10.
- **LLM local apfel-only** — purge du câblage résiduel ollama (bundle `ai-clis`, status, dashboard).
- **Dé-bloat orchestrateurs** — isaac/lovecraft/bruce allégés, bloc partagé `_shared/skill-detection-block.md`.
- **Épic HERMES-ADAPTATION (#255) clos** — 27/27 cartes done, validation déterministe passée, cartes généralisées sans référence personnelle.
- **Backlog Faru** — archivage massif (109 + 12 cartes closes), priorités uniformisées (P→mots), casse des préfixes TYPE normalisée, réalignement backlog ↔ issues GH.
Removed
- **Flag mort `--wizard` (#324)** — déprécié depuis que le wizard est le mode par défaut, consommé nulle part (audit binaire 2026-07-03). `--with-faru` / `--with-update-check` conservés (no-ops documentés, API user-facing).
Fixed
- **feedback-loop (#318)** — boucle échec→signal AIDD P11 réparée + golden test verrouillant l'invariant git-only.
- **subagent-handoff (#229)** — garde-fou `MAIN_REPO` worktree-safe.
- **Gate pre-push** — rendu worktree/hook-safe.
- **Site** — menu mobile cassé sur ≤ 860 px (containing block).
- **vibe (#280)** — strip du trailing whitespace des TOML générés + resync des `.vibe` périmés.
- **sync-issues** — préservation de l'URL des issues sans label (read/IFS tab).
- **Agents** — conformité frontmatter `tools` + `loads_skills` dupliqué ; garde-fou anti-récidive archivage (remap de 118 réfs mortes).
- **Hooks** — faux positif commentaire inline hooks-conformance (#231) verrouillé en test ; scrub du `SENTINEL_BYPASS` hérité dans le test sentinel-hook.
Trois axes : hardening sécurité CLI (SHA256 fail-closed, CWE-78, 7 Dependabot résolus), site vitrine Arcana (Astro 7, 78 fiches agents), et extension du framework (vinci #80, 16 skills opt-in, pacing protocol, intégration avoid-ai-writing 35 agents).
Added
- **`vinci` (#80)** — agent Claude Design générique : point d'entrée unique pour les workflows design impliquant hallmark, hue, figma, open-design. 6 modes : `list`, `sync`, `impl`, `audit`, `card`, `dashboard`.
- **16 skills opt-in** — dev workflow (6 : `oneshot`, `prompt-creator`, `merge`, `skill-manager`, `environments-manager`, `agents-managers` — absorption croisée inbox Melvynx), Next.js bundle (4 : `nextjs-setup-project`, `nextjs-add-prisma-db`, `nextjs-setup-better-auth`, `create-vitejs-app`), QA live (`playwright-qa`). Catalogue CLI : 44 → **52 modules**.
- **Site vitrine Arcana** (`site/`) — Astro 7 statique, design system Ulk–Arcana, 9 sphères, 78 fiches agents (`/agents/[sphere]/[agent]/`), page `/install/`. Plugin `@izo/hyperfocale` (routing, pagination). `https://ulk.regrets.app`.
- **`_shared/pacing-protocol.md`** — protocole pacing (rythme énergétique) : 5 règles (incréments digestes, points d'arrêt reprenables, anti boom-bust, prévisibilité, rythme fixé par l'humain). Signal `pacing: low|normal|deep`. Hérité par `base-rules.md`, gardé par gandalf (34) Phase 1.8.
- **Intégration `avoid-ai-writing`** — 6 couches : protocole `_shared/prose-protocol.md`, section §Prose dans `base-rules.md`, 35 agents avec règles prose natives, CLI detector, gate 2b3, signal Bruce Phase 5.
- **`asc-skills × 22`** (rudrankriyam, registry) — suite App Store Connect via CLI `asc` : signing, build, TestFlight, submission, metadata, ASO, crash triage, notarisation, pricing, IAP RevenueCat, release notes IA.
- **`_shared/routines-protocol.md`** — protocole Cloud Routines (`/schedule`, agent `routine 53`).
Changed
- **`_shared/base-rules.md`** — §Prose (`avoid-ai-writing`) + §Pacing.
- **`framework/agents/CLAUDE.md`** — table protocols étendue (`pacing-protocol.md`).
- **`.claude/rules/agents-authoring.md`** — documentation pacing + `extends:` guidance.
- **`gandalf` (34)** — Phase 1.8 : garde le pacing (signal `pacing:` → adapter le rythme de sortie).
- **`bruce` (25), `2b3` (08), `task-runner` (04)** — référence `pacing-protocol.md`.
- **Biome** — migration 2.4.x → **2.5.1** (`schema`, `rules.preset: none`, exclusions `dist/` + `*.d.ts`).
- **`CLAUDE.md` racine** — section Pacing + count agents corrigé (78, était 98 sur index.astro).
- **Registry** — `registry.json` + `registry.md` régénérés (78 agents, date 2026-06-30).
Fixed
- **Biome hook** — `files.includes` avec `!**/dist/**` + `!**/*.d.ts` + `overrides` redondant : hook pre-commit stable sur les dist/ compilés.
- **`install.sh` compte agents** — `index.astro` affichait `98 agents` → corrigé `78`.
- **Conflits merge registry** — `registry.json` + `registry.md` (date 2026-06-28 vs 2026-06-30) résolus.
Security
- **`self-update` durci** (`c5341d2a`) — SHA256 vérifié **fail-closed** avant extraction, staging temp imprévisible, guard path-traversal tar. CWE-494/367/377/22.
- **`InstallCmdAllowed` factorisé** (`7d1bbd93`) — comble le gap CWE-78 sur `exec.Command` ; whitelist centralisée + confirm/checksum.
- **`gstack` vendorisé supprimé** (`ed15e2ae`) — 7 alertes Dependabot résolues.
- **`npx -y` supprimé** (`048b9794`) — CWE-494 (téléchargement sans vérification).
- **yaml CVE-2026-33532** (`9d1127de`) — override npm `^2.8.3`.
Trois chantiers structurants : support Gemini via Vertex AI ADC, intégration GCP native (skills, MCP Toolbox, Developer Knowledge MCP), et refonte de l'architecture agents (policy de modèles, durabilité, context manifests).
Added
- **`ulk export --target vertex`** — génère `VERTEX.md` à la racine du projet : auth ADC (`gcloud auth application-default login`), mapping modèles (gemini-2.5-pro/flash/2.0-flash), guide Workload Identity pour CI/CD. Vertex AI est désormais un target de première classe aux côtés de Codex / Gemini CLI / Mistral Vibe.
- **`google-cloud-skills × 20`** (google/skills, Apache-2.0) au registry — cherry-pick par slug : `google-cloud-basics` · `google-cloud-run` · `google-cloud-storage` · `google-cloud-armor` · `google-cloud-bigquery` · `google-cloud-firestore` · `google-cloud-sql` · `google-cloud-logging` · `google-agent-builder` · `google-cloud-well-architected` + 10 autres. Install : `ulk skills update` ou `npx skills add google/skills --skill <slug>`.
- **`_shared/gcp-protocol.md`** — protocole GCP ulk : MCP Toolbox for Databases (`googleapis/mcp-toolbox`, 6 sources : BigQuery/Firestore/AlloyDB/Cloud SQL/Spanner/Looker, ADC-only), Developer Knowledge MCP (anti-hallucination API Google sur Cloud/Firebase/Android/SecOps), cherry-pick skills, cohérence ADC.
- **Developer Knowledge MCP** documenté dans `multi-provider-protocol.md` — ancre les agents sur la documentation Google officielle et à jour.
- **Context Manifests** (`_shared/context-manifest-protocol.md`, ULK-CM1) — frontmatter étendu `context_budget` + `loads_skills` + `mcp_cap_strategy` sur 3 agents pilotes (sargeras 45, ed209 52, tony 50). Bruce calcule la somme avant routing pour prévenir le context rot.
Changed
- **Protocole modèles** (`_shared/model-policy.md`) — politique formalisée opus/sonnet/haiku : critères de choix, table de routage par agent, règle effort (`xhigh` sur tous les agents `model: opus`, `low` sur `model: haiku`), durabilité Wulveryck.
- **Durabilité agents** — 77 agents classés `amplifier` / `compensatory` / `mixed` (See, Act, Correct, Wulveryck). Roster : 74 amplificateurs / 2 mixed / 1 compensateur. Audit : `docs/audits/durability-2026-06-05.md`. Rejouable à chaque sortie de modèle.
- **Archivage 2026-06-09** — 21 agents archivés dans `framework/agents/_archived/` (traîne morte epic consolidation-maturité). Fusions : picsou (56) = ex-killbill + ex-picsou (26) ; benjamin (64) absorbe rodin (46). Agents persona préservés (alex 59, astride 40, brigitte 24).
- **`_shared/local-llm-protocol.md`** — modèle de référence mis à jour : `gemma3:1b` → `qwen3.6:35b-a3b-mlx-bf16` (MoE 35B, 3.5B actifs, 128K ctx, MLX Apple Silicon, ~2-5s/appel).
- **Table des alias modèles** (`CLAUDE.md` + `multi-provider-protocol.md`) — colonne Gemini → Gemini / Vertex AI ; note ADC explicite.
- **Hints GCP** dans 3 agents pivots :
- **`gcloud CLI`** documenté dans `install-reference.md` comme opt-in (Vertex AI ADC uniquement).
- **`install-reference.md`** — section `google-cloud-skills × 20` dans les Skills externes (cherry-pick, ADC, protocole).
- et 2 autres changements…
Fixed
- Alignement `CLAUDE.md` racine avec la table Multi-LLM (Vertex AI ADC, `VERTEX.md`).
Import des garanties d'exécution de [Superpowers](https://github.com/obra/superpowers) (epic W1–W8) + refonte du Panthéon + portail de releases auto-hébergé.
Added
- **Epic Superpowers W1–W8 — garanties d'exécution importées** (8 cartes, 3 PRs) — forcing-functions de `obra/superpowers` (MIT) câblées dans l'architecture `_shared/` ulk **sans renier l'invocation manuelle** :
- **Portail de releases auto-hébergé** (`releases.regrets.app`) — page d'index GoReleaser, design `ulk-zed-orange` (light-first, radius 0, Geist Sans/Mono), liens binaires macOS/Linux corrigés (underscore → dash), déployé sur VPS Coolify.
- **Skill `shadcn/improve`** (registry) — advisor codebase read-only, audit 9 catégories, priorisation par leverage (impact ÷ effort), plans de handoff auto-suffisants dans `plans/`. Complémentaire à sargeras (45) / ed209 (52) / tech-debt-audit / verify (65).
Changed
- **Migration Biome v1.9.4 → v2.4.16** — `organizeImports` → `assist.actions.source`, `files.ignore` → `files.includes`, nouvelle règle `useIterableCallbackReturn` (4 `forEach` → `for...of` dans `todo-parser.test.ts`).
- **Refonte du Panthéon** (site) — 77 agents avec sphère + épithète complets, navigation `/agents` → `/pantheon`, filtres avancés (recherche / modèle / durabilité), 254 pages **WCAG AA** vérifiées (shot-scraper accessibility).
- Registry régénéré (`registry.{json,md}`) après le renommage khadgar ; exports `.gemini` / `.vibe` resynchronisés.
Removed
- **Carte `usage-integration` annulée** — `/usage` natif jamais sorti en GA, blocage indéfini.