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
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:
@@ -1,4 +1,4 @@
|
||||
# Spike S1 — resume / fork / vivacité — VERDICT : ✅ GO
|
||||
# Spike S1 · resume / fork / vivacité · VERDICT : ✅ GO
|
||||
|
||||
Exécuté le 2026-06-11 (CLI claude 2.1.173, repos jetables /tmp/spike-s1-*). Scripts : `harness.mjs` + `run.mjs`, captures brutes et `results.json` dans `captures/` (non versionnés).
|
||||
|
||||
@@ -9,7 +9,7 @@ Exécuté le 2026-06-11 (CLI claude 2.1.173, repos jetables /tmp/spike-s1-*). Sc
|
||||
| 1 | `claude --resume <id>` pendant que la session est **vivante** | **Aucun verrou, aucun avertissement.** B s'ouvre sur le même sessionId, les deux process s'inscrivent au registre avec le même sessionId, et les messages des deux TUI **s'entrelacent dans le même transcript** (ALPHA/BRAVO/CHARLIE dans un seul fichier). Corruption logique confirmée → le daemon DOIT détecter la vivacité avant tout resume. |
|
||||
| 2 | `--resume <id> --fork-session` sur session vivante | **Sûr.** Nouveau sessionId, nouveau fichier contenant la copie de l'historique + ses propres messages ; l'original n'est **pas** pollué. C'est l'opération à proposer pour une session vivante (« Dupliquer »). |
|
||||
| 3 | kill -9 puis détection | Le fichier registre **reste** (stale) immédiatement après ; `pid` mort + `procStart` discordant le détectent à coup sûr. `--resume` après mort : même sessionId, continuation propre dans le même fichier, 0 parentUuid cassé. |
|
||||
| 4 | resume depuis un **autre cwd** | **Échec explicite** : « No conversation found with session ID » — le CLI cherche la session dans le dossier projet dérivé du cwd **courant**. → Le daemon doit toujours lancer `--resume` dans le cwd d'origine de la session (champ `cwd` du JSONL), comme prévu au design. |
|
||||
| 4 | resume depuis un **autre cwd** | **Échec explicite** : « No conversation found with session ID » : le CLI cherche la session dans le dossier projet dérivé du cwd **courant**. → Le daemon doit toujours lancer `--resume` dans le cwd d'origine de la session (champ `cwd` du JSONL), comme prévu au design. |
|
||||
| 5 | sortie gracieuse (`/exit`) | Exit code 0, fichier registre **nettoyé**. |
|
||||
| 6 | SIGTERM | Fichier registre **nettoyé** aussi (handler du CLI). |
|
||||
| 7 | GC des stale | Le fichier stale du kill -9 a été nettoyé plus tard par une autre instance du CLI → **ne jamais raisonner sur la présence/absence du fichier**, toujours valider pid+procStart à la lecture. |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Spike S1 — harnais commun : spawn de claude dans un PTY + observation registre/JSONL
|
||||
// Spike S1 · harnais commun : spawn de claude dans un PTY + observation registre/JSONL
|
||||
import ptyMod from '@homebridge/node-pty-prebuilt-multiarch';
|
||||
import { readdirSync, readFileSync, existsSync, mkdirSync, appendFileSync, statSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
@@ -58,7 +58,7 @@ export class ClaudeSession {
|
||||
if (v) { log(`${this.label}: ${desc}`, { afterMs: Date.now() - t0 }); return v; }
|
||||
await sleep(everyMs);
|
||||
}
|
||||
log(`${this.label}: TIMEOUT — ${desc}`, { timeoutMs, screenTail: this.tail(600) });
|
||||
log(`${this.label}: TIMEOUT : ${desc}`, { timeoutMs, screenTail: this.tail(600) });
|
||||
throw new Error(`timeout: ${this.label} ${desc}`);
|
||||
}
|
||||
// Démarrage : gère le trust dialog (précède l'inscription au registre) puis attend le registre.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env node
|
||||
// Spike S1 — resume/fork/vivacité. Scénarios :
|
||||
// Spike S1 · resume/fork/vivacité. Scénarios :
|
||||
// 1. session A vivante → claude --resume <id> en B : comportement (interleave ?)
|
||||
// 2. --fork-session sur session vivante : nouveau fichier, original intact
|
||||
// 3. kill -9 : fichier registre stale détectable (pid/procStart), resume sûr ensuite
|
||||
@@ -108,7 +108,7 @@ try {
|
||||
};
|
||||
save();
|
||||
|
||||
// ---------- Scénario 5 : sortie gracieuse — nettoyage du registre ? ----------
|
||||
// ---------- Scénario 5 : sortie gracieuse, nettoyage du registre ? ----------
|
||||
log('=== S1.5 sortie gracieuse de D (/exit) ===');
|
||||
await D.type('/exit');
|
||||
await sleep(4000);
|
||||
|
||||
Reference in New Issue
Block a user