chore(typo): retire tous les tirets cadratins/demi-cadratins + garde CI
Some checks failed
CI / Build & test (Node 24) (push) Has been cancelled
CI / Pack & boot smoke (Node 22) (push) Has been cancelled
CI / No em/en dashes (push) Has been cancelled
CI / Build & test (Node 22) (push) Has been cancelled
Deploy site (production) / build-and-deploy (push) Successful in 20s

Remplace les 547 tirets cadratins (U+2014) et demi-cadratins (U+2013) des fichiers versionnés par la ponctuation contextuelle adaptée (point médian, deux-points, virgule, parenthèses ; tiret simple pour les plages), sur 122 fichiers (appli, vitrine, doc, tests, workflows, scripts).

Ajoute le job CI « lint-dashes » (git grep -P) qui échoue si un tiret cadratin/demi-cadratin réapparaît, hors logo binaire et captures brutes du terminal (fidélité des fixtures de détection de dialogue).
This commit is contained in:
2026-07-17 16:44:00 +02:00
parent 985531a986
commit 65ef616867
122 changed files with 538 additions and 521 deletions

View File

@@ -29,7 +29,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
`,
},
{
// P2 découverte & reprise : corrélation avec les sessions Claude sur disque.
// P2 : découverte & reprise : corrélation avec les sessions Claude sur disque.
id: 2,
sql: `
ALTER TABLE sessions ADD COLUMN claude_session_id TEXT;
@@ -38,7 +38,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
`,
},
{
// P3 repos enregistrés. Les worktrees sont dérivés à la volée de git (non persistés).
// P3 : repos enregistrés. Les worktrees sont dérivés à la volée de git (non persistés).
id: 3,
sql: `
CREATE TABLE repos (
@@ -53,7 +53,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
`,
},
{
// P4 abonnements Web Push. Liés au token d'auth (token_id) ; clés VAPID en settings.
// P4 : abonnements Web Push. Liés au token d'auth (token_id) ; clés VAPID en settings.
id: 4,
sql: `
CREATE TABLE push_subscriptions (
@@ -70,7 +70,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
`,
},
{
// P5 groupes de travail. Un groupe = collection de repos (many-to-many).
// P5 : groupes de travail. Un groupe = collection de repos (many-to-many).
// Worktrees/sessions NON persistés ici : servis par WorktreeManager/PtyManager
// et filtrés côté client par repoId. CASCADE s'appuie sur PRAGMA foreign_keys = ON (cf. openDb).
id: 5,
@@ -103,7 +103,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
{
// Journal d'audit (conformité entreprise : GDPR/SOX/ISO 27001). Trace les mutations
// sensibles (tokens, réglages, secrets, abonnements push, groupes). Ne contient JAMAIS
// de secret en clair `details` est un JSON de métadonnées non sensibles.
// de secret en clair, `details` est un JSON de métadonnées non sensibles.
id: 7,
sql: `
CREATE TABLE audit_logs (
@@ -119,7 +119,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
`,
},
{
// P6 session de groupe multi-repo. Une session peut couvrir plusieurs répertoires (--add-dir)
// P6 : session de groupe multi-repo. Une session peut couvrir plusieurs répertoires (--add-dir)
// et appartenir à un groupe. `added_dirs` : JSON array de chemins absolus (NULL si mono-repo).
// `group_id` : pas de FK (ALTER ADD COLUMN sqlite n'en pose pas) ; nettoyé à la suppression du groupe.
id: 8,
@@ -143,7 +143,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
`,
},
{
// P10 archivage automatique des sessions terminées (rétention configurable, défaut 30 j).
// P10 : archivage automatique des sessions terminées (rétention configurable, défaut 30 j).
// `archived_at` NULL = active. Soft-archive : JAMAIS de DELETE (resume/fork restent intacts).
// Sémantique distincte de hidden_sessions (#9) : `hidden` est manuel et indexé par
// claude_session_id ; `archived` est automatique par ancienneté, indexé par `id`, et ne
@@ -155,7 +155,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
`,
},
{
// P12 connexions aux services git distants (Gitea/GitLab/GitHub). Les SECRETS (PAT, app
// P12 : connexions aux services git distants (Gitea/GitLab/GitHub). Les SECRETS (PAT, app
// password, tokens OAuth) sont chiffrés par SecretBox AVANT insertion (colonnes *_encrypted) :
// la base ne contient jamais de secret en clair. `ssh_key_path`/`oauth_*` sont posés dès
// maintenant (schéma stable) mais exploités en P12b/P12c. `test_result` = dernier diagnostic.
@@ -181,7 +181,7 @@ const MIGRATIONS: Array<{ id: number; sql: string }> = [
`,
},
{
// P12 un repo enregistré peut provenir d'un clone : on retient sa source (remote_url),
// P12 : un repo enregistré peut provenir d'un clone : on retient sa source (remote_url),
// le service détecté et le credential utilisé. PAS de FK sur credential_id (cohérent avec
// sessions.group_id #8) : la suppression d'un credential nullifie ce champ côté manager.
id: 12,
@@ -205,7 +205,7 @@ export function openDb(path: string): Db {
}
/**
* Restreint la base (et ses fichiers WAL/SHM) à 0o600 proprio uniquement. La base contient des
* Restreint la base (et ses fichiers WAL/SHM) à 0o600, proprio uniquement. La base contient des
* secrets (server_secret, clé privée VAPID, hashs de tokens) : elle ne doit jamais être lisible par
* d'autres utilisateurs du système. Best-effort : ignoré sur les FS sans permissions POSIX.
*/
@@ -268,7 +268,7 @@ export function unhideSession(db: Db, claudeSessionId: string): void {
db.prepare('DELETE FROM hidden_sessions WHERE claude_session_id = ?').run(claudeSessionId);
}
// ---- Archivage des sessions terminées (par id, soft-archive P10) ----
// ---- Archivage des sessions terminées (par id, soft-archive, P10) ----
/** Archive une session managée (idempotent : ne touche pas une session déjà archivée). */
export function archiveSession(db: Db, id: string, archivedAt: string): void {