v3 : modules d'ordre et de titre — moteur, données, serveur (L11)

L'ordre des articles de chaque section (cran 2) et le titre du document
(cran 4) deviennent des modules : des unités à part, dont les versions
sont des propositions votées comme les articles (dépliées, panier, chaîne).

- moteur : ld-engine/src/order.rs (qui est dans l'ordre, ordre proposé,
  complété à la fin quand un article entre ou sort, places redistribuées,
  nouvel article en fin de section) ; pending : un ordre de moins de deux
  articles n'est jamais à voter ;
- données : migration 0007 (units.kind, module_amendments) ; le seed
  déclare ses modules ; module_amend.rs les ajoute une fois, gardé et
  journalisé, aux documents nés sans eux, sans toucher articles ni votes ;
- serveur : modules.rs, order.rs, doc_title.rs (portes pour proposer,
  entrée en vigueur : les articles changent de place, le document change
  de titre, en et es passent « à revoir ») ; publication des modules ;
- reste mineur : la médiane compte les statuts open, in_force, applied,
  et eux seuls.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-10-31 02:08:44 +01:00
co-authored by Claude Opus 5.5
parent 1a35d0f521
commit 3831ddb1bf
21 changed files with 2249 additions and 115 deletions
@@ -0,0 +1,26 @@
-- Modules (2026-10-31, ADR 0009): the title of a document and the order of the
-- articles of each of its sections, voted like its articles. Additive only:
-- every unit of before is an article, nothing else changes.
--
-- A module is a unit of its own kind. Its versions are proposals, voted,
-- counted, signed on the chain and brought into force like those of an
-- article; their kind says what they hold:
-- title — `title` is the title of the document in its source language;
-- order — `body` is the order of the section, one article (unit id) per line.
ALTER TABLE units ADD COLUMN kind TEXT NOT NULL DEFAULT 'article'; -- article | title | order
-- The modules added to an existing document (src/module_amend.rs): decided
-- once per document, from what it holds then (its title, the order of each
-- section), never touching an article or a vote. Each decision is kept here:
-- applied (and what was created), refused (and why), or present (the document
-- was born with its modules).
CREATE TABLE module_amendments (
amendment_id TEXT NOT NULL,
doc_id TEXT NOT NULL REFERENCES documents(id),
outcome TEXT NOT NULL, -- applied | refused | present
reason TEXT, -- why it was refused
created TEXT, -- JSON array of the codes of the modules created
at TEXT NOT NULL,
PRIMARY KEY (amendment_id, doc_id)
);