Commit graph

25 commits

Author SHA1 Message Date
de46c582f4 [IMP] tests: watched series adapts to the core count, threads below 4
Below four cores the runner carried the watched series in one process,
and a relaunch after a base module took 2.5 to 3 s, over the 2 s budget
of § 14.14. The configuration now reads the cores the process may use:
from four, full processes and the whole series, as before; below, threads
on every core, and the end-to-end test moves to the long series. No test
disappears or changes behaviour. A guard refuses, in these series, what a
thread refuses and a process accepts; the reporter names the mode.

Checked: relaunch on 2 cores 1.0 to 1.3 s, was 2.5 to 3.0; on 4 cores
1.2 to 1.5 s; process.env is copied per thread, measured.

--- FR ---

[IMP] épreuves : la série surveillée suit les cœurs, threads sous 4

Sous quatre cœurs, le lanceur portait la série surveillée dans un seul
processus, et une relance après un module de base prenait 2,5 à 3 s,
au-delà du budget de 2 s du § 14.14. La configuration lit les cœurs que
le processus peut occuper : à partir de quatre, processus complets et
série entière, comme avant ; en deçà, threads sur tous les cœurs, et
l'épreuve de bout en bout passe dans la série longue. Aucune épreuve ne
disparaît ni ne change. Une garde refuse dans ces séries ce qu'un thread
refuse et qu'un processus accepte ; le rapporteur nomme le mode.

Vérifié : relance sur 2 cœurs en 1,0 à 1,3 s, contre 2,5 à 3,0 ; sur 4
cœurs en 1,2 à 1,5 s ; process.env est copié par thread, mesuré.

Assisted-by: Claude Opus 5.5
2026-10-06 04:54:01 -04:00
1910e207cb [FIX] tests: four-core budget, quoted values, key guard, switch floor
The relaunch budget of § 14.14 was out of reach on two cores whatever the
tests did; the spec now names its reference machine, four cores, and the
watched series drops a 200 000-move search the long series already runs.
The itinerary guard quotes a string value as the indexed-plan guard does,
through one shared helper. The key-order guard no longer mistakes the
JSDoc type {Object[]} for a computed access, and the property grid counts
the proposals that switch to the constraint order, under a floor.

Checked: 456 node tests in 1.8 s; each new test failed first; cutting the
descent to one move drops the switch count from 86 to 30, under its floor.

--- FR ---

[FIX] épreuves : budget sur quatre cœurs, citation, clés, bascule

Le budget de relance du § 14.14 était hors d'atteinte sur deux cœurs,
quoi que fassent les épreuves ; le spec nomme désormais sa machine de
référence, quatre cœurs, et la série surveillée quitte une recherche de
200 000 mouvements que la série longue joue déjà. La garde d'itinéraire
cite une chaîne comme la garde du plan indexé, par un seul assistant. La
garde de l'ordre des clés ne prend plus le type JSDoc {Object[]} pour un
accès calculé, et la grille compte, sous un plancher, les propositions
qui basculent dans l'ordre des contraintes.

Vérifié : 456 épreuves node en 1,8 s ; chaque épreuve nouvelle a échoué
d'abord ; une descente coupée au premier mouvement fait tomber les
bascules de 86 à 30, sous leur plancher.

Assisted-by: Claude Opus 5.5
2026-10-06 04:26:08 -04:00
4795114093 [ADD] tests: budget reporter, one import parser, key-order guard
The time budget of § 14.14 had no enforcement: a reporter now prints the
total and the ten slowest tests, and fails a run whose node project
exceeds 30 s or node-long 60 s. Two guards parsed imports with two
patterns, one blind past an apostrophe in a comment; both now use one
parser anchored on « from ». The determinism guard refuses key-order
walks, and one test binds the application name across its three
declarations. The end-to-end generations drop to 100 000 moves.

Checked: each ceiling, the apostrophe case and a key walk are shown
failing before the guard that catches them.

--- FR ---

[ADD] épreuves : rapporteur de budget, imports, ordre des clés

Le budget de temps du § 14.14 n'avait aucune garde : un rapporteur
imprime désormais la durée totale et les dix épreuves les plus lentes,
et fait échouer une exécution dont le projet node dépasse 30 s ou
node-long 60 s. Deux gardes lisaient les imports par deux motifs, l'un
aveugle après une apostrophe en commentaire ; les deux passent par un
seul analyseur ancré sur « from ». La garde de déterminisme refuse les
parcours de clés, et une épreuve lie le nom de l'application à ses
trois déclarations. Les générations de bout en bout passent à 100 000.

Vérifié : chaque plafond, le cas de l'apostrophe et un parcours de clés
sont montrés en échec avant la garde qui les attrape.

Assisted-by: Claude Opus 5.5
2026-10-06 04:23:13 -04:00
6c67cba949 [IMP] engine: single owners, regeneration, property grid
The search recomputed the collision excess and the gaps that the measure
already gives — two arithmetics for one quantity. It now reads them from
the measure, and the redundancy total has one owner. Contract values, the
indexed-plan guard and the population split are defined once. regenerer
rebuilds a proposition from its derived seed, stop count and history
length, which the spec now lists (§ 8.9). A property grid runs seeded
random rooms through the whole chain.

Checked: 435 node and 20 long tests; redefining the excess or the gaps in
the measure now fails the search tests too.

--- FR ---

[IMP] moteur : propriétaires uniques, régénération, grille de propriétés

La recherche recalculait l'excédent de collisions et les écarts que la
mesure donne déjà — deux arithmétiques pour une grandeur. Elle les lit
désormais dans la mesure, et le total de redondance a un seul
propriétaire. Valeurs du contrat, garde du plan indexé et partition des
populations sont définies une fois. regenerer reconstruit une proposition
depuis sa graine dérivée, son arrêt et la longueur de son historique,
que le spec énumère désormais (§ 8.9). Une grille de propriétés fait
traverser toute la chaîne à des salles tirées d'une graine.

Vérifié : 435 épreuves node et 20 longues ; redéfinir l'excédent ou les
écarts dans la mesure fait désormais tomber aussi la recherche.

Assisted-by: Claude Opus 5.5
2026-10-06 04:23:02 -04:00
c7cd5f9142 [ADD] engine: end-to-end runs on the demonstrations, measured thresholds
The whole chain — search, both verifiers, measure, ceilings, ranking —
runs end to end on the demonstrations. At 500 000 moves the large one
reaches its proven floor: largest gap 1, no collision, no repeat. Its
quality thresholds were set after measurement, with the measurement in
the comment, never guessed.

Checked: small at 8 for all and certified; conflict variant spreads its 4
collisions over 4 pairs; large at gap 1 with 99 imposed returns; the
ranking holds when its order differs from id order.

--- FR ---

[ADD] moteur : la chaîne de bout en bout, seuils posés après mesure

Toute la chaîne — recherche, les deux vérificateurs, mesure, plafonds,
classement — tourne de bout en bout sur les démonstrations. À 500 000
mouvements, la grande atteint son plancher prouvé : écart maximal 1,
aucune collision, aucune répétition. Ses seuils de qualité sont posés
après mesure, la mesure en commentaire, jamais de tête.

Vérifié : petite à 8 pour tous et certifiée ; variante en conflit à 4
collisions sur 4 paires ; grande à l'écart 1 avec 99 retours imposés ; le
classement tient quand son ordre diffère de celui des identifiants.

Assisted-by: Claude Opus 5.5
2026-10-05 22:52:30 -04:00
f8b3e8b0a9 [ADD] engine: lack, its three figures, dominance and the ranking
Raw meeting counts stop comparing proposals once a table is incomplete;
the lack, realised ceiling minus encounters, compares them. The module
gives the three figures of § 12.10.4, the sorted lack profile, rank
counts and profile dominance between two proposals, and the minimum
certificate read against the a priori ceiling. The ranking orders by gap,
then collision excess, cumulative collisions, repeats and redundancy.

Checked: the operator's three plans rank by excess 0, 2, 3, which either
count alone would invert; dominance and switch rank are pinned by hand.

--- FR ---

[ADD] moteur : manque, ses trois chiffres, dominance et classement

Les nombres bruts de rencontres cessent de comparer deux propositions dès
qu'une table est incomplète ; le manque, plafond réalisé moins
rencontres, les compare. Le module rend les trois chiffres du
§ 12.10.4, le profil trié du manque, le décompte des rangs et la
dominance de profil entre deux propositions, et le certificat de minimum
lu contre le plafond a priori. Le classement ordonne par écart, puis
excédent de collisions, collisions cumulées, répétitions et redondance.

Vérifié : les trois plans de l'opérateur se classent par excédent 0, 2,
3, ce que chaque compte seul inverserait ; dominance et rang de bascule
épinglés à la main.

Assisted-by: Claude Opus 5.5
2026-10-05 22:52:29 -04:00
f5d1bb04bd [ADD] engine: diagnosis of what a configuration makes unavoidable
Before any search, the diagnosis states what no plan can avoid: missing
seats, the a priori ceiling, per-group collision floors in cumulative
occurrences, distinct pairs and excess, imposed returns, anchoring per
table, and the floor of the itinerary gap where the room is tight. A
floor it cannot prove is null, never zero, so the operator is never sent
to rerun towards a value the configuration forbids.

Checked: the large demonstration gives a floor of 1 with at least 24
mobiles; collision floors equal exact minima found by enumeration, the
§ 5.6 example of 8 collisions on 2 pairs included.

--- FR ---

[ADD] moteur : diagnostic de ce qu'une configuration rend inévitable

Avant toute recherche, le diagnostic énonce ce qu'aucun plan n'évite :
places manquantes, plafond a priori, planchers de collisions par groupe
en occurrences cumulées, paires distinctes et excédent, retours imposés,
ancrage par table, et le plancher de l'écart d'itinéraire là où la salle
est tendue. Un plancher qu'il ne sait pas prouver vaut null, jamais
zéro : l'opérateur n'est jamais envoyé relancer vers une valeur que la
configuration interdit.

Vérifié : la grande démonstration donne un plancher de 1 pour 24 mobiles
au moins ; les planchers de collisions égalent les minimums exacts
trouvés par énumération, l'exemple du § 5.6 compris.

Assisted-by: Claude Opus 5.5
2026-10-05 22:52:29 -04:00
74c21ee031 [ADD] search: seeded late acceptance over a lexicographic score
A proposition is the best plan a late-acceptance descent finds from its
derived seed. It stops on a count of moves, never on a duration, so one
seed gives one plan on any machine. The score is a six-integer tuple
compared lexicographically: largest gap to the a priori ceiling, sum of
squared gaps, collision excess, cumulative collisions, repeats with chosen
returns, redundancy. An incremental state scores a swap in O(capacity);
the full recomputation, from the measure, checks it.

Checked: the small demonstration reaches 8 met for all twelve with no
special case; incremental and full scores agree up to 10 000 moves.

--- FR ---

[ADD] recherche : acceptation tardive ensemencée, score lexicographique

Une proposition est le meilleur plan que trouve une descente par
acceptation tardive depuis sa graine dérivée. Elle s'arrête sur un compte
de mouvements, jamais sur une durée : une graine donne un plan sur toute
machine. Le score est un n-uplet de six entiers comparé dans l'ordre
lexicographique : plus grand écart au plafond a priori, somme des carrés
des écarts, excédent de collisions, collisions cumulées, répétitions et
retours choisis, redondance. Un état incrémental évalue un échange en
O(capacité) ; le recalcul complet, tiré de la mesure, le vérifie.

Vérifié : la petite démonstration atteint 8 rencontres pour les douze sans
cas particulier ; scores incrémental et complet s'accordent jusqu'à
10 000 mouvements.

Assisted-by: Claude Opus 5.5
2026-10-05 22:52:29 -04:00
a2a3a7eca8 [ADD] demo: four seeded configurations, forged names, witness round
The demonstrations are built from a seed in a fixed draw order. The large
one seats 260 at 29 tables of 8 and 4 of 7 with one facilitator each, its
variant at 33 tables of 8; the small one seats 12 at four tables of 3 in
groups 4/4/4, its conflict variant 5/4/3. Group sizes follow the weighted
law, a seed with no witness round is refused, and forged names appear
nowhere else in the repository.

Checked: the large configuration is tight at 260 seats; each of the four
refusals raises its named error; a wrong table split fails 12 tests.

--- FR ---

[ADD] demo : quatre configurations ensemencées, noms forgés, tour témoin

Les démonstrations se construisent depuis une graine, dans un ordre de
tirages fixé. La grande assoit 260 personnes à 29 tables de 8 et 4 de 7,
un animateur par table, sa variante à 33 tables de 8 ; la petite assoit
12 personnes à quatre tables de 3 en groupes 4/4/4, sa variante de
conflit 5/4/3. Les tailles de groupe suivent la loi pondérée, une graine
sans tour témoin est refusée, et les noms forgés n'apparaissent nulle
part ailleurs dans le dépôt.

Vérifié : la grande configuration est tendue à 260 sièges ; chacun des
quatre refus lève son erreur nommée ; une mauvaise répartition des tables
fait échouer 12 épreuves.

Assisted-by: Claude Opus 5.5
2026-10-05 17:27:34 -04:00
926a3ff21f [ADD] engine: invariant and indicator verifiers, as application code
Both verifiers ship with the application and run on every generation and
every loaded file: the first judges a plan against the instance, the
second the line N − 1 ≥ a priori ≥ realised ≥ met for each person. Neither
throws on a content defect — each defect is a named violation — and
neither modifies what it receives.

Checked: one mutation per violation code yields that violation and no
other; frozen inputs stay intact; three mutants that wrote to them fail.

--- FR ---

[ADD] moteur : vérificateurs d'invariants et d'indicateurs, applicatifs

Les deux vérificateurs sont livrés avec l'application et jouent à chaque
génération et à chaque fichier chargé : le premier juge un plan contre
l'instance, le second la ligne N − 1 ≥ a priori ≥ réalisé ≥ rencontres
pour chacun. Aucun ne lève sur un défaut du contenu — chaque défaut est
une violation nommée — et aucun ne modifie ce qu'il reçoit.

Vérifié : une mutation par code produit cette violation et aucune autre ;
les entrées gelées restent intactes ; trois mutants qui y écrivaient
échouent.

Assisted-by: Claude Opus 5.5
2026-10-05 17:27:34 -04:00
9efcfc9973 [ADD] engine: ceilings a priori and realised, exact dynamic programme
The a priori ceiling is maximised over admissible itineraries by a dynamic
programme over tables, free rounds and capped seats, memoised by
signature, with an exhaustive enumeration as its oracle. The realised
ceiling counts the occupancy of each table at each round, not its
capacity, so a lack of zero means nothing left to take from that plan.

Checked: anchored 16 and mobile 19 on four tables of five; 28, 27, 28 and
24 on the large shape; the programme equals the enumeration on random
instances; five mutants of the formula and the programme each fail.

--- FR ---

[ADD] moteur : plafonds a priori et réalisé, programmation dynamique

Le plafond a priori se maximise sur les itinéraires admissibles par une
programmation dynamique sur les tables, les tours libres et les sièges
plafonnés, mémoïsée par signature, avec une énumération exhaustive pour
oracle. Le plafond réalisé compte l'occupation de chaque table à chaque
tour, non sa capacité : un manque nul veut dire que ce plan n'a plus rien
à reprendre.

Vérifié : ancré 16 et mobile 19 sur quatre tables de cinq ; 28, 27, 28 et
24 sur la forme de la grande ; la programmation égale l'énumération sur
des instances tirées ; cinq mutants de la formule et du calcul échouent.

Assisted-by: Claude Opus 5.5
2026-10-05 17:27:34 -04:00
30045182e7 [ADD] engine: indicators measured by full recomputation
Full recomputation is the measure every displayed figure comes from
(§ 5.10). It keeps the three collision units apart — cumulative
occurrences, distinct pairs, their excess — splits table returns and
repeated meetings into those the engine chose and those the reservations
impose, and gives null, never zero, for an empty population.

Checked: the small demonstration's perfect plan gives 8 met, A = 2,
r = 6, d = 0.25 for all twelve; spread and concentrated plans give
excess 0 and 4.

--- FR ---

[ADD] moteur : indicateurs mesurés par recalcul complet

Le recalcul complet est la mesure dont sort tout chiffre affiché
(§ 5.10). Il tient séparées les trois unités de collision — occurrences
cumulées, paires distinctes, leur excédent —, partage les retours à une
table et les rencontres répétées entre ceux que le moteur a choisis et
ceux qu'imposent les réservations, et rend null, jamais zéro, pour une
population vide.

Vérifié : le plan parfait de la petite démonstration donne 8 rencontres,
A = 2, r = 6, d = 0,25 pour les douze ; plans réparti et concentré
donnent un excédent de 0 et de 4.

Assisted-by: Claude Opus 5.5
2026-10-05 17:27:34 -04:00
4e31c8d3e5 [ADD] guards: determinism and layer boundary checked over src/
A seed reproduces a plan only if nothing in the engine or the demo
generator reads the clock, a random source or the locale. One guard reads
every module of src/moteur and src/demo and names each such call by its
line, Node's crypto draws included. A second walks the engine's import
graph and refuses the interface, storage, Svelte, Capacitor, Electron,
Node built-ins and browser globals. Both fail on an empty tree.

Checked: each forbidden form is caught in a temporary tree; the real tree
is clean.

--- FR ---

[ADD] garde-fous : déterminisme et frontière des couches sur src/

Une graine ne reproduit un plan que si rien, dans le moteur ni dans le
générateur de démonstrations, ne lit l'horloge, une source aléatoire ou la
locale. Une garde lit chaque module de src/moteur et de src/demo et nomme
chaque tel appel par sa ligne, tirages de crypto de Node compris. Une
seconde parcourt le graphe d'imports du moteur et refuse l'interface, le
stockage, Svelte, Capacitor, Electron, les modules natifs de Node et les
globales du navigateur. Les deux échouent sur un arbre vide.

Vérifié : chaque forme interdite est relevée dans un arbre temporaire ;
l'arbre réel est propre.

Assisted-by: Claude Opus 5.5
2026-10-05 17:27:06 -04:00
518ef93f67 [ADD] engine: configuration normalised into an indexed instance
The engine works on dense arrays, not on the operator's objects.
normaliser checks the configuration, derives anchored, partially fixed and
mobile statuses from the reservations themselves, and suspends an excluded
person's reservations without stopping on them. It never refuses a room
that is too small: that is a property of the configuration, which the
diagnosis names and the search refuses (§ 5.9). A plan converts both ways
between ids and indices, seats in ascending id.

Checked: a reservation after an excluded one, and a conflict found under
« tous », each fail their mutant; an independent oracle agreed throughout.

--- FR ---

[ADD] moteur : configuration normalisée en une instance indexée

Le moteur travaille sur des tableaux denses, pas sur les objets de
l'opérateur. normaliser vérifie la configuration, dérive les statuts
ancré, partiellement fixé et mobile des réservations elles-mêmes, et
suspend les réservations d'un exclu sans s'y arrêter. Il ne refuse jamais
une salle trop petite : c'est une propriété de la configuration, que le
diagnostic nomme et que la recherche refuse (§ 5.9). Un plan passe dans
les deux sens des ids aux index, sièges par id croissant.

Vérifié : une réservation après celle d'un exclu, et un conflit découvert
sous « tous », font chacune tomber leur mutant ; un oracle indépendant
concorde partout.

Assisted-by: Claude Opus 5.5
2026-10-05 17:27:06 -04:00
cd9ea442a6 [ADD] prng: PCG32 checked against the reference C implementation
The demonstrations and the search must give the same plan from the same
seed on any machine, so every draw comes from one generator with explicit
state. PCG32 runs on 16-bit limbs without BigInt, seeded as
pcg32_srandom_r; bounded draws reject as pcg32_boundedrand_r does, and the
shuffle loop is the reference demo's. Expected values come from compiling
and running the reference implementation, never from this code.

Checked: outputs, coins, dice and deck match the reference demo; a wrong
multiplier, rotation or remainder each fail.

--- FR ---

[ADD] prng : PCG32 vérifié contre l'implémentation C de référence

Les démonstrations et la recherche doivent rendre le même plan pour la
même graine sur toute machine : chaque tirage vient d'un seul générateur à
état explicite. PCG32 calcule par mots de 16 bits sans BigInt, ensemencé
comme pcg32_srandom_r ; le tirage borné rejette comme
pcg32_boundedrand_r, et la boucle de mélange est celle de la démo de
référence. Les valeurs attendues sortent de l'implémentation de référence
compilée et exécutée, jamais de ce code.

Vérifié : sorties, pièces, dés et paquet égalent la démo de référence ;
un multiplicateur, une rotation ou un reste faussés échouent chacun.

Assisted-by: Claude Opus 5.5
2026-10-05 17:27:06 -04:00
100c0d3399 [FIX] electron: remove Electron's default English application menu
Without a menu set by the application, Electron installs its own: in
English, while the interface is French, and offering Reload and the
developer tools to the operator. The shell now sets a null menu before
its first window, which also removes the menu bar on Windows.

Checked: the shell test fails without the call and passes with it; the
rebuilt exe, run under Wine 11, shows the version banner and no menu bar.

--- FR ---

[FIX] electron : retirer le menu anglais par défaut d'Electron

Sans menu posé par l'application, Electron installe le sien : en
anglais, alors que l'interface est en français, et offrant à l'opérateur
le rechargement et les outils de développement. La coquille pose
désormais un menu nul avant sa première fenêtre, ce qui retire aussi la
barre de menu sous Windows.

Vérifié : l'épreuve de la coquille échoue sans l'appel et passe avec ;
l'exécutable reconstruit, lancé sous Wine 11, montre le bandeau de
version et aucune barre de menu.

Assisted-by: Claude Opus 5.5
2026-10-05 13:47:16 -04:00
a3354e2b0b [ADD] electron: own shell, portable Windows exe built under podman
The deliverable is a single-file portable executable whose Electron the
project updates itself. The shell keeps context isolation on, Node
integration off and the page sandboxed; one IPC channel returns the
folder the portable launcher publishes. The build runs in a no-Wine image
pinned by digest, relays no host variable, refuses to overwrite a built
number, removes what a failed build leaves, and accepts only the name
version.json gives. The spec stops claiming the portable target needs
Wine.

Checked: exe built in 86 s, resource FileVersion 2026.1005.1.0 and
© 2026 TechnoLibre; 109 node tests pass; two end-of-build mutations fail.

--- FR ---

[ADD] electron : coquille propre, exécutable portable construit sous podman

Le livrable est un exécutable portable à fichier unique, dont le projet
met lui-même Electron à jour. La coquille garde l'isolation de contexte,
coupe l'intégration de Node et isole la page ; un seul canal IPC rend le
dossier que publie le lanceur portable. La construction s'exécute dans
une image sans Wine épinglée par empreinte, ne relaie aucune variable de
l'hôte, refuse d'écraser un numéro construit, retire ce qu'un échec
laisse, et n'accepte que le nom que donne version.json. Le spec cesse
d'affirmer que la cible portable exige Wine.

Vérifié : exécutable construit en 86 s, ressource FileVersion
2026.1005.1.0 et © 2026 TechnoLibre ; 109 épreuves node passent ; deux
mutations du contrôle de fin échouent.

Assisted-by: Claude Opus 5.5
2026-10-05 13:13:32 -04:00
9fc104d0e9 [ADD] skeleton: Capacitor web app that shows its dated version
The engine to come must be proven against oracles under node in seconds,
so the skeleton sets three test projects: node, watched; node-long; and a
real Chromium that reads computed styles in both themes. The version
lives in version.json alone; a check refuses eight divergences — technical
form, generated module, changelog head, stray version strings — and a
build guard keeps test files and fixture assets out of the bundle.

Checked: on this commit alone, 73 node tests, 7 browser tests and the
version check pass; the guard fails on a fixture joined as an asset.

--- FR ---

[ADD] squelette : application web Capacitor qui affiche sa version datée

Le moteur à venir doit s'éprouver contre des oracles sous node en
quelques secondes : le squelette pose trois projets d'épreuve — node,
sous surveillance ; node-long ; et un vrai Chromium qui lit le style
calculé dans les deux thèmes. La version vit dans version.json seul ; un
contrôle refuse huit divergences — forme technique, module engendré,
tête du changelog, chaînes de version égarées — et une garde de
construction tient fichiers et données d'épreuve hors du paquet.

Vérifié : sur ce commit seul, 73 épreuves node, 7 navigateur et le
contrôle de version passent ; la garde échoue sur une donnée jointe.

Assisted-by: Claude Opus 5.5
2026-10-05 13:13:13 -04:00
0bd3f08093 [ADD] license: GNU AGPL v3 text, TechnoLibre copyright
The project is licensed under the GNU Affero General Public License,
version 3 or later, copyright TechnoLibre — the convention every
TechnoLibre script and module already follows. The text is the current
canonical one published by the Free Software Foundation, copied byte for
byte.

Checked: sha256 matches the file served by gnu.org.

--- FR ---

[ADD] licence : texte de la GNU AGPL v3, copyright TechnoLibre

Le projet est sous licence publique générale GNU Affero, version 3 ou
ultérieure, copyright TechnoLibre — la convention que suivent déjà tous
les scripts et modules de TechnoLibre. Le texte est le texte canonique
actuel publié par la Free Software Foundation, copié octet pour octet.

Vérifié : l'empreinte sha256 égale celle du fichier servi par gnu.org.

Assisted-by: Claude Opus 5.5
2026-10-05 07:12:53 -04:00
7e1042aacd [UPD] spec: Capacitor replaces Cordova, own Electron shell for Windows
The only route from Cordova to a Windows executable is cordova-electron,
whose latest stable release pins Electron 29, out of support. Capacitor
offers no maintained desktop platform either, so the executable now
ships a project-owned Electron shell packaged by electron-builder, which
sets its own Electron version and the exe name directly. The shell hosts
the file system and printing boundaries behind a narrow preload bridge,
with context isolation on and Node integration off in the page.

Checked: no Cordova mention left; every internal reference resolves.

--- FR ---

[UPD] spec : Capacitor remplace Cordova, coquille Electron pour Windows

Le seul chemin de Cordova vers un exécutable Windows est
cordova-electron, dont la dernière version stable épingle Electron 29,
hors support. Capacitor n'offre pas non plus de plateforme de bureau
maintenue : l'exécutable embarque donc une coquille Electron propre au
projet, emballée par electron-builder, qui fixe elle-même sa version
d'Electron et le nom de l'exécutable. La coquille porte le système de
fichiers et l'impression derrière un pont de préchargement étroit,
isolation de contexte active et intégration de Node coupée.

Vérifié : plus aucune mention de Cordova ; chaque renvoi interne résout.

Assisted-by: Claude Opus 5.5
2026-10-05 06:57:26 -04:00
44553c3544 [UPD] spec: collision excess ranks, both papers, 30-minute search
Five operator answers, one of which reverses a ranking.

Meeting the same colleague four times is worse than meeting six
colleagues once. Neither cumulative collisions nor distinct pairs
yields that order — both rank the concentrated plan first, exactly
backwards. The excess, cumulative minus distinct, yields it, and now
opens the collision ranking; distinct pairs stop being a sort key and
stay a column. Both paper sizes become first-class, each with its own
imposition and its own pagination test. The search stop count carries a
thirty-minute ceiling, so a long run announces its expected duration
first, leaves the interface alive, and cancels immediately.

Checked: with excess first, the three plans order 0 < 2 < 3 as the
operator stated; under either count alone the order inverts.

--- FR ---

[UPD] spec : l'excédent classe, les deux papiers, recherche de 30 min

Cinq réponses de l'opérateur, dont une renverse un classement.

Retrouver quatre fois le même collègue est pire que croiser six
collègues une fois. Ni les collisions cumulées ni les paires distinctes
ne rendent cet ordre — les deux classent le plan concentré en tête,
exactement à l'envers. L'excédent, cumulées moins distinctes, le rend,
et ouvre désormais le classement des collisions ; les paires distinctes
cessent d'être une clé de tri et restent une colonne. Les deux formats
de papier passent à égalité, chacun avec son imposition et son épreuve
de pagination. Le compte d'arrêt reçoit un plafond de trente minutes :
un calcul long annonce sa durée, laisse l'interface vivante, s'annule.

Vérifié : excédent d'abord, les trois plans s'ordonnent 0 < 2 < 3 comme
l'opérateur l'énonce ; sous l'un ou l'autre compte seul, l'ordre
s'inverse.

Assisted-by: Claude Opus 5
2026-10-05 06:27:10 -04:00
3b16be48b3 [UPD] spec: dated version, badges, tests, screenshots, lack metric
Six requirements enter the specification, and each one forced an
existing section to change rather than sit beside it.

The dated version AAAA.MM.JJ.NN derives a technical form MM×100+JJ,
which is monotone, bijective and fits the 16 bits Windows gives each
resource field; one source, four destinations, a check that refuses
divergence. PDF now serves one output only, the A6 badge sheet, which
removes the sole assumption the output architecture rested on. Raw
numbers stop comparing proposals as soon as a table is incomplete, so
the comparison draws the lack — realised ceiling minus encounters —
measured on occupancy, never on capacity.

Checked: 257 badges give 65 A4 sheets and 129 Letter; the four
facilitators of the 7-seat tables cap at 24, so the large demonstration
can never award "minimum reached".

--- FR ---

[UPD] spec : version datée, badges, tests, captures, métrique du manque

Six exigences entrent dans la spécification, et chacune a forcé une
section existante à changer plutôt qu'à s'asseoir à côté.

La version datée AAAA.MM.JJ.NN dérive une forme technique MM×100+JJ,
monotone, bijective, qui tient dans les 16 bits que Windows donne à
chaque champ de ressource ; une source, quatre destinations, un
contrôle qui refuse la divergence. Le PDF ne sert plus qu'à une sortie,
la planche de badges A6, ce qui retire la seule supposition sur
laquelle reposait l'architecture de sortie. Les nombres bruts cessent
de comparer deux propositions dès qu'une table est incomplète, donc la
comparaison trace le manque — plafond réalisé moins rencontres —
calculé sur l'occupation, jamais sur la capacité.

Vérifié : 257 badges donnent 65 planches A4 et 129 Lettre ; les quatre
animateurs des tables de 7 plafonnent à 24, donc la grande
démonstration ne peut jamais décerner « minimum atteint ».

Assisted-by: Claude Opus 5
2026-10-05 06:11:51 -04:00
41e24fb08e [UPD] spec: events, reservations, diversity, quality page, Svelte
The specification covered the placement and little else; it now covers
the session where an operator spends an evening — several events,
automatic saving, history, a read-only default.

Three points decide the design rather than describe it: a title belongs
to a place and never to a person, so removing someone leaves the role
visible instead of silently vacant; the read/write mode is orthogonal to
the four states, not a fifth; a perfect reduced instance does not prove
the complete ceiling, which an enumeration establishes.

Checked: 29 tables of 8 and 4 of 7 seat exactly 260, and four
facilitators cap at 24 — a minimum no rerun improves.

--- FR ---

[UPD] spec : événements, réservations, diversité, page qualité, Svelte

La spécification couvrait le placement et peu d'autre chose ; elle
couvre désormais la séance où un opérateur passe une soirée — plusieurs
événements, enregistrement automatique, historique, lecture par défaut.

Trois points décident de la conception au lieu de la décrire : un titre
appartient à une place et jamais à une personne, si bien que retirer
quelqu'un laisse le rôle visible plutôt que vacant en silence ; le mode
lecture/écriture est orthogonal aux quatre états, non un cinquième ; un
réduit parfait ne prouve pas le plafond complet, ce qu'établit une
énumération.

Vérifié : 29 tables de 8 et 4 de 7 asseyent exactement 260, et quatre
animateurs plafonnent à 24 — un minimum qu'aucune relance n'améliore.

Assisted-by: Claude Opus 5
2026-10-05 05:04:37 -04:00
6dd2084734 [ADD] spec: rotating-table seating, offline, as a Cordova app
Nothing is built yet, so the specification fixes the behaviour before any
code can quietly decide it. It states what the placement must guarantee —
several comparable proposals rather than one answer, each set against a
lower bound that is proven when one exists, and a diagnostic naming what a
configuration makes unavoidable before the operator searches in vain.

The development requirements each answer a known way of going wrong:
dimensions that depend on rendered text are measured and never derived, a
character threshold is set on the widest glyph and not on an average, a
test is shown failing before it is trusted, and the whole program stays in
one language so that no two implementations can drift into agreeing on a
wrong value.

Building a Windows executable from Linux is written as a first-week check
rather than an assumption. Four decisions are named as still open.

--- FR ---

[ADD] spec : placement en tables tournantes, hors ligne, sous Cordova

Rien n'est encore construit, donc la spécification fixe le comportement
avant qu'un bout de code n'en décide en silence. Elle énonce ce que le
placement doit garantir : plusieurs propositions comparables plutôt qu'une
réponse, chacune confrontée à une borne inférieure prouvée quand il en
existe une, et un diagnostic nommant ce qu'une configuration rend
inévitable avant que l'opérateur ne cherche en vain.

Les exigences de développement répondent chacune à une façon connue de se
tromper : une dimension qui dépend du texte rendu se mesure et ne se déduit
jamais, un seuil en caractères se cale sur le glyphe le plus large et non
sur une moyenne, un test se montre en train d'échouer avant qu'on s'y fie,
et le programme reste dans une seule langue pour que deux implémentations
ne puissent pas dériver jusqu'à s'accorder sur une valeur fausse.

Construire un exécutable Windows depuis Linux est inscrit comme une
vérification de la première semaine et non comme une hypothèse. Quatre
décisions sont nommées comme encore ouvertes.

Assisted-by: Claude Opus 5
2026-10-05 03:13:50 -04:00
491bfaa5ac First commit 2026-10-05 02:17:39 -04:00