bots-garden/sidekickspublic Fork
⑂ feature/clear-history
Commits
⬇ Clone ▾
git clone https://git.rickub.com/bots-garden/sidekicks.git
git clone ssh://git@rickub.com/bots-garden/sidekicks.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP
🛟 Updated. 1d19377 · on feature/clear-history · k33g · 3d ago
0020-persister-channels-et-messages-avec-pebble.yaml · 107 lines · 4.3 KBYAML Blame HistoryRaw
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
# Managed by IssueSpec. Hand edits are welcome; keep the schema valid.
id: 20
title: "Persister channels et messages avec Pebble"
state: closed
author:
  name: k33g
  email: ph.charriere@gmail.com
createdAt: 2026-10-29T07:20:18.000Z
updatedAt: 2026-10-29T16:35:01.000Z
labels:
  - "kind::feature"
  - "area::persistence"
  - "priority::high"
  - "size::M"
milestone: "M3 · Channels & multi-agents"
epic: "Channels & multi-agents"
related:
  - 5
body: |
  ## Contexte
  Consigne du draft : Pebble si besoin de persistance. Ce besoin apparaît avec les channels : l'utilisateur s'attend à retrouver ses conversations.

  ## Pourquoi pas d'epic « Persistence » séparé
  Pebble ne sert qu'aux channels et à leur historique (la config reste en YAML) ; un epic à une seule issue serait du bruit. L'issue est donc rattachée à « Channels & multi-agents » avec le label `area::persistence`.

  ## Périmètre
  - Schéma de clés défini dans [#5 — Définir l'architecture et le modèle de données](.tickets/issues/0005-definir-l-architecture-et-le-modele-de-donnees.yaml) (ex. `channel/<id>`, `msg/<channelId>/<ts>/<id>`, `membership/<channelId>/<agent>`).
  - API `internal/store` : CRUD channels, append/scan messages paginé.
  - Emplacement : `os.UserDataDir`/sidekicks/db, **lié à la config** (deux configs ≠ deux historiques mélangés).
  - Versionnement du schéma pour les migrations futures.

  ## Critères d'acceptation
  - [ ] Tests unitaires sur une base temporaire.
  - [ ] Chargement des 100 derniers messages d'un channel < 50 ms.
tasks:
  - id: 1
    title: "Schéma de clés et encodage"
    state: closed
    priority: high
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:18.000Z
    updatedAt: 2026-10-29T16:35:01.000Z
    closedAt: 2026-10-29T16:35:01.000Z
  - id: 2
    title: "API store : channels"
    state: closed
    priority: high
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:18.000Z
    updatedAt: 2026-10-29T16:35:01.000Z
    closedAt: 2026-10-29T16:35:01.000Z
  - id: 3
    title: "API store : messages (append, scan paginé)"
    state: closed
    priority: high
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:18.000Z
    updatedAt: 2026-10-29T16:35:01.000Z
    closedAt: 2026-10-29T16:35:01.000Z
  - id: 4
    title: "Emplacement de la base lié à la config"
    state: closed
    priority: medium
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:18.000Z
    updatedAt: 2026-10-29T16:35:01.000Z
    closedAt: 2026-10-29T16:35:01.000Z
  - id: 5
    title: "Version de schéma"
    state: closed
    priority: medium
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:18.000Z
    updatedAt: 2026-10-29T16:35:01.000Z
    closedAt: 2026-10-29T16:35:01.000Z
  - id: 6
    title: "Tests unitaires"
    state: closed
    priority: medium
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:18.000Z
    updatedAt: 2026-10-29T16:35:01.000Z
    closedAt: 2026-10-29T16:35:01.000Z
comments:
  - id: 1
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T16:35:01.000Z
    body: |
      ## Résultat

      `internal/store` : Pebble v2 (v2.1.7), une base par fichier de configuration sous `<dossier de config utilisateur>/sidekicks/data/<empreinte du chemin>/`. Clés de l'ADR 0003 plus `direct/<agent>` (conversations directes) et `value/<clé>` (dernières commandes annoncées par chaque agent). Version de schéma (`meta/version`, une base plus récente est refusée), ids triables par date, pagination arrière des messages. Après `Close`, les opérations renvoient `ErrClosed` au lieu de laisser Pebble paniquer (une réponse peut se terminer pendant qu'on quitte). Une base déjà ouverte par un autre Sidekicks est remplacée par une base en mémoire, et l'interface le signale.

      Mesure (`go test -bench . ./internal/store`, base en mémoire, messages de 2000 octets) : les 100 derniers messages d'un channel de 5000 messages en ~0,02 ms (critère : < 50 ms) ; sur disque, Pebble lit depuis son cache de blocs, du même ordre de grandeur. Décisions : [ADR 0006](docs/adr/0006-channels.md).