"""
source_07.py — s07 · CENTRES AU-DESSUS DU SAHASRARA
Série SOURCE ANNEXE FIABLE · généré depuis l'analyse gravée (Fable, 12 juil 2026).
Règle : zéro invention — tout champ provient de la planche ou d'un recoupement daté.
"""
from dataclasses import dataclass, field, asdict
import json

# ── SOCLE COMMUN (passe U6b — imbrication, GO Ben 13 juil 2026, 23h29) ────
# socle_corpus.py = clé de voûte du paquet corpus/ (types partagés · registre
# · GRAPHE des jonctions · VERDICTS D1-D6). Loi 2 du contrat : les jonctions
# CANONIQUES entre pièces (dNN/sNN) vivent UNE SEULE FOIS dans GRAPHE — la
# liste locale `jonctions` (cible/nature) reste une NOTE DE LECTURE de la
# planche. L'écart s07 (sans Pradakshina) vs s11 (avec) reste documenté
# dans l'arête canonique s07↔s11 du GRAPHE (dossier Pradakshina réconcilié).
# Loi 3 : aucun verdict recopié — pointer VERDICTS[id].
ID_CORPUS = "s07"
try:
    from socle_corpus import GRAPHE, VERDICTS, SOURCES as REGISTRE_SOURCES
    JONCTIONS_SOCLE = [j for j in GRAPHE if ID_CORPUS in (j.a, j.b)]
    MODE_ILOT = False
except ImportError:  # exécution isolée : le module reste lisible en îlot
    GRAPHE, VERDICTS, REGISTRE_SOURCES = [], {}, {}
    JONCTIONS_SOCLE, MODE_ILOT = [], True

@dataclass
class Inscription:
    texte: str
    zone: str
    statut: str = "\U0001f7e2"

@dataclass
class Jonction:
    cible: str
    nature: str

@dataclass
class Source:
    sid: str = "s07"
    titre: str = "CENTRES AU-DESSUS DU SAHASRARA — BINDU, ARDHA BINDU, VALAYA"
    type_source: str = "schéma édité (scan de livre, style sobre noir/gris — probable ouvrage SY de référence)"
    origine: str = "ouvrage source non identifié (scan sans titre ni page)"
    auteur_shri_mataji: bool = False
    fiabilite: str = "\U0001f7e2 terminologie canonique SY cohérente avec s03 · \U0001f7e1 ouvrage source non identifié"

    inscriptions: list = field(default_factory=lambda: [
        Inscription("Shri Valaya", "grand anneau elliptique — le plus haut"),
        Inscription("Shri Bindu", "point"),
        Inscription("Shri Ardha Bindu", "croissant"),
        Inscription("Shri Amruta Dayini", "arche sombre descendant de part et d'autre de la tĂŞte"),
        Inscription("Shri Atma-param'atma", "triple rangée de points traversée par l'arche"),
        Inscription("Shri Sadashiva · Shri Adi Shakti", "deux points côte à côte"),
        Inscription("Sahasrara", "lotus au sommet du crâne"),
        Inscription("Actual proportions", "encart — même schéma à l'échelle réelle, très compact"),
    ])

    hierarchie_descendante: list = field(default_factory=lambda: [
        "Shri Valaya", "Shri Bindu", "Shri Ardha Bindu", "Shri Amruta Dayini",
        "Shri Atma-param'atma", "Shri Sadashiva + Shri Adi Shakti", "Sahasrara",
    ])

    caracteristiques: list = field(default_factory=lambda: [
        "tĂŞte humaine vue de face, yeux clos",
        "planche RARE : documente la hiérarchie supra-Sahasrara du SY avancé",
        "encart 'Actual proportions' = source éditoriale soignée",
    ])

    jonctions: list = field(default_factory=lambda: [
        Jonction("s03", "même vocabulaire : Adi Bindu/Adi Valaya cosmiques → ici leur reflet au-dessus de la tête"),
        Jonction("s11", "les 14 niveaux — 4 centres au-dessus du Sahasrara, à confronter"),
        Jonction("d01", "profil de tête — strates au-dessus de la conscience ordinaire"),
        Jonction("d03", "strates de conscience — même axe vertical prolongé"),
        Jonction("d17", "Bindu/Ardhabindu/Valaya = mêmes étapes que L'ORDRE DE LA CRÉATION"),
    ])

    en_attente: list = field(default_factory=lambda: [
        "\U0001f7e1 identifier l'ouvrage source (scan sans titre ni numéro de page)",
    ])

    def rapport(self) -> str:
        etat_socle = ("îlot (socle_corpus non chargé)" if MODE_ILOT
                      else f"imbriqué — {len(JONCTIONS_SOCLE)} jonction(s) canoniques au GRAPHE")
        return "\n".join([
            f"[{self.sid}] {self.titre}",
            f"  origine : {self.origine}",
            f"  de la main de Shri Mataji : {self.auteur_shri_mataji}",
            f"  fiabilité : {self.fiabilite}",
            f"  hiérarchie : {len(self.hierarchie_descendante)} niveaux · jonctions : {len(self.jonctions)}",
            f"  SOCLE : {etat_socle}",
        ])

    def to_json(self) -> str:
        data = asdict(self)
        data["id_corpus"] = ID_CORPUS
        data["jonctions_canoniques"] = [asdict(j) for j in JONCTIONS_SOCLE]
        data["mode_ilot"] = MODE_ILOT
        return json.dumps(data, ensure_ascii=False, indent=2)

if __name__ == "__main__":
    print(Source().rapport())