# Changelog — ulk CLI Go

## Unreleased

### Daily update check (Bruce Phase 0.6)

Vérification quotidienne **propose-only** des mises à jour disponibles, pilotée par Bruce (25) à la première invocation de la journée. Rien n'est jamais appliqué sans confirmation.

- **Nouveau module `update-check`** (`ConfigModule`, `enabledByDefault: true`) — copie `framework/tools/hooks/update-check.sh` → `~/.claude/hooks/update-check.sh`. Catalogue : 43 → **44 modules**.
- **Flags `--with-update-check`** (compat, no-op — activé par défaut) et **`--without-update-check`** (opt-out), câblés dans `applyFlags` sur le modèle de `--without-faru`.
- **Script `update-check.sh`** (pur shell, 0 token Claude) — gated **1×/jour calendaire** via `.claude/state/ulk-update-check.json`. Subcommands `tick|force|status|reset`. Chaque check est best-effort (timeout `ULK_UPDATE_CHECK_TIMEOUT`, défaut 12 s, + `|| true`). Cibles :
  - binaire ulk → `ulk self-update --check`
  - agents + skills bundlées → `ulk update --check`
  - skills externes (registry) → `ulk skills update --dry-run`
  - CLIs `required` manquantes → probe `command -v` → propose `ulk install-deps --recommended`
- **Bruce Phase 0.6** (`framework/agents/orchestrators/25-bruce.md`) — invoque le script au démarrage, affiche le résumé et **propose** les commandes d'application (apply confirmé par l'utilisateur) ; fallback inline best-effort si le script n'est pas installé.
- **Protocole** : `framework/agents/_shared/update-check-protocol.md`. Golden test Bruce verrouille le pattern `update-check.sh`.

## v5.0.0-dev (arc ULK-265 → ULK-271 + GO-001..GO-011)

### Nouvelles commandes

- **`ulk doctor`** — diagnostique l'installation (state.json, commands, agents, skills, prérequis) avec `--fix` auto-correcteur et `--json` machine-readable (GO-001)
- **`ulk self-update`** — mise à jour atomique du binaire depuis GitHub Releases avec vérification SHA256 (GO-001, GO-008)
- **`ulk migrate`** — migration idempotente de `~/.ulk/state.json` vers le schema courant (GO-004)
- **`ulk completion bash|zsh|fish`** — autocomplétion shell via Cobra built-in (GO-005)

### Améliorations

- **SchemaVersion** — `State.SchemaVersion` (int) + constante `installer.SchemaVersion = 1` dans `state.go` (GO-002)
- **Checksums complets** — 6 buckets ajoutés dans `registry/diff.go` : `hue`, `caveman`, `caveman-output`, `logo-generator`, `symbols`, `architecture-diagram` ; `ulk update` détecte désormais les changements dans ces sources (GO-009)
- **Tests d'intégration** — 7 scénarios E2E dans `cmd/integration_test.go` : help, status, install --dry-run, doctor, migrate, self-update --check, completion (GO-010)

### Arc ULK-265 → ULK-271 (phase refactor architectural)

| Phase | Ticket | Livrable |
|-------|--------|---------|
| 0 | ULK-265 | Interface `Installable` + 6 types de modules typés |
| 1 | ULK-266 | 6 skills manquantes au catalogue |
| 2 | ULK-267 | 5 hooks unifiés + RTK base |
| 3 | ULK-268 | `ConfigModule`, `MCPModule`, `ExternalModule` |
| 4 | ULK-269 | 12 bundles via `cli-registry.json` |
| 5+6 | ULK-270+271 | `compileAgents`, `install-deps`, `check --impact`, wrapper `install.sh` |

### Catalogue modules (43 modules, 7 types)

`Skill` · `Hook` · `Config` · `MCP` · `External` · `Bundle` · `Noop`

Voir `internal/installer/catalog.go` pour la liste complète.

### Distribution

- Goreleaser : `darwin` + `linux` × `amd64` + `arm64` (`.tar.gz`)
- CI : `go test -race -count=1 ./...` sur ubuntu + macos
- Homebrew tap : `izo/homebrew-ulk` (requiert `HOMEBREW_TAP_TOKEN`)

---

## v4.x (archive — arc bash)

Voir `CLAUDE.md` + `install.sh` historique. L'arc bash est désormais un wrapper de 6 lignes vers `ulk install`.
