LE SYSTÈME POLITIQUE — ce qui est bâti, ce qui est clos, et où l'autorité a vraiment émigré (contre-mesure au commit 8addf1c94, 2026-10-03)
ouvrir la planche en plein écran → · 23 pièces · 18 traverses · 16 marges
Les formes politiques sont montées mais leurs ÉTATS sont bâtis durablement ; le vote, le covenant et la justice tiennent leurs objets en MÉMOIRE DE PROCESSUS — et l'autorité qui engage réellement a émigré du côté économique : la seule porte d'entente multilatérale fail-close du dépôt est `POST /api/v2/contracts` dans l'Exchange Center, tandis que l'échelle d'engagement garde 7 services en RAM et 1 porte volontairement close, et que le second output économique — la forge alchimique — est scellé par une table d'ACL VIDE, par dessin.
Cette collecte est une lecture statique du commit 8addf1c94 (git show HEAD:…), machine Windows, sans aucune exécution. ⛔ CE QU'ELLE N'A PAS PU VOIR : (1) L'ATTEIGNABILITÉ RÉELLE des sept routeurs politiques — register_router avale l'ImportError pour les non-core, et je n'ai lancé aucun import ni aucune sonde /health : « monté » est mesuré, « atteignable » est NON ÉTABLI pour les sept. (2) AUCUNE PREUVE POSTGRESQL — je n'ai interrogé aucune base ; les 448 tables, l'état de world_blueprints, de governance_v2_sync et des tables contract_engine restent non vérifiés (et le commit lui-même déclare « aucune preuve PostgreSQL reelle »). (3) AUCUNE MESURE EN PRODUCTION — la divergence multi-workers sur _votes, _conflicts, _covenants et les PersistentDict est déduite du code, jamais observée ; elle reste NON ÉTABLIE, exactement comme le commit le dit pour world_canon. (4) AUCUN BANC LANCÉ — je ne colle aucune sortie de test ; je ne qualifie donc AUCUNE garde de « verte ». (5) PÉRIMÈTRE DES GREPS, nommé : backend/app/ ET le second arbre hors app/ pour les appelants de contract_engine, validate_against_foundation, check_publish et covenant_id ; pour les sites require_engagement j'ai balayé backend/ entier hors tests. Je n'ai PAS balayé transit/, archives/, ni AT-OM-999-DEPLOY-ZAMA-ALLELUYA/. (6) LE FRONTEND N'EST VÉRIFIÉ QUE SUR LE CHARGEMENT (présence dans les tableaux de governance-init.js) pour forge-alchemy.js, forge-energy-bridge.js, vote-engine.js et governance-ballot-signer.js — leur comportement runtime, et notamment si un bulletin signé localement atteint /votes/{id}/cast, n'est pas mesuré. (7) L'ÉTAT DES SIX AUTRES ENDPOINTS du covenant (emergency, child, legacy, forget, bigbang, bigbang/history) n'a pas été lu ligne à ligne : seules les quatre portes closes et l'absence d'écriture base sont mesurées. (8) LE TRI ENGAGE/LIT de citizen_registry n'a pas été fait endpoint par endpoint.
ne pas dessiner
| engagement.py (échelle 4 niveaux) gouverne | → | economy_engine (8 sites)backend/app/routers/economy_engine.py:30,624,638,661,899,908,922,943,956 — 7 des 8 gardent des services en RAM, 1 garde une porte close l.927 | |
| engagement.py gouverne | → | governance.py (2 sites : créer un cercle, créer une proposition)backend/app/routers/governance.py:59,665,924 | |
| engagement.py gouverne | → | health_center_router + sentinel (6 sites omis par la planche)health_center_router.py:34,207,316,349 ; sentinel.py:27,156,266,309 | |
| engagement.py gouverne | → | POST /votes/{id}/cast (le bulletin)backend/app/routers/governance.py:1117-1124 — aucune dépendance d'engagement, seul get_current_user_id ; create_vote l.1069 n'en a pas non plus | |
| POST /votes/{id}/cast traverse | → | registre durable des clés citoyennes (base)governance.py:1164-1192 → aip_key_registry.resolve_citizen_public_key(db,…) ; 503 KEY_REGISTRY_UNAVAILABLE, 409 VOTER_KEY_NOT_ENROLLED | |
| POST /votes/{id}/cast produit | → | _votes (liste de module, RAM)governance.py:259-261, 1102, 1272 — bulletin prouvé Ed25519 puis append en mémoire ; 0 écriture base | |
| _circles (RAM) autorise | → | _authorize_circle_finalization (garde du facilitateur)governance.py:259, 328-355 — circle None ⇒ return (tout appelant authentifié) ; un vidage de la liste neutralise la garde | |
| covenant.py (4 portes closes) autorise | → | contract_enginecovenant.py:53-70, 223, 234, 283, 302, 322 — le refus désigne contract_engine comme autorité multilatérale | |
| contract_engine produit | → | POST /api/v2/contracts (Exchange Center)backend/app/routers/exchange_center_router.py:643-669 ; 422 parties invalides, 503 fail_close si persistance impossible ; monté main.py:2443 | |
| covenant_id gouverne | → | les frontières opérationnelles (passeport, appartenance, position, environnement)git grep covenant_id HEAD -- backend/app/{routers,services,core} → 3 fichiers seulement : covenant.py, services/auth/auth_service.py, services/covenant_persistence.py | |
| verify_covenant_document() autorise | → | démarrage de l'applicationbackend/app/main.py:568-571 — fail-close avant la base ; RuntimeError si SHA-256 du pacte divergent | |
| checkpoints (core=True) gouverne | → | toute opération exigeant un arrêt humain (423)main.py:1685 core=True ; main.py:1520-1526 gestionnaire 423 « R&D Rule #1: Human Sovereignty » ; >25 levées 423 dans routers et core | |
| foundation.py (8 principes) gouverne | → | master_mind + nova_pipelinebackend/app/services/master_mind.py:476 ; backend/app/services/nova_pipeline.py:990 — borne : message[:200] | |
| bus_acl.check_publish gouverne | → | bus in-process + pont HTTPbackend/app/services/event_bus.py:510-513 ; backend/app/routers/event_bus.py:25,367 | |
| forge-alchemy.js (producteur frontend, chargé) alimente | → | forge_energy_consumer (mint UR COIN)frontend/js/forge-alchemy.js:913 + governance-init.js:372-373 ; coupé par bus_acl.py:86 (frozenset vide) et event_bus.py:155-157 (« Aucune porte REST ne les accepte. Jamais. ») | |
| legal_system DECISION (étape 7) autorise | → | legal_system APPEL (étape 9)backend/app/routers/legal_system.py:119-122 + 659-662 — new_idx > current_idx+1 ⇒ 400 ; l'appel n'est atteignable qu'après EXECUTION | |
| _launch_readiness_snapshot (13 routers exigés) gouverne | → | les 7 routeurs politiquesbackend/app/main.py:2971-2984 — aucun organe politique dans required_launch_routers | |
| register_router (non-core) autorise | → | atteignabilité réelle d'un routeur politiquebackend/app/main.py:1643-1663 — ImportError journalisée au niveau error puis AVALÉE, sauf REGISTER_ROUTER_STRICT=1 |
| 1 | L'échelle d'engagement — 4 niveaux, fail-close, lue du JWT signéEngagementLevel IntEnum 1→4 (OBSERVATEUR·PARTICIPANT·CONTRIBUTEUR·GARDIEN) · 19 rôles mappés · 401 sans token, 403 si niveau insuffisantbackend/app/core/engagement.py:41-120 (classe 41-47, _ROLE_TO_LEVEL 51-74, require_engagement 91-116) · confirmé dans le codeRien à dégrader sur la garde elle-même : elle CONSTATE (level_of, jamais de décret), l'Observateur sans rôle n'est jamais une erreur, et le refus ne classe pas la personne. C'est la pièce la plus honnête de la planche. | |
| 2 | Les portes économiques CLOSES, et leurs raisons écrites10 levées 503 inconditionnelles mesurées : economy_engine 6 (727,796,927 funding + 1137,1190,1243 marchand) + integration 4 (budget create/vote/finalize + seed)backend/app/routers/economy_engine.py:47-52,125-133,727,796,927,1137,1190,1243 ; backend/app/routers/integration.py:74-91,672,752,790,874 · confirmé dans le codeRien ne manque — c'est un refus honnête, et c'est la pièce la mieux bâtie du lot. Chaque refus NOMME sa condition de réouverture : « attested_source_debit_and_atomic_treasury_allocation_required », « durable_enterprise_identity_ownership_and_registration_receipt_required », « durable_owner_bound_request_and_treasury_decision_receipt_required », « actor_zone_mandate_treasury_receipt_required ». | |
| 3 | Le BULLETIN — la preuve Ed25519 est sérieuse ET ancrée en base durable7 gardes en série : signature présente · signer_id == voter_id · fraîcheur (max 10 min, tolérance futur 2 min) · clé résolue du registre DURABLE (503 si registre indisponible, 409 si non enrôlé) · clé autorisée MAINTENANT · clé autorisée À LA DATE DE SIGNATURE · validité cryptographiquebackend/app/routers/governance.py:1143-1251 ; registre : backend/app/services/aip_key_registry.py:577-604 (is_citizen_key_authorized, aucune trappe) + resolve_citizen_public_key (lecture db, aip_key_registry.py:308) ; constantes _BALLOT_SIGNATURE_MAX_AGE/_FUTURE_SKEW governance.py:~360 · confirmé dans le codeEt la trappe de transition AIP (`AIP_ALLOW_UNREGISTERED_KEYS=1`, aip_key_registry.py:68,545-552) — qui accepterait une signature SANS ancrage de confiance — est explicitement neutralisée pour les bulletins : is_citizen_key_authorized n'en hérite pas (docstring l.584-586 : « Aucune trappe de transition n'existe ici »). La crypto du bulletin est la meilleure pièce du système politique. | |
| 4 | Qui clôt un vote — le facilitateur, et la dégradation est écrite6 points d'appel de la même garde (governance.py:790, 837, 906, 1041, 1373) · 3 issues : non-membre→403, facilitateur présent et ce n'est pas vous→403, cercle SANS facilitateur→tout membre peut (anti-blocage)backend/app/routers/governance.py:334-355 (_authorize_circle_finalization) ; appels l.790,837,906,1041,1373 · confirmé dans le codeLa forme est bâtie et la dégradation est NOMMÉE dans la docstring (« consent degradation, avoids deadlock »), ce qui est exactement la discipline demandée. Son substrat, lui, est la liste RAM de la pièce précédente — voir marges. | |
| 5 | La clôture exige que CHAQUE bulletin soit re-vérifié — et refuse AVANT toute mutation1 appel : _require_all_ballots_verified(vote) avant _recalculate_results ; refus 409 « chaque bulletin doit porter une signature Ed25519 valide et ancrée au registre, et le décompte doit en dériver »backend/app/routers/governance.py:1379-1381 (ordre commenté : « AVANT toute mutation du vote ou de la proposition : un refus laisse l'ensemble ouvert et intact ») ; message 409 l.~650-655 · confirmé dans le code | |
| 6 | ⚑⚑ CE QUI ENGAGE VRAIMENT — contract_engine, et sa seule porte est DANS L'ÉCONOMIE4 routes · 1 seul routeur porteur : exchange_center_router (monté main.py:2443) · 2 refus typés : 422 ContractPartyValidationError, 503 ContractPersistenceError avec discipline_flag="fail_close" · service + modèle + migration existantsbackend/app/routers/exchange_center_router.py:643-695 (POST /api/v2/contracts l.643, GET /mine l.672, /stats l.679, /{cid} l.684) ; backend/app/services/contract_engine.py ; backend/app/models/contract_engine_contract.py ; backend/alembic/versions/v82_215_contract_engine_contract.py ; montage backend/app/main.py:2443 · confirmé dans le codeRien à dégrader — et c'est le renversement de la planche. La seule entente multilatérale fail-close et persistée du dépôt n'est servie par AUCUN des sept routeurs politiques : elle est servie par l'EXCHANGE CENTER. Jonathan a raison dans sa formulation : l'économie est directement reliée à l'output du système, et c'est littéralement vrai ici — l'autorité qui lie des parties a émigré vers la porte commerciale. | |
| 7 | CE QUI DÉCIDE AUJOURD'HUI — le point d'arrêt humain, et il est le seul organe core=Truecore=True (le serveur REFUSE de démarrer si ce router casse) · 2 refus 503 fail-close : checkpoint_storage_unavailable l.40, checkpoint_persistence_failed l.514backend/app/main.py:1685 (register_router … core=True) ; backend/app/routers/checkpoints.py:40,514 ; main.py:1645-1648 (core → RuntimeError) · confirmé dans le code | |
| 8 | La règle nº1 — souveraineté humaine, 423, et elle est APPELÉE (pas seulement déclarée)gestionnaire 423 enregistré · 8 principes gelés · 2 appelants runtime de validate_against_foundation hors tests · >25 levées 423 réparties dans routers et corebackend/app/main.py:1520-1526 (@app.exception_handler(423), "rule": "R&D Rule #1: Human Sovereignty") ; backend/app/core/foundation.py:31-39 (CORE_PRINCIPLES), 41-63 (AUTHORITY_MODEL) ; appelants : backend/app/services/master_mind.py:476 et backend/app/services/nova_pipeline.py:990 · confirmé dans le codeLa seule limite, déjà consignée au dépôt : master_mind n'inspecte que `result.message[:200]` — ce qui se dit au caractère 201 n'est pas regardé (docs/CHAINE-ASSEMBLAGE-CHENU-V2-2026-08-14.md:29657). Pièce bâtie, borne nommée. | |
| 9 | La garde du pacte au démarrage — le serveur refuse de booter si les mots du covenant ont bougé1 appel, AVANT la base et tout autre organe · 2 RuntimeError : document absent/illisible, SHA-256 divergentbackend/app/main.py:568-571 (lifespan → verify_covenant_document()) ; backend/app/schemas/auth_schemas.py (verify_covenant_document, comparaison expected_sha256 vs covenant_document_sha256) · confirmé dans le code | |
| 10 | ⚑ L'ACL DU BUS — la garde la plus dure du système, et elle CLÔT la forge alchimique2 points d'appel (bus in-process ET pont HTTP) · 25 préfixes privilégiés · 7 sujets à autorité exacte, TOUJOURS fail-close · dont 4 à table VIDE : forge.product.distributed, forge.pierre.philosophale, babel.temple.energy.generated, mission.rewardedbackend/app/core/bus_acl.py:78-86 (EXACT_TOPIC_SOURCES), 165-198 (check_publish) ; appelants : backend/app/services/event_bus.py:510-513 et backend/app/routers/event_bus.py:25,367 ; TOPICS_QUI_FRAPPENT = frozenset(EXACT_TOPIC_SOURCES), event_bus.py:155-157 « Aucune porte REST ne les accepte. Jamais. » · confirmé dans le codeRien ne manque à la garde. Ce qui manque est DERRIÈRE elle, et le code le dit : « Une table vide signifie honnêtement qu'aucun producteur backend autorisé n'existe encore » (bus_acl.py:76-77). Le second output économique que Jonathan nomme — la forge alchimique → UR COIN — est donc scellé des DEUX côtés : zéro producteur backend autorisé, et zéro porte REST pour le frontend. Noter la différence de régime : un sujet de la table exacte est bloqué même en mode observe ; un sujet seulement privilégié par préfixe (governance.vote*, justice.*, treasury.*) passe en mode observe, qui est le DÉFAUT (BUS_ACL_ENFORCE absent). | |
| 11 | Les SIX routeurs politiques sont « montés » — mais aucun n'est core, et aucun n'est exigé au lancement7 register_router mesurés (government 1709 · governance 1741 · justice 1774 · citizen_registry 2206 · legal_system 2276 · covenant 2424 · governance_v2 2448) ; core=True : 0 sur 7 ; présents dans required_launch_routers : 0 sur 13backend/app/main.py:1709,1741,1774,2206,2276,2424,2448 ; main.py:1637-1663 (register_router) ; main.py:2971-2984 (required_launch_routers) · confirmé dans le coderegister_router avale l'ImportError pour tout router non-core (main.py:1649-1657 : logger.error + continue, sauf si REGISTER_ROUTER_STRICT=1). Un appel register_router n'atteste donc PAS l'atteignabilité : il atteste une TENTATIVE. Et la sonde de lancement fondateur (_launch_readiness_snapshot) exige 13 routers dont world_canon, mission_center, inscriptions — et PAS UN SEUL organe politique : le système peut se déclarer prêt au lancement avec toute la couche politique morte. Je n'ai pas exécuté d'import (lecture seule) : « atteignable » reste NON_ÉTABLI pour les 7. | |
| 12 | L'échelle NE gouverne PAS « seulement » l'économie — 16 sites, 4 routeurs16 sites Depends mesurés : economy_engine 8 (624,638,661,899,908,922,943,956) · health_center_router 3 (207,316,349) · sentinel 3 (156,266,309) · governance 2 (665,924)git grep require_participant|require_contributeur|require_gardien HEAD -- backend/ ; economy_engine.py:30,624-956 ; health_center_router.py:34,207,316,349 ; sentinel.py:27,156,266,309 ; governance.py:59,665,924 · confirmé dans le codeLa planche annonce « 8 sites économie, 2 sites vote » — les deux chiffres sont JUSTES et l'inventaire est FAUX : il omet 6 sites (3 soins, 3 sentinelle). « C'est son seul usage complet » est donc réfuté deux fois : ce n'est pas le seul, et il n'est pas complet (voir pièce suivante). | |
| 13 | ⚑ Les 8 sites économiques gardent 7 services en MÉMOIRE DE PROCESSUS et 1 porte volontairement CLOSE7 sites sur 8 délèguent à get_lnis()/get_project_generator(), dicts de processus ; 1 sur 8 (project_fund, require_gardien l.922) lève un 503 inconditionnel l.927backend/app/routers/economy_engine.py:920-931 ; backend/app/services/lnis_service.py:337-344 (_territories/_needs/_solutions: Dict) ; backend/app/services/project_generator.py:443-446 (_projects/_by_territory/_by_need/_by_status: Dict) · confirmé dans le codeLe code écrit lui-même pourquoi, à economy_engine.py:917-919 : « ProjectGeneratorService only appends an approved allocation to a process-local list. It neither debits a source nor records an atomic Treasury/outbox receipt, so it must not announce a funded project. » Donc le GARDIEN — le niveau 4, le sommet de l'échelle — garde la seule porte qui bougerait de l'argent, et cette porte est fermée par dessin. Les 7 autres approuvent, démarrent et jalonnent des projets qui disparaissent au redémarrage. L'échelle est bâtie ; ce qu'elle gouverne ne l'est pas. | |
| 14 | ⚠ La citation-thèse de la planche vient d'un REFUS, pas d'une loi — et elle ferme un budget participatif1 seul site dans tout le dépôt : integration.py:90. Les 4 endpoints qui la portent (POST /budget, /budget/{id}/vote, /budget/{id}/finalize, /seed) lèvent 503 avant toute ligne utilebackend/app/routers/integration.py:76-91 (_participatory_budget_not_active) ; raises inconditionnels l.672, 752, 790, 874 ; code mort derrière : _budgets.append l.694, vote l.769, upsert l.776/800, seed l.876-936 (documenté docs/inventaires/tri-get-db-optional-2026-09-25.jsonl:1122-1131) · confirmé dans le code« actor_zone_mandate_treasury_receipt_required » n'est pas une loi générale du politique : c'est la raison inscrite dans UN refus, qui éteint le VOTE BUDGÉTAIRE PARTICIPATIF. La planche s'en sert pour dire « le code écrit lui-même pourquoi le politique est bâti en amont de sa chaîne » — la phrase est juste, mais la pièce est l'inverse d'un organe politique bâti : c'est un organe politique ÉTEINT, honnêtement. | |
| 15 | ⚑ MAIS le bulletin prouvé atterrit dans une LISTE EN MÉMOIRE — le vote ne survit pas à un redémarrage_circles / _proposals / _votes = 3 List[dict] de module, governance.py:259-261. 0 écriture base dans cast_ballot, create_vote et close_vote (dernier await db.execute du fichier : l.968, dans la zone cercles)backend/app/routers/governance.py:259-261 ; _votes.append(vote) l.1102 ; vote["ballots"].append(ballot_record) l.1272 ; _find_vote l.325-326 ; cast_ballot l.1117-1124 (db servant UNIQUEMENT à résoudre la clé, l.1170-1178) · confirmé dans le codeLa loi du dépôt (CLAUDE.md, « ce qui ENGAGE — monnaie, VOTE, appartenance, consentement — est en base, ou l'opération échoue ») est violée au cœur du vote. Conséquence en cascade mesurée : `_authorize_circle_finalization` rend `None`→`return` quand la proposition n'a pas de cercle (governance.py:349-351) ; un redémarrage vide `_circles`, donc `_circle_of_proposal` rend None pour tout, donc **tout vote redevient clôturable par n'importe quel appelant authentifié**. La garde du facilitateur tient à la survie d'une liste RAM. | |
| 16 | « government » n'est pas un organe politique — c'est la conformité réglementaire, et elle est fail-close sur un registre NON canonique0 await db.execute · 5 PersistentDict (compliance_items, clinical_trials, adverse_events, documents, checkpoints) · 6 levées 503 nommées quand la persistance manquebackend/app/routers/government.py:33,248-253 ; refus l.860,873,880,891,918,929 (government_trial_persistence_unavailable, government_audit_persistence_unavailable, government_checkpoint_persistence_unavailable) · confirmé dans le codeContradiction interne au commit du jour : government.py est fail-close — mais ce qu'il protège est un PersistentDict, c'est-à-dire précisément le registre que 8addf1c94 vient de déclarer NON CANONIQUE (« The periodic KV stores are descriptive caches, never ownership evidence », world_canon.py:5-7). Et PersistentDict n'écrit pas à la mutation : « It deliberately does not write through on every mutation » (backend/app/core/persistent_store.py:9-11), flush périodique de 56 s par défaut. Un refus honnête posté devant une preuve que le dépôt vient de récuser. | |
| 17 | legal_system — 9 étapes, machine à états monotone réellement appliquée9 étapes (SIGNALEMENT·QUALIFICATION·JURIDICTION·INSTRUCTION·MEDIATION·AUDIENCE·DECISION·EXECUTION·APPEL) · 2 refus 400 : régression interdite, saut interdit (new_idx > current_idx+1)backend/app/routers/legal_system.py:119-122 (STAGES) ; update_case l.654-662 ; persistance l./_get_owned_case_db_first + _save_case_after_mutation · confirmé dans le codeDEUX défauts. (1) L'escalier n'est PAS « entier » : APPEL est l'index 8, DECISION l'index 6 — la règle du +1 rend l'appel inatteignable depuis la décision. **Il faut EXÉCUTER la décision avant de pouvoir faire appel.** (2) Repli silencieux : _get_owned_case_db_first rattrape toute exception base en `logger.warning("…using in-memory fallback")` et rend from_db=False ; _save_case_after_mutation retombe alors sur _remember_case (RAM) — un avancement d'étape judiciaire peut être confirmé 200 sans jamais être écrit. C'est le « repli silencieux qui ressemble à un succès » que CLAUDE.md interdit. | |
| 18 | « L'autorité se confirme EN BASE » — loi posée le jour même, sur UN routeur, et MUETTE pour l'appelant1 routeur traité (world_canon, monté main.py:2494) · 3 nouveaux codes de refus · 0 des 3 inscrits dans CODES_5XX_PUBLIABLES (qui contient exactement 1 code) · ~20 autres chemins du même motif déclarés NON ÉTABLIS par l'auteur du commitcommit 8addf1c94, backend/app/routers/world_canon.py:228-300 (_assert_owned_world_access, _load_world_db, _require_world_write_db, _memory_read_provenance, _cached_world_is_descriptive_for) ; backend/app/core/refus_publics.py:88-92 (CODES_5XX_PUBLIABLES = {"privacy_violation_registry_closed"}) ; message du commit : « reste NON ETABLI depuis le §2 : les 20 autres chemins du meme motif » · confirmé dans le codeDEUX maillons. (1) Ce n'est pas une loi du système politique, c'est un PRÉCÉDENT sur un routeur d'environnement, et l'auteur le dit lui-même. Les chemins politiques — vote, covenant, justice — sont précisément ceux qui ne l'ont pas encore reçue. (2) Les trois codes restent ASSAINIS par la frontière HTTP globale : l'appelant reçoit `{"status":"internal_error"}` et ne peut pas distinguer « la base est indisponible » d'un plantage. Le refus est honnête dans le journal, muet à l'écran, en attente de la décision de Jonathan sur CODES_5XX_PUBLIABLES. | |
| 19 | La forge alchimique — consommateur branché, producteur inatteignable, boucle ouverte par écritconsommateur abonné au démarrage · producteur frontend chargé (forge-alchemy.js dans le tableau de governance-init.js) · 0 producteur autorisé par l'ACL · boucle déclarée OUVERTE dans le journal de démarragebackend/app/main.py:907-922 (« Le producteur frontend et forge.cycle.completed restent non branchés : boucle ouverte » l.909 ; log « producteur frontend non relié, boucle UR COIN ouverte » l.917-919) ; producteur : frontend/js/forge-alchemy.js:913 (_pub) ; chargement : frontend/js/governance-init.js:372-373 ; blocage : backend/app/core/bus_acl.py:86 · confirmé dans le codeLe maillon manquant est EXACTEMENT nommé par l'ACL : un producteur backend autorisé, c'est-à-dire une chaîne de reçus durables qui justifie une frappe. Tant qu'elle n'existe pas, la forge produit de l'énergie que personne n'a le droit de convertir en UR COIN. C'est cohérent avec le θ=0 déjà consigné (memory/economie-hedera-nft-armure-coupee-au-premier-maillon.md) — à re-mesurer séparément, non vérifié par moi aujourd'hui. | |
| 20 | justice.py — la forme d'un organe, zéro persistance586 lignes · 1 store de module (_conflicts: List[dict], l.118) · 0 await db.execute · monté main.py:1774 (prefix "" , /api/v1/justice intégré)backend/app/routers/justice.py:118 ; backend/app/main.py:1773-1774 · confirmé dans le codeAucune écriture base dans tout le fichier. Un conflit déclaré, instruit et résolu disparaît au redémarrage du worker — et la prod tourne à 4 workers (memory/production-quatre-workers-gardes-en-memoire.md), donc deux appels consécutifs du même usager peuvent tomber sur deux listes différentes. Non re-mesuré en prod aujourd'hui : la divergence multi-workers reste NON ÉTABLIE, comme le dit le commit du jour pour world_canon. | |
| 21 | citizen_registry — le seul organe politique qui touche réellement la base5 await db.execute · 3 PersistentDict en repli (citizen_registry, civil_events, user_citizen_map) · 1 refus 503 (l.925) · monté main.py:2206backend/app/routers/citizen_registry.py:8,31,159-161,925 ; backend/app/main.py:2206 · confirmé dans le codeL'appartenance ENGAGE (loi CLAUDE.md), et le repli PersistentDict est encore là à côté des 5 lectures/écritures base. Je n'ai pas trié endpoint par endpoint lesquels engagent et lesquels lisent : ce tri est le travail exact que le commit du jour a fait pour world_canon et qu'il déclare restant pour « les 20 autres chemins ». | |
| 22 | governance_v2 n'est pas un organe politique — c'est un vidoir d'état frontend118 lignes · 2 endpoints (/sync, /status) · 0 décision · repli mémoire déclaré (source:"memory")backend/app/routers/governance_v2.py:1-118 ; table governance_v2_sync : backend/alembic/versions/v82_065_resource_sync_contract.py:27 + backend/app/models/resource_sync.py:102 · confirmé dans le codeIl recopie circles/proposals/votes envoyés PAR le frontend dans une colonne JSONB par user_id, en upsert. Il ne décide rien, ne vérifie rien, n'ouvre ni ne clôt rien. Le compter parmi « les six organes du politique » gonfle l'inventaire d'un septième de rien. Son seul mérite : il DIT son repli (source:"memory"), ce que governance.py ne fait pas. | |
| 23 | ⚑ Le COVENANT — 4 de ses 10 portes sont CLOSES, et sa table multilatérale est ailleurs0 await db.execute dans covenant.py · 3 stores de module (_covenants, _amendments, _bigbang_log) · 4 endpoints clos par 503 (create l.223, get l.283, list l.302, amend l.322) sur 10 · covenant_id consulté par 3 fichiers seulement dans tout backend/app/backend/app/routers/covenant.py:60-70 (_legacy_covenant_not_active), 146-150, 209-322 ; consommateurs de covenant_id : covenant.py, backend/app/services/auth/auth_service.py, backend/app/services/covenant_persistence.py · confirmé dans le codeLe refus nomme son remplaçant : « legacy_covenant_multilateral_retired_use_contract_engine », raison « durable_parties_representative_authority_decision_receipt_and_contract_engine_required », et le corps rend `{"autorite_multilaterale": "contract_engine"}` (l.234). Donc l'entente à plusieurs souverains a quitté l'organe politique. Et covenant_id n'est lu par AUCUNE frontière opérationnelle — ni passeport, ni appartenance, ni position, ni environnement runtime : le covenant est écrit à l'inscription et jamais consulté ensuite (concorde avec la fiche memory/covenant-tripartite-et-grande-respiration.md du 2026-09-01, re-vérifié par moi au commit). |
On ne remplace pas le nom canon, on le double : le terme reste l’autorité, la glose est une poignée. Le lexique entier est sur sa propre page.
Matière : PLANCHES-MATIERE-2-INSTITUTIONNEL-2026-10-03.json (sha256 5cc49a404485) — planche de matière « LE SYSTÈME POLITIQUE — ce qui est bâti, ce qui est clos, et où l'autorité a vraiment émigré (contre-mesure au commit 8addf1c94, 2026-10-03) ». Générée par scripts/generer-planches-ancrage.py ; la version « avant » (avant le passage du sceptique) que la matière conserve n’est pas dessinée — c’est la version dégradée au doute qui l’est, et les marges portent les dégradations.