- Rust 84%
- WGSL 14.5%
- Nix 1.5%
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> |
||
|---|---|---|
| assets | ||
| configs | ||
| crates | ||
| shaders | ||
| spike-0 | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| default.nix | ||
| journal-bruit.md | ||
| LICENSE | ||
| README.md | ||
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, pasopencl) : tout le GPU reste au rendu. Le paquet à utiliser estpkgs.katagoCPU, qui est exactementkatago.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.