v2 : les 14 écrans — le tour complet de la démocratie d'exercice
- Aujourd'hui (Fil 13 sections + capture sticky) + Le chemin (tunnel 2 gestes, Q0 inline, 3 chips, dérogation asymétrique, alternatives réglage/consignation) - Registre + fiche décision (timeline, périmètre premier/second lieu auditable, affluence non-ignorable, S'instruire condensé, éléments + cartographie de clôture, épreuve du réel, Remettre en question, PV A4, gravure) - Salle de vote 5 modalités (consentement, nuancé+histogramme, binaire hérité avec jauge inertielle, Réglage collectif complet — faisceau, médiane basse, Pour moi, Explorer, cristallisation-geste —, élection à départage humain) - Textes (Pacte en clair, document vivant, diff, vue projetée, Atelier des formules porté du v1 sur le moteur unique) + Mandats (faits comptés, feux de la rampe, wizard 3 étapes) + Observatoire (consigner→observer→protocoliser) - Onboarding 7 gabarits + Données locales (export/import, attributs, atelier) - voting→framing gardé (Reformuler d'un réglage figé non cristallisé) - Pages v1 supprimées (login, documents, mandates, protocols, sanctuary, tools, decisions/new) — 342 tests verts, build zéro erreur Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -39,7 +39,9 @@ export const TRANSITIONS: Readonly<Partial<Record<DecisionStatus, readonly Decis
|
||||
advice: ['adopted', 'voting'],
|
||||
objection: ['adopted', 'framing', 'voting'],
|
||||
framing: ['voting', 'closed'],
|
||||
voting: ['adopted', 'rejected'],
|
||||
voting: ['adopted', 'rejected', 'framing'],
|
||||
// voting→framing: ONLY the « Reformuler » choice of the crystallization gesture —
|
||||
// guarded below to a frozen, non-crystallized parametric session (Δ3).
|
||||
adopted: ['revoked', 'closed'],
|
||||
}
|
||||
|
||||
@@ -77,6 +79,8 @@ const REASONS = {
|
||||
dossierPending:
|
||||
'Des éléments du dossier sont encore en cours — le dossier se clôt quand tous ont abouti.',
|
||||
crystallization: 'Les votes sont figés — la cristallisation attend son geste.',
|
||||
reformulate:
|
||||
'Reformuler n’est possible que sur un réglage collectif figé, avant sa cristallisation.',
|
||||
} as const
|
||||
|
||||
export interface TransitionContext {
|
||||
@@ -230,6 +234,17 @@ export function canTransition(
|
||||
}
|
||||
}
|
||||
|
||||
// voting→framing is EXCLUSIVELY the « Reformuler » branch of the crystallization
|
||||
// gesture (Δ3): a frozen, not-yet-crystallized parametric session may go back to
|
||||
// formulation instead of being crystallized. Any other voting→framing is refused.
|
||||
if (from === 'voting' && to === 'framing') {
|
||||
const reformulable =
|
||||
ctx.session?.status === 'frozen' && !ctx.session.crystallizedById
|
||||
if (!reformulable) {
|
||||
return refuse(REASONS.reformulate)
|
||||
}
|
||||
}
|
||||
|
||||
return { ok: true }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user