Tags on people and goals on tables are operator input that an older build must not silently drop. Files written now carry format 2 with every new field optional and last; a format-1 file opens with no write, and its journal is rewritten as format 2 at the first gesture with every revision rebuilt byte for byte, so undo crosses the conversion. An older build opens a format-2 pair read-only. Tags follow one shared form and split rule, which a guard forbids reimplementing. Checked: node 4215, navigateur 884, node-long 113; a real format-1 event written by the previous build stays a fixture; depot and journal 100%. --- FR --- [ADD] stockage : format 2, étiquettes, objectifs, journal converti Les étiquettes des personnes et les objectifs des tables sont de la saisie qu'une version antérieure ne doit pas perdre sans bruit. Les fichiers écrits portent le format 2, chaque champ nouveau facultatif et en dernier ; un fichier du format 1 s'ouvre sans écriture, et son journal passe au format 2 au premier geste, chaque révision reconstruite à l'octet près : Défaire traverse la conversion. Une version antérieure ouvre un couple du format 2 en lecture seule. Une forme et une découpe uniques des étiquettes, qu'une garde interdit de refaire ailleurs. Vérifié : node 4215, navigateur 884, longues 113 ; un vrai événement du format 1, écrit par la version précédente, reste en fixture ; 100 %. Assisted-by: Claude Opus 5.5
36 lines
2.7 KiB
JSON
36 lines
2.7 KiB
JSON
{
|
|
"entete": {"format":2,"produitVersion":"epreuve","revision":1,"comptes":{"participants":8,"tables":4,"reservations":0,"titres":0,"propositions":1,"retenu":1}},
|
|
"charge": {
|
|
"evenement": {"id":"evt-conflit-table-un","nom":"Club des Merles","date":null,"siegesParDefaut":2,"tours":2,"unite":"cm","etat":"retenu","filiation":null},
|
|
"reglages": {"separerAppartenances":true,"nouveauxVoisins":true,"nouvelleTable":true,"varierAppartenances":true,"attribuerSieges":false,"generation":{"nombre":5,"arret":200000,"historique":1000}},
|
|
"prochainsIds": {"participant":9,"table":5,"proposition":2},
|
|
"participants": [
|
|
{"id":1,"nom":"Ombrelle","prenom":"Iris","appartenance":null,"courriel":null,"titrePressenti":null,"notes":null,"exclu":false},
|
|
{"id":2,"nom":"Pervenche","prenom":"Théo","appartenance":null,"courriel":null,"titrePressenti":null,"notes":null,"exclu":false},
|
|
{"id":3,"nom":"Lacasse","prenom":"Ondine","appartenance":null,"courriel":null,"titrePressenti":null,"notes":null,"exclu":false},
|
|
{"id":4,"nom":"Grisaille","prenom":null,"appartenance":null,"courriel":null,"titrePressenti":null,"notes":null,"exclu":false},
|
|
{"id":5,"nom":"Tourmaline","prenom":"Basile","appartenance":null,"courriel":null,"titrePressenti":null,"notes":null,"exclu":false},
|
|
{"id":6,"nom":"Arrosoir","prenom":"Capucine","appartenance":null,"courriel":null,"titrePressenti":null,"notes":null,"exclu":false},
|
|
{"id":7,"nom":"Cerfeuil","prenom":"Aurèle","appartenance":null,"courriel":null,"titrePressenti":null,"notes":null,"exclu":false},
|
|
{"id":8,"nom":"Bruyère","prenom":"Mélisande","appartenance":null,"courriel":null,"titrePressenti":null,"notes":null,"exclu":false}
|
|
],
|
|
"tables": [
|
|
{"id":1,"numero":1,"sieges":null,"forme":"ronde","position":{"x":0,"y":0}},
|
|
{"id":2,"numero":2,"sieges":null,"forme":"ronde","position":{"x":300,"y":0}},
|
|
{"id":3,"numero":3,"sieges":null,"forme":"ronde","position":{"x":600,"y":0}},
|
|
{"id":4,"numero":4,"sieges":null,"forme":"ronde","position":{"x":900,"y":0}}
|
|
],
|
|
"reservations": [],
|
|
"titres": [],
|
|
"propositions": [
|
|
{"id":1,"graine":1,"arret":40,"historique":1000,"produitVersion":"epreuve","siegesAttribues":false,"tables":[1,2,3,4],"capacites":[2,2,2,2],"tours":2,"participants":[1,2,3,4,5,6,7,8],"placement":[
|
|
{"sieges":[[1,2],[3,4],[5,6],[7,8]],"reserve":[]},
|
|
{"sieges":[[1,2],[5,7],[3,8],[4,6]],"reserve":[]}
|
|
]}
|
|
],
|
|
"retenu": {"proposition":1,"siegesAttribues":false,"tables":[1,2,3,4],"capacites":[2,2,2,2],"tours":2,"participants":[1,2,3,4,5,6,7,8],"placement":[
|
|
{"sieges":[[1,2],[3,4],[5,6],[7,8]],"reserve":[]},
|
|
{"sieges":[[1,2],[5,7],[3,8],[4,6]],"reserve":[]}
|
|
]}
|
|
}
|
|
}
|