# Skill: silverbullet-conventions

## Arborescence (à plat — univers et domaine portés par le frontmatter)

- `00_INBOX` : notes entrantes
- `01_JOURNAL` : journal (pages du jour + `Weeks/` hebdo + `Meetings/` comptes-rendus)
- `02_DOMAINES` : pages **domaine** (`type: domain`, code `UNIVERS-SUJET`)
- `03_PROJETS` : projets actifs (`type: project`)
- `04_NOTES` : notes (`nature`) et procédures (`nature: process` + tag `procedure`)
- `05_CODES` : mots de passe et secrets
- `06_CONTACTS` : annuaire de contacts
- `80_CONFIG` : configuration, templates, skills IA, agents IA
- `90_ARCHIVES` : `CLOS/<UNIVERS>/` (projets terminés, `status: closed`) et `ABSORBES/<UNIVERS>/` (faux-projets digérés, `status: archived`).
  - **Règle (2026-10-31) : ABSORBES se conserve indéfiniment** — toutes ses pages ont des liens historiques (176 fichiers) ; ne purger qu'après contrôle « 0 lien entrant ».
  - **Pas d'arbo miroir dans `90_ARCHIVES`** (pas de `00_INBOX/`, `01_JOURNAL/`… en archives) : le tri vit dans le frontmatter (`type`, `univers`, `domain`) ; le seul axe dossier = le statut + l'univers.
  - Les liens de rattachement pointent le **domaine héritier** ; la table héritier (30/30) = lignes d'audit `Absorption de [[…]]` des pages `02_DOMAINES` (migration des 392 liens : 2026-10-31, 354 réécrits, 38 audits conservés).

**Modèle PKM** : univers (PRO/AMM/PERSO, majuscules) → domaine (sujet durable, jamais « fini ») → projet (résultat daté, a une fin) → procédure (routine `PROC-*`) → tâche (case à cocher). Référence complète : `00_INBOX/PKM_Univers-Domaines-Projets_20261030`.

## Journal

- Pages du jour : `01_JOURNAL/YYYY/YYYY-MM-DD` — modèle `80_CONFIG/Slash/day-template`
  - Sections : `**1. Evenements**`, `**2. The Big One**`, `**3. Tâches Secondaires**`, `**4. Autres Échéances / Routines du jour**`, `📥 Parking du jour`, `🌙 Bilan d'exécution & Mémoire`.
  - **Ne pas mettre d'attribut `project` sur les daily notes** : les tâches d'un jour peuvent concerner plusieurs projets ; le lien projet se fait via les tâches (`[[03_PROJETS/...]]`), pas via le frontmatter de la page du jour.
- Pages hebdo : `01_JOURNAL/Weeks/YYYY-WNN` (ex. `2026-W41`), avec une ligne « Période ».
  - Template : [[80_CONFIG/Slash/week-template]]
- Comptes-rendus de réunion : `01_JOURNAL/Meetings/YYYY/YYYYMMDD_HHhMM_PROJET_Sujet` (ex. `20261008_15h30_SERVEUR-OSM_GEOCONTRIB_Point-Suivi`).
  - Template : [[80_CONFIG/Slash/meeting-template]]
- Synthèses de réunion : même emplacement, suffixe `_Synthese`.

## Synthèses de réunion

- **Nommage** : note source + suffixe `_Synthese`.
- **Frontmatter** : type `meeting` (comme la note source), tags `synthese` et `ia` :
  ```yaml
  tags: [meeting, synthese, ia]
  type: meeting
  ```
- **Liens réciproques** (après le titre) : source → `→ Synthèse : [[..._Synthese]]` ; synthèse → `← Notes : [[...]]`.
- **Structure** : 4 points — 1. Sujets discutés, 2. Informations importantes, 3. Décisions (`#decision`), 4. Actions (`* [ ]` / `* [x]`). Cf. skill `synthese-reunion`.

## Événements

- Tâches `#event` avec attributs `[date: YYYY-MM-DD]` et `[hour: HHhMM/...]`.
- Liées à un projet : `[[03_PROJETS/...]]`.
- Les attributs `[date:]`/`[hour:]` alimentent les requêtes du journal (`t.date == _CTX.currentPage.date`) : **les conserver**.
- `[date:]` est **l'attribut unique de planification** des tâches (modèle validé 2026-11-02) : échéance, programmation, date de réalisation si `* [x]` — cf. skill `traitement-taches`. `[due:]` est **abandonné** (0 tâche dans l'espace, plus aucune requête ne le consomme).

## Tâches

- Format : `* [ ]` (à faire) / `* [x]` (fait).
- États complémentaires par tags : `#URGENT`, `#waiting`, `#planned`, `#review`…
- Attributs : `[date: AAAA-MM-JJ]` (planification des tâches : échéance/programmation/réalisation — et date des événements), `[hour:]*` (événements), `[project: CODE]` (rattachement hors contexte — **confirmé indexé** : code simple ou `[[X]]` ; variante `projet`/`proj` non indexée. Le lien `[[03_PROJETS/CODE]]` dans la tâche alimente le widget natif *Linked Tasks*).
- ℹ️ **API des tâches** : `index.tag "task"` et `index.tasks()` sont **équivalents** (vérifié 2026-10-31, 994 tâches identiques) — **convention : `index.tasks()`** (API documentée). L'apparent découplage observé sur une page test était un artefact d'index non rafraîchi.

## Frontmatter

- Chaque note possède un frontmatter (tags, type, univers, domain, title, status, projects, date…).
- `univers` : **`PRO` | `AMM` | `PERSO`** (majuscules, obligatoire sur toutes les pages ; remplace l'ancien `area`, qui ne doit plus être utilisé).
- `domain` : lien vers la page domaine, **entre guillemets** : `domain: "[[PRO-PILOTAGE]]"` (sans guillemets, YAML lit une liste imbriquée → cassé pour les requêtes).
- `type` : `project` | `domain` | `note` | `meeting` | `day` | `week` | `contact` | `code` | `issue`… (anglais).
- `status` (projets) : `active`, `in-progress`, `closed`, `waiting`, `draft`, `archived`.
- `title` : obligatoire sur les pages projet (le code identifie, le titre explique).
- `tags` : liste YAML (`tags: [project]`).
- `nature` (notes) : `portrait`, `lieu`, `info`, `concept`, `script`, `process`, `tuto`, `book`, `documentation`, `rapport`, `none`.
- Procédure : `type: note` + `nature: process` + `tags: [procedure]` + code `PROC-*` (les hubs filtrent sur `PROC-` **ou** le tag `procedure`).
- `projects` : **liste** de liens `[[03_PROJETS/...]]` (gestion multi-projets). Ne plus utiliser l'ancien `project` (singulier) en frontmatter de page.
- **Ne pas utiliser `priority`** (attribut réservé SilverBullet).
- **Toujours conserver le frontmatter** lors d'une modification, et le compléter si nécessaire.

## Pièges confirmés (2026-10-30)

- **Le renommage de page (`rename_note`) met à jour les liens du corps mais PAS ceux du frontmatter** (`projects:`, `title:`…) ni auto-liens internes : après un déplacement en masse, balayer les anciens chemins (API `/.fs` + sed) — cf. procédure de migration PKM.
- Attributs de tâche : **`[date:]` = échéance unique** (modèle validé 2026-11-02), état déduit de date × fait : sans date = backlog, `date > today` = programmé, `date == today` = du jour, `date < today` + non fait = **retard** (widget rétroviseur), `* [x]` = réalisée. `[due:]` abandonné.
- **Widget `${query[…]}`** : une clé `nil` disparaît de la ligne ⇒ colonne absente. Écrire `DATE = t.date or "--"` pour garantir les colonnes ; ⚠️ `false or "--"` renvoie `"--"` → pour un booléen, `tostring(t.done)`. En `template.each`, une variable absente retombe sur la globale Lua homonyme (`date` → table d'aide SB).
