Découvertes thématiques · VisiDog CLIThematic guides · VisiDog CLI

Le journal de chantier : le projet se souvientThe job journal: the project remembers

Pendant qu'un chantier avance, il arrive des choses qui ne demandaient pas à arriver : un défaut pressenti, une décision à prendre, un travail repéré en passant. Le journal de chantier les garde — dans un registre Markdown unique par projet, arbitré par vous quand l'approbation l'exige, et travaillé automatiquement quand le projet se repose.While a build runs, things happen that were not asked for: a suspected defect, a decision to make, work spotted along the way. The job journal keeps them — in a single Markdown register per project, arbitrated by you when approval demands it, and worked on automatically when the project rests.

Le journal, en deux motsThe job journal, in two words

Un chantier ressemble à une conversation : quand la session tourne, ce qui est remarqué en dehors du sujet demandé s'évapore avec le fil. Le journal de chantier est la réponse à cette perte : un registre unique — « le carnet du chantier » — où chaque constat a une fiche durable, un statut visible et une suite possible.

A build is like a conversation: while a session runs, whatever is noticed beyond the requested task evaporates with the thread. The job journal is the answer to that loss: a single register — the "site diary" — where each observation gets a lasting entry, a visible status and a possible follow-up.

Les sources sont deux : les agents, qui signalent un constat sans détourner le tour en cours, et vous, qui ajoutez ou corrigent ce qui compte. La politique d'approbation du projet décide si chaque entrée attend votre validation ; et quand le projet est inactif, un traitement de fond trie la file — sans jamais corriger votre code sans autorisation.

Two sources feed it: the agents, who report findings without derailing the running turn, and you, who add or sharpen what matters. The project's approval policy decides whether each entry waits for your go-ahead; and when the project is idle, a background triage works through the queue — never touching your code without authorization.

La vie d'une entréeAn entry's life

Une entrée naît d'un constat : l'IA remarque quelque chose en passant, ou vous consignez vous-même. Le registre la jauge, lui donne un statut, la garde ouverte, la bloque — et ne clôt jamais sans raison. Elle reste active tant qu'il y a quelque chose à en dire, et figée (source de vérité) une fois résolue.

An entry is born from a finding: the AI notices something along the way, or you log it yourself. The register sizes it up, gives it a status, keeps it open or blocks it — and never closes it without a reason. It stays alive while there is something to say, and frozen (source of truth) once resolved.

Un constat arrive, pendant le chantierSomething is spotted, mid-build les agents signalent ; vous, avec /journal new ou /journal noteagents file it; you, with /journal new or /journal note 1 Doublon ? La signature trancheA duplicate? The signature decides même sujet, même composant : l'entrée gagne l'occurrencesame topic, same component: the entry gains the occurrence 2 L'approbation passe par vousApproval goes through you valider avec note, rejeter motivé, réouvrirapprove with a note, reject with a reason, reopen aucun agent ne toucheno agent ever touches à la clé d'approbationthe approval key 3 Au repos, la file avance seuleAt rest, the queue moves on its own triage : analyse et statut ; correction si activéetriage: analysis and status; fixing if enabled rangé sous .visidog/journal/kept under .visidog/journal/ à l'écart du livrablekept apart from the deliverable Une mémoire longue, lisibleA long-lived, readable memory entry.md source de vérité, /journal validate garde le capentry.md is the source of truth; /journal validate keeps it sound
Schéma 2 — La vie d'une entrée : constat, déduplication, arbitrage humain, suivi au repos.Diagram 2 — An entry's life: spotted, deduplicated, human-arbitrated, cared for at rest.

Derrière ce parcours, un carnet honnête : chaque entrée vit dans son propre dossier JNL-…, avec un fichier entry.md qui porte le statut, la source, l'assigné, les priorités — et une chronologie tenue au cordeau, sans retour d'un rapprochement passé. Des commandes de garde comme /journal validate et /journal reindex surveillent la cohérence : le registre reste lisible même lorsque beaucoup de mains l'éditent.

Behind that flow, an honest ledger: each entry lives in its own JNL-… folder, with an entry.md carrying the status, source, assignee, priorities — and a tightly kept timeline, appended over time. Guard commands like /journal validate and /journal reindex watch over its consistency: the register stays readable even when many hands edit it.

L'approbation humaineHuman approval

Chaque projet choisit sa politique d'approbation : none, les entrées partent dans la file dès la création ; ou human, chaque entrée nouvelle attend votre décision. Avec la politique humaine, une entrée en attente n'est pas bannie : elle reste consultable, éditable, annotée — simplement, elle ne participe pas au travail de fond tant que la validation n'est pas passée.

Each project picks its approval policy: none, entries join the queue as soon as they are created; or human, every new entry waits for your call. Under the human policy a pending entry is not banned: it stays readable, editable, annotatable — it just does not join the background work until it is approved.

Voter se fait d'un geste : /journal approve pour donner un feu vert, /journal reject pour clore avec motif, /journal reopen pour remettre en débat une entrée tranchée. La vue dédiée du terminal regroupe ces décisions : listing groupé par statut, pastille visible quand des validations attendent, détail complet de chaque fiche.

Voting is one gesture: /journal approve to give a green light, /journal reject to close with a reason, /journal reopen to put a decided entry back into debate. A dedicated view in the terminal groups these decisions: a listing grouped by status, a badge whenever approvals are pending, and the full details of any entry.

Ce verrou est absolu : les outils d'agent ne modifient jamais la clé d'approbation — c'est un contrat dur du terminal, pas une préférence. Une entrée approuvée ne repasse en débat que si vous le demandez explicitement, avec /journal reopen.

That lock is absolute: agent tools never change the approval key — a hard contract of the terminal, not a preference. An approved entry only goes back into debate if you explicitly say so, with /journal reopen.

Le triage automatique quand le projet est inactifAutomatic triage while the project rests

Le terminal garde une horloge intérieure : il sait quand une session travaille une cible (tour en cours, objectif, hook, workflow) et quand le projet, tout entier, est au repos. Le traitement de fond attend ce deuxième état : le triage ne démarre jamais pendant une session active — et, une fois lancé, il finit l'entrée en cours même si vous reprenez entre-temps.

The terminal keeps an inner clock: it knows when a session is working (a running turn, a goal, a hook, a workflow) and when the project as a whole is at rest. The background treatment waits for that second state: triage never starts during an active session — and once started, it finishes the entry at hand even if you come back meanwhile.

Votre travailYour work un tour IAan AI turn reposrest un autre touranother turn reposrest Le journal, en fondThe journal, underneath run de triagetriage run run correctiffix run un run ne démarre jamais pendant une session activea run never starts while a session is active un run lancé finit son entrée, même si vous repreneza started run finishes its entry, even if you come back
Schéma 3 — Le triage glisse dans les creux : la porte exige le repos, la passe lancée n'est jamais coupée.Diagram 3 — Triage slips into the lulls: the gate demands rest, and a started pass is never cut.

Concrètement, un run de triage : prend la tête de la file — l'entrée la plus urgente d'abord, selon priorité, gravité et ancienneté ; la lit en entier ; la fait examiner par un agent d'analyse en lecture seule, qui rédige une analyse et un diagnostic ; lui applique un statut — typiquement triaged. Puis passe à la suivante, au plus onze entrées par run, chacune vue une seule fois. Si la file est vide quand l'occasion se présente, rien ne démarre : aucun run ne tourne pour rien.

In practice, a triage run: takes the head of the queue — the most pressing entry first, by priority, severity and age; reads it in full; hands it to a read-only analyst agent, which writes an analysis and a finding; applies a status — typically triaged. Then moves on, at most eleven entries per run, each seen exactly once. If the queue is empty when the chance arrives, nothing starts: no run sits idle for nothing.

Cette occasion se présente sur des moments naturels : fin de tour, changement de projet, approbation rendue, démarrage du terminal. L'exécution tourne dans une session dédiée au fond — invisible dans la liste des sessions, sans trace au ménage : une fois le run fini, elle est purgée proprement, sans toucher au journal.

That chance arrives on natural occasions: the end of a turn, a project switch, an approval handed down, the terminal starting. The run executes on a dedicated session kept in the background — invisible in the session list, leaving no trace behind: once the run ends, it is cleanly purged, without touching the journal.

Et la correction ?And the fix?

Le triage qualifie, il ne répare pas. Pour autant, un statut triaged n'est pas un verdict mort : quand la file ne compte plus d'entrées ouvertes — souvent juste après le triage — un second workflow peut prendre le relais, activé par défaut : le correctif automatique.

Triage qualifies, it does not repair. Still, a triaged status is not a dead end: when the queue holds no more open entries — often right after triage — a second workflow can take over, enabled by default: the automatic fix.

Le correcteur est un agent dont la tâche reçoit uniquement l'entrée, jamais le fil qui l'a consignée : il confine son travail au constat, et s'il manque quelque chose, il ne devine pas — il le rapporte. Réussite : l'entrée passe in_progress puis resolved, avec sa note. Échec : elle devient blocked, avec le motif exact — une reprise humaine, jamais une boucle invisible. La correction automatique peut être désactivée par projet (/journal autofix off) : tout reste alors au triage, et la correction vous revient en entier.

The fixer is an agent whose task receives only the entry, never the thread that recorded it: it keeps its work within the finding, and when something is missing it does not guess — it reports. Success: the entry moves to in_progress then resolved, with its note. Failure: it becomes blocked, with the exact reason — resumed by a human, never an invisible loop. The automatic fix can be disabled per project (/journal autofix off): then everything stops at triage, and fixing is all yours.

L'utiliser dans VisiDogUsing it in VisiDog

1

Activez le registreTurn the register on

L'icône du carnet (à gauche de l'icône RAG) active le journal du projet, ou /journal enable : on choisit sur la même occasion la politique d'approbation — none ou human. La vue de suivi s'ouvre ensuite à tout moment par le bouton dédié ou Ctrl+Shift+J.

The diary icon (to the left of the RAG icon) turns the journal on, or /journal enable: on the same occasion you pick the approval policy — none or human. The tracking view opens anytime from the dedicated button or Ctrl+Shift+J.

2

Signalez, enrichissezReport, enrich

Vous : /journal new crée une entrée immédiate, /journal note apporte un complément sur une entrée existante. Les agents : ils signalent leurs constats sans interrompre le tour, avec leurs preuves ; le hors-périmètre remarqué en passant a une adresse.

You: /journal new creates an entry at once, /journal note adds a follow-up on an existing one. Agents: they report findings without interrupting the turn, with their evidence; off-task observations spotted along the way have an address.

3

Arbitrez, suivezArbitrate, follow

/journal list et /journal queue montrent la file ; /journal approve, reject (motif) et reopen tranchent ; /journal suspend et resume gèrent les suspensions. Laissez le terminal se reposer : la passe de fond constate, trie, et les runs enchaînés font avancer la file pendant votre absence.

/journal list and /journal queue show the queue; /journal approve, reject (with a reason) and reopen decide; /journal suspend and resume manage suspensions. Let the terminal rest: the background pass observes, sorts, and the chained runs keep the queue moving while you are away.

Cas d'usageUse cases

L'imprévu remarqué en passantThe aside worth keeping

Pendant une tâche en cours, l'IA remarque un contrat incomplet, un doublon éventuel, un module de test suspect : plus question de la perdre — une entrée la consigne, de façon durable : un statut, une source, des preuves.

While a task is under way, the AI spots an incomplete contract, a possible duplicate, a suspicious test module: no longer lost — an entry records it, durably: with a status, a source, evidence.

La même alerte qui revientThe alert that keeps coming back

Quatre étapes rencontrent le même défaut : quatre occurrences, une seule entrée. La fiche recueille chaque retour, grossit de preuves et de notes, et le statut reste clair : jamais trois tickets séparés à chasser le doublon.

Four steps meet the same defect: four occurrences, one entry. The file absorbs each return, grows with notes and labels, and the status stays clear: never three separate tickets hunting duplicates.

Le projet qui couve en votre absenceThe project that incubates while you are away

Pause déjeuner, week-end, onglet laissé ouvert : dès que plus rien n'active le projet, la file se vide — analyses, triages, correctifs —, et vous retrouvez des fiches classées, prêtes à lire.

Lunch break, weekend, a tab left open: as soon as nothing activates the project, the queue clears itself — analyses, triages, fixes — and you find back clearly stamped, sorted entries.

Le contrôle qualité qui reste humainQuality control that stays human

Politique human : chaque nouveau constat attend le feu vert. On rejette avec motif, on valide avec note, on réouvre en cas de désaccord — le fond ne travaille que ce que vous avez admis, et rien au-delà.

The human policy: every new finding waits for your go-ahead. You reject with a reason, approve with a note, reopen when you disagree — the background reaches exactly what you let it, and no further.

Ce que ça vous apporteWhat it brings you

Points d'attentionPoints of attention

Le journal n'est pas le livrableThe journal is not the deliverable

Le registre est exclu de l'indexation Git et de l'export ZIP : il décrit le chantier, pas le code livré. Pour conserver un historique d'entrées au-delà de la vie du projet, exportez d'abord ; le journal reste une trace du chantier, pas une copie de son livrable.

The register is excluded from Git indexing and from the ZIP export: it describes the build, not the shipped code. To keep an entry history beyond the project's life, export first; the journal itself stays a trace of the project, not a copy of its output.

L'attente est assuméeThe waiting is deliberate

Sous la politique human, une entrée non approuvée ne traverse jamais la porte du fond : les validations en attente sont à vous. Si le chantier doit filer sans frottement, la politique none reste disponible.

Under the human policy, an unapproved entry never crosses the background gate: pending approvals are yours. If the build must run friction-free, the none policy stays available.

La déduplication compte aussi sur vousDeduplication also relies on you

La signature fusionne un même sujet au même composant, formulé à la même façon : deux tournures très différentes peuvent donner deux entrées. Marquez alors la seconde comme doublon d'une existante, et la chronologie reste propre.

The signature merges the same topic on the same component phrased the same way: two very different wordings can yield two entries. Mark the second as a duplicate of the existing one, and the timeline stays clean.

Le triage qualifie, le correcteur confineTriage qualifies, the fixer confines

La passe de fond ne répare pas : elle analyse et oriente. Là où la correction automatique est active, le correcteur se limite au constat — s'il manque du contexte, il bloque l'entrée avec son motif, au lieu d'aller au-delà. Le vague est traité comme un motif de blocage, pas comme une invitation à improviser.

The background pass does not repair: it analyzes and routes. Where the automatic fix is active, the fixer stays within the finding — if context is missing, it blocks the entry with its reason instead of reaching beyond. Vagueness is treated as a blocker, not an invitation to improvise.