Mozhu 墨竹 — jeu de go natif COSMIC (extrait de CosNix-Bubblegum:pkgs/mozhu)
  • Rust 84%
  • WGSL 14.5%
  • Nix 1.5%
Find a file
Supertaranta aa71dfdb6d docs(mozhu): poser le texte AGPL-3.0 et nommer le titulaire
Toutes les déclarations disaient déjà AGPL-3.0-or-later — `[workspace.package]`,
les quatre caisses par `license.workspace = true`, le spike 0 pour lui-même, et
`meta.license = licenses.agpl3Plus` dans `default.nix`. Il manquait le seul
élément qui rend la licence opposable : le texte, et un titulaire nommé.

- `LICENSE` : texte officiel de la GNU AGPL v3 (34523 octets), copié depuis
  `pkgs/vmdrive/LICENSE` — quatre copies du dépôt concordent à l'octet près.
- `README.md` : section « Licence », titulaire `Copyright (C) 2026 Supertaranta`,
  et rappel de l'endroit où chaque déclaration vit.

Co-Authored-By: Supertaranta <larry@floating-coconuts.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-20 03:01:48 -04:00
assets feat(cosmic): Mozhu dans Mes applications — logo, lanceur, module importé 2026-09-10 14:53:04 -04:00
configs fix(mozhu): KataGo parle du point de vue du joueur au trait, pas de Noir 2026-09-11 20:16:08 -04:00
crates docs(mozhu): dire que le double suit la config, pas le défaut de KataGo 2026-09-11 20:25:30 -04:00
shaders feat(mozhu): les coordonnées dans les marges, et le fondu des pierres retirées 2026-09-10 14:25:17 -04:00
spike-0 feat(mozhu): spike 0 — le widget shader de libcosmic est utilisable 2026-09-10 01:31:05 -04:00
.gitignore feat(mozhu): jalon 1 — le papier et les traits, sur winit nu 2026-09-10 02:16:18 -04:00
Cargo.lock feat(mozhu): le cinabre, l'aperçu au survol, et l'enregistrement SGF 2026-09-10 14:16:07 -04:00
Cargo.toml feat(mozhu): jalon 7 — l'application COSMIC 2026-09-10 13:06:14 -04:00
default.nix feat(cosmic): Mozhu dans Mes applications — logo, lanceur, module importé 2026-09-10 14:53:04 -04:00
journal-bruit.md feat(mozhu): jalon 6 — le décor sumi-e, engendré 2026-09-10 12:45:04 -04:00
LICENSE docs(mozhu): poser le texte AGPL-3.0 et nommer le titulaire 2026-09-20 03:01:48 -04:00
README.md docs(mozhu): poser le texte AGPL-3.0 et nommer le titulaire 2026-09-20 03:01:48 -04:00

Mozhu 墨竹

Un jeu de go natif COSMIC. Le rendu est le produit : le goban n'est pas une planche de bois, c'est une feuille de papier xuan. Les traits sont des coups de pinceau, les pierres posent sur le papier, l'analyse du moteur diffuse comme de l'encre humide.

État

Jalon Statut
0 — spike widget shader ✅ réussi, architecture nominale
1 — papier + traits (winit nu) ✅ livré
2 — pierres ✅ livré
3 — règles + SGF
4 — KataGo ✅ livré
5 — encre d'analyse
6 — décor sumi-e
7 — intégration COSMIC

Rapports : ~/Bureau/RevOS/RAPPORT-MOZHU-SPIKE0-20260910.md, ~/Bureau/RevOS/RAPPORT-MOZHU-JALON1-20260910.md, ~/Bureau/RevOS/RAPPORT-MOZHU-JALON2-20260910.md, ~/Bureau/RevOS/RAPPORT-MOZHU-JALON3-20260910.md, ~/Bureau/RevOS/RAPPORT-MOZHU-JALON4-20260910.md, ~/Bureau/RevOS/RAPPORT-MOZHU-JALON5-20260910.md, ~/Bureau/RevOS/RAPPORT-MOZHU-JALON6-20260910.md. Réglages de nuanceur essayés et rejetés : journal-bruit.md.

Exercer le rendu

mozhu-ink ne dépend ni de libcosmic ni de KataGo. Il s'exerce seul :

cargo run --example goban                        # fenêtre winit nue
cargo run --example goban -- --capture f.png     # rendu hors écran
cargo run --example goban -- --capture f.png --taille 2256x1504 --graine 7
cargo run --example goban -- --nu                # sans les pierres
cargo run --example goban -- --sans-decor        # sans le décor
cargo run -p mozhu-partie --example exporter -- p.sgf   # écrire un SGF
cargo run -p mozhu-partie --example exporter -- --relire p.sgf
cargo run -p mozhu-engine --example sonder      # analyse, sans rien installer
MOZHU_TRAMES=1 cargo run --example goban         # compter les trames

Dans la fenêtre : clic pour jouer, ← → pour naviguer dans la partie,
début/fin pour aller aux extrémités, P pour passer, S pour enregistrer en SGF,
A pour montrer l'encre d'analyse, espace pour une nouvelle feuille de papier.

## Les caisses

| Caisse | Rôle | Dépend de |
|---|---|---|
| `mozhu-ink` | le rendu — papier, traits, pierres | `wgpu` seul |
| `mozhu-partie` | règles, navigation, SGF | `goban`, `sgf-parse` |
| `mozhu-engine` | pilote KataGo, file, cache | `serde` seul |
| `mozhu-app` | l'application COSMIC | `libcosmic` + les trois autres |

`mozhu-ink` ne connaît pas les règles du go et ne doit pas les connaître.
`mozhu-partie` ne sait pas dessiner. L'exemple `goban` les assemble, comme le
fera `mozhu-app`.

Le mode hors écran existe pour le §13 de la spec — regarder une capture à chaque itération de nuanceur. Attendre une session graphique à chaque essai aurait rendu la boucle intenable.

L'application

nix-build -E 'with import <nixpkgs> {}; callPackage ./pkgs/mozhu {}'

Le paquet installe le lanceur, les icônes, la configuration d'analyse et faux-katago. Dans la fenêtre : clic pour jouer, ← → pour naviguer, début/fin pour les extrémités, A pour l'encre d'analyse, P pour passer, S pour enregistrer, N pour une nouvelle partie, espace pour une nouvelle feuille de papier.

Les parties s'enregistrent dans ~/Documents/mozhu/, nommées par leur date. mozhu partie.sgf ouvre un fichier.

Un aperçu de pierre suit le curseur, mais seulement sur les points jouables : proposer un coup illégal serait pire que ne rien proposer. Le dernier coup joué porte un point de cinabre — le seul accent chromatique de toute l'interface. En reculant dans la partie, les pierres retirées s'effacent en fondu : on voit ce qui change, pas seulement que quelque chose a changé.

Le guide s'ouvre par la touche G ou le bouton de la barre de titre. Il contient les règles, la vie et la mort, le décompte et le vocabulaire — mais surtout un conseil qui suit la partie : une phrase sur la position à l'écran, qui change à chaque coup et signale par exemple qu'un groupe est en atari. L'interrupteur en tête du guide l'éteint ; le réglage est retenu d'un lancement à l'autre. Au tout premier lancement, le guide s'ouvre de lui-même.

Les coordonnées sont dans les marges, en 淡墨. Les lettres sautent le I, comme partout au go, et les rangées se comptent depuis le bas.

Le réseau de neurones

Il n'est pas embarqué : plus de cent mégaoctets, rien à faire dans le magasin Nix, et il se remplace au fil des versions. Dépose un .bin.gz de KataGo dans ~/.local/share/mozhu/ et l'analyse devient réelle. Sans lui, elle est simulée par faux-katago — ce qui permet de juger le rendu sans rien télécharger.

La spec demande un réseau b18 ou b28 transformer, pas un b40.

Contraintes matérielles (non négociables)

Radeon 840M (RDNA 3.5) partage sa bande passante avec le CPU.

  • KataGo tourne sur CPU (backend eigen, pas opencl) : tout le GPU reste au rendu. Le paquet à utiliser est pkgs.katagoCPU, qui est exactement katago.override { backend = "eigen"; } — chemin de magasin identique, vérifié. Le binaire n'est lié à aucune bibliothèque GPU : la contrainte tient par construction, pas par configuration.
  • Rendu événementiel, pas 60 fps : zéro trame au repos. Mesuré au spike 0.
  • Écran 2256×1504 en 3:2, mise à l'échelle fractionnaire correcte à 1.0 / 1.25 / 1.5 / 2.0. On dessine en pixels physiques.

Licence

Projet Floating Coconuts. Licence AGPL-3.0-or-later — le texte complet est dans LICENSE.

Copyright (C) 2026 Supertaranta

Les quatre caisses (mozhu-ink, mozhu-partie, mozhu-engine, mozhu-app) héritent de license = "AGPL-3.0-or-later" déclaré dans [workspace.package], le spike 0 la déclare pour lui-même, et default.nix porte meta.license = licenses.agpl3Plus.