Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions CHANGELOG.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,60 @@ et le projet suit le [versionnage sémantique](https://semver.org/lang/fr/).

## [Non publié]

## [0.1.65] - 2026-08-24

### Ajouté

- **`--json` couvre désormais toutes les commandes dont la sortie a une
structure.** `show`, `scores`, `next`, `doctor` et `validate-structure`
rejoignent `list-labs`, `progress`, `check`, `status` et `support` : dix
commandes, un document chacune, toutes passant par `machine.emit()` et
portant donc `schema`. Une intégration ne pouvait lire qu'un quart de ce que
l'outil sait ; pour le reste, elle devait analyser des tableaux Rich dont la
largeur dépend du terminal.

- **Un verdict se lit sans le traduire.** `doctor` donne à chaque contrôle une
`key` stable (`kvm`, `pytest`, `libvirt_pool`…) et un `state` en jeton (`ok`,
`failed`, `choice_required`) ; `validate-structure` donne à chaque anomalie la
`key` de la règle qui a parlé, ses `params`, et un `kind` qui nomme la
famille. Le libellé traduit est posé à côté, pour l'affichage seulement. La
conception paresseuse aurait recopié la phrase affichée dans un champ :
d'apparence complète, et inutilisable, puisque aucun consommateur ne peut
distinguer le vert du rouge sans analyser du français ou de l'anglais. Un test
joue `doctor --json` dans les deux langues et exige des clés et des états
identiques là où les libellés diffèrent.

- **[Une page de documentation pour la sortie machine](docs/machine-output.fr.md)
([EN](docs/machine-output.md))** : chaque document champ par champ, les codes
de retour, et la règle d'évolution. Un champ ajouté laisse `schema` où il
est ; un champ qui change de sens l'incrémente. Le texte traduit et la sortie
brute de pytest sont explicitement hors du contrat ; les jetons stables et les
codes de retour y sont. Le `fullhelp` a gagné la section correspondante, dans
les deux langues.

### Corrigé

- **Un diagnostic qui plantait en diagnostiquant.** `virsh version` et
`incus list` sont joués avec un délai de cinq secondes, et la `TimeoutExpired`
n'était pas rattrapée : sur un hôte dont la socket libvirt ne répond jamais,
elle emportait toute la commande `doctor`. Depuis que `doctor --json` est une
interface, elle emportait avec elle le document de l'appelant et lui rendait
une trace Python. Une sonde qui ne répond pas est désormais rapportée comme un
composant qui ne répond pas, avec le geste qui le corrige.

### Modifié

- `doctor --json --fix` est refusé, et dit pourquoi : les commandes de
remédiation écrivent sur la sortie standard, et le document sortirait précédé
de la sortie d'apt. On lit le diagnostic d'abord, on agit ensuite.

- `Check` porte son identité (`key`) et en dérive son libellé, au lieu de les
écrire tous les deux à chaque appel, où rien n'empêchait qu'ils divergent. Son
`status_key` devient un `state`, pour que le mot affiché au terminal et le
jeton rendu à un programme viennent de la même source.

Closes #83.

## [0.1.64] - 2026-08-24

### Corrigé
Expand Down
51 changes: 51 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,57 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.1.65] - 2026-08-24

### Added

- **`--json` now covers every command whose output has a structure.** `show`,
`scores`, `next`, `doctor` and `validate-structure` join `list-labs`,
`progress`, `check`, `status` and `support`: ten commands, one document each,
all going through `machine.emit()` and therefore all carrying `schema`. An
integration could read a quarter of what the tool knows; for the rest it had
to parse Rich tables whose width follows the terminal.

- **A verdict can be read without translating it.** `doctor` gives every check
a stable `key` (`kvm`, `pytest`, `libvirt_pool`…) and a `state` token (`ok`,
`failed`, `choice_required`); `validate-structure` gives every issue the
`key` of the rule that fired, its `params`, and a `kind` naming the family.
The translated label sits beside them, for display only. The lazy design
would have copied the displayed sentence into a field: complete-looking, and
unusable, since no consumer can tell green from red without parsing French or
English. A test runs `doctor --json` in both languages and asserts the keys
and states are identical while the labels are not.

- **[A documentation page for the machine output](docs/machine-output.md)
([FR](docs/machine-output.fr.md))**: every document field by field, the exit
codes, and the evolution rule. Adding a field keeps `schema`; changing what a
field means increments it. Translated text and pytest's raw output are
explicitly outside the contract; the stable tokens and the exit codes are
inside it. `fullhelp` gained a matching section, in both languages.

### Fixed

- **A diagnostic that crashed while diagnosing.** `virsh version` and
`incus list` are run with a five-second timeout, and the `TimeoutExpired` was
not caught: on a host whose libvirt socket never answers, it took the whole
`doctor` command down. Now that `doctor --json` is an interface, it took the
caller's document down with it and handed back a Python traceback. A probe
that does not answer is now reported as a component that does not answer,
with the gesture that fixes it.

### Changed

- `doctor --json --fix` is refused, and says why: the remediation commands write
to standard output, and the document would come out preceded by apt's output.
The diagnosis is read first, acted upon second.

- `Check` carries its identity (`key`) and derives its label from it, instead of
spelling both out at each call site where nothing prevented them from
diverging. Its `status_key` becomes a `state`, so the terminal wording and the
machine token come from one source.

Closes #83.

## [0.1.64] - 2026-08-24

### Fixed
Expand Down
1 change: 1 addition & 0 deletions docs/README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ dit ce que c'est en trente secondes ; ces pages disent comment cela fonctionne.
| [Le contrat v1](./contract-v1.fr.md) | `meta.yml` et `lab.yaml`, champ par champ, avec ce que la v1 garantit |
| [Référence des commandes](./commands.fr.md) | Toutes les commandes, produites par la CLI elle-même |
| [Où dsoxlab écrit](./files.fr.md) | Chaque fichier que dsoxlab crée, et les variables d'environnement qu'il lit |
| [La sortie machine](./machine-output.fr.md) | Ce que rend `--json`, champ par champ, et ce sur quoi on peut bâtir |
| [La marque](./brand.fr.md) | Nom, logo et conditions d'usage |

Les contributeurs ont [CONTRIBUTING.fr.md](../CONTRIBUTING.fr.md) : installation,
Expand Down
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ thirty seconds; these pages say how it works.
| [The v1 contract](./contract-v1.md) | `meta.yml` and `lab.yaml`, field by field, with what version 1 guarantees |
| [Command reference](./commands.md) | Every command, generated from the CLI itself |
| [Where dsoxlab writes](./files.md) | Every file dsoxlab creates, and the environment variables it reads |
| [The machine output](./machine-output.md) | What `--json` prints, field by field, and what may be built on it |
| [The mark](./brand.md) | Name, logo and their usage terms |

Contributors have [CONTRIBUTING.md](../CONTRIBUTING.md): setup, quality gates,
Expand Down
Loading
Loading