Skip to content

feat: découper un mot niveau par niveau (ricochets, ADR 0084) - #110

Closed
Lunik wants to merge 4 commits into
developfrom
claude/adoring-galileo-03i9j6
Closed

Lunik wants to merge 4 commits into
developfrom
claude/adoring-galileo-03i9j6

Conversation

@Lunik

@Lunik Lunik commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

Résumé

Découper juge maintenant chaque coupe, sur l'arbre des coupes d'un mot (ADR 0084).

API (rétrocompatible)

  • etymo_domaine::decoupage : jugement pur d'un ensemble de coupes (Faux, Continue, Termine), sans ordre.
  • MotRicochet.decoupage en #[serde(default)] ; sans arbre, les coupes à plat font foi.
  • POST /ricochet : chaque coupe envoie toutes les coupes posées, le serveur rejuge sans état. Une coupe juste qui laisse des coupes répond suite = continue et n'écrit rien (ni commande, ni version_etat, ni maîtrise, ni quêtes). Seule la commande qui clôt la question est une transaction.
  • openapi.json et api.d.ts régénérés ; aucune requête SQL ni migration.

PWA

  • jugerCoupes (miroir du domaine, mêmes cas de test) et feuillesDuMot.
  • Chaque jointure touchée est une coupe envoyée ; le mot reste ouvert tant qu'un morceau se coupe, une coupe fausse arrête la question, la dernière coupe juste l'achève. La leçon montre tous les morceaux élémentaires.

Points à relire

  • Ordre de déploiement : l'API d'abord, la PWA ensuite. Une ancienne PWA qui coupe un mot chaîné reçoit continue : sa réponse n'est pas enregistrée (non testée).
  • La lame de l'ADR 0053 n'est pas dans la PWA livrée ; elle reste à faire.
  • cargo sqlx prepare --check non lancé (outil absent) ; .sqlx/ est intact.
  • Recette à l'écran (visual-review) non faite ; remplacée par un test de composant.

Vérification

  • cargo fmt --check, cargo clippy -D warnings : OK ; cargo test --workspace : 135 tests.
  • npm run lint (un avertissement existant dans Plis.tsx), typecheck : OK ; npm test : 132 tests.
  • check_identity sur styles.css : 0 erreur.

À fusionner avec les PR Design et Content.


Generated by Claude Code

A word's right cuts form a tree (ADR 0084). Each cut command sends all cuts
placed so far; the server rejudges them without keeping state. A right cut
that leaves cuts to place answers suite=continue and writes nothing; the
command that closes the question (last right cut, or a wrong one) is the
only transaction. Manifests without the tree keep judging the flat list.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkYb6EamApcbLXBiXShSgV
Each joint tapped is a cut sent to the server with all cuts placed so far.
A right cut leaves the question open while a piece can still be cut; a wrong
cut ends it; the last right cut completes it. jugerCoupes mirrors
etymo_domaine::decoupage::juger, and the lesson shows every elementary piece.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkYb6EamApcbLXBiXShSgV
@Lunik
Lunik marked this pull request as ready for review November 6, 2026 20:57
The PWA job fails on master's lockfile too (npm audit --audit-level=high).
Non-breaking update of the lockfile only; typecheck, tests and build pass.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkYb6EamApcbLXBiXShSgV

Lunik commented Nov 6, 2026

Copy link
Copy Markdown
Contributor Author

Le job « PWA (TypeScript) » était rouge à cause de npm audit --audit-level=high (nouvelles alertes sur vite 8.3.0–8.3.2 et undici), pas à cause de cette PR : web/package-lock.json est identique à celui de master, où l'audit échoue aussi.

Correctif porté ici (758b3b0) : npm audit fix, qui ne touche que le lockfile, sans changement cassant. En local : audit propre au niveau high, typecheck, 132 tests et build OK. Il reste 6 alertes de niveau faible ou modéré, hors du seuil de la CI.


Generated by Claude Code

cargo audit fails on master's Cargo.lock too (RUSTSEC-2026-0346 to 0349,
0381 to 0383, 0385, 0386). Lockfile-only update of ctutils, rustls,
rustls-webpki, tokio, webpki-root-certs and webpki-roots; no manifest change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkYb6EamApcbLXBiXShSgV

Lunik commented Nov 6, 2026

Copy link
Copy Markdown
Contributor Author

Le job « API et tâches (Rust) » était rouge à cause de cargo audit, pas à cause de cette PR : Cargo.lock et tous les Cargo.toml sont identiques à ceux de master, et cargo audit échoue de la même façon en local sur la base. Les avis sont RUSTSEC-2026-0346 à 0349 (rustls), 0381 (webpki-roots), 0382 (rustls-webpki), 0383 (webpki-root-certs), 0385 (ctutils) et 0386 (tokio).

Correctif porté ici (d895b8b) : mise à jour du seul Cargo.lock pour ces six crates, sans toucher aux manifestes. En local : cargo audit sort 0 (il reste un avertissement « yanked » sur yoke-derive, qui ne fait pas échouer), fmt, clippy -D warnings et 135 tests passent.

Ces deux commits de lockfile (avec 758b3b0 pour npm audit) répondent à des avis publiés depuis la base, et pas à cette fonctionnalité : on peut les isoler dans une PR à part si vous préférez.


Generated by Claude Code

@Lunik
Lunik changed the base branch from master to develop November 7, 2026 14:10

Lunik commented Nov 7, 2026

Copy link
Copy Markdown
Contributor Author

Je ferme cette PR : elle est remplacée, et ne doit pas être fusionnée.

develop contient déjà le parcours qu'elle ajoutait (#103 et #106 : plusieurs découpes par mot, autres_coupes, la lame de l'ADR 0053), et le compilateur de Content a été réécrit en Rust. Ma PR visait master, d'où des conflits sur 13 fichiers et un contrat de réponse concurrent de celui de develop.

Il ne manquait que la donnée : Content ne publiait jamais autres_coupes. C'est ce que fait EtymoLogique/Content#40, avec l'ADR 0084 dans EtymoLogique/Design#52. Aucun changement n'est nécessaire dans App ; j'ai vérifié que le manifeste réel de Content (93 mots à plusieurs découpes) se lit et se juge correctement avec le code de develop.

La branche claude/adoring-galileo-03i9j6 reste en place, sans être supprimée.


Generated by Claude Code

@Lunik Lunik closed this Nov 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants