---
tags: pkm, taches, menage, silverbullet
date: 2026-10-27
univers: PERSO
nature: process
---

# Ménage des tâches ouvertes — tableau de bord

**Page vivante** : toutes les listes sont des requêtes SLIQ recalculées à l'affichage.

> Une tâche quitte sa liste dès qu'elle est **cochée, datée ou supprimée** dans sa page source.
> La colonne **Lien** ouvre la page au bon endroit : chaque lien est un `[[page@position]]`, c'est-à-dire le `t.ref` de la tâche.
> ⚠️ Cette page ne contient **aucune case à cocher** : les lignes ci-dessous sont des rendus de requêtes, elles ne polluent donc pas l'index des tâches.
> État initial au 27/10/2026 : **353 tâches ouvertes sans date**.

## 1. Tableau de bord (live)

${query[[
from t = index.tasks()
where t.done == false and not t.date
select {
  TOTAL = count(),
  L1_demo = count() filter (where (string.find(t.page, "^80_CONFIG/Plugs/") or t.page == "80_CONFIG/Theme" or t.page == "00_INBOX/test" or t.page == "Sandbox" or t.page == "80_CONFIG/Slash/week-template" or t.page == "80_CONFIG/Templates/sd_week" or string.startsWith(t.text, "Section à compléter"))),
  L2_deja_faites = count() filter (where (string.find(t.page, "MIGRATION-VPS-OVH-2025", 1, true) and string.startsWith(t.text, "Télécharger"))),
  L3_hebdo = count() filter (where string.find(t.page, "^01_JOURNAL/Weeks/")),
  L4_ancien = count() filter (where ((string.find(t.page, "^01_JOURNAL/Meetings/") and string.sub(t.page, 26, 33) < "20260927") or (string.find(t.page, "^01_JOURNAL/2026/") and string.sub(t.page, 17, 26) < "2026-09-27") or string.find(t.page, "^01_JOURNAL/2025/"))),
  L5_event = count() filter (where ((table.includes(t.tags, "event") or table.includes(t.tags, "planned")) and not (string.find(t.page, "^80_CONFIG/Plugs/") or t.page == "80_CONFIG/Theme" or t.page == "00_INBOX/test" or t.page == "Sandbox"))),
  L6_urgent = count() filter (where ((table.includes(t.tags, "URGENT") or table.includes(t.tags, "next")) and not (string.find(t.page, "^80_CONFIG/Plugs/") or t.page == "80_CONFIG/Theme" or t.page == "00_INBOX/test" or t.page == "Sandbox"))),
  RESTE = count() filter (where not ((string.find(t.page, "^80_CONFIG/Plugs/") or t.page == "80_CONFIG/Theme" or t.page == "00_INBOX/test" or t.page == "Sandbox" or t.page == "80_CONFIG/Slash/week-template" or t.page == "80_CONFIG/Templates/sd_week" or string.startsWith(t.text, "Section à compléter")) or (string.find(t.page, "MIGRATION-VPS-OVH-2025", 1, true) and string.startsWith(t.text, "Télécharger")) or string.find(t.page, "^01_JOURNAL/Weeks/") or ((string.find(t.page, "^01_JOURNAL/Meetings/") and string.sub(t.page, 26, 33) < "20260927") or (string.find(t.page, "^01_JOURNAL/2026/") and string.sub(t.page, 17, 26) < "2026-09-27") or string.find(t.page, "^01_JOURNAL/2025/"))))
}
]]}

**État initial (27/10) — sert de référence pour mesurer l'avancement :**

| Ligne | TOTAL | L1 | L2 | L3 | L4 | L5 | L6 | RESTE |
|---|---:|---:|---:|---:|---:|---:|---:|---:|
| 27/10/2026 | 353 | 16 | 6 | 45 | 68 | 11 | 9 | 218 |

> L5 et L6 sont **transverses** (une tâche peut figurer à la fois dans L3/L4 et dans L5/L6) : les colonnes ne s'additionnent donc pas. L1 + L2 + L3 + L4 + RESTE = TOTAL.

## 2. Doublons exacts (live)

Texte strictement identique, présent au moins deux fois. Disparaît tout seul quand tu supprimes ou coches les doublons.

${query[[
from t = index.tasks()
where t.done == false and not t.date
group by t.text
having #group > 1
select {
  TACHE = string.sub((string.gsub(key, "%s+", " ")), 1, 55),
  N = #group,
  LIENS = (function() local r = {} for _, i in ipairs(group) do r[#r+1] = "[[" .. i.ref .. string.rep("]", 2) end table.sort(r) return table.concat(r, " ") end)()
}
order by N desc
limit 25
]]}

> SLIQ compare ici le texte **à l'identique** : les formulations proches (accents, variantes) ne sont pas détectées automatiquement.

## 3. Lot 1 — démo/test & doublons évidents (à purger)

État initial : **16**. Pages de démonstration (plug KanBan, Theme, Sandbox, exemples de templates) + placeholders « Section à compléter ». Suppression sans risque.

${query[[
from t = index.tasks()
where t.done == false and not t.date
  and (string.find(t.page, "^80_CONFIG/Plugs/") or t.page == "80_CONFIG/Theme" or t.page == "00_INBOX/test" or t.page == "Sandbox" or t.page == "80_CONFIG/Slash/week-template" or t.page == "80_CONFIG/Templates/sd_week" or string.startsWith(t.text, "Section à compléter"))
order by t.page asc, t.ref asc
select {
  LIEN = "[[" .. t.ref .. string.rep("]", 2),
  TACHE = string.sub((string.gsub(t.text, "%s+", " ")), 1, 90),
  TAGS = table.concat(t.tags or {}, ", ")
}
limit 50
]]}

## 4. Lot 2 — étapes déjà réalisées (à cocher)

État initial : **6**. Ces étapes de migration ont un texte identique à une tâche déjà cochée ailleurs. Coche-les dans la page source : elles disparaissent d'ici.

${query[[
from t = index.tasks()
where t.done == false and not t.date
  and (string.find(t.page, "MIGRATION-VPS-OVH-2025", 1, true) and string.startsWith(t.text, "Télécharger"))
order by t.page asc, t.ref asc
select {
  LIEN = "[[" .. t.ref .. string.rep("]", 2),
  TACHE = string.sub((string.gsub(t.text, "%s+", " ")), 1, 90),
  TAGS = table.concat(t.tags or {}, ", ")
}
limit 50
]]}

## 5. Lot 3 — checklist hebdo recopiée (à consolider dans le template)

État initial : **45**. La même checklist est recopiée à chaque semaine (W29 → W43) et n'est jamais cochée. Action : reporter ces items dans `80_CONFIG/Slash/week-template` et `80_CONFIG/Templates/sd_week`, puis vider les semaines closes.

${query[[
from t = index.tasks()
where t.done == false and not t.date
  and string.find(t.page, "^01_JOURNAL/Weeks/")
order by t.page asc, t.ref asc
select {
  LIEN = "[[" .. t.ref .. string.rep("]", 2),
  SEMAINE = string.sub(t.page, 18),
  TACHE = string.sub((string.gsub(t.text, "%s+", " ")), 1, 80),
  TAGS = table.concat(t.tags or {}, ", ")
}
limit 60
]]}

## 6. Lot 4 — tâches de plus de 30 jours (fait / à reporter / obsolète)

État initial : **68**. Actions de réunion et de journal d'avant le 27/09/2026. À traiter page par page : cocher si c'est fait, ajouter `[date:]` si c'est à reporter, supprimer si c'est obsolète.

${query[[
from t = index.tasks()
where t.done == false and not t.date
  and ((string.find(t.page, "^01_JOURNAL/Meetings/") and string.sub(t.page, 26, 33) < "20260927") or (string.find(t.page, "^01_JOURNAL/2026/") and string.sub(t.page, 17, 26) < "2026-09-27") or string.find(t.page, "^01_JOURNAL/2025/"))
order by t.page asc, t.ref asc
select {
  LIEN = "[[" .. t.ref .. string.rep("]", 2),
  TACHE = string.sub((string.gsub(t.text, "%s+", " ")), 1, 90),
  TAGS = table.concat(t.tags or {}, ", ")
}
limit 80
]]}

## 7. Lot 5 — event / planned sans attribut date (transverse)

État initial : **11**. Ces tâches portent `#event` ou `#planned` mais pas d'attribut `[date:]` : elles sont donc **invisibles** dans les requêtes des pages jour (`t.date == date du jour`). Ajoute `[date: YYYY-MM-DD]` ou archive.

${query[[
from t = index.tasks()
where t.done == false and not t.date
  and (table.includes(t.tags, "event") or table.includes(t.tags, "planned"))
  and not (string.find(t.page, "^80_CONFIG/Plugs/") or t.page == "80_CONFIG/Theme" or t.page == "00_INBOX/test" or t.page == "Sandbox")
order by t.page asc, t.ref asc
select {
  LIEN = "[[" .. t.ref .. string.rep("]", 2),
  TACHE = string.sub((string.gsub(t.text, "%s+", " ")), 1, 90),
  TAGS = table.concat(t.tags or {}, ", ")
}
limit 30
]]}

## 8. Lot 6 — URGENT / next à dater (transverse)

État initial : **9**. Donne-leur une `[date:]` pour qu'elles remontent dans les vues « planifiées ».

${query[[
from t = index.tasks()
where t.done == false and not t.date
  and (table.includes(t.tags, "URGENT") or table.includes(t.tags, "next"))
  and not (string.find(t.page, "^80_CONFIG/Plugs/") or t.page == "80_CONFIG/Theme" or t.page == "00_INBOX/test" or t.page == "Sandbox")
order by t.page asc, t.ref asc
select {
  LIEN = "[[" .. t.ref .. string.rep("]", 2),
  TACHE = string.sub((string.gsub(t.text, "%s+", " ")), 1, 90),
  TAGS = table.concat(t.tags or {}, ", ")
}
limit 30
]]}

## 9. Reste — actions de réunion récentes (< 30 jours)

État initial : **68**. Légitimes : à dater ou à traiter au fil de l'eau.

${query[[
from t = index.tasks()
where t.done == false and not t.date
  and string.find(t.page, "^01_JOURNAL/Meetings/")
  and string.sub(t.page, 26, 33) >= "20260927"
order by t.page asc, t.ref asc
select {
  LIEN = "[[" .. t.ref .. string.rep("]", 2),
  TACHE = string.sub((string.gsub(t.text, "%s+", " ")), 1, 90),
  TAGS = table.concat(t.tags or {}, ", ")
}
limit 80
]]}

## 10. Reste — autres pages (par page)

État initial : **150**. INBOX, projets, notes, Dashboard… Vue compacte par page : clique sur le lien pour ouvrir la page et traiter ses tâches.

${query[[
from t = index.tasks()
where t.done == false and not t.date
  and not ((string.find(t.page, "^80_CONFIG/Plugs/") or t.page == "80_CONFIG/Theme" or t.page == "00_INBOX/test" or t.page == "Sandbox" or t.page == "80_CONFIG/Slash/week-template" or t.page == "80_CONFIG/Templates/sd_week" or string.startsWith(t.text, "Section à compléter")) or (string.find(t.page, "MIGRATION-VPS-OVH-2025", 1, true) and string.startsWith(t.text, "Télécharger")) or string.find(t.page, "^01_JOURNAL/Weeks/") or ((string.find(t.page, "^01_JOURNAL/Meetings/") and string.sub(t.page, 26, 33) < "20260927") or (string.find(t.page, "^01_JOURNAL/2026/") and string.sub(t.page, 17, 26) < "2026-09-27") or string.find(t.page, "^01_JOURNAL/2025/")) or string.find(t.page, "^01_JOURNAL/Meetings/"))
group by t.page
select {
  PAGE = "[[" .. key .. string.rep("]", 2),
  NB = #group
}
order by NB desc
limit 80
]]}

## 11. Plan de ménage

| Lot | Action | Gain estimé |
|---|---|---:|
| 1 | Purger démo/test + doublons évidents | −16 |
| 2 | Cocher les étapes déjà faites | −6 |
| 3 | Consolider la checklist hebdo dans le template | −43 |
| 4 | Revue guidée des tâches de plus de 30 jours | −30 à −60 |
| 5 | Corriger event/planned (ajout de `[date:]` ou archivage) | −11 |
| 6 | Dater les URGENT / next | 0 (mais visibles) |

**Potentiel : 353 → ~150** tâches non planifiées.

## 12. Méthode & précautions

* Les listes sont des requêtes SLIQ : elles ne se rafraîchissent qu'**à l'affichage de la page** (recharger/revenir sur la page après une modification).
* `t.ref` = `page@position` : le lien ouvre la page au bon endroit. L'offset se décale si tu édites au-dessus dans la page source.
* **Doublons d'affichage à ne pas confondre** : une même tâche apparaît souvent dans plusieurs requêtes (page projet + page jour + Dashboard) — c'est un seul et unique item.
* Le lot 2 repose sur une égalité de texte : c'est un **signal**, pas une preuve — vérifie avant de cocher.
* La section « Tableau des évolutions » des pages projet s'appuie sur `index.items()`, qui **n'inclut pas** les cases à cocher : ne pas convertir le log chronologique en `* [x]`.
* Conventions des tâches : `80_CONFIG/IA_SKILLS/Silverbullet-Conventions`.
