# Taskmaster3000 - Spécifications de Refonte v2.0

## Table des matières
1. [Vue d'ensemble](#1-vue-densemble)
2. [Architecture de données centralisée](#2-architecture-de-données-centralisée)
3. [Schéma JSON unifié](#3-schéma-json-unifié)
4. [Segments Maîtres](#4-segments-maîtres)
5. [Nouvelles pages de gestion](#5-nouvelles-pages-de-gestion)
6. [Modifications aux outils existants](#6-modifications-aux-outils-existants)
7. [Système de backup unifié](#7-système-de-backup-unifié)
8. [Intégration Godot](#8-intégration-godot)
9. [Navigation et UI](#9-navigation-et-ui)
10. [Plan d'implémentation](#10-plan-dimplémentation)

---

## 1. Vue d'ensemble

### 1.1 Situation actuelle

**3 outils avec données partiellement dupliquées:**

| Outil | Données propres | Données partagées (non unifiées) |
|-------|-----------------|----------------------------------|
| **Narrative** | segments narratifs, childLinks/parentLinks, position canvas, texte/résumé | personnages, intrigues, locations, conditions, conséquences |
| **Scheduler** | segments temporels (start/end seconds), entity, zone, state, triggers, predicates | actors (entities), facts, zones |
| **Locations** | position canvas, links entre locations, subSegmentPositions | locations, environments, levels |

### 1.2 Objectifs de la refonte

1. **Source de vérité unique** pour toutes les données partagées
2. **Segments Maîtres** unifiant narrative et scheduler
3. **Pages de gestion CRUD** dédiées par type de donnée
4. **Suppression des CRUD des sidebars** des outils de vue
5. **Validation obligatoire** pour nouvelles entrées
6. **Système de backup unifié** pour tout le projet

---

## 2. Architecture de données centralisée

### 2.1 Structure des dossiers

```
Taskmaster3000/
├── core/                          # NOUVEAU - Données centralisées
│   ├── api.php                    # API centrale unifiée
│   ├── config.php                 # Configuration globale
│   ├── data/
│   │   ├── master.json            # Source de vérité principale
│   │   └── backups/               # Backups unifiés horodatés
│   └── includes/
│       ├── data_manager.php       # Fonctions CRUD centralisées
│       └── backup_manager.php     # Gestion des backups
│
├── pages/                         # NOUVEAU - Pages de gestion
│   ├── index.php                  # Dashboard/Accueil
│   ├── intrigues.php              # Gestion des intrigues
│   ├── actors.php                 # Gestion des acteurs
│   ├── locations.php              # Gestion des localisations
│   ├── segments.php               # Gestion des segments maîtres
│   ├── facts.php                  # Gestion des facts
│   ├── environments.php           # Gestion des environnements
│   ├── css/
│   │   └── pages.css              # Styles communs pages gestion
│   └── js/
│       ├── table_manager.js       # Logique tableaux CRUD
│       └── pages_common.js        # Fonctions communes
│
├── scheduler/                     # MODIFIÉ - Vue timeline
│   ├── index.php
│   ├── api.php                    # Délègue au core/api.php
│   └── ...
│
├── narrative/                     # MODIFIÉ - Vue canvas narrative
│   ├── index.php
│   ├── api.php                    # Délègue au core/api.php
│   └── ...
│
├── locations/                     # MODIFIÉ - Vue carte
│   ├── index.php
│   ├── api.php                    # Délègue au core/api.php
│   └── ...
│
└── shared/                        # NOUVEAU - Ressources partagées
    ├── css/
    │   └── common.css             # Styles communs (nav, modals)
    ├── js/
    │   ├── api_client.js          # Client API unifié
    │   ├── autocomplete.js        # Composant autocomplete avec validation
    │   └── notifications.js       # Système de notifications
    └── components/
        └── nav.php                # Navigation commune
```

### 2.2 Flux de données

```
┌─────────────────────────────────────────────────────────────────┐
│                        core/data/master.json                     │
│                      (Source de vérité unique)                   │
└─────────────────────────────────────────────────────────────────┘
                                 │
                                 ▼
                        ┌───────────────┐
                        │  core/api.php │
                        └───────────────┘
                                 │
        ┌────────────────────────┼────────────────────────┐
        ▼                        ▼                        ▼
┌───────────────┐      ┌───────────────┐      ┌───────────────┐
│   Pages de    │      │    Outils     │      │    Outils     │
│   Gestion     │      │   de Vue      │      │   de Vue      │
│  (CRUD)       │      │  (Lecture +   │      │  (Lecture +   │
│               │      │   Modif       │      │   Modif       │
│ - intrigues   │      │   segments)   │      │   segments)   │
│ - actors      │      │               │      │               │
│ - locations   │      │ - scheduler   │      │ - narrative   │
│ - segments    │      │ - locations   │      │               │
│ - facts       │      │               │      │               │
│ - environments│      │               │      │               │
└───────────────┘      └───────────────┘      └───────────────┘
```

---

## 3. Schéma JSON unifié

### 3.1 Structure de `master.json`

```json
{
    "version": "2.0",
    "metadata": {
        "project_name": "Chrono Island",
        "created": "2025-12-13 15:00:00",
        "modified": "2025-12-13 15:00:00"
    },
    
    "intrigues": [
        {
            "id": "intrigue_001",
            "name": "Origines",
            "color": "#3b82f6",
            "description": "",
            "created": "2025-12-13 15:00:00"
        }
    ],
    
    "actors": [
        {
            "id": "actor_001",
            "name": "Héros",
            "color": "#ef4444",
            "godot_entity_id": "BEACH_01_LANDING.Player",
            "description": "",
            "created": "2025-12-13 15:00:00"
        }
    ],
    
    "locations": [
        {
            "id": "loc_001",
            "name": "Plage Sud 1: landing",
            "environment_id": "env_main",
            "level": 0,
            "godot_level_id": "BEACH_01_LANDING",
            "godot_level_scene": "res://levels/beach_01_landing/beach_01_landing.tscn",
            "godot_status": "exists",
            "links": [
                {
                    "target_id": "loc_002",
                    "direction": "bidirectional",
                    "type": "regular"
                }
            ],
            "canvas_position": { "x": 2621, "y": 2633 },
            "created": "2025-12-13 15:00:00"
        }
    ],
    
    "environments": [
        {
            "id": "env_main",
            "name": "__main__",
            "description": "Carte principale extérieure",
            "color": "#22c55e"
        },
        {
            "id": "env_002",
            "name": "Complexe souterrain",
            "description": "",
            "color": "#6366f1"
        }
    ],
    
    "facts": [
        {
            "id": "fact_001",
            "key": "world.switch_1_pressed",
            "label": "Switch 1 pressed",
            "type": "bool",
            "default_value": false,
            "reset_policy": "reset_each_loop",
            "scene": "BEACH_01_LANDING",
            "created": "2025-12-13 15:00:00"
        }
    ],
    
    "godot_entities": [
        {
            "id": "BEACH_01_LANDING.Switch1",
            "label": "Switch1",
            "zone": "BEACH_01_LANDING",
            "scene": "res://levels/beach_01_landing/beach_01_landing.tscn",
            "kind": "generic",
            "states": {
                "active": { "description": "Switch is visible and interactable" },
                "disabled": { "description": "Switch is hidden and disabled" }
            },
            "default_state": "disabled",
            "associated_facts": ["fact_001"],
            "scanned_from_godot": true
        }
    ],
    
    "master_segments": [
        {
            "id": "mseg_001",
            "title": "L'expérience",
            "intrigue_ids": ["intrigue_001"],
            "actor_ids": ["actor_001", "actor_002"],
            "location_id": "loc_015",
            "time_start": 0,
            "time_end": 120,
            "priority": 50,
            "main_branch": true,
            
            "narrative": {
                "summary": "Le héros se fait implanter la mémoire...",
                "full_text": "Dans le cadre de l'experience...",
                "canvas_position": { "x": 146, "y": 304 },
                "canvas_size": { "w": 300, "h": 200 }
            },
            
            "scheduler": {
                "actor_states": [
                    {
                        "actor_id": "actor_001",
                        "godot_entity_id": "BEACH_01_LANDING.Player",
                        "state": "unconscious"
                    }
                ],
                "ui_track": 0
            },
            
            "conditions": [
                {
                    "fact_id": "fact_001",
                    "operator": "==",
                    "value": true
                }
            ],
            "consequences": [
                {
                    "fact_id": "fact_002",
                    "value": true
                }
            ],
            
            "parent_segment_ids": [],
            "child_segment_ids": ["mseg_002"],
            
            "created": "2025-12-13 15:00:00",
            "modified": "2025-12-13 15:00:00"
        }
    ],
    
    "scheduler_config": {
        "time_unit": "second",
        "loop_length": 2400,
        "triggers": [],
        "predicates": {}
    },
    
    "ui_state": {
        "intrigueColors": {},
        "actorColors": {},
        "narrative_canvas_offset": { "x": 0, "y": 0 },
        "locations_canvas_offset": { "x": 0, "y": 0 }
    }
}
```

---

## 4. Segments Maîtres

### 4.1 Concept

Le **Segment Maître** (`master_segment`) est l'unité narrative-temporelle unifiée qui:
- Contient les données communes (titre, acteurs, location, conditions, conséquences)
- Contient les données spécifiques narrative (texte, position canvas)
- Contient les données spécifiques scheduler (time_start, time_end, states par acteur)
- Gère les relations parent/enfant

### 4.2 Relation Acteurs ↔ Segments

```
┌─────────────────────────────────────────────────────────────┐
│                     MASTER SEGMENT                          │
│  "L'expérience"                                             │
├─────────────────────────────────────────────────────────────┤
│  actor_ids: [actor_001, actor_002, actor_003]               │
│                                                             │
│  scheduler.actor_states:                                    │
│    ├─ actor_001 (Héros) → state: "unconscious"              │
│    ├─ actor_002 (Scientifique A) → state: "working"         │
│    └─ actor_003 (Scientifique B) → state: "monitoring"      │
│                                                             │
│  time_start: 0    time_end: 120                             │
└─────────────────────────────────────────────────────────────┘
```

### 4.3 Affichage dans Scheduler

Dans le scheduler, un segment maître avec plusieurs acteurs génère **plusieurs lignes visuelles** (une par acteur avec son state), mais reste **un seul segment** dans les données.

### 4.4 Affichage dans Narrative

Dans le narrative, le segment maître s'affiche comme **un seul bloc** sur le canvas avec tous ses acteurs listés.

---

## 5. Nouvelles pages de gestion

### 5.1 Navigation commune (header)

```
┌─────────────────────────────────────────────────────────────────────────────┐
│  🎮 Taskmaster3000                                                          │
│                                                                             │
│  [Accueil] [Intrigues] [Acteurs] [Localisations] [Segments] [Facts] [Env.]  │
│                                                                             │
│  ─────────────────────────────────────────────────────────────────────────  │
│  Vues: [📖 Narrative] [📅 Scheduler] [🗺️ Locations]                         │
└─────────────────────────────────────────────────────────────────────────────┘
```

### 5.2 Page Intrigues (`pages/intrigues.php`)

| Colonne | Type | Éditable | Description |
|---------|------|----------|-------------|
| ☐ | checkbox | - | Sélection multiple |
| Nom | text | ✓ inline | Nom de l'intrigue |
| Couleur | color picker | ✓ inline | Couleur d'affichage |
| Segments | count + link | lecture | Nombre de segments, clic → liste filtrée |
| Description | text | ✓ modal | Description optionnelle |
| Actions | buttons | - | 🗑️ Supprimer |

**Actions globales:** `+ Ajouter` `🗑️ Supprimer sélection`

### 5.3 Page Acteurs (`pages/actors.php`)

| Colonne | Type | Éditable | Description |
|---------|------|----------|-------------|
| ☐ | checkbox | - | Sélection |
| Nom | text | ✓ inline | Nom de l'acteur/personnage |
| Couleur | color picker | ✓ inline | Couleur timeline |
| Entité Godot | select | ✓ | Entité schedulable associée |
| States | badges | lecture | States disponibles (depuis entité Godot) |
| Intrigues | badges + count | lecture | Intrigues où apparaît |
| Segments | count + link | lecture | Nombre de segments |
| Actions | buttons | - | 🗑️ Supprimer |

### 5.4 Page Localisations (`pages/locations.php`)

| Colonne | Type | Éditable | Description |
|---------|------|----------|-------------|
| ☐ | checkbox | - | Sélection |
| Nom | text | ✓ inline | Nom de la localisation |
| Statut | badge | lecture | 🟢 Utilisé / 🔴 Non utilisé |
| Environnement | select | ✓ | Environnement parent |
| Niveau | number | ✓ inline | -10 à +10 |
| Liens | count + modal | ✓ modal | Liens vers autres locations |
| Level Godot | select | ✓ | Level Godot associé |
| Status Godot | badge | lecture | 🟢 Existe / 🟠 Manquant |
| Acteurs présents | badges | lecture | Acteurs avec status Godot |
| Segments | count | lecture | Segments dans cette location |
| Actions | buttons | - | 🗑️ Supprimer |

### 5.5 Page Segments Maîtres (`pages/segments.php`)

| Colonne | Type | Éditable | Description |
|---------|------|----------|-------------|
| ☐ | checkbox | - | Sélection |
| Titre | text | ✓ inline | Titre du segment |
| Intrigues | badges | ✓ modal | Intrigues associées |
| Début (s) | number | ✓ inline | Seconde de début |
| Fin (s) | number | ✓ inline | Seconde de fin |
| Localisation | select | ✓ | Location du segment |
| Acteurs | badges + modal | ✓ modal | Acteurs + leurs states |
| Connexions | count + modal | ✓ modal | Parents/Enfants |
| Conditions | count + modal | ✓ modal | Facts requis |
| Conséquences | count + modal | ✓ modal | Facts modifiés |
| Priorité | number | ✓ inline | Priorité scheduler |
| Branche | checkbox | ✓ | Branche principale |
| Actions | buttons | - | 📖 📅 🗑️ |

**Boutons Actions:**
- 📖 → Ouvrir dans Narrative
- 📅 → Ouvrir dans Scheduler
- 🗑️ → Supprimer

### 5.6 Page Facts (`pages/facts.php`)

| Colonne | Type | Éditable | Description |
|---------|------|----------|-------------|
| ☐ | checkbox | - | Sélection |
| Clé | text | ✓ inline | Identifiant unique (world.xxx) |
| Label | text | ✓ inline | Nom lisible |
| Type | select | ✓ | bool, int, string |
| Défaut | input | ✓ | Valeur par défaut |
| Reset | select | ✓ | reset_each_loop / persist |
| Condition de | count + link | lecture | Segments qui requièrent ce fact |
| Conséquence de | count + link | lecture | Segments qui modifient ce fact |
| Actions | buttons | - | 🗑️ Supprimer |

### 5.7 Page Environnements (`pages/environments.php`)

| Colonne | Type | Éditable | Description |
|---------|------|----------|-------------|
| ☐ | checkbox | - | Sélection |
| Nom | text | ✓ inline | Nom de l'environnement |
| Couleur | color picker | ✓ inline | Couleur d'affichage |
| Description | text | ✓ inline | Description |
| Localisations | count + link | lecture | Nombre de locations |
| Actions | buttons | - | 🗑️ Supprimer |

---

## 6. Modifications aux outils existants

### 6.1 Modifications communes aux 3 outils

#### 6.1.1 Suppression CRUD des sidebars
- **Retirer:** Boutons +, renommer, supprimer des listes de données
- **Garder:** Toggles de visibilité/filtrage
- **Ajouter:** Lien "Gérer →" vers page de gestion correspondante

#### 6.1.2 Champs autocomplete avec validation
```
┌─────────────────────────────────────────────────────────────┐
│  Localisation: [Plage Sud 1: landing    ▼]                  │
│                                                             │
│  ┌─────────────────────────────────────┐                    │
│  │ Plage Sud 1: landing                │                    │
│  │ Plage Sud 2                         │                    │
│  │ Plage Ouest 1                       │                    │
│  │ ─────────────────────────────────── │                    │
│  │ ⚠️ "Nouvelle Plage" n'existe pas    │                    │
│  │    [+ Créer dans la base]           │                    │
│  └─────────────────────────────────────┘                    │
└─────────────────────────────────────────────────────────────┘
```

- Scanner la source centrale
- Si nouvelle entrée tapée → **bouton de confirmation obligatoire**
- Plus de "silent suppression" - données persistantes

### 6.2 Modifications Scheduler

#### 6.2.1 Localisations
- Source: `master.json → locations`
- Association Level Godot ↔ Location: via page gestion Localisations

#### 6.2.2 Segments
- Lecture/écriture vers `master_segments`
- Affichage multi-lignes si segment a plusieurs acteurs
- Chaque ligne = un acteur avec son state

#### 6.2.3 Entités et States
- Source: `master.json → godot_entities` (scanné depuis Godot)
- Association Acteur ↔ Entité Godot: via page gestion Acteurs

### 6.3 Modifications Narrative

#### 6.3.1 Nouveaux champs
- **Seconde début** et **Seconde fin** (éditables)
- Affichage visuel de cohérence temporelle

#### 6.3.2 Indicateur de cohérence temporelle
```
┌─────────────────────────────────────────────────────────────┐
│  Segment A (début: 100s)  →  Segment B (début: 50s)         │
│                              ⚠️ Incohérence temporelle      │
│                              (enfant commence avant parent) │
└─────────────────────────────────────────────────────────────┘
```

- Si un segment enfant a `time_start` < `time_start` du parent → warning visuel
- Indicateur sur la connexion (flèche rouge/orange)

#### 6.3.3 Données
- Lecture/écriture vers `master_segments`
- Personnages → `actor_ids` (référence aux acteurs centraux)

### 6.4 Modifications Locations (carte)

#### 6.4.1 Données
- Source: `master.json → locations`
- Environnements: `master.json → environments`

#### 6.4.2 Simplification
- Retrait du CRUD inline
- Lien vers page gestion pour modifications

---

## 7. Système de backup unifié

### 7.1 Configuration

```php
// core/config.php
$BACKUP_CONFIG = [
    'enabled' => true,
    'max_backups' => 100,
    'backup_dir' => __DIR__ . '/data/backups',
    'backup_on_save' => true,
    'backup_interval_seconds' => 0,  // 0 = à chaque save
];
```

### 7.2 Format des backups

```
core/data/backups/
├── master_2025-12-13_15-00-00.json
├── master_2025-12-13_15-05-23.json
├── master_2025-12-13_15-10-45.json
└── ...
```

### 7.3 API Backup

```php
// Actions disponibles
?action=list_backups      // Liste des backups disponibles
?action=restore_backup    // Restaurer un backup (POST: backup_file)
?action=create_backup     // Créer un backup manuel
?action=delete_backup     // Supprimer un backup
```

### 7.4 Interface de restauration

Accessible depuis toutes les pages via menu:
```
[⚙️ Paramètres] → [📦 Backups] → Liste des backups avec bouton "Restaurer"
```

---

## 8. Intégration Godot

### 8.1 Structure des entités schedulables dans Godot

```
chrono-island/
└── entities/                    # Dossier des entités schedulables
    ├── player/
    │   ├── player.tscn
    │   ├── player.gd
    │   └── states.json          # Déclaration des states
    ├── guard_a/
    │   ├── guard_a.tscn
    │   ├── guard_a.gd
    │   └── states.json
    └── switch_1/
        ├── switch_1.tscn
        ├── switch_1.gd
        └── states.json
```

### 8.2 Format `states.json`

```json
{
    "entity_id": "player",
    "label": "Player",
    "kind": "character",
    "default_state": "idle",
    "states": {
        "idle": {
            "description": "Standing still",
            "animation": "idle"
        },
        "walking": {
            "description": "Walking around",
            "animation": "walk"
        },
        "unconscious": {
            "description": "Knocked out",
            "animation": "unconscious"
        }
    },
    "associated_facts": []
}
```

### 8.3 Script Godot d'export

```gdscript
# export_entities.gd - À placer dans le dossier scheduler ou autoload
extends Node

const ENTITIES_DIR = "res://entities/"
const OUTPUT_FILE = "res://Taskmaster3000/core/data/godot_entities_scan.json"

func scan_and_export():
    var entities = []
    var dir = DirAccess.open(ENTITIES_DIR)
    
    if dir:
        dir.list_dir_begin()
        var folder_name = dir.get_next()
        
        while folder_name != "":
            if dir.current_is_dir() and not folder_name.begins_with("."):
                var states_path = ENTITIES_DIR + folder_name + "/states.json"
                if FileAccess.file_exists(states_path):
                    var file = FileAccess.open(states_path, FileAccess.READ)
                    var json = JSON.parse_string(file.get_as_text())
                    if json:
                        json["scanned_from_godot"] = true
                        json["scan_date"] = Time.get_datetime_string_from_system()
                        entities.append(json)
            folder_name = dir.get_next()
    
    # Écrire le fichier
    var output = FileAccess.open(OUTPUT_FILE, FileAccess.WRITE)
    output.store_string(JSON.stringify(entities, "\t"))
    output.close()
    
    print("Exported ", entities.size(), " entities to ", OUTPUT_FILE)
```

### 8.4 Synchronisation Taskmaster ↔ Godot

L'API centrale peut:
1. **Lire** le fichier `godot_entities_scan.json` généré par Godot
2. **Merger** avec les données existantes dans `master.json`
3. **Détecter** les entités manquantes ou modifiées

---

## 9. Navigation et UI

### 9.1 Header commun

```html
<header class="taskmaster-header">
    <div class="header-brand">
        <span class="logo">🎮</span>
        <span class="title">Taskmaster3000</span>
    </div>
    
    <nav class="header-nav-pages">
        <a href="../pages/">Accueil</a>
        <a href="../pages/intrigues.php">Intrigues</a>
        <a href="../pages/actors.php">Acteurs</a>
        <a href="../pages/locations.php">Localisations</a>
        <a href="../pages/segments.php">Segments</a>
        <a href="../pages/facts.php">Facts</a>
        <a href="../pages/environments.php">Environnements</a>
    </nav>
    
    <div class="header-separator"></div>
    
    <nav class="header-nav-views">
        <span class="nav-label">Vues:</span>
        <a href="../narrative/" class="view-link">📖 Narrative</a>
        <a href="../scheduler/" class="view-link">📅 Scheduler</a>
        <a href="../locations/" class="view-link">🗺️ Carte</a>
    </nav>
    
    <div class="header-actions">
        <button id="btn-backup">📦 Backups</button>
        <span class="save-status" id="save-status">✓ Sauvegardé</span>
    </div>
</header>
```

### 9.2 Styles communs

- Thème sombre cohérent avec l'existant
- Tableaux avec tri, filtrage, pagination
- Modals pour édition complexe
- Notifications toast pour feedback

---

## 10. Plan d'implémentation

### Phase 1: Infrastructure (Priorité HAUTE)
1. [ ] Créer structure `core/`
2. [ ] Implémenter `core/api.php` avec actions CRUD
3. [ ] Créer `master.json` initial (migration des données existantes)
4. [ ] Implémenter système de backup unifié
5. [ ] Créer `shared/components/nav.php`

### Phase 2: Pages de gestion (Priorité HAUTE)
1. [ ] Page Intrigues
2. [ ] Page Acteurs
3. [ ] Page Localisations
4. [ ] Page Environnements
5. [ ] Page Facts
6. [ ] Page Segments Maîtres

### Phase 3: Migration des outils existants (Priorité MOYENNE)
1. [ ] Modifier Narrative pour utiliser `master.json`
2. [ ] Modifier Scheduler pour utiliser `master.json`
3. [ ] Modifier Locations pour utiliser `master.json`
4. [ ] Retirer CRUD des sidebars
5. [ ] Implémenter autocomplete avec validation

### Phase 4: Fonctionnalités avancées (Priorité BASSE)
1. [ ] Indicateurs de cohérence temporelle (Narrative)
2. [ ] Intégration scan Godot
3. [ ] Interface de restauration backups
4. [ ] Dashboard accueil avec statistiques

### Phase 5: Tests et polish
1. [ ] Tests de migration de données
2. [ ] Tests de cohérence entre vues
3. [ ] Optimisation performances
4. [ ] Documentation utilisateur

---

## Annexes

### A. Migration des données existantes

Script de migration à créer pour:
1. Lire `narrative/data/narrative.json`
2. Lire `scheduler/data/master_schedule.json`
3. Lire `locations/data/locations.json`
4. Fusionner et dédupliquer
5. Générer `master.json`

### B. API Endpoints

| Endpoint | Méthode | Description |
|----------|---------|-------------|
| `?action=load` | GET | Charger toutes les données |
| `?action=save` | POST | Sauvegarder toutes les données |
| `?action=get_intrigues` | GET | Liste des intrigues |
| `?action=add_intrigue` | POST | Ajouter une intrigue |
| `?action=update_intrigue` | POST | Modifier une intrigue |
| `?action=delete_intrigue` | POST | Supprimer une intrigue |
| ... | ... | (idem pour chaque type) |

### C. Glossaire

- **Segment Maître**: Unité narrative-temporelle unifiée
- **Acteur**: Personnage/entité participant à l'histoire
- **Entité Godot**: Objet schedulable dans le moteur de jeu
- **Fact**: Variable d'état du monde (condition/conséquence)
- **Intrigue**: Arc narratif regroupant des segments
- **Environnement**: Groupe de localisations (ex: "Intérieur maison")

