No description
  • Rust 68.3%
  • Shell 21.9%
  • Python 5%
  • Nix 4.8%
Find a file
Supertaranta 76f3831acf
Some checks failed
CI / ci (push) Failing after 9m40s
feat(noeud): --etat prouve C-LAB-1 au démarrage, et skuid attrape le conteneur
Deux propositions de Larry, faites.

1. kleroterion --etat <fichier> lit un état fourni EXPLICITEMENT, jamais par
défaut. Le banc écrit le fichier et joue les deux cas : avec 2 authentificateurs
logiciels, la cellule REFUSE en code 78 avec ses motifs nommés et le laboratoire
DÉMARRE ; état vide, les deux démarrent. Le même état, deux issues — c'est cela
que « deux images distinctes » veut dire, et rien ne le montrait. Même principe
que l'urne du banc 1 : des entrées choisies pour l'épreuve, pas une source
simulée.

Une directive inconnue est un refus (code 64), jamais une ligne ignorée : un
état lu à moitié est pire qu'un état absent, il se présente comme complet.

Sans --etat, le nœud démarre ET L'IMPRIME — sans cette ligne on ne
distinguerait pas « vérifié et accepté » de « rien à vérifier ».
EN_ATTENDANT_L_ANNUAIRE est surveillé comme en_attendant_le_journal, et le
déclencheur est l'USAGE, pas l'existence : la crate annuaire existe depuis
longtemps, ce qui compte est que le nœud en dépende. Les TROIS états sont
distingués et éprouvés, y compris celui qu'on oublie — marqueur effacé sans que
la source arrive : effacer le marqueur ne fait pas arriver la source.

2. La cage réseau sans pont, établie sur pièce. Deux compteurs d'observation,
aucune règle de refus, et une requête depuis un conteneur sans racine :
skuid 1000 passe de 14 à 22 paquets, skuid 0 reste à 14. Le trafic d'un
conteneur sans racine porte bien le skuid de l'utilisateur de service, donc le
filtrage du §2.5 se fera sur la chaîne output par propriétaire. Deux réserves
dites : le reset des compteurs n'a pas pris, c'est le DELTA qui est lu ; et le
curl d'essai a échoué sur TLS, les paquets comptés sont ceux de la poignée de
main — assez pour l'attribution, pas pour le contenu. Rien n'a été posé, table
d'essai et image jetable retirées.

Et une faute de garde, la même que trois fois déjà : ma documentation, en
NOMMANT en_attendant_le_journal, déclenchait le jalon qui le surveille. Un
contrôle qui punit la mention fait effacer l'explication plutôt que le
marqueur. Les gardes de jalon ignorent désormais les lignes de commentaire, et
mordent toujours — revérifié après le changement.

Noté pour le §2.4 : le processus principal du nœud se termine, donc une image
dont il est le Cmd est un conteneur ARRÊTÉ. Correct pour ce qu'il prouve ;
quand il deviendra le service, le banc devra vérifier qu'il reste en vie et
qu'il répond.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:31:30 -04:00
.cargo feat: vendorer les dépendances — la promesse « hors ligne » devient vraie 2026-09-21 02:22:45 -04:00
.claude/rules docs: ocamlnet ne prend pas OCaml 5, et Belenios embarque lui-même la sortie 2026-09-21 18:41:29 -04:00
.forgejo/workflows feat(ci): cache binaire signé — la CI vérifie l'empreinte au lieu de recompiler 2026-09-21 18:15:27 -04:00
banc feat(noeud): --etat prouve C-LAB-1 au démarrage, et skuid attrape le conteneur 2026-09-21 23:31:30 -04:00
ci feat(noeud): --etat prouve C-LAB-1 au démarrage, et skuid attrape le conteneur 2026-09-21 23:31:30 -04:00
crates feat(noeud): --etat prouve C-LAB-1 au démarrage, et skuid attrape le conteneur 2026-09-21 23:31:30 -04:00
docs feat(noeud): --etat prouve C-LAB-1 au démarrage, et skuid attrape le conteneur 2026-09-21 23:31:30 -04:00
outils feat(ci): cache binaire signé — la CI vérifie l'empreinte au lieu de recompiler 2026-09-21 18:15:27 -04:00
vendor feat: vendorer les dépendances — la promesse « hors ligne » devient vraie 2026-09-21 02:22:45 -04:00
.gitignore feat: vendorer les dépendances — la promesse « hors ligne » devient vraie 2026-09-21 02:22:45 -04:00
Cargo.lock feat: le nœud existe, le banc exécute, et l'hôte du bac à sable est tenu 2026-09-21 22:44:31 -04:00
Cargo.toml feat: le nœud existe, le banc exécute, et l'hôte du bac à sable est tenu 2026-09-21 22:44:31 -04:00
CONTRIBUTING.md feat: vendorer les dépendances — la promesse « hors ligne » devient vraie 2026-09-21 02:22:45 -04:00
flake.lock feat(belenios): gel de Belenios 3.3.0 prononcé, et belenios-tool construit depuis les sources 2026-09-21 13:42:30 -04:00
flake.nix feat(banc): banc 10 — les tests de l'amont, sur notre construction 2026-09-21 15:51:05 -04:00
images.lock.nix feat(belenios): gel de Belenios 3.3.0 prononcé, et belenios-tool construit depuis les sources 2026-09-21 13:42:30 -04:00
LICENSE Initial commit 2026-09-21 03:57:54 +00:00
LICENSE-docs chore: squelette du dépôt Klérotèrion 2026-09-19 22:26:31 -04:00
README.en.md fix: l'adresse canonique est SuperTarAnTa/kleroterion, pas kleroterion/kleroterion 2026-09-21 00:01:24 -04:00
README.md fix: l'adresse canonique est SuperTarAnTa/kleroterion, pas kleroterion/kleroterion 2026-09-21 00:01:24 -04:00

Klérotèrion

Tools for a cell: 20 to 150 people who deliberate, draw their roles by lot and vote in secret, with no centre.

The name is the Athenian allotment machine — a stone slab with rows of slots, standing at the entrance, which anyone could watch working.

What is authoritative

docs/spec-cellules-v26.md (in French). If this README, the documentation, the mock-up or the code disagree with it, the specification wins.

Status

Edition 1 frozen, four code pieces in place. The specification no longer changes by replacement: every change is a numbered erratum, tied to a clause and to a test.

Crate What it does
dates the normative date format, one single definition for the whole repository
tirage §2.4, byte by byte, pure — reproduces the edition 1 vectors
regles the rules file: strict reading, digest, the circle's common protocol, local invariants
mandats decisions 4, 12 and 13: rotation, accumulation, disjointness, waiting period, ostracism

37 clauses in the registry (annex E), 21 carried by a named test. CI fails if one of them loses its test, if a normative sentence is reworded without an erratum, or if a bench no longer replays.

Still to write, in order: governance (contradictor, ostracism, mobility), identity service, log, flake and images, brick wiring, portal.

banc/ mechanically replays what a cell would check. Each piece ships its scenario in the same differential as itself, never afterwards — and each bench prints what it does not replace, starting with reading the paper register aloud.

The draw, and how to check it yourself

label       = "kleroterion/tirage/v1" ‖ 0x00 ‖ epoch (8 bytes) ‖ role length (1 byte) ‖ role
digest      = SHA-256(label ‖ seed (32 bytes) ‖ id length (2 bytes) ‖ id)
ranking     = terms served ascending, then digest ascending, then identifier ascending

The cell publishes the case file — eligible people and their counters — and its digest before the draw. A draw whose case file was not published first is void.

python3 docs/spec-cellules-vecteur-tirage.py
node    docs/spec-cellules-vecteur-tirage.mjs
./ci/ci.sh

What this project does not write

No cryptographic primitive, no consensus protocol. Voting is Belenios, deliberation Loomio and Pol.is, voice Linphone and Flexisip, the log an existing witness network (C2SP tlog-witness). We package them; we do not modify them.

Where this repository lives

Canonical address: https://git.floating-coconuts.com/SuperTarAnTa/kleroterion. Codeberg is a write-only mirror, never referenced by CI or by project links.

The NixOS module and the Podman composition pull images and releases from the canonical forge, but the reference is always the digest, never the address: anything that does not match the published digest is refused, wherever it came from.

Licences

Code: AGPL-3.0. Documentation (docs/): CC BY-SA 4.0.