diff --git a/root/.cursor/hooks.json b/root/.cursor/hooks.json deleted file mode 100644 index aec6acd9..00000000 --- a/root/.cursor/hooks.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "version": 1, - "hooks": { - "beforeShellExecution": [ - { - "command": ".cursor/hooks/approve-formal-lab.sh", - "timeout": 5 - } - ], - "sessionStart": [ - { - "command": ".cursor/hooks/session-remote-sync.sh", - "timeout": 20 - }, - { - "command": ".cursor/hooks/session-formal-context.sh", - "timeout": 8 - } - ] - } -} diff --git a/root/.cursor/hooks/approve-formal-lab.sh b/root/.cursor/hooks/approve-formal-lab.sh deleted file mode 100755 index 1e633b90..00000000 --- a/root/.cursor/hooks/approve-formal-lab.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env bash -# Hook beforeShellExecution — auto-allow chaîne formelle (agent-action-aliases.json). -# R-ASK1 : commit/push/sudo ad hoc → demander à l'humain. -set -euo pipefail - -ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" -ALIASES="${ROOT}/etc/capsuleos/contracts/agent-action-aliases.json" - -input=$(cat) -command=$(printf '%s' "$input" | node -e " -let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{ - try { const j=JSON.parse(d); process.stdout.write((j.command||'').trim()); } - catch { process.exit(1); } -});") - -if [[ -z "$command" ]] || [[ ! -f "$ALIASES" ]]; then - echo '{ "permission": "allow" }' - exit 0 -fi - -result=$(node -e " -const fs=require('fs'); -const cmd=process.argv[1]; -const a=JSON.parse(fs.readFileSync(process.argv[2],'utf8')); -const match=(patterns)=>patterns.some(p=>new RegExp(p,'i').test(cmd)); -if (match(a.alwaysAsk?.patterns||[])) { - const bundle=Object.entries(a.passwordBundles||{}).find(([,b])=> - (b.replaces||[]).some(r=>cmd.includes(r))); - if (bundle) { - const [,b]=bundle; - process.stdout.write(JSON.stringify({ - permission:'ask', - user_message:'R-PWD1 : préférer le bundle '+b.script+' (une seule invite mot de passe).', - agent_message:'Grouper via '+b.script+' — voir agent-action-aliases.json' - })); - } else { - process.stdout.write(JSON.stringify({ - permission:'ask', - user_message:'Action réservée (R-ASK1) — validation humaine requise.', - agent_message:'commit/push/sudo ad hoc : attendre instruction explicite.' - })); - } - process.exit(0); -} -if (match(a.autoAllow?.patterns||[])) { - process.stdout.write(JSON.stringify({ - permission:'allow', - agent_message:'R-AUTO : commande alignée agent-action-aliases.json' - })); - process.exit(0); -} -process.stdout.write(JSON.stringify({ permission:'allow' })); -" "$command" "$ALIASES") - -echo "$result" -exit 0 diff --git a/root/.cursor/hooks/session-formal-context.sh b/root/.cursor/hooks/session-formal-context.sh deleted file mode 100755 index f68f34ae..00000000 --- a/root/.cursor/hooks/session-formal-context.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# Injecte le contexte décision formelle au démarrage de session agent. -set -euo pipefail - -ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" -ID="${CAPSULE_REGISTRY_ID:-linux-rocky}" - -if [[ ! -f "${ROOT}/usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs" ]]; then - echo '{}' - exit 0 -fi - -action=$(node "${ROOT}/usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs" --id "$ID" 2>/dev/null || echo '{}') -node -e " -const action=JSON.parse(process.argv[1]); -const msg=action.complete - ? 'Chaîne replication '+action.registryId+' : domaine courant complet. Extension P1 ou polish skin.' - : 'R-AUTO : prochaine action — '+ (action.command||action.message); -process.stdout.write(JSON.stringify({ - continue:true, - additional_context: 'CapsuleOS logique formelle. '+msg+' Contrat : etc/capsuleos/contracts/agent-action-aliases.json' -})); -" "$action" 2>/dev/null || echo '{ "continue": true }' - -exit 0 diff --git a/root/.cursor/hooks/session-remote-sync.sh b/root/.cursor/hooks/session-remote-sync.sh deleted file mode 100755 index 7cd3f91d..00000000 --- a/root/.cursor/hooks/session-remote-sync.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -# Au démarrage de session agent : pull ff-only depuis origin (si possible). -set -euo pipefail - -ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" - -if [[ ! -d "${ROOT}/.git" ]]; then - echo '{ "continue": true }' - exit 0 -fi - -pull_out="" -pull_ok=true -if pull_out="$(bash "${ROOT}/usr/lib/capsuleos/tools/git-remote-sync.sh" pull origin 2>&1)"; then - : -else - pull_ok=false -fi - -node -e " -const ok = process.argv[1] === 'true'; -const out = process.argv[2] || ''; -const line = ok - ? 'Remote synchronisé (pull ff-only). Push auto après commit si hooks installés.' - : 'Pull remote échoué — résoudre avant push : ' + out.split('\n').slice(-3).join(' '); -process.stdout.write(JSON.stringify({ - continue: true, - additional_context: 'CapsuleOS git-remote-sync. ' + line -})); -" "$pull_ok" "$pull_out" 2>/dev/null || echo '{ "continue": true }' - -exit 0 diff --git a/root/.cursor/rules/capsule-memory-profiles.mdc b/root/.cursor/rules/capsule-memory-profiles.mdc deleted file mode 100644 index aa1f0024..00000000 --- a/root/.cursor/rules/capsule-memory-profiles.mdc +++ /dev/null @@ -1,42 +0,0 @@ ---- -description: Profils mémoire CapsuleOS (persistant vs session) pour apps et shells -globs: usr/lib/capsuleos/shells/**/*,usr/share/capsuleos/**/* -alwaysApply: false ---- - -# Profils mémoire CapsuleOS - -Référence noyau : `shells/common/capsule-memory-conventions.js`, `shells/common/capsule-window-memory.js`. - -## Niveaux - -| Tier | Constante | Durée de vie | Exemples | -|------|-----------|--------------|----------| -| **Persistant** | `TIERS.PERSISTENT` | Survit à la fermeture de fenêtre | Thème, fond d’écran, gsettings, manifeste fichiers, corbeille, favoris Nautilus, fichiers créés par l’utilisateur | -| **Session** | `TIERS.SESSION` | Purge à `capsule:window-closed` | Onglets terminal, sortie de commandes, onglets/recherche Nautilus par fenêtre, onglets/historique Firefox émulé | - -Ne jamais stocker des données SESSION dans des clés PERSISTENT ni inversement. - -## Création d’une application - -1. Lire le catalogue `CapsuleMemoryConventions.SLOT_PROFILES` (ou l’étendre pour un nouveau `slotId`). -2. Classer chaque donnée : session vs persistant. -3. Enregistrer uniquement le tier **SESSION** auprès du noyau : - -```javascript -CapsuleWindowMemory.register({ - slotId: 'mon-app', - tier: CapsuleMemoryConventions.TIERS.SESSION, - resolveStorageKeys: (container) => ['capsule-mon-app-session:…'], - purgeRuntime: (container) => { /* état JS + DOM éphémère */ }, - onReopen: (container) => { /* boot vierge */ }, -}); -``` - -4. Données **PERSISTENT** : APIs dédiées (`gnome-gsettings-store`, `persistExplorerManifest`, `capsule-theme-storage`, etc.) — **sans** `purgeRuntime` ni enregistrement SESSION. - -## Règles - -- Une fenêtre fermée = purge SESSION de cette instance (primaire ou secondaire). -- Les préférences utilisateur et le FS virtuel modifié par l’utilisateur restent intacts. -- Plusieurs fenêtres du même slot : une zone SESSION par instance (`data-capsule-window-instance` ou `primary`). diff --git a/root/.cursor/rules/capsuleos-agent-onboarding.mdc b/root/.cursor/rules/capsuleos-agent-onboarding.mdc deleted file mode 100644 index b360f883..00000000 --- a/root/.cursor/rules/capsuleos-agent-onboarding.mdc +++ /dev/null @@ -1,42 +0,0 @@ ---- -description: Onboarding agent CapsuleOS — H0–H6, validate-all, routage skills (voir logique-formelle.md) -alwaysApply: true ---- - -# Onboarding agent CapsuleOS - -**Références** : `root/docs/README.md` (corpus) · `root/docs/plan-maitre-reproduction-os.md` (exécution) · `root/docs/logique-formelle.md` (gates) · `root/docs/parcours-agent.md` (H0–H6) - -## Séquence - -1. **H₀** — `AGENTS.md`, checklist `contrib.md`, arborescence -2. **H₂** — `node usr/lib/capsuleos/tools/validate-all.mjs` (bloquant avant H5 sauf fix CI) -3. **H₃** — skill `onboarding` + `os-` + `role-*` -4. **Pipeline** : `resolve-agent-action.mjs --id --scope pipeline` puis **logique formelle** §4 si besoin - -## Gates (discrimination) - -Doc : `root/docs/agent-validation-discipline.md` · outil : - -```bash -node usr/lib/capsuleos/tools/print-validation-plan.mjs -``` - -- ¬**H₂** → baseline `validate-all` (session) ou gate zone ciblée -- Skin Linux touché → `sync-linux-skin-closure.mjs` + **Rv** avant push -- Merge / push → **H₆** `validate-all` exit 0 ; rectifier rouges **zone touchée** seulement -- ¬**I** → inventaire VM avant patch skin -- ¬**A** → `kernel-supervisor` + `pull-vm-assets.sh` -- **Hooks Git** → `bash root/tools/install-git-hooks.sh` (une fois) : `pre-push` sync vues · `post-commit` push auto -- **Push manuel** → `bash usr/lib/capsuleos/tools/git-remote-sync.sh push` (ou `sync` pour pull + push) -- **Désactiver push auto** → `CAPSULE_SKIP_AUTO_REMOTE_SYNC=1` - -## Skills - -| Besoin | Skill | -|--------|-------| -| Incertain | `onboarding`, `os-orchestrator` | -| Clone VM | `os-clone-from-vm` | -| Assets | `kernel-supervisor`, `asset-pipeline` | -| Skin Linux | `os-linux`, `role-integrator` | -| Mint / Cinnamon | `os-linux` + [paradigme-toolkit-cinnamon.md](../../root/docs/paradigme-toolkit-cinnamon.md) · gate `validate-toolkit-paradigm.mjs --id linux-mint` | diff --git a/root/.cursor/rules/capsuleos-assets.mdc b/root/.cursor/rules/capsuleos-assets.mdc deleted file mode 100644 index 85f65d77..00000000 --- a/root/.cursor/rules/capsuleos-assets.mdc +++ /dev/null @@ -1,30 +0,0 @@ ---- -description: Assets CapsuleOS — zones autorisées, gates A/S/T VM (logique-formelle.md) -alwaysApply: true ---- - -# Assets CapsuleOS - -**Références** : `root/docs/logique-formelle.md` §2.2 · `root/docs/convention-assets-depuis-vm.md` · `root/docs/politique-assets.md` - -## Zones autorisées - -Images uniquement sous : - -- `usr/share/capsuleos/assets/` -- `home/public/Images/` - -Gate : `node usr/lib/capsuleos/tools/validate-asset-zones.mjs` - -## Ground truth VM - -- Prédicat **A** : fichier présent dans le dépôt (`verify-playbook-assets.mjs` pour Paramètres GNOME) -- Prédicat **S** : source VM inventoriée + SHA256 aligné -- Prédicat **T** : `vendors//SOURCE-VM.txt` - -**R-A1** : ¬**A** → `bash root/tools/lab/pull-vm-assets.sh` — ne jamais inventer un asset « proche ». - -## Interdit - -- Icônes d’un autre vendor sur un skin GNOME/Rocky -- Images sous `OS/*/media/` ou hors zones autorisées diff --git a/root/.cursor/rules/capsuleos-autonomous-execution.mdc b/root/.cursor/rules/capsuleos-autonomous-execution.mdc deleted file mode 100644 index c6cf9dd9..00000000 --- a/root/.cursor/rules/capsuleos-autonomous-execution.mdc +++ /dev/null @@ -1,74 +0,0 @@ ---- -description: Exécution autonome R-AUTO — alias actions, hooks lab, regroupement mot de passe R-PWD1 -alwaysApply: true ---- - -# Exécution autonome (logique formelle) - -Contrat machine : `etc/capsuleos/contracts/agent-action-aliases.json` -Playbook général : `etc/capsuleos/contracts/playbook-general.json` · `root/docs/procedure-playbook-general.md` -Référence : `root/docs/logique-formelle.md` · `root/docs/procedure-replication-formelle.md` - -## Validation discriminée - -Avant d'enchaîner des gates lourds : - -```bash -node usr/lib/capsuleos/tools/print-validation-plan.mjs -``` - -Matrice : `root/docs/agent-validation-discipline.md` — **H₂** baseline session, gates ciblées en cours de patch, **H₆** `validate-all` avant merge/push ; skin Linux → `sync-linux-skin-closure` + **Rv**. - -## Décision par passage (R-AUTO) - -Avant chaque action lab ou gate : - -```bash -# Playbook général (prioritaire après validation contrat) -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id --scope general -node usr/lib/capsuleos/tools/lab/run-playbook-general.mjs --id --auto - -# Sous-chaîne toolkit GNOME seule -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id -``` - -- Si `autoExecute: true` et `unique: true` → **exécuter** la `command` sans demander à l'humain. -- Si `complete: true` → enchaîner domaine suivant (P1, polish skin) ou `validate-all`. -- Ne **jamais** demander « voulez-vous continuer ? » quand la sortie JSON identifie une seule action admissible. - -Enchaînement automatique : - -```bash -node usr/lib/capsuleos/tools/lab/run-replication-chain.mjs --id --auto -``` - -## Alias prédicat → commande - -| Prédicat | Alias | Règle | -|----------|-------|-------| -| ¬V P0 | `visual-investigation-p0` | R-PRI1 | -| V ∧ ¬G | `gsettings-deep-pass` | R-PRI2 | -| G ∧ ¬Vc | `capsule-captures` | R-PRI2b | -| Vc ∧ ¬Vp | `visual-parity-close` | R-PRI2c | -| Vp ∧ P1 | `visual-investigation-p1` | R-PRI3 | - -## Mot de passe (R-PWD1) - -- **Interdit** : plusieurs `sudo dnf` / `ssh-copy-id` séparés dans un même passage. -- **Obligatoire** : utiliser un `passwordBundle` du contrat : - - VM Rocky packages → `bash root/tools/lab/vm-rocky-lab-bootstrap.sh` - - Clé SSH lab → `bash root/tools/lab/setup-lab-ssh-key.sh user@ip` -- SSH lab routine : `BatchMode=yes` + `~/.ssh/capsuleos-lab` (sans mot de passe). - -## Réservé humain (R-ASK1) - -Ne pas exécuter sans instruction explicite : `git commit`, `git push`, `sudo` ad hoc, suppression destructive. - -Hook Cursor `beforeShellExecution` : auto-allow des patterns `autoAllow` ; `alwaysAsk` → carte validation. - -## Hooks projet - -- `.cursor/hooks.json` — chargé via symlink `root/.cursor` -- Activer dans Cursor : Settings → Hooks -- **Git remote** : `bash root/tools/install-git-hooks.sh` — `post-commit` push auto · `sessionStart` pull ff-only -- Push manuel : `bash usr/lib/capsuleos/tools/git-remote-sync.sh sync` diff --git a/root/.cursor/rules/capsuleos-clean-code.mdc b/root/.cursor/rules/capsuleos-clean-code.mdc deleted file mode 100644 index 7802e2bb..00000000 --- a/root/.cursor/rules/capsuleos-clean-code.mdc +++ /dev/null @@ -1,30 +0,0 @@ ---- -description: Clean code CapsuleOS — P12, corpus README, zones Z0–Z4, pas d'écriture hors contexte -alwaysApply: true ---- - -# Clean code CapsuleOS (P12) - -Référence : `root/docs/convention-clean-code.md` · Corpus : `root/docs/README.md` - -## Avant toute écriture (code, doc, JSON, règle) - -1. Lire **Canon** `root/docs/README.md` §3.1 et **taxonomie** `root/docs/convention-taxonomie-semantique.md`. -2. Résoudre : `resolve-agent-action.mjs --id --scope pipeline`. -3. Identifier **zone** Z0–Z4, **registryId** / **toolkitId**, couche slot / variant / skin. - -## Interdit - -- Logique commune dans `home//` → `usr/lib/` ou cluster `toolkit-*` -- Asset ou matrice d'un autre vendor (**P11** / **R-LOC1**) -- Gabarit d'un autre toolkit sur un profil (ex. `update_manager.html` Cinnamon sur GNOME) -- Nouvelle roadmap ou priorité depuis `roadmap.md` ou inventaire JSON -- Commit `*-resolve.json` ou état pipeline partiel -- Module parallèle si extension documentée suffit (**P7**) - -## Avant commit - -- Tâche traçable plan maître backlog §16 -- `validate-taxonomy.mjs` si profil, slot, variant, embed ou Z1/Z2 touchés -- `validate-all.mjs` vert sur zone touchée (**H₂**) -- Checklist `convention-clean-code.md` §5 diff --git a/root/.cursor/rules/logique-formelle-capsuleos.mdc b/root/.cursor/rules/logique-formelle-capsuleos.mdc deleted file mode 100644 index 2d794eaf..00000000 --- a/root/.cursor/rules/logique-formelle-capsuleos.mdc +++ /dev/null @@ -1,40 +0,0 @@ ---- -description: Logique formelle CapsuleOS — gates, prédicats, décision agent autonome (référence root/docs/logique-formelle.md) -alwaysApply: true ---- - -# Logique formelle CapsuleOS - -Référence complète : `root/docs/logique-formelle.md` · Corpus : `root/docs/README.md` · Exécution : `root/docs/plan-maitre-reproduction-os.md` - -## Avant d'agir - -1. Vérifier **H₂** : `node usr/lib/capsuleos/tools/validate-all.mjs` (ou gate zone si fix ciblé). -2. **Pipeline** : `node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id --scope pipeline` — ne pas inventer une priorité hors plan maître. -3. **P11 / R-LOC1** : pas de fallback artefact d'un autre vendor (matrice, manifeste, playbook). -4. Appliquer les règles §3 du document canonique — **ne pas implémenter** si **¬A**, **¬I**, ou **¬H₂** (sauf fix CI). - -## Décision autonome - -- **Une seule entrée** : `run-capsule-pipeline.mjs --id ` ou `resolve-agent-action --scope pipeline`. -- Si une seule action débloque la chaîne (**R-AUTO**) : l'exécuter sans demander à l'utilisateur. -- **Ne pas** utiliser `roadmap.md` ni les fichiers `*-resolve.json` versionnés comme source de vérité. -- **R-AUTO** : exécuter si `autoExecute` ; ManA (`R-MAN3`) = pause humaine explicite. -- **R-PWD1** : bundles `agent-action-aliases.json` — pas de sudo dispersé. -- **¬playbook_VM(distrib)** : ne pas inventer baseline. -- VM prime sur doc officielle ; noter les écarts. - -## Skills - -- Formation : `onboarding` + `root/docs/parcours-agent.md` -- **¬A** / migration : `kernel-supervisor`, `asset-pipeline` -- Clone VM : `os-clone-from-vm` (exige **I** avant patch) -- Skin : `os-` + `role-integrator` -- Paramètres GNOME Rocky : `capsuleos-distro-linux-rocky` + procédure playbook § annexe - -## Interdit - -- Patch skin sans inventaire VM (**R-INV1**) -- Asset référencé absent du dépôt (**R-A1**) -- Écriture hors zone / hors plan (**P12** — `convention-clean-code.md`, `capsuleos-clean-code.mdc`) -- Commit/push sans demande explicite utilisateur diff --git a/root/AGENTS.md b/root/AGENTS.md deleted file mode 100755 index d8f44516..00000000 --- a/root/AGENTS.md +++ /dev/null @@ -1,120 +0,0 @@ -# Guide agents — sélection des skills `/root` - -## Principe - -CapsuleOS est un **rootfs web** : le code applicatif vit sous `CapsuleOS/` (`home/`, `usr/`, `OS/`, `var/`, `index.html`). Le dossier `root/` documente **comment** travailler sur ce dépôt, pas du code utilisateur final. - -## Fondements et logique formelle - -**Philosophie du projet** : [`docs/fondements-philosophiques.md`](docs/fondements-philosophiques.md) — mimesis pédagogique, ontologie des couches, épistémologie `proc/`, éthique de la représentation. - -**Référence canonique** : [`docs/logique-formelle.md`](docs/logique-formelle.md) — prédicats (**H₂**, **A**, **S**, **I**, **L**, **V**…), règles d’inférence, procédure de décision autonome. - -**Corpus unique (obligatoire P12)** : [`docs/README.md`](docs/README.md) · [`docs/convention-taxonomie-semantique.md`](docs/convention-taxonomie-semantique.md) · [`docs/convention-clean-code.md`](docs/convention-clean-code.md) - -**Roadmap exécution** : [`docs/plan-maitre-reproduction-os.md`](docs/plan-maitre-reproduction-os.md) — seule source d’ordre des phases · Phase 1 détail : [`plan-phase-1-gnome-triplet.md`](docs/plan-phase-1-gnome-triplet.md). - -**Décision pipeline** : `node usr/lib/capsuleos/tools/lab/run-capsule-pipeline.mjs --id ` ou `resolve-agent-action.mjs --scope pipeline`. - -| Règle agent | Comportement | -|-------------|--------------| -| **R-H1** | ¬**H₂** → corriger les gates avant tout patch | -| **R-INV1** | ¬**I** → inventaire VM avant code skin | -| **R-A1** | ¬**A** → `pull-vm-assets.sh`, jamais d’asset inventé | -| **R-AUTO** | Une seule action admissible → exécuter sans demander | -| **R-LOC1** / **P11** | Artefact local manquant → FAIL visible ; jamais fallback cross-vendor | -| **Tax** | Profils `extends` + variants + embed cohérents → `validate-taxonomy.mjs` | - -Règle Cursor projet : `.cursor/rules/logique-formelle-capsuleos.mdc` (`alwaysApply`). - -## Formation avant action (obligatoire si doute) - -1. Skill [`onboarding`](skills/onboarding/SKILL.md) — parcours H0→H6 + logique formelle. -2. Doc [`docs/logique-formelle.md`](docs/logique-formelle.md) puis [`docs/parcours-agent.md`](docs/parcours-agent.md) + [`docs/ajouter-os-scalable.md`](docs/ajouter-os-scalable.md) pour nouveau vendor / distro / toolkit. -3. Gate : `node usr/lib/capsuleos/tools/validate-all.mjs` (baseline puis clôture). - -## Workflow de sélection - -``` -Demande utilisateur - │ - ▼ - Premier contact / nouvel OS / merge ? ──oui──► onboarding (H0–H2) - │ - ▼ - Migration assets / validate-asset-zones / noyau ? ──oui──► kernel-supervisor - │ non │ - ▼ ├─ asset-pipeline - Clone / parité VM ? ──oui──► os-clone-from-vm └─ kernel-guardian - │ - ▼ - OS ciblé clair ? ──non──► skills/os-orchestrator - │ oui - ▼ - skills/os- - │ - ▼ - Vendor / distro / version ? ──► capsuleos-vendor-* → capsuleos-distro-* → capsuleos-version-* - │ (voir root/skills/_index, docs/skills-hierarchie.md) - ▼ - Langage (JS, CSS, JSON, HTML) ? ──► capsuleos-lang-* - │ - ▼ - Type de travail ? - ├─ UI/parcours → role-designer (+ role-web-designer si mise en page) - ├─ code JS/HTML/CSS → role-developer - ├─ assets visuels → role-graphic-artist (+ asset-pipeline si déplacement pack) - ├─ skin / façade → role-integrator (+ os-*) - ├─ planning/livrable → role-manager - └─ multi-domaines → coordinator -``` - -## Règles - -1. **Contrat** : avant toute modification app, lire les sections pertinentes de [`writing.md`](../../writing.md) (workspace parent). Checklist : [contrib.md § Checklist contrat](../contrib.md#checklist-contrat-avant-merge-ou-release). -2. **Un skill OS + un skill rôle** suffisent en général ; ajouter `coordinator` si la tâche touche plusieurs familles ou plusieurs rôles ; **`kernel-supervisor`** si migration assets ou gate `validate-asset-zones`. -3. **Chemins** : éditer uniquement sous `CapsuleOS/` ; ne pas confondre `CapsuleOS/root/` avec `/root` de l’OS hôte. -4. **Doc développeur** : pas de nouveaux `README.md` sous `OS/` (règle projet) ; notes agents ici ou sous `root/docs/`. -5. **Français** : docs humaines en français ; skills en français pour cohérence équipe. -6. **Concision** : les `SKILL.md` sont des fiches opérationnelles, pas des encyclopédies — approfondir via les liens `docs/` et les README existants (`usr/share/capsuleos/linux/explorers/README.md`, etc.). - -## Invocations explicites - -L’utilisateur peut nommer un skill : « utilise le skill os-linux et role-integrator ». Sinon, déduire depuis la demande (ex. « icônes Fedora » → `os-linux` + `role-graphic-artist`). - -## Fichiers de référence rapide - -| Besoin | Fichier | -|--------|---------| -| **Manifeste noyau & hydratation** | [`root/docs/manifeste-noyau.md`](docs/manifeste-noyau.md) | -| **Catalogue OS (57 entrées, gel noyau)** | [`root/docs/manifeste-kernels.md`](docs/manifeste-kernels.md), [`etc/capsuleos/kernels.json`](../etc/capsuleos/kernels.json), [`etc/capsuleos/os-registry.json`](../etc/capsuleos/os-registry.json) | -| **Scalabilité statique** | [`root/docs/scalabilite-noyau.md`](docs/scalabilite-noyau.md) · **Lj_fr** défaut, **Lj_en**/QWERTY prévus (§7, `locale-scalability.json`) | -| **Staffing agents** | [`root/docs/equipe-agentique.md`](docs/equipe-agentique.md) | -| **Logique formelle (gates & décision)** | [`root/docs/logique-formelle.md`](docs/logique-formelle.md), `.cursor/rules/logique-formelle-capsuleos.mdc` | -| **GNOME HIG (toolkit gnome)** | [`root/docs/gnome-hig-ressources.md`](docs/gnome-hig-ressources.md), skill [`gnome-hig-replication`](skills/gnome-hig-replication/SKILL.md) | -| **KDE HIG (toolkit kde)** | [`root/docs/kde-hig-ressources.md`](docs/kde-hig-ressources.md), skill [`kde-hig-replication`](skills/kde-hig-replication/SKILL.md) | -| **Réplication formelle (tous vendors)** | [`root/docs/procedure-replication-formelle.md`](docs/procedure-replication-formelle.md) | -| **Socle shell global (terminal)** | [`root/docs/convention-shell-global.md`](docs/convention-shell-global.md), prédicats **Ti–TΣ′** | -| **Rendu sorties terminal** | [`root/docs/convention-terminal-rendu-sortie.md`](docs/convention-terminal-rendu-sortie.md), **To**, **Tb**, bashrc | -| **Modules pédagogiques `/mnt`** | [`root/docs/convention-modules-mnt.md`](docs/convention-modules-mnt.md), **Pm**, `mnt/catalog.json` | -| **Parcours agent (H0–H6)** | [`root/docs/parcours-agent.md`](docs/parcours-agent.md), skill [`onboarding`](skills/onboarding/SKILL.md) | -| **Ajouter distro / vendor** | [`root/docs/ajouter-os-scalable.md`](docs/ajouter-os-scalable.md) | -| **Hiérarchie skills** | [`root/docs/skills-hierarchie.md`](docs/skills-hierarchie.md), `seed-agent-skills.mjs --write` | -| **Taxonomie (pierre angulaire)** | [`docs/convention-taxonomie-semantique.md`](docs/convention-taxonomie-semantique.md), `etc/capsuleos/contracts/taxonomy.json` | -| **Gate taxonomie** | `node usr/lib/capsuleos/tools/validate-taxonomy.mjs` | -| **Recette skin/toolkit** | `node usr/lib/capsuleos/tools/linux/run-toolkit-skin-recipe.mjs` | -| **Sync remote Git** | `bash usr/lib/capsuleos/tools/git-remote-sync.sh sync` · hooks : `bash root/tools/install-git-hooks.sh` | -| **Gate release complète** | `node usr/lib/capsuleos/tools/validate-all.mjs` | -| **Liens & médias (file:// + HTTP)** | [`root/docs/routage-donnees-medias.md`](docs/routage-donnees-medias.md), skill [`link-routing`](skills/link-routing/SKILL.md) | -| Toolkits GUI Linux (GTK/Qt/Cinnamon/COSMIC) | [contrib.md § toolkits](../contrib.md#bibliotheques-graphiques-linux-toolkits-gui) | -| Home simulé partagé | `home/public/`, `usr/lib/capsuleos/common/user-home.js` | -| Assets système (icônes noyau) | `usr/share/capsuleos/assets/`, `assets/manifest.json` | -| Migration / supervision noyau | [`skills/kernel-supervisor`](skills/kernel-supervisor/SKILL.md), [roadmap §0.5](docs/roadmap.md) | -| Explorateurs Linux | `usr/share/capsuleos/linux/explorers/`, `usr/lib/capsuleos/shells/linux/explorers/` | -| Embeds offline | `var/lib/capsuleos/generated/`, outils `usr/lib/capsuleos/tools/` | -| Facades URL | `OS//` | -| Skins dérivés | `home//` miroir des entrées sous `OS/linux/families/` | - -## Extension - -Nouvelle famille d’OS : copier la logique de [skills/os-stub/SKILL.md](skills/os-stub/SKILL.md), créer `skills/os-/`, mettre à jour [docs/familles-os.md](docs/familles-os.md) et [README.md](README.md). diff --git a/root/README.md b/root/README.md deleted file mode 100755 index eb435271..00000000 --- a/root/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# `/root` — équipe experte agents CapsuleOS - -Répertoire **métaphorique** (racine Linux du dépôt), distinct du `/root` système de la machine hôte. Il regroupe la documentation humaine et les **skills Cursor** pour composer une équipe d’agents : design, développement, gestion, graphisme, web design, intégration, et expertise par famille d’OS simulée. - -**Point d’entrée contributeur (racine dépôt)** : [contrib.md](../contrib.md) - -## Arborescence - -``` -root/ -├── README.md ← vous êtes ici -├── AGENTS.md ← comment choisir les skills -├── docs/ ← contexte architecture (français) -├── team/ ← fiches rôles humains -└── skills/ ← SKILL.md (convention Cursor) - ├── onboarding/ - ├── link-routing/ - ├── kernel-supervisor/ - ├── asset-pipeline/ - ├── kernel-guardian/ - ├── coordinator/ - ├── role-*/ - ├── os-orchestrator/ - └── os-*/ -``` - -## Démarrage agent - -1. **[docs/README.md](docs/README.md)** — corpus unique, vision technique, **P12 clean code**. -2. **[logique-formelle.md](docs/logique-formelle.md)** — gates & décision autonome. -3. Skill **[onboarding](skills/onboarding/SKILL.md)** + [parcours-agent.md](docs/parcours-agent.md) (H0→H6). -4. Lire [AGENTS.md](AGENTS.md) pour le routage skills. -5. **Clone / parité VM** : [plan-maitre-reproduction-os.md](docs/plan-maitre-reproduction-os.md) · [convention-reproduction-os.md](docs/convention-reproduction-os.md) · skill **[os-clone-from-vm](skills/os-clone-from-vm/SKILL.md)**. -6. Contrat : [`writing.md`](../../writing.md) · [convention-clean-code.md](docs/convention-clean-code.md) · [checklist](../contrib.md#checklist-contrat-avant-merge-ou-release). -7. Gate : `node usr/lib/capsuleos/tools/validate-all.mjs`. -8. Pipeline : `run-capsule-pipeline.mjs --id `. -9. Nouveau catalogue OS : [ajouter-os-scalable.md](docs/ajouter-os-scalable.md). -10. Charger skill **rôle** + skill **OS** (ou `kernel-supervisor` si assets). - -## Rôles (`skills/role-*`) - -| Skill | Public | -|-------|--------| -| [role-designer](skills/role-designer/SKILL.md) | UX, parcours pédagogique, fidélité perceptible | -| [role-developer](skills/role-developer/SKILL.md) | HTML/CSS/ES6, noyau, embeds, SW | -| [role-manager](skills/role-manager/SKILL.md) | Périmètre, priorisation, checklist contrat | -| [role-graphic-artist](skills/role-graphic-artist/SKILL.md) | Icônes, assets, `.skin.css`, médias | -| [role-web-designer](skills/role-web-designer/SKILL.md) | Mise en page, variables CSS, responsive | -| [role-integrator](skills/role-integrator/SKILL.md) | Skins, `OS/` ↔ `home/`, manifests, embeds | -| [kernel-supervisor](skills/kernel-supervisor/SKILL.md) | Migration assets noyau, gate validate-asset-zones, orchestration | -| [asset-pipeline](skills/asset-pipeline/SKILL.md) | Copie / rewrite / manifest sous mandat superviseur | -| [kernel-guardian](skills/kernel-guardian/SKILL.md) | Intégrité JS noyau, embeds, régression Mint | -| [coordinator](skills/coordinator/SKILL.md) | Délégation multi-rôles / multi-OS (produit) | - -## OS (`skills/os-*`) - -| Skill | État dépôt (indicatif) | -|-------|-------------------------| -| [os-orchestrator](skills/os-orchestrator/SKILL.md) | Routeur — toujours en premier si OS incertain | -| [os-linux](skills/os-linux/SKILL.md) | `OS/linux/`, familles debian/redhat/suse | -| [os-windows](skills/os-windows/SKILL.md) | `OS/windows/` | -| [os-macos](skills/os-macos/SKILL.md) | `OS/macos/`, `home/MacOS/` | -| [os-android](skills/os-android/SKILL.md) | `OS/android/` | -| [os-ios](skills/os-ios/SKILL.md) | `OS/ios/` | -| [os-bsd](skills/os-bsd/SKILL.md) | `OS/bsd/` | -| [os-unix](skills/os-unix/SKILL.md) | Convention / extension | -| [os-chromeos](skills/os-chromeos/SKILL.md) | À venir — voir [os-stub](skills/os-stub/SKILL.md) | -| [os-harmonyos](skills/os-harmonyos/SKILL.md) | À venir — voir [os-stub](skills/os-stub/SKILL.md) | -| [os-stub](skills/os-stub/SKILL.md) | Gabarit nouvelle famille | - -Index détaillé : [docs/familles-os.md](docs/familles-os.md). - -## Documentation - -- [docs/convention-reproduction-os.md](docs/convention-reproduction-os.md) — **contrat clone OS** (agents IA, CSS/JS, workflow VM) -- [docs/manifeste-noyau.md](docs/manifeste-noyau.md) — vision noyau, hydratation, assets -- [docs/manifeste-kernels.md](docs/manifeste-kernels.md) — taxonomie kernels/branches (8 entrées actives, waves 1–2) -- [docs/repertoire-os.md](docs/repertoire-os.md) — catalogue OS (57 entrées, tiers P0–P4) -- [docs/scalabilite-noyau.md](docs/scalabilite-noyau.md) — scale statique, embeds partitionnés -- [docs/equipe-agentique.md](docs/equipe-agentique.md) — staffing agents à l'échelle -- [docs/parcours-agent.md](docs/parcours-agent.md) — formation H0–H6 avant action -- [docs/ajouter-os-scalable.md](docs/ajouter-os-scalable.md) — distro, version, vendor, toolkit -- [contrib.md § toolkits Linux](../contrib.md#bibliotheques-graphiques-linux-toolkits-gui) — GTK, Qt, Cinnamon, COSMIC (agents UX/CSS) -- [docs/roadmap.md](docs/roadmap.md) — plan de livraison et jalons -- [docs/apps-linux-par-distro.md](docs/apps-linux-par-distro.md) — apps par défaut et mappings Linux -- [docs/arborescence.md](docs/arborescence.md) — `home/`, `usr/`, `OS/`, `var/` -- [docs/contrat-liens.md](docs/contrat-liens.md) — liens vers `writing.md` et checklist -- [docs/lab-vm-rhel-wayland.md](docs/lab-vm-rhel-wayland.md) — VM Rocky/Alma/RHEL, SSH, Wayland, inventaire lab -- [team/equipe.md](team/equipe.md) — collaboration entre rôles - -## Cursor - -Règle workspace (optionnelle) : `.cursor/rules/capsuleos-agent-root.mdc` pointe vers ce dossier lors des tâches CapsuleOS. diff --git a/root/docs/README.md b/root/docs/README.md deleted file mode 100644 index a00ed528..00000000 --- a/root/docs/README.md +++ /dev/null @@ -1,165 +0,0 @@ -# CapsuleOS — corpus documentation & vision technique - -> **Document d’entrée unique** pour agents IA et contributeurs humains (juin 2026). -> **Obligation** : toute écriture respecte [convention-clean-code.md](convention-clean-code.md) (**P12**) — ce README en fait partie intégrante par référence. - ---- - -## 1. Vision commune - -CapsuleOS est une **expérience de pensée matérialisée** : reproduction **maximale** d’un bureau réel dans une enveloppe **100 % statique** (HTML5, CSS3, ES6, navigateur, `file://` ou HTTP minimal). - -| Dimension | Choix | -|-----------|--------| -| **Finalité** | Pédagogie terrain — illectronisme, autonomie face aux démarches en ligne | -| **Méthode** | Sandbox + parité documentée VM ↔ Capsule | -| **Limite structurelle** | Pas de noyau exécuté, pas d’hyperviseur dans le navigateur | -| **Moteur** | Fidélité expérientielle (**Vp**, **VΣ**, **Tf**) — pas une maquette décorative | - -Phrase d’architecture (validée) : - -```text -Noyau core agnostique → adaptateur kernelId → comportements toolkit - → skin vendor scellé → vérité machine proc/ → façade OS/ → expérience navigateur -``` - -Référence philosophique : [fondements-philosophiques.md](fondements-philosophiques.md). - ---- - -## 2. Cloisonnement — cinq zones (ne pas mélanger) - -| Zone | Chemin | Contient | Qui écrit | -|------|--------|----------|-----------| -| **Z0** | `etc/`, `proc/` | Contrats, registre, manifestes VM | Pipeline lab | -| **Z1** | `usr/lib/`, `usr/share/` | Noyau, gabarits, assets système | Intégrateur kernel | -| **Z2** | `home//` | Skin source (HTML/CSS/JS distro) | Clone VM post-gates | -| **Z3** | `OS/.../index.html` | Façades pick-os (``) | `sync-linux-skin-closure` | -| **Z4** | `var/.../generated/` | Embeds offline | Build opt-in | - -**Flux épistémique** : Z0 → Z1/Z2 → Z3 → navigateur. **Jamais** Z2 → Z0 (le skin ne devine pas la VM). - -**Agnosticisme (P3, P4)** : comportement commun → `usr/lib/` ; chrome toolkit → `themes/clusters/toolkit-*` ; identité distro → `home/` + `vendors//` uniquement. - ---- - -## 3. Paradigme d’exécution singulier - -Une seule chaîne de décision. Pas de roadmap parallèle, pas d’inventaire JSON comme ordre de travail. - -### 3.1 Canon (lire avant d’écrire) - -| # | Document | Rôle | -|---|----------|------| -| 1 | [fondements-philosophiques.md](fondements-philosophiques.md) | Constitution **P1–P12** | -| 2 | [convention-taxonomie-semantique.md](convention-taxonomie-semantique.md) | **Pierre angulaire** — identités, zones, slot/variant/skin | -| 3 | [logique-formelle.md](logique-formelle.md) | Prédicats, **R-LOC1**, **R-IMP1**, **Tax** / **TaxΣ**, **OsRepro** | -| 3b | [convention-reproduction-parfaite.md](convention-reproduction-parfaite.md) | Cohérence, déduction, grille argumentation, critères reproduction parfaite | -| 3c | [convention-raisonnement-inductif-deductif.md](convention-raisonnement-inductif-deductif.md) | Induction VM → déduction gates (campagnes) | -| 3d | [audit-structure-depot-2026-06.md](audit-structure-depot-2026-06.md) · [audit-processus-campagnes-2026-06.md](audit-processus-campagnes-2026-06.md) · [introspection-ontologique-2026-06.md](introspection-ontologique-2026-06.md) | Audits architecture, processus, synthèse ontologique | -| 3e | [convention-css-variables-tokens.md](convention-css-variables-tokens.md) · [convention-schema-org.md](convention-schema-org.md) | Tokens CSS (API visuelle) · JSON-LD schema.org | -| 4 | [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) | Phases, backlog §16, recette économe | -| 5 | [plan-phase-1-gnome-triplet.md](plan-phase-1-gnome-triplet.md) | Détail phase active (1e) | -| 6 | [convention-clean-code.md](convention-clean-code.md) | **Obligation d’écriture** | - -### 3.2 Décision (exécuter) - -```bash -node usr/lib/capsuleos/tools/lab/run-capsule-pipeline.mjs --id -# ou inspection : -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id --scope pipeline -``` - -### 3.3 État (générer, ne pas éditer à la main) - -```bash -node usr/lib/capsuleos/tools/lab/generate-formal-advancement-report.mjs --write -node usr/lib/capsuleos/tools/validate-all.mjs # H₂ -``` - -### 3.4 Grille de maturité cible - -```text -M → ManΣ → AppΣ → PbΣ → Vp → VΣ → Tf → H₆ -``` - ---- - -## 4. Clean code — écriture dans le bon contexte (**P12**) - -[convention-clean-code.md](convention-clean-code.md) **intègre ce README** : avant tout commit ou patch, vérifier zone Z0–Z4, `registryId`, toolkit, et compatibilité plan maître. - -Résumé obligatoire : - -| Surface | Règle | -|---------|--------| -| **Code** | Noyau agnostique ; pas de fork par distro ; extension avant nouveau module (**P7**) | -| **Doc** | Pas de plan d’exécution parallèle ; pas de priorité depuis `roadmap.md` | -| **Données** | `proc//` ; **P11** — pas de fallback cross-vendor | -| **Git** | Pas de `*-resolve.json` ni sortie pipeline partielle | - -Checklist commit : convention-clean-code §5. - ---- - -## 5. Opérationnel — spécialisations (sous le plan maître) - -| Domaine | Documents | -|---------|-----------| -| Accueil nouvel OS (participatif) | [convention-accueil-os.md](convention-accueil-os.md) | -| ManΣ / clone VM | [convention-manifest-vm.md](convention-manifest-vm.md) · [convention-reproduction-os.md](convention-reproduction-os.md) | -| GNOME design (réf.) | [branche-redhat-gnome.md](branche-redhat-gnome.md) · [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md) | -| Cinnamon collecte (réf.) | [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) | -| Apps | [procedure-apps-catalog.md](procedure-apps-catalog.md) · [convention-composants-ui.md](convention-composants-ui.md) · [convention-composants-gnome.md](convention-composants-gnome.md) · [analyse-magasins-apps-cross-os.md](analyse-magasins-apps-cross-os.md) · [procedure-store-replication-formelle.md](procedure-store-replication-formelle.md) | -| Paramètres GNOME | [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) | -| Assets VM | [convention-assets-depuis-vm.md](convention-assets-depuis-vm.md) | -| Styles / JS navigateur | [contrib.md](../../contrib.md) · `writing.md` | - -En cas de conflit entre procédure et plan maître → **plan maître prime**. - ---- - -## 6. Données — inventaires (`inventaires/`) - -| Type | Exemples | Usage | -|------|----------|-------| -| État persisté | `*-formal-state.json`, `avancement-formel-*` | Gates | -| VM / parité | `*-vm.json`, `inventaire-parite-*.md` | Mesure P0/P1/P2 | -| Clôture | `*-h6-closure.json` | Domaine terminé | - -**Éphémères (gitignorés)** : `*-pipeline-resolve.json`, `*-formal-resolve.json`, `*-playbook-general-resolve.json`. - ---- - -## 7. Documents secondaires — ne pas prioriser - -| Document | Rôle | -|----------|------| -| [point-etape-2026-06.md](point-etape-2026-06.md) | **État transversal** juin 2026 — Alma C30, classification apps, gates | -| [roadmap.md](roadmap.md) | Vision pédagogique, % maturité — **pas** l’ordre d’exécution | -| [architecture-globale.md](architecture-globale.md) | Navigation dépôt | -| [manifeste-noyau.md](manifeste-noyau.md) | Hydratation technique noyau | -| `briefs/*.md` | Fiches distro générées | - ---- - -## 8. Références légales et conduite - -| Document | Rôle | -|----------|------| -| [../../CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | Communauté + standards techniques | -| [../../LICENSE.md](../../LICENSE.md) | Licence logicielle (résumé) · texte intégral `LICENSE` | - ---- - -## 9. Points d’entrée par profil - -| Profil | Chemin | -|--------|--------| -| **Humain** | [../../contrib.md](../../contrib.md) → ce README → plan maître | -| **Agent Cursor** | [../AGENTS.md](../AGENTS.md) · `.cursor/rules/` | -| **Racine dépôt** | [../../README.md](../../README.md) (vue publique + pédagogie) | - ---- - -*Dernière mise à jour : juin 2026 — corpus singulier, P11/P12, Phase 1e, [point-etape-2026-06.md](point-etape-2026-06.md).* diff --git a/root/docs/agent-validation-discipline.md b/root/docs/agent-validation-discipline.md deleted file mode 100644 index 1c49133c..00000000 --- a/root/docs/agent-validation-discipline.md +++ /dev/null @@ -1,140 +0,0 @@ -# Discipline agent — validation discriminée et clôture push - -> **Statut** : référence opérationnelle unique pour choisir **quoi lire**, **quels gates lancer**, et **quoi rectifier** selon le type de changement. -> Complète sans remplacer : [parcours-agent.md](parcours-agent.md) (H0–H6), [logique-formelle.md](logique-formelle.md) (prédicats), [convention-reproduction-os.md](convention-reproduction-os.md) (clone VM), [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) (**Rv**). - -**Outil** : plan automatique depuis les fichiers modifiés : - -```bash -node usr/lib/capsuleos/tools/print-validation-plan.mjs -node usr/lib/capsuleos/tools/print-validation-plan.mjs --staged -node usr/lib/capsuleos/tools/print-validation-plan.mjs home/Debian/Mint/style/apps/nemo.skin.css -``` - ---- - -## 1. Principes - -| Principe | Règle | -|----------|-------| -| **Discriminer** | Ne pas lancer `validate-all` sur une typo doc seule ; lancer la **gate minimale** du périmètre touché. | -| **Baseline session** | Première intervention ou gros patch : **H₂** = `validate-all.mjs` (noter les échecs hors zone). | -| **Rectifier au fil de l'eau** | En touchant une zone, corriger les **rouges de cette zone** — pas toute la dette du dépôt (sauf tâche « fix CI »). | -| **Clôture merge / push** | Avant merge significatif ou push demandé : **H₆** = `validate-all.mjs` exit 0 sur le périmètre livré. | -| **Vues avant push** | Tout changement skin / slot interactif : **Rv** + `sync-linux-skin-closure` si Linux — voir §4. | - ---- - -## 2. Matrice type de changement → lecture → gates - -| Type | Indices (chemins) | Lire d'abord | Gates obligatoires (après patch) | Gates optionnelles / smokes | -|------|-------------------|--------------|----------------------------------|-----------------------------| -| **Doc / skills / règles** | `root/docs/`, `root/skills/`, `.cursor/rules/`, `contrib.md` | [parcours-agent.md](parcours-agent.md) | Aucune si pas de code ; `validate-agent-skills.mjs` si skills catalogue | — | -| **Assets seuls** | `usr/share/capsuleos/assets/`, `home/public/Images/` | [politique-assets.md](politique-assets.md) | `validate-asset-zones.mjs` ou `validate-assets-all.mjs` | `audit-asset-paths.mjs` | -| **Vendor pack** | `assets/images/vendors/` | [convention-assets-depuis-vm.md](convention-assets-depuis-vm.md) | `validate-assets-all.mjs` | `pull-vm-assets.sh` si VM | -| **Skin Linux** | `home//` | [convention-reproduction-os.md](convention-reproduction-os.md), [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) | `sync-linux-skin-closure.mjs` puis `validate-capsule.mjs` | Smokes slot : `usr/lib/capsuleos/tools/lab/smoke-mint-*.mjs` | -| **Gabarits apps Linux** | `usr/share/capsuleos/linux/apps/`, `explorers/` | [apps-linux-par-distro.md](apps-linux-par-distro.md) | `build-linux-embed.mjs` (+ `sync-linux-skin-closure.mjs` si skin lié) | `file://` smoke 1 app | -| **JS noyau** | `usr/lib/capsuleos/` | [passe-vanilla-json.md](passe-vanilla-json.md), [convention-contexte-fenetres.md](convention-contexte-fenetres.md) | `validate-quality-all.mjs` ; `build-capsule-window.mjs` si `window/` | `validate-desktop-window-boot.mjs` | -| **Registre / profils** | `etc/capsuleos/`, `os-registry-entries.mjs` | [ajouter-os-scalable.md](ajouter-os-scalable.md) | `build-os-registry.mjs` chaîne + `validate-capsule.mjs` | `print-agent-brief.mjs ` | -| **Liens HTML statiques** | `*.html` hors skin, hubs `OS/` | [link-routing](../skills/link-routing/SKILL.md) | `validate-links-all.mjs` | `fix-static-html-asset-urls.mjs` | -| **Lab / smokes** | `usr/lib/capsuleos/tools/lab/` | [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) | Smokes touchés (Playwright) | Pas de `validate-all` si lab seul | -| **Portail / normes conformité** | `index.html`, `.htaccess`, hubs `OS/`, `mnt/`, `REUSE.toml` | [audit-conformite-normes.md](audit-conformite-normes.md) | `validate-schema-org.mjs`, `validate-owasp-static.mjs`, `validate-reuse-full.mjs`, `validate-a11y.mjs` | `lab/smoke-a11y-portal.mjs` ; OWASP smoke curl si URL prod | -| **Clone VM / parité** | inventaires, playbooks lab | [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) · [moteur-clonage-experience.md](moteur-clonage-experience.md) | `run-clone-cycle.mjs --id --status` ; `validate-clone-assets.mjs --id ` ; `validate-skin-icon-paths.mjs --id ` ; `capture-clone-surfaces.mjs` | `run-cross-regression-gates.mjs` si noyau `fileExplorer/` touché | -| **Fidélité visuelle Φ** | `visual-scenes.json`, captures `visual-fidelity/` | [logique-formelle.md §2.4b](logique-formelle.md) | `compare-visual-fidelity.mjs --id ` ; `assert-computed-vs-inventory.mjs --id --slot ` | `capture-scene-pair.mjs` si VM allumée — clôture H₆ visuelle exige scènes P0 `match` | - -**Release (merge / PR significative)** : toujours terminer par : - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -``` - ---- - -## 3. Que fait `validate-all` (ne pas tout relancer à chaque fois) - -| Étape | Script | Quand isoler | -|-------|--------|--------------| -| assets | `validate-assets-all.mjs` | Images, profils, CSS `url()` assets | -| links | `validate-links-all.mjs` | HTML, hubs, médias | -| capsule | `validate-capsule.mjs` | Registre, façades, boot fenêtres | -| quality | `validate-quality-all.mjs` | JSON, ES6 strict, contrats UI | - -Échecs **souvent ignorés à tort** : façades Linux désync (`validate-capsule` → lancer `sync-linux-skin-closure.mjs`) ; assets hors zones ; `?.` / `??` en JS runtime. - ---- - -## 4. Checklist push — campagne Mint (et skins Linux P0) - -Ordre **obligatoire** avant push / merge d’un lot skin ou noyau interactif : - -1. **Vues (Rv)** — pour chaque slot `data-link` touché : la surface **V** reflète **M** après action (pas de refresh parasite). Doc : [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md). -2. **Façades pick-os** — si `home/` ou gabarits partagés modifiés : - - ```bash - node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs - ``` - - Sans cela, pick-os sert une copie HTML obsolète (`OS/linux/families/...` ≠ `home/...`). - -3. **Smokes lab** (optionnel mais recommandé P0) — attentes **conditionnelles**, sleeps courts via `mint-smoke-open.mjs` : - - ```bash - node usr/lib/capsuleos/tools/lab/smoke-mint-nemo.mjs - node usr/lib/capsuleos/tools/lab/run-capsule-panel-browser.mjs - ``` - - Préférer `waitForSelector` / `waitForFunction` aux pauses fixes longues (>200 ms). - -4. **Checkpoints post-clonage** (P0 skin VM) : - - ```bash - node usr/lib/capsuleos/tools/validate-clone-checkpoints.mjs --tier P0 - # ou : validate-clone-assets.mjs --all --tier P0 - python3 -m http.server 5500 --bind 127.0.0.1 # autre terminal - node usr/lib/capsuleos/tools/lab/capture-clone-surfaces.mjs --id linux-mint --write-baseline - node usr/lib/capsuleos/tools/lab/capture-clone-surfaces.mjs --id linux-mint --compare - ``` - - Matrice : **assets checkpoint** (existence + hash optionnel `--hash`) → **capture checkpoint** (panel, menu, bureau, 3 apps) → parité lab si VM disponible. - - **CI** : `.github/workflows/validate-capsuleos.yml` — `validate-all` + `validate-clone-checkpoints --tier P0`. Option locale : `CAPSULE_VALIDATE_CLONE=1 node usr/lib/capsuleos/tools/validate-all.mjs`. - -5. **Gate release** : - - ```bash - node usr/lib/capsuleos/tools/validate-all.mjs - ``` - -6. **Rectification incrémentale** — si `validate-all` échoue : corriger uniquement les violations **dans les chemins du lot** ; noter le reste en dette (issue / inventaire P1). - ---- - -## 5. Rectifier au fur et à mesure - -| Situation | Action agent | -|-----------|--------------| -| Rouge `validate-all` **dans** la zone du patch | Corriger dans le même lot (obligation culturelle). | -| Rouge **hors** zone, préexistant | Documenter ; ne pas élargir le scope sauf tâche CI dédiée. | -| Skill / règle contredit la doc canonique | Mettre à jour la **projection** (skill, `.mdc`) vers `logique-formelle.md` ou ce document. | -| Toucher `home/Debian/Mint/` | Vérifier parité inventaire [linux-mint-clone-status.md](inventaires/linux-mint-clone-status.md) ; ne pas régresser P0 documentés. | - ---- - -## 6. Anti-patterns - -1. `validate-all` sur chaque commit doc. -2. Modifier `home/` sans `sync-linux-skin-closure` avant fin de tâche. -3. **Mint panel/menu** : double CSS (`imports.css` + inject `contentLoader`), `footer.css`/`panel-windows.css` parallèles, layout menu dans `mint-menu-parity.js`, `--taskbar-height` portal — voir skill `os-linux` § Panel/menu Mint v3. -4. Ignorer un échec `validate-capsule` « parce que c'était déjà rouge » **dans la zone touchée**. -5. Smokes lab avec sleeps >1 s sans attente conditionnelle (régression perf CI). -6. Push sans **Rv** sur un slot interactif modifié. - ---- - -## 7. Liens - -- [parcours-agent.md](parcours-agent.md) — hydratation H0–H6 -- [convention-reproduction-os.md](convention-reproduction-os.md) — workflow clone VM §4 -- [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) — **Rv₁**, **Rv₂** -- [contrib.md](../../contrib.md) — checklist contrat merge -- Skill [`onboarding`](../skills/onboarding/SKILL.md) diff --git a/root/docs/ajouter-os-scalable.md b/root/docs/ajouter-os-scalable.md deleted file mode 100755 index e9c77119..00000000 --- a/root/docs/ajouter-os-scalable.md +++ /dev/null @@ -1,179 +0,0 @@ -# Ajouter un OS de façon scalable - -Procédure **distro · version · environnement de bureau · vendor** sans explosion du noyau JS. - -**Cadre contributeur (obligatoire)** : [convention-accueil-os.md](convention-accueil-os.md) — espace dédié, recette, zones interdites, deux chemins d’accueil. - -**Prérequis agent** : [parcours-agent.md](parcours-agent.md) phases H0–H3 · gate `validate-all.mjs` vert en baseline. - -> **Parité VM requise** : en parallèle du catalogue, suivre [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) (inventaire SSH → assets → comportements → apps → FS). Référence modèle : **linux-mint** (annexe A). Mesure automatisée : [procedure-controle-distributions-reelles.md](procedure-controle-distributions-reelles.md). - ---- - -Générer un brief agent depuis le registre : - -```bash -node usr/lib/capsuleos/tools/print-agent-brief.mjs --write -``` - ---- - -## 1. Décision produit (5 questions) - -| # | Question | Réponse typique | -|---|----------|-----------------| -| 1 | Famille ? | `linux` \| `windows` \| `macos` \| … → skill `os-` | -| 2 | Toolkit / shell déjà couvert ? | Voir [repertoire-os.md § Toolkits](repertoire-os.md) — **réutiliser** avant d’en créer un | -| 3 | Tier ? | P0 figé · P1 production · P2–P4 planifié / stub | -| 4 | Explorateur Linux ? | `explorerTemplate` : `nemo`, `dolphin`, `nemo-gnome`, … | -| 5 | Vendor visuel ? | Pack `assets/images/vendors/` + éventuellement `icons/*` | - -| 6 | Locale / clavier ? | **Défaut `fr-FR`** · noter locale VM dans l'inventaire · `en-US`/QWERTY = variante future ([scalabilite-noyau.md §7](scalabilite-noyau.md)) | - -**Règle d’or** : 1 entrée registre = 1 identité utilisateur (distro **ou** version majeure), pas un clone complet du noyau. - ---- - -## 2. Enregistrement catalogue - -1. Ajouter l’entrée dans la source de `etc/capsuleos/os-registry.json` (souvent via `build-os-registry.mjs` si générateur utilisé). -2. Champs minimaux : - -```json -{ - "id": "linux-zorin", - "family": "linux", - "displayName": "Zorin OS", - "tier": "P2", - "status": "planned", - "toolkit": "gnome", - "explorerTemplate": "nemo-gnome", - "embedKey": "zorin", - "bodyId": "zorin", - "facade": "OS/linux/families/debian/zorin/index.html", - "skin": "home/Debian/Zorin/index.html" -} -``` - -3. Régénérer les projections si le dépôt le prévoit : - -```bash -node usr/lib/capsuleos/tools/build-os-registry.mjs -node usr/lib/capsuleos/tools/build-pick-os.mjs -``` - -4. Créer `etc/capsuleos/profiles/linux-zorin.json` (miroir du futur `skin.profile.json`). - ---- - -## 3. Assets (vendor + toolkit) - -| Étape | Action | -|-------|--------| -| Toolkit | Réutiliser `assets/images/toolkits//` — pas de copie complète | -| Vendor | Ajouter `assets/images/vendors/zorin/` (fond, logo pick-os si besoin) | -| Icônes | Référencer packs dans `assets/manifest.json` ; `iconPacks` dans le profil | -| Interdit | `OS/.../media/`, `home/*/media/img/` | - -```bash -node usr/lib/capsuleos/tools/build-assets-manifest.mjs -node usr/lib/capsuleos/tools/validate-asset-zones.mjs -``` - ---- - -## 4. Façade & miroir skin (Linux) - -1. **Copier** une façade proche (même toolkit) : ex. Ubuntu → Zorin sous `OS/linux/families/debian/zorin/`. -2. **Miroir** `home/Debian/Zorin/` avec la même structure relative. -3. **`skin.profile.json`** (façade + home) : - -```json -{ - "assets": { - "assetsBase": "../../../usr/share/capsuleos/assets", - "toolkitPack": "toolkits/gnome", - "vendorPack": "vendors/zorin", - "iconPacks": ["icons/gnome"] - }, - "paths": { - "facade": "OS/linux/families/debian/zorin/index.html", - "skin": "home/Debian/Zorin/index.html" - } -} -``` - -4. **Ordre scripts** (façade Linux) : `user-home.js` → manifest assets → profils → `capsule-resource.js` → `capsule-skin-boot.js` → `capsule-window.js` → shell. - -5. Variables : préférer `capsuleGlobals` dans le profil plutôt que `CAPSULE_*` ad hoc non listés. - ---- - -## 5. Spécificités par type d’extension - -### Nouvelle distribution (même bureau qu’une existante) - -- Copier skin Ubuntu/Mint selon toolkit. -- Changer `bodyId`, tokens CSS (`body#zorin`), `strings.json`, icônes vendor. -- **< 200 lignes JS** hors boot si possible. - -### Nouvelle version (ex. Windows 12, macOS 16) - -- Nouvelle entrée `id` + façade `OS/windows/12/` ou segment version. -- Réutiliser `usr/lib/capsuleos/shells/windows/` — pas de second kernel. - -### Nouvel environnement de bureau (toolkit) - -- Coût élevé : pack `toolkits//`, templates explorateur, [contrib.md § toolkits](../../contrib.md#bibliotheques-graphiques-linux-toolkits-gui). -- Enregistrer le toolkit dans `os-registry.json` section `toolkits`. -- Staffer `role-developer` + `role-graphic-artist` + `role-integrator`. - -### Nouveau vendor (branding seul) - -- Pack `vendors/` + pick-os icon. -- Skins existants : ajouter `vendorPack` au profil — pas de fork JS. - -### Nouvelle famille OS - -- Suivre [os-stub/SKILL.md](../skills/os-stub/SKILL.md) : façade `OS//`, shell `usr/lib/capsuleos/shells//`, skill dédié. - ---- - -## 6. Validation & livraison - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -node usr/lib/capsuleos/tools/validate-skin-profiles.mjs -node usr/lib/capsuleos/tools/generate-public-manifest.mjs # si explorateur / home public -node usr/lib/capsuleos/tools/linux/build-linux-embed.mjs # si templates ou strings -``` - -Smoke manuel : - -- Ouvrir la façade en `file://` : shell, menu, 1 app, explorateur. -- Vérifier résolution `./assets/...` (pas de 404 images). - ---- - -## 7. Documentation agent (sans README sous OS/) - -- Mettre à jour [repertoire-os.md](repertoire-os.md) (tableau entrée). -- Sources design dans `sources[]` du registre ou du profil. -- Brief équipe : `id`, `tier`, toolkit, gate vert. - ---- - -## Checklist copiable - -Clone VM (si parité réelle) : [`templates/clone-os-checklist.md`](templates/clone-os-checklist.md) - -``` -[ ] Entrée os-registry (+ pick-os regen si applicable) -[ ] Profil etc/capsuleos/profiles/.json + skin.profile.json miroirs -[ ] Toolkit existant confirmé ; vendor pack si besoin -[ ] Façade + home miroir ; ordre boot scripts -[ ] Aucune image hors zones assets/ -[ ] validate-all → exit 0 -[ ] Embed regen si Linux templates/strings touchés -[ ] Smoke file:// OK -``` diff --git a/root/docs/analyse-magasins-apps-cross-os.md b/root/docs/analyse-magasins-apps-cross-os.md deleted file mode 100644 index 9fbf12d6..00000000 --- a/root/docs/analyse-magasins-apps-cross-os.md +++ /dev/null @@ -1,141 +0,0 @@ -# Analyse magasins apps cross-OS - -**Statut contrat** : `store-installable-apps.json` — **actif** (tous OS Linux actifs, architecture centralisée juin 2026) -**Architecture** : [`architecture-catalogue-apps.md`](architecture-catalogue-apps.md) — slots-manifest + presentation-bindings + générateur `capsule-store-catalog.js` -**Référence vision** : analyse `de155a70` · Wave store extension · matrice [`inventaires/store-installable-matrix.json`](inventaires/store-installable-matrix.json) - -## Principe - -| Couche | Rôle | -|--------|------| -| VM ground truth | Apps `defaultInstalled: true` ou `onVm: true` — shell par défaut | -| Extension magasin | Apps `storeInstallable: true`, `defaultInstalled: false` — installables via Logiciels / Logithèque simulé | -| Slot Capsule | Gabarit déjà abouti (Mint v3 ou GNOME ScΣ) — pas de nouveau template inventé | - -## Matrice OS actifs × catalogue magasin (juin 2026) - -| registryId | StoreFront | Toolkit | Apps store | Smoke S5–S12 | Statut | -|------------|------------|---------|------------|--------------|--------| -| linux-alma | update_manager | gnome | 11 | OK | actif | -| linux-rocky | update_manager | gnome | 11 | OK | actif | -| linux-fedora | update_manager | gnome | 11 | OK | actif | -| linux-ubuntu | update_manager | gnome | 11 | OK | actif (GS50, libellé « Logiciels ») | -| linux-popos | update_manager | cosmic→gnome | 11 | smoke S1+ (GS50 branché) | actif — layout COSMIC scroll corrigé | -| linux-anduinos | update_manager | gnome | 11 | OK | actif | -| linux-mint | mintinstall | cinnamon | 21 (VM + extensions) | `smoke-mint-mintinstall.mjs` | actif — fusion `mintinstall.js` | -| linux-kde-neon | update_manager | kde | 0 | deferred | gap UI Discover (grille store) | -| linux-opensuse | update_manager | kde | 0 | deferred | gap UI Discover (grille store) | - -## Fronts magasin par OS - -| registryId | Slot UI | Label FR | Sources | -|------------|---------|----------|---------| -| linux-mint | mintinstall | Logithèque | apt, flatpak | -| linux-rocky | update_manager | Logiciels | rpm, flatpak | -| linux-alma | update_manager | Logiciels | rpm, flatpak | -| linux-fedora | update_manager | Logiciels | rpm, flatpak | -| linux-ubuntu | update_manager | Logiciels | snap, deb, flatpak | -| linux-popos | update_manager (Pop Shop) | Pop Shop | deb, flatpak | -| linux-anduinos | update_manager | Logiciels | deb, flatpak | -| linux-kde-neon | update_manager (Discover) | Discover | apt, flatpak — catalogue deferred | -| linux-opensuse | update_manager (Discover) | Discover | rpm, flatpak — catalogue deferred | - -## Pilote Alma (Wave store juin 2026) - -### Apps P0 magasin (wave 1) - -| Slot contrat | App ID Logiciels | Source Alma | Slot Capsule post-install | -|--------------|------------------|-------------|---------------------------| -| file_roller | file-roller | rpm file-roller | file_roller | -| libreoffice_startcenter | libreoffice | flatpak org.libreoffice.LibreOffice | librewriter | -| calendar | calendar | flatpak org.gnome.Calendar | calendar | - -### Apps P1 magasin (wave 2 — extension juin 2026) - -| Slot contrat | App ID Logiciels | Source Alma | Slot Capsule | Scénario | -|--------------|------------------|-------------|--------------|----------| -| thunderbird | thunderbird | flatpak org.mozilla.Thunderbird | thunderbird | S9 | -| transmission | transmission | flatpak com.transmissionbt.Transmission | transmission | S10 | -| rhythmbox | rhythmbox | rpm rhythmbox | rhythmbox | — (decorative) | -| lecteur_multimedia | lecteur-multimedia | flatpak io.github.celluloid_player.Celluloid | lecteur_multimedia | overview pin | -| drawing | drawing | flatpak com.github.maoschanz.drawing | drawing | — | -| simple_scan | simple-scan | rpm simple-scan | simple_scan | S12 | -| warpinator | warpinator | flatpak org.x.Warpinator | warpinator | S11 | -| timeshift | timeshift | flatpak com.timeshift.TimeShift | timeshift | — | - -## Pilote Rocky (activation juin 2026) - -Même **11 apps** que Alma via `generate-store-catalog.mjs` — écarts sources documentés (priorité RPM Rocky quand les deux existent) : - -| App ID Logiciels | Source Alma | Source Rocky (UI Logiciels) | -|------------------|-------------|----------------------------| -| thunderbird | flatpak | **rpm** thunderbird (+ flatpak optionnel contrat) | -| transmission | flatpak | **rpm** transmission (+ flatpak optionnel contrat) | -| calendar, libreoffice, lecteur-multimedia, drawing, warpinator, timeshift | flatpak | flatpak (identique) | -| file-roller, rhythmbox, simple-scan | rpm | rpm (identique) | - -Skin `home/RedHat/Rocky/` : slots store (`file_roller`, `thunderbird`, …), scripts `capsule-store-catalog.js` + `gnome-store-catalog.js` + `gnome-store-shell-pin.js`. Overview : épinglage dynamique post-install. - -Smoke Rocky : `smoke-gnome-software-scenarios.mjs --id linux-rocky` (S5–S12). - -Slots réutilisés depuis Mint v3 / toolkit GNOME — aucun gabarit inventé. `rhythmbox` : profondeur decorative (lecteur minimal). Overview : lanceurs `data-store-pin` masqués révélés à l'install (`simple_scan`, `lecteur_multimedia`). - -### Kernel - -- Catalogue : `var/lib/capsuleos/generated/capsule-store-catalog.js` (généré) consommé par `gnome-store-catalog.js` — **11 apps** `linux-alma` · **11 apps** `linux-rocky` -- UI Logiciels : `update-manager.js` + `update_manager_gnome.html` (section **À découvrir**) -- Icônes grille : `update_manager_gnome.base.css` — classes `gnome-software__cardicon--*` -- Épinglage shell : `gnome-store-shell-pin.js` · événement `capsule:store-app-installed` · overview + dash - -### sessionStorage (choix documenté) - -Deux clés complémentaires : - -1. **`capsule-gnome-software-installed`** — map `{ appId: boolean }` pour l'état UI Logiciels (compat S1–S4 existants). -2. **`capsule-store-installed:{registryId}`** — métadonnées structurées `{ appIds[], installedAt, source }` pour audit, reprise session et épinglage overview/dash. - -Écriture dual-write à la fin d'une installation store ; lecture fusionne les deux au boot (`initGnomeInstalledFromCatalog`). - -### Scénarios pédagogiques - -Contrat : `etc/capsuleos/contracts/software-user-scenarios.json` - -| ID | Titre | -|----|-------| -| S1–S4 | Flux Logiciels GNOME baseline (Writer, recherche, MAJ, Installées) | -| S5 | À découvrir → file_roller → Installées | -| S6 | LibreOffice flatpak → Ouvrir librewriter | -| S7 | Agenda flatpak → Ouvrir calendar | -| **S9** | Thunderbird flatpak → Ouvrir thunderbird | -| **S10** | Transmission flatpak → Installées | -| **S11** | Warpinator flatpak communautaire → Ouvrir warpinator | -| **S12** | Numériseur simple rpm → Installées | -| S8 | Erreur réseau (optionnel) | - -Smoke : `smoke-gnome-software-scenarios.mjs --id linux-alma` · `--id linux-rocky` · `--id linux-fedora` · `--id linux-ubuntu` · `--id linux-anduinos` — Pop!_OS : deferred (layout COSMIC) - -Captures Capsule (échantillon P1) : `root/docs/inventaires/captures/linux-alma/alma-capsule-store-*.png` - -### Gates - -- `validate-store-installable-apps.mjs` — P0×3 + P1×8 Alma -- `validate-software-user-scenarios.mjs` — S1–S7 + S9–S12 - -## Mint (Logithèque) - -- Catalogue généré : **21 apps** (19 VM + Baobab ground truth + Snapshot extension magasin) -- Runtime : `capsule-store-catalog.js` + `mint-store-catalog.js` branchés sur `home/Debian/Mint/` -- UI : `mintinstall.js` fusionne le catalogue contrat (`buildCatalogFromRegistry`) ; section « À découvrir » alimentée par `CapsuleMintStore.getDiscoverApps()` quand des extensions `storeInstallable` existent (sinon cartes vedette statiques du gabarit) -- Smoke : `smoke-mint-mintinstall.mjs` · `smoke-mint-nemo.mjs` - -## KDE (deferred) - -- `linux-kde-neon` / `linux-opensuse` : `presentation-bindings.storeCatalogStatus: deferred` (aligné `storeFrontByRegistry`) -- Catalogue généré vide (0 apps) — skins KDE ne chargent pas encore `capsule-store-catalog.js` -- UI Discover (`update_manager_kde*.html`) sans grille « À découvrir » store — implémentation après `toolkitVariants.kde` - -## Prochaines vagues - -- Mint : extensions magasin `storeInstallable` (ex. Snapshot) + ground truth Baobab VM -- KDE : branchement catalogue + UI Discover grille (quand `toolkitVariants.kde` aboutis) -- Pop!_OS : smoke store après stabilisation layout COSMIC (dock) diff --git a/root/docs/apps-linux-par-distro.md b/root/docs/apps-linux-par-distro.md deleted file mode 100755 index 6d48b2d5..00000000 --- a/root/docs/apps-linux-par-distro.md +++ /dev/null @@ -1,237 +0,0 @@ -# Applications Linux par distribution — référence CapsuleOS - -Document de référence pour l’émulation des applications par défaut sur les skins Linux du catalogue (12 actives pick-os + extensions lab). -Les identifiants **`data-link`** / **`data-overview-link`** / **`data-cosmic-app-link`** sont la source de vérité côté code ; ce fichier décrit l’intention produit et les écarts restants. - -Voir aussi la [roadmap](roadmap.md) pour le plan de livraison par phases, et [contrib.md § toolkits](../../contrib.md#bibliotheques-graphiques-linux-toolkits-gui) pour GTK/Qt, tokens shell, fichiers `*.skin.css` et checklist agents UX. - -## Socle partagé (`usr/share/capsuleos/linux/apps/`) - -| ID CapsuleOS | Rôle simulé | Gabarit | -|---|---|---| -| `nemo` | Explorateur — slot logique unique | `CAPSULE_EXPLORER_TEMPLATE` + `CAPSULE_EXPLORER_SKIN_KEY` | -| | **Mint** → Nemo (`nemo`) | `nemo.skin.css` | -| | **GNOME** → Nautilus (`nemo-gnome` + `nautilus`) | `nautilus.skin.css` (réf. Rocky) | -| | **KDE** → Dolphin (`dolphin`) | `dolphin.skin.css` | -| `firefox` | Navigateur Web | `firefox.html` | -| `terminal` | Terminal / Konsole / Console | `terminal.html` | -| `themes` | Paramètres système / apparence | `themes.html` | -| `update_manager` | Logithèque / Software / Discover / Pop!_Shop | `update_manager*.html` | -| `text_editor` | Éditeur de texte simple (GNOME / COSMIC / xed / Kate) | `text_editor.html` | -| `librewriter` | LibreOffice Writer | `librewriter.html` | -| `visionneur_images` | Visionneuse d’images | `visionneur_images.html` | -| `visionneur_pdf` | Visionneuse PDF | `visionneur_pdf.html` | -| `lecteur_multimedia` | Lecteur vidéo / audio | `lecteur_multimedia.html` | -| `mainMenu` | Menu applications | `mainMenu.html` / `mainMenu-gnome.html` | -| `profile` | À propos de la distro | `profile.html` | -| `checklist` | Missions pédagogiques CapsuleOS (hors OS réel) | `checklist.html` | - -Variantes `update_manager` : - -- **Mint / défaut Cinnamon** : `update_manager.html` -- **GNOME (Fedora, Rocky, Alma, Ubuntu, AnduinOS)** : `update_manager_gnome.html` + ground `gnome-software-ground.js` (chrome GS50) -- **KDE Discover** : `update_manager_kde.html` (openSUSE, MX-KDE, Debian-KDE) - ---- - -## Mappings corrigés (2026-06) - -| Skin | Élément UI | Avant (erroné) | Après (correct) | -|---|---|---|---| -| **Fedora** | Dash — Logiciels | `themes` | `update_manager` | -| **Fedora** | Dash — Éditeur de texte | `librewriter` | `text_editor` | -| **Fedora** | Dash — Calendrier | `checklist` | décoratif (pas de lien) | -| **Pop!_OS** | Dock — Éditeur de texte | `text_editor` | `text_editor` | -| **Pop!_OS** | Grille — Paramètres COSMIC | `profile` | `themes` | -| **Pop!_OS** | Grille — Store COSMIC | `themes` | `update_manager` | -| **Pop!_OS** | Grille — Éditeur de texte COSMIC | `checklist` | `text_editor` | -| **Debian-KDE** | Menu favori Discover | `checklist` | `update_manager` | -| **Debian-KDE** | Panel Discover | décoratif | `update_manager` | -| **AnduinOS** | Menu — Éditeur de texte | `null` | `text_editor` | - ---- - -## Par distribution - -### Linux Mint Cinnamon (`mint`) - -**Catalogue alphabétique (VM → file de reproduction)** : [`inventaires/linux-mint-apps-alphabetique.md`](inventaires/linux-mint-apps-alphabetique.md) - -| App réelle | ID CapsuleOS | Panel | Menu | -|---|---|---|---| -| Nemo | `nemo` | ✅ | ✅ | -| Firefox | `firefox` | ✅ | ✅ | -| Terminal | `terminal` | ✅ | ✅ | -| LibreOffice Writer | `librewriter` | ✅ | ✅ | -| Thèmes | `themes` | ✅ | ✅ | -| Gestionnaire de mises à jour | `update_manager` | tray | ✅ | -| Visionneur d’images | `visionneur_images` | ✅ | ✅ | -| Visionneur PDF | `visionneur_pdf` | ✅ | ✅ | -| Celluloid | `lecteur_multimedia` | ✅ | ✅ | -| Calculatrice (GNOME) | `calculator` | favori | ✅ | -| Capture d'écran (GNOME) | `screenshot` | — | ✅ | -| Dessin (Drawing) | `drawing` | — | ✅ | -| Éditeur de texte (xed) | `text_editor` | ✅ | ✅ | -| Logithèque | `update_manager` | ✅ | ✅ | -| Missions CapsuleOS | `checklist` | ✅ | — | - -### Ubuntu 25.10 GNOME (`ubuntu`) - -| App réelle | ID CapsuleOS | Dock | Overview | -|---|---|---|---| -| Firefox | `firefox` | ✅ | 🔶 (recherche) | -| Fichiers | `nemo` | ✅ | 🔶 (recherche) | -| Ubuntu Software | `update_manager` | ✅ | ✅ | -| Terminal | `terminal` | ✅ | ✅ | -| Paramètres | `themes` | 🔶 | ✅ | -| Éditeur de texte | `text_editor` | ✅ | ✅ | -| Missions | `checklist` | 🔶 | 🔶 (recherche) | - -### Rocky Linux GNOME (`rocky`) — référence Nautilus - -> **Catalogue strict machine** : [`linux-rocky-apps-catalog.json`](inventaires/linux-rocky-apps-catalog.json) · procédure : [procedure-apps-catalog.md](procedure-apps-catalog.md) - -| App réelle | ID CapsuleOS | Dash | Dock | -|---|---|---|---| -| Firefox | `firefox` | ✅ | ✅ | -| Fichiers (Nautilus) | `nemo` | ✅ | ✅ | -| GNOME Software | `update_manager` | ✅ | ✅ | -| Éditeur de texte | `text_editor` | ✅ | ✅ | -| Terminal (Ptyxis) | `terminal` | ✅ | ✅ | -| Paramètres | `themes` | overview | ✅ | -| LibreOffice Writer | `librewriter` | overview | ✅ | -| Calendrier | — | décoratif | — | -| Missions | `checklist` | — | ✅ | -| Calculatrice | `calculator` | overview | overview | -| Horloges | `clocks` | overview | overview | -| Calendrier | `calendar` | dash | overview | - -Skins utilitaires GNOME : `node usr/lib/capsuleos/tools/linux/sync-gnome-utility-app-skins.mjs`. - -Propagation CSS Nautilus vers Fedora/Ubuntu/Alma/AnduinOS : `node usr/lib/capsuleos/tools/linux/sync-gnome-nautilus-skin.mjs`. - -Propagation coque GNOME (`gnome-workstation.css`) depuis Rocky : `node usr/lib/capsuleos/tools/linux/sync-gnome-workstation-skin.mjs`. - -### AlmaLinux GNOME (`alma`) — dérivé Rocky - -| App réelle | ID CapsuleOS | Dash | Dock | -|---|---|---|---| -| Firefox | `firefox` | ✅ | ✅ | -| Fichiers (Nautilus) | `nemo` | ✅ | ✅ | -| GNOME Software | `update_manager` | ✅ | ✅ | -| Éditeur de texte | `text_editor` | ✅ | ✅ | -| Terminal (Ptyxis) | `terminal` | ✅ | ✅ | -| Paramètres | `themes` | overview | ✅ | -| LibreOffice Writer | `librewriter` | overview | ✅ | -| Missions | `checklist` | — | ✅ | - -Bootstrap skin : `node usr/lib/capsuleos/tools/linux/bootstrap-alma-from-rocky.mjs` · pack `vendors/alma/` (logo + panel). - -### Fedora Workstation (`fedora`) - -| App réelle | ID CapsuleOS | Dash | Dock | -|---|---|---|---| -| Firefox | `firefox` | ✅ | ✅ | -| Fichiers (Nautilus) | `nemo` | ✅ | ✅ | -| GNOME Software | `update_manager` | ✅ | ✅ | -| Éditeur de texte | `text_editor` | ✅ | ✅ | -| Terminal | `terminal` | ✅ | ✅ | -| Paramètres | `themes` | overview | ✅ | -| LibreOffice Writer | `librewriter` | overview | ✅ | -| Calendrier | — | décoratif | — | -| Missions | `checklist` | — | ✅ | - -### Pop!_OS COSMIC (`popos`) - -| App réelle | ID CapsuleOS | Dock | Grille Apps | -|---|---|---|---| -| Firefox | `firefox` | ✅ | ✅ | -| Fichiers COSMIC | `nemo` | ✅ | ✅ | -| Éditeur de texte COSMIC | `text_editor` | ✅ | ✅ | -| Terminal COSMIC | `terminal` | ✅ | ✅ | -| Pop!_Shop | `update_manager` | ✅ | ✅ | -| Paramètres COSMIC | `themes` | ✅ | ✅ | -| Lecteur multimédia | `lecteur_multimedia` | 🔶 | ✅ | - -### MX Linux KDE (`mxkde`) - -| App réelle | ID CapsuleOS | Panel | Menu | -|---|---|---|---| -| Dolphin | `nemo` | ✅ | ✅ | -| Firefox | `firefox` | ✅ | ✅ | -| Konsole | `terminal` | ✅ | ✅ | -| Writer | `librewriter` | ✅ | ✅ | -| System Settings | `themes` | ✅ | ✅ | -| MX Tools / Missions | `checklist` | ✅ | ✅ | -| Discover / installateur | `update_manager` | ✅ | ✅ | -| Kate / éditeur | `text_editor` | ⬜ | ✅ | - -### Debian KDE (`debian-kde`) - -| App réelle | ID CapsuleOS | Panel | Menu favoris | -|---|---|---|---| -| Dolphin | `nemo` | ✅ | ✅ | -| Firefox | `firefox` | ✅ | ✅ | -| Konsole | `terminal` | ✅ | ✅ | -| System Settings | `themes` | ✅ | ✅ | -| Discover | `update_manager` | ✅ | ✅ | -| Writer | `librewriter` | 🔶 | ✅ | -| Missions | `checklist` | 🔶 | ✅ (cat. Système) | - -### openSUSE Tumbleweed (`opensuse`) - -| App réelle | ID CapsuleOS | Panel | Menu | -|---|---|---|---| -| Dolphin | `nemo` | ✅ | ✅ | -| Firefox | `firefox` | ✅ | ✅ | -| Konsole | `terminal` | ✅ | ✅ | -| Discover | `update_manager` | ✅ | ✅ | -| Kate | `text_editor` | ✅ | ✅ | - -### AnduinOS (`anduinos`) - -| App réelle | ID CapsuleOS | Taskbar | Menu Démarrer | -|---|---|---|---| -| Firefox | `firefox` | ✅ | ✅ | -| Fichiers (Nautilus) | `nemo` | ✅ | ✅ | -| Logiciels | `update_manager` | ✅ | ✅ | -| Éditeur de texte | `text_editor` | ✅ | ✅ | -| Paramètres | `themes` | 🔶 | ✅ | -| Evince / Vidéos | `visionneur_pdf` / `lecteur_multimedia` | 🔶 | ✅ | -| Photos, Calculatrice, etc. | — | ⬜ | ⬜ | - ---- - -## Légende - -- **✅** branché et nommé correctement -- **🔶** slot moteur présent, pas épinglé au shell -- **⬜** listé décoratif ou absent — coquille ou app à créer - -## Fichiers de configuration menu - -| Skin | Fichier catalogue menu | -|---|---| -| Mint (défaut noyau) | `usr/lib/capsuleos/shells/linux/mainMenu-data.js` | -| MX-KDE | `home/Debian/MX-KDE/content/mainMenu-data.js` | -| Debian-KDE | `home/Debian/Debian-KDE/content/mainMenu-data.js` | -| openSUSE | `home/SUSE/openSUSE/content/mainMenu-data.js` | -| AnduinOS | `home/Debian/AnduinOS/content/mainMenu-data.js` (`ANDUIN_MENU_FAVORITES`) | -| Pop!_OS COSMIC | `home/Debian/PopOS/index.html` (grille `#cosmic-applications-grid`) | -| Fedora / Ubuntu | `index.html` (overview + dash / dock) | - -## Prochaines extensions (priorité) - -1. ~~**`text_editor`** — skins GNOME / KDE / COSMIC~~ (juin 2026) ; polish Kate/COSMIC P2 -2. ~~**`calculator`**, **`clocks`**, **`calendar`** — coquilles GNOME Rocky → dérivés~~ (juin 2026) -3. ~~**MX-KDE** — Discover → `update_manager_kde` (panel + menu)~~ (juin 2026) -4. ~~**openSUSE** — Kate → `text_editor` ; Discover panel cliquable~~ (juin 2026) - -## Build offline - -Après modification d’un gabarit ou d’un skin : - -```bash -node usr/lib/capsuleos/tools/generate-public-manifest.mjs -node usr/lib/capsuleos/tools/linux/build-linux-embed.mjs -``` diff --git a/root/docs/arborescence.md b/root/docs/arborescence.md deleted file mode 100755 index cacc8170..00000000 --- a/root/docs/arborescence.md +++ /dev/null @@ -1,42 +0,0 @@ -# Arborescence CapsuleOS (vue agent) - -Résumé pour naviguer le dépôt ; détail produit : [`README.md`](../../README.md). - -## Couches - -| Chemin | Rôle | -|--------|------| -| `index.html`, `sw.js`, `js/` | Portail, service worker | -| `OS/` | **Facades** stables (URLs, entrées bureaux) — pas de doc dev ici | -| `home/` | Skins par vendeur + **`home/public/`** (FS simulé partagé) | -| `usr/share/capsuleos/` | HTML/CSS apps, explorateurs, thèmes, branding, **`assets/`** (icônes système) | -| `usr/lib/capsuleos/` | JS shells, common, tools (build embed/manifest, **validate-capsule**) | -| `etc/capsuleos/` | **`os-registry.json`**, schémas `skin.profile`, exemples | -| `var/lib/capsuleos/generated/` | `capsule-app-embed.js`, `capsule-android-embed.js`, etc. | -| **`mnt/`** | **Modules pédagogiques montables** (débutant → cybertech) — [convention-modules-mnt.md](convention-modules-mnt.md) | -| `root/` | **Ce dossier** — skills et doc agents uniquement | -| [`contrib.md`](../../contrib.md) (racine) | Guide contributeur ; [§ toolkits Linux](../../contrib.md#bibliotheques-graphiques-linux-toolkits-gui) (GTK / Qt / Cinnamon / COSMIC) | -| `root/docs/manifeste-noyau.md` | Vision noyau, hydratation, assets | -| `root/docs/repertoire-os.md` | Catalogue OS (57 entrées) | -| `root/docs/scalabilite-noyau.md` | Stratégie scale statique | -| `root/docs/equipe-agentique.md` | Staffing agents | - -## Flux typique Linux - -1. Entrée : `OS/linux/families///index.html` (`` → `home///`). -2. Noyau : `usr/lib/capsuleos/common/` + `usr/lib/capsuleos/shells/linux/`. -3. Apps partagées : `usr/share/capsuleos/linux/apps/` + `style/*.base.css` / skins `home/.../style/apps/*.skin.css`. -4. Explorateur : gabarits `usr/share/capsuleos/linux/explorers/` ; données `home/public/` + manifestes JSON. -5. Offline : régénérer embed après changement gabarits/public — voir README racine dépôt. - -## `home/public/` - -Contenu pédagogique **commun** Linux / Windows / macOS. Manifestes : `.capsule-manifest.json`, `.capsule-finder-manifest.json`. Outil : `usr/lib/capsuleos/tools/generate-public-manifest.mjs`. - -## Tests locaux - -```bash -cd CapsuleOS && python3 -m http.server 8765 --bind 127.0.0.1 -``` - -(Depuis la racine workspace : chemin complet vers `CapsuleOS/`.) diff --git a/root/docs/architecture-catalogue-apps.md b/root/docs/architecture-catalogue-apps.md deleted file mode 100644 index da7b4638..00000000 --- a/root/docs/architecture-catalogue-apps.md +++ /dev/null @@ -1,151 +0,0 @@ -# Architecture catalogue apps — vérité unique - -**Statut** : juin 2026 — cycle architecture centralisée (contrats + générateur + gates). - -## Triple couche - -| Couche | Contrat | Rôle | -|--------|---------|------| -| **Fonction** | `slots-manifest.json` | Slot canonique, profondeur, kernel, variants toolkit | -| **Présentation** | `presentation-bindings.json` | bodyId, toolkit, StoreFront, locale par `registryId` | -| **Magasin** | `store-installable-apps.json` | Apps installables (`storeInstallable`) au-delà du ground truth VM | - -Couche dérivée runtime : `var/lib/capsuleos/generated/capsule-store-catalog.js` (généré, **pas** source de vérité). - -## StoreFront et resolveAppContext - -Chaque OS expose un **StoreFront** (slot UI du magasin natif) : - -| registryId | StoreFront slot | Label | Apps magasin | -|------------|-----------------|-------|--------------| -| linux-alma | `update_manager` | Logiciels | 11 | -| linux-rocky | `update_manager` | Logiciels | 11 | -| linux-fedora | `update_manager` | Logiciels | 11 | -| linux-ubuntu | `update_manager` | Centre d'applications | 11 | -| linux-popos | `update_manager` | Pop Shop | 11 | -| linux-anduinos | `update_manager` | Logiciels | 11 | -| linux-mint | `mintinstall` | Logithèque | 21 (actif) | -| linux-kde-neon | `update_manager` | Discover | 0 (deferred) | -| linux-opensuse | `update_manager` | Discover | 0 (deferred) | - -`resolveAppContext(registryId, slotId)` (via `capsule-app-resolver.mjs`) fusionne : - -1. `registryOverrides` VM (`apps-catalog.json`) -2. entrées `storeInstallable` du registry -3. variant toolkit depuis `slots-manifest` + `slotVariantOverrides` (`storeToolkit` pour cosmic → gnome) - -## Règle « nouvel OS = 4 fichiers seulement » - -Pour brancher un OS sans recopier `gnome-store-catalog.js` : - -1. `etc/capsuleos/profiles/.json` — profil skin -2. `apps-catalog.json` → `registryOverrides.` -3. `presentation-bindings.json` → entrée `bindings.` -4. `store-installable-apps.json` → `sources.` par slot (si extension magasin) - -Puis : `node usr/lib/capsuleos/tools/generate-store-catalog.mjs` - -## Prédicats - -### SlotF - -**SlotF(slot)** : le slot existe dans `slots-manifest.json` avec `functionalDepth` explicite et (`kernelModule` fichier présent **ou** `decorative` / `capsuleOnly`). - -Gate : `validate-slots-manifest.mjs` - -### StoreΣ - -**StoreΣ(registry)** : extension magasin structurellement cohérente pour un registry pilote. - -``` -StoreΣ(r) ≡ SlotF ∧ PresB(r) ∧ GenStore(r) ∧ StoreIntegrity -``` - -| Sous-prédicat | Signification | Gate | -|---------------|---------------|------| -| **PresB** | `presentation-bindings` actif dans os-registry | `validate-presentation-bindings.mjs` | -| **GenStore** | `capsule-store-catalog.js` à jour | `validate-store-catalog-generated.mjs` | -| **StoreIntegrity** | store ↔ slots ↔ toolkit variants | `validate-app-catalog-integrity.mjs` | - -Pilotes GNOME actifs : **11 apps** chacun (S1–S12 partagés Alma/Rocky/Fedora/Ubuntu/PopOS/AnduinOS). Ubuntu réutilise le gabarit `update_manager_gnome.html` (Option A) — singularité vendor limitée au StoreFront (`Centre d'applications`, sources snap/deb/flatpak) et au skin CSS `update_manager.skin.css`. - -KDE (`linux-kde-neon`, `linux-opensuse`) : `storeCatalogStatus: deferred` — catalogue généré vide, UI Discover sans grille store P1. - -Mint : `storeCatalogStatus: active` — catalogue généré (`capsule-store-catalog.js` → `mint-store-catalog.js`), fusion runtime dans `mintinstall.js` ; « À découvrir » via `getDiscoverApps()` (extensions `storeInstallable`), le reste = navigation VM. - -## Flux génération - -```mermaid -flowchart LR - subgraph contrats - SM[slots-manifest.json] - PB[presentation-bindings.json] - SI[store-installable-apps.json] - AC[apps-catalog.json] - end - GEN[generate-store-catalog.mjs] - OUT[capsule-store-catalog.js] - RT[gnome-store-catalog.js] - SM --> GEN - PB --> GEN - SI --> GEN - AC --> GEN - GEN --> OUT - OUT --> RT -``` - -## Bootstrap registryOverrides - -Pour tout `registryId` Linux actif sans bloc `registryOverrides` : - -```bash -# Mint — catalogue alphabétique VM (toutes apps ok) -node usr/lib/capsuleos/tools/lab/generate-mint-registry-overrides.mjs --write - -# GNOME / COSMIC / KDE — scan skin + magasin -node usr/lib/capsuleos/tools/lab/generate-registry-overrides.mjs --id --write - -# AnduinOS — dérivé Ubuntu + extensions store -node usr/lib/capsuleos/tools/lab/generate-registry-overrides.mjs --id linux-anduinos --write -``` - -Puis : - -```bash -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id -node usr/lib/capsuleos/tools/validate-app-catalog-integrity.mjs -``` - -Cinnamon (`linux-mint`) : l'audit overview GNOME est ignoré (toolkit dédié). KDE : pas de grille overview GNOME — contrôle structurel uniquement. - -## Outils - -| Outil | Usage | -|-------|-------| -| `capsule-app-resolver.mjs` | `resolveSlotManifest`, `resolveStoreEntries`, `resolvePresentation`, `resolveStoreToolkit` | -| `generate-store-catalog.mjs` | Régénère le catalogue runtime | -| `generate-mint-registry-overrides.mjs` | Bootstrap `registryOverrides.linux-mint` depuis `linux-mint-apps-catalog.json` | -| `generate-registry-overrides.mjs` | Bootstrap unifié `--id ` (skin + store) | -| `generate-registry-overrides-from-skin.mjs` | Bibliothèque scan `data-link` / dock COSMIC / taskbar KDE | -| `audit-gnome-overview-scenarios.mjs` | Smoke `buildCatalog` sans throw (GNOME/COSMIC) | -| `validate-app-catalog-integrity.mjs` | Gate agrégateur StoreΣ — tous OS Linux actifs | - -## Références - -- [analyse-magasins-apps-cross-os.md](analyse-magasins-apps-cross-os.md) -- [procedure-apps-catalog.md](procedure-apps-catalog.md) -- [convention-contrib-apps.md](convention-contrib-apps.md) — packages contrib + internet simulé -- [logique-formelle.md](logique-formelle.md) §2.9b StoreΣ - -## Couche contrib (apps transversales + web simulé) - -Quatrième couche **Z1** complémentaire au triple couche catalogue : - -| Couche | Contrat / chemin | Rôle | -|--------|------------------|------| -| **Contrib app** | `usr/share/capsuleos/contrib/{cat}/{vendor}/{app}/manifest.json` | Données app (favoris, moteur recherche) — **slotId** existant | -| **Web simulé** | `usr/share/capsuleos/web/{siteId}/` + `simulated-web-index.json` | Corpus offline-first, résolu par `simulatedWebResolver.js` | -| **Kernel** | inchangé (`slots-manifest` + `firefoxBrowser.js`) | Pas de hardcode host dans le kernel | -| **Slot Firefox** | `usr/share/capsuleos/linux/apps/firefox.html` + `firefox-proton.base.css` | Gabarit Proton **unique** — voir [convention-contrib-apps.md §8](convention-contrib-apps.md#8-firefox--slot-partagé-toutes-distributions) | - -Gates : `validate-contrib-packages.mjs` · `validate-simulated-web.mjs` · `build-simulated-web-index.mjs` → `capsule-simulated-web-index.js`. diff --git a/root/docs/architecture-globale.md b/root/docs/architecture-globale.md deleted file mode 100755 index 516e277e..00000000 --- a/root/docs/architecture-globale.md +++ /dev/null @@ -1,97 +0,0 @@ -# Architecture globale CapsuleOS - -Vue d’ensemble du dépôt pour agents et contributeurs. Complète [arborescence.md](arborescence.md) (navigation) et [manifeste-noyau.md](manifeste-noyau.md) (principes). - -## Modèle mental - -CapsuleOS est un **rootfs web statique** : pas de SPA imposée, pas de npm en production. Une **vérité machine-lisible** (`etc/capsuleos/`) projette des façades URL (`OS/`), des skins pédagogiques (`home/`) et des packs visuels (`usr/share/capsuleos/assets/`). - -``` - ┌─────────────────────────────────────┐ - │ etc/capsuleos/ (vérité catalogue) │ - │ os-registry.json · skin.profile │ - │ profiles/*.json · contracts/*.json │ - └──────────────┬──────────────────────┘ - │ hydrate / valide - ┌─────────────────────────┼─────────────────────────┐ - ▼ ▼ ▼ - OS// home// usr/share/capsuleos/ - façades index.html miroirs skins apps, themes, assets/ - │ │ │ - └──────────── boot ───────┴── capsule-resource.js ─┘ - │ - usr/lib/capsuleos/ (noyau JS) - common/ · shells/ · tools/ - │ - var/lib/capsuleos/generated/ (embeds offline) -``` - -## Couches et responsabilités - -| Couche | Chemin | Rôle | -|--------|--------|------| -| **Portail** | `index.html`, `js/`, `sw.js` | Entrée utilisateur, service worker | -| **Registre** | `etc/capsuleos/os-registry.json` | Catalogue OS (id, tier, status, façade, toolkit, vendor) | -| **Profils boot** | `etc/capsuleos/profiles/*.json`, `skin.profile.json` | `assetsBase`, `toolkitPack`, scripts shell, `CAPSULE_WINDOW_CONTEXT` | -| **Façades** | `OS//.../index.html` | URLs stables ; **pas de README dev** sous `OS/` | -| **Skins** | `home//` | Miroir pédagogique ; `home/public/` = FS simulé partagé | -| **Assets** | `usr/share/capsuleos/assets/` | Icônes, toolkits, vendors — voir [politique-assets.md](politique-assets.md) | -| **Noyau JS** | `usr/lib/capsuleos/common/`, `shells/` | Fenêtres, contentLoader, explorateurs, résolution chemins | -| **Apps / thèmes** | `usr/share/capsuleos/linux/apps/`, `themes/` | Gabarits HTML, `.base.css`, tokens CSS | -| **Généré** | `var/lib/capsuleos/generated/` | Embeds (`build-linux-embed.mjs`, etc.) — ne pas éditer à la main | -| **Outils** | `usr/lib/capsuleos/tools/` | Build, validate-all, seed skills | -| **Agents** | `root/` | Skills Cursor + docs (ce dossier) | - -## Fichiers source de vérité - -| Fichier | Contenu | -|---------|---------| -| [`etc/capsuleos/os-registry.json`](../../etc/capsuleos/os-registry.json) | Entrées catalogue, statut, façade, toolkit, vendor | -| [`usr/share/capsuleos/assets/manifest.json`](../../usr/share/capsuleos/assets/manifest.json) | Bases `CAPSULE_*`, alias chemins assets | -| `home/**/skin.profile.json` | Profil par skin (miroir registre + scripts boot) | -| [`etc/capsuleos/contracts/desktop-selectors.json`](../../etc/capsuleos/contracts/desktop-selectors.json) | IDs DOM contractuels (Nemo, chrome) | -| [`etc/capsuleos/contracts/css-variable-sources.json`](../../etc/capsuleos/contracts/css-variable-sources.json) | Chaîne de définition `var(--*)` | - -## Flux boot Linux (résumé) - -1. `index.html` façade : `capsule-resource.js` → `capsule-skin-boot.js` → scripts profil. -2. `CapsuleResource` résout `./assets/...` vers `usr/share/capsuleos/assets/`. -3. `contentLoader` injecte apps dans slots `data-link`. -4. `CapsuleWindow` + profil `CAPSULE_WINDOW_CONTEXT` (regen : `build-skin-profiles.mjs`). - -Détail : [manifeste-noyau.md](manifeste-noyau.md) · [raccordement-noyau-os.md](raccordement-noyau-os.md) · [convention-contexte-fenetres.md](convention-contexte-fenetres.md). - -## Scalabilité (distro / vendor / version) - -- **Toolkit** partagé (`assets/images/toolkits/{cinnamon|kde|gnome|cosmic|…}`) — pas de fork `contentLoader`. -- **Vendor** = pack `assets/images/vendors//`. -- **Nouvelle version** = souvent nouvelle entrée registre, même toolkit. - -Procédure : [ajouter-os-scalable.md](ajouter-os-scalable.md) · catalogue : [repertoire-os.md](repertoire-os.md). - -## Qualité et gates - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -Enchaîne assets, liens, capsule (registre + façades), quality (JSON + ES6 strict + contrats UI). Détail : [contrib.md](../../contrib.md) · [passe-vanilla-json.md](passe-vanilla-json.md). - -## Skills agents (routage) - -| Besoin | Skill / doc | -|--------|-------------| -| Première intervention | [`onboarding`](../skills/onboarding/SKILL.md) (H0–H6 + routage famille OS) | -| Contrats bureau / fenêtres | [`ui-contracts`](../skills/ui-contracts/SKILL.md) | -| Famille OS | `os-linux`, `os-windows`, … | -| Vendor / distro / version | `capsuleos-vendor-*`, `capsuleos-distro-*`, `capsuleos-version-*` | -| Assets / noyau | `kernel-supervisor`, `kernel-guardian`, `asset-pipeline` | - -Hiérarchie : [skills-hierarchie.md](skills-hierarchie.md) · staffing : [equipe-agentique.md](equipe-agentique.md). - -## Liens utiles - -- [parcours-agent.md](parcours-agent.md) — formation H0→H6 -- [scalabilite-noyau.md](scalabilite-noyau.md) — stratégie scale statique -- [contrats-ui-bureau.md](contrats-ui-bureau.md) — gates UI bureau -- [contrib.md § toolkits](../../contrib.md#bibliotheques-graphiques-linux-toolkits-gui) — bureaux Linux simulés diff --git a/root/docs/audit-conformite-normes.md b/root/docs/audit-conformite-normes.md deleted file mode 100644 index 3ac4bf93..00000000 --- a/root/docs/audit-conformite-normes.md +++ /dev/null @@ -1,37 +0,0 @@ -# Audit conformité normes — CapsuleOS - -> **Statut** : suivi des normes prioritaires (schema.org, OWASP, REUSE 3, WCAG 2.2 P10). -> **Clôture release** : `node usr/lib/capsuleos/tools/validate-all.mjs` (**H₆**). - -| Norme | Gate / artefact | Statut | Prochaine étape | -|-------|-----------------|--------|-----------------| -| **schema.org** | `build-schema-org.mjs` · `validate-schema-org.mjs` · JSON-LD hubs `index.html`, `OS/linux/index.html`, `mnt/index.html` | **OK** | Hubs Android/macOS optionnels si entrées actives | -| **OWASP Top 10** | `validate-owasp-static.mjs` · contrat `owasp-htaccess.json` · matrice [SECURITY.md](../SECURITY.md) | **OK** | Smoke curl prod via workflow `owasp-smoke.yml` (opt-in URL) | -| **REUSE 3** | `validate-reuse.mjs` (rapide) · `validate-reuse-full.mjs` + `run-reuse-lint.mjs` · [LICENSE.md](../LICENSE.md) | **OK** | Étendre SPDX explicite aux tools restants | -| **WCAG 2.2 AA (P10)** | `validate-a11y.mjs` · `a11y-scan-targets.json` · rapport `var/lib/capsuleos/generated/a11y-report.json` · `#accessibilite` portail | **OK** | Corriger avertissements moderate/minor au fil de l'eau | - -## Commandes par norme - -```bash -# schema.org -node usr/lib/capsuleos/tools/build-schema-org.mjs -node usr/lib/capsuleos/tools/validate-schema-org.mjs - -# OWASP (.htaccess statique) -node usr/lib/capsuleos/tools/validate-owasp-static.mjs - -# REUSE 3 -node usr/lib/capsuleos/tools/validate-reuse-full.mjs - -# WCAG 2.2 (P10 opt-in — npm ci + Playwright requis) -node usr/lib/capsuleos/tools/validate-a11y.mjs -CAPSULE_HTTP_BASE=http://127.0.0.1:9876 node usr/lib/capsuleos/tools/lab/smoke-a11y-portal.mjs -``` - -## Références - -- [convention-schema-org.md](convention-schema-org.md) -- [SECURITY.md](../SECURITY.md) § OWASP -- [LICENSE.md](../LICENSE.md) § REUSE / assets tiers -- [agent-validation-discipline.md](agent-validation-discipline.md) § Portail / a11y -- [fondements-philosophiques.md](fondements-philosophiques.md) §5.1 **P10** diff --git a/root/docs/audit-processus-campagnes-2026-06.md b/root/docs/audit-processus-campagnes-2026-06.md deleted file mode 100644 index 3844f73d..00000000 --- a/root/docs/audit-processus-campagnes-2026-06.md +++ /dev/null @@ -1,143 +0,0 @@ -# Audit processus et campagnes — CapsuleOS (juin 2026) - -> **Complète** : [audit-structure-depot-2026-06.md](audit-structure-depot-2026-06.md) · [convention-raisonnement-inductif-deductif.md](convention-raisonnement-inductif-deductif.md) - ---- - -## 1. Orchestrateurs — carte des conflits - -| Point d'entrée | Scope | Rôle | -|----------------|-------|------| -| `run-capsule-pipeline.mjs` | pipeline | Couches DAG §5.2 — **entrée unique cible** | -| `resolve-agent-action.mjs` | pipeline / formal / general / replication | Résolution R-AUTO | -| `run-formal-chain.mjs` | formal | R-H1…R-MAN*, R-APP*, R-PB4 | -| `run-playbook-general.mjs` | general | PbU→PbT→Pbτ | -| `run-replication-chain.mjs` | replication | Paramètres GNOME V→Vp | -| `run-manifest-replication-chain.mjs` | manifest | ManΣ | -| `run-apps-lab.mjs` | ad hoc | AppL — smokes Rocky hardcodés | -| `run-agent-auto.mjs` | repli | Enchaîne scopes | - -**Conflit documenté** : pipeline couche `apps` avant `release` (H6) ; formal **R-APP-LAB** exige `gates.H6` → résolu par scission AppΣ / AppVp (§4). - -**Conflit store** : couche `store` déclarée sans `defaultCommand` ni R-STORE-* → **corrigé** juin 2026 (`store-replication-lib`, `run-store-replication-chain`). - ---- - -## 2. Tests `resolve-agent-action` (juin 2026) - -| registryId | pipeline (première action) | formal (première action) | Écart | -|------------|---------------------------|--------------------------|-------| -| linux-rocky | R-MAN3 ManA humain | R-MAN3 idem | Aligné | -| linux-fedora | store StoreG/Σ/Vp | R-A1 assets | Pipeline avance store ; formal socle assets | -| linux-alma | R-H1 ¬H₂ (état stale H2) | R-H1 idem | Aligné | -| linux-ubuntu | store incomplet | R-A1 assets | Idem Fedora | -| linux-mint | R-H1 | R-H1 | Cinnamon — pas storeCampaign | -| linux-anduinos | R-H1 | R-H1 | VM absente — prédicats vides | -| linux-kde-neon | R-H1 | R-H1 | KDE — store N/A | -| linux-opensuse | R-H1 | R-H1 | Idem | -| linux-popos | R-H1 | R-H1 | cosmic stub | - -**Note** : `H2: false` sur Alma/Mint dans formal-state alors que `validate-all` vert — gate H2 à rafraîchir via `run-formal-chain` après patch. - ---- - -## 3. Recettes par famille - -| Famille | Contrat recette | Runtime | Problème | -|---------|-----------------|---------|----------| -| GNOME | `lab-recipe-profiles` + CR OsRepro | pipeline + store chain | campaignPhases étaient mortes → **câblées** | -| GNOME settings | `replication-chain.json` | `run-replication-chain` | OK | -| Apps | `apps-replication-chain.json` | formal R-APP-* | H6 vs pipeline → scission | -| Store | `store-replication-chain.json` | `run-store-replication-chain` | **nouveau** | -| Mint | `skin-toolkit-recipe` + cinnamon chain | partiel | smokes P4 ad hoc | -| KDE | `kde-ground-truth-chain` | stub | ManΣ absent | - ---- - -## 4. État campagne — sources de vérité - -| Pattern | Count | Statut | -|---------|-------|--------| -| `*-pipeline-resolve.json` | 8 versionnés | **À purger** — gitignore existe | -| `*-formal-state.json` | 5 | Persisté OK | -| `*-replication-state.json` | 8+ | Domaine settings/apps | -| `*-store-replication-state.json` | nouveau | Domaine store | -| `avancement-formel-*.md/json` | généré | Tableau de bord cible | - -**Décision D4** : `generate-formal-advancement-report.mjs --write` = vue agrégée ; `*-resolve.json` strictement éphémères. - ---- - -## 5. Synthèse inductive — cas → patterns - -| Cas | Pattern | -|-----|---------| -| Rocky R-MAN3 | Gate humaine bloque spine sans régression skin | -| Fedora StoreVp partial | Ground OK, parité incomplète — induction VM store à poursuivre | -| Alma drift playbook | Contenu Z0/proc dérive malgré H6 | -| Ubuntu grille avant assets | M≠E ontologique | -| run-apps-lab Rocky-only | Tooling vendor-centrique | -| 7 orchestrateurs | Priorités contradictoires | -| campaignPhases mortes | Contrat sans runtime | -| Mint Π sans Playwright | Dette invisible | -| Double validateurs assets | Tooling redondant | - ---- - -## 6. Hypothèses H1–H6 — verdict audit - -| Id | Hypothèse | Verdict | Action | -|----|-----------|---------|--------| -| **H1** | Tout step chaîne a script + règle | **Validée** (post-gate étendu) | `validate-os-reproduction-coherence` | -| **H2** | Ordre pipeline ≠ formal apps/H6 | **Validée** → **corrigée** | Scission AppΣ / AppVp ; R-APP-STRUCT sans H6 | -| **H3** | campaignPhases exécutables | **Validée** (post-câblage) | `loadCampaignPhases` + store chain | -| **H4** | Store branché runtime | **Validée** (post-câblage) | `store-replication-lib` + R-STORE-* | -| **H5** | resolve.json éphémères | **Validée** | purge + gitignore | -| **H6** | Deux modèles recette | **Partielle** | `recipeProfileId` — backlog liaison skin-toolkit | - ---- - -## 7. Décisions architecture (juin 2026) - -### D1 — Ordre apps / H6 - -- **AppΣ structurel** (AppV ∧ AppC ∧ AppP0 ∧ AppL) : couche pipeline `apps` — **avant H6** -- **AppVp parité** : nouvelle couche `apps-parity` — **après H6** -- Règles formal **R-APP-VV/VC/VP** : conservent `gates.H6` -- Règles **R-APP2-STRUCT**, **R-APP-LAB-STRUCT** : `ManΣ ∧ …` sans H6 - -### D2 — campaignPhases - -Lues depuis `lab-recipe-profiles.profiles[id].storeCampaign.campaignPhases` ; filtrent steps store et phases CR OsRepro. - -| registryId | Phases actives | -|------------|----------------| -| linux-fedora | CR-0…CR-6 | -| linux-rocky | CR-0, CR-3, CR-5, CR-6 | -| linux-alma, linux-anduinos | CR-0, CR-5, CR-6 | - -### D3 — Chaînes domaine = bibliothèques - -Agent unique : `--scope pipeline`. Chaînes invoquées par `run-*-replication-chain.mjs`, pas en parallèle concurrent. - -### D4 — État campagne - -Rapport formel généré ; resolve.json purgés du dépôt versionné. - -### D5 — Store ground - -`groundReferenceRegistryId: linux-fedora` ; dérivés héritent `byRegistry` — pas d'inventaire VM ground sur Rocky (gel ManA). - ---- - -## 8. Go/no-go store Fedora (post-implémentation) - -| Critère | Statut | -|---------|--------| -| Audits publiés | ✅ | -| Hypothèses tranchées | ✅ | -| `run-store-replication-chain.mjs` | ✅ | -| Pipeline store sans undefined | ✅ | -| H₂ | ✅ validate-all | - -**Suite** : `run-store-replication-chain.mjs --id linux-fedora --auto` pour fermer StoreVp (partial → ok). diff --git a/root/docs/audit-structure-depot-2026-06.md b/root/docs/audit-structure-depot-2026-06.md deleted file mode 100644 index b97c6e18..00000000 --- a/root/docs/audit-structure-depot-2026-06.md +++ /dev/null @@ -1,101 +0,0 @@ -# Audit structure — dépôt CapsuleOS (juin 2026) - -> **Périmètre** : dépôt entier · **Référence** : [convention-taxonomie-semantique.md](convention-taxonomie-semantique.md) · [convention-raisonnement-inductif-deductif.md](convention-raisonnement-inductif-deductif.md) - ---- - -## 1. Flux zones Z0→Z4 - -```text -Z0 contrats/proc → Z1 usr/lib + usr/share → Z2 home/ → Z3 OS/.../index.html → Z4 var/lib/generated -``` - -| Zone | Chemins | État audit | -|------|---------|------------| -| **Z0** | `etc/capsuleos/contracts/` (56 JSON), `proc/linux-*/` | Cohérent ; OsRepro + 7 chaînes replication | -| **Z1** | `usr/lib/capsuleos/`, `usr/share/capsuleos/` | Canon ; ground store (`gnome-software-ground.js`) | -| **Z2** | `home/RedHat|Debian|SUSE/...` | 11 skins bureau actifs ; Rocky gel ManA | -| **Z3** | `OS/linux/families/*/index.html` (seul fichier par façade) | Généré ; `` → `home/` ; gate `validate-linux-facades.mjs` | -| **Z4** | `var/lib/capsuleos/generated/` | 8 artefacts ; régénérer via build/sync | - -**Interdit confirmé** : logique commune dans `home/` — noyau `usr/lib` (P12). - ---- - -## 2. Dette chemins - -| Signal | Détail | Cible | -|--------|--------|-------| -| Legacy apps | ~~`OS/linux/shared/apps/`~~ → purgé ; canon `usr/share/capsuleos/linux/apps/` | `purge-repo-hygiene.mjs` | -| Legacy kernel | ~~`OS/linux/kernel/js/`~~ → purgé ; canon `usr/lib/capsuleos/shells/linux/` | `purge-repo-hygiene.mjs` | -| Dual lab | `root/tools/lab/` (83 fichiers shell/matrices) + `usr/lib/.../lab/` (~250 Node) | Split intentionnel ; matrices vendor par distro | -| Dual façade | `home/*/index.html` + `OS/.../index.html` uniquement | sync-linux-skin-closure · orphelins Z3 interdits | -| Assets vendor | Doc `vendors/` vs réalité `usr/share/capsuleos/assets/images/vendors/` | Convention assets à jour | - ---- - -## 3. Taxonomie contrats (10 familles) - -| Famille | N | Orchestrateur principal | -|---------|---|-------------------------| -| Orchestration | 5 | `run-capsule-pipeline.mjs` | -| Chaînes replication | 7 | `run-*-replication-chain.mjs` | -| Catalogue / slots | 5 | `generate-*-catalog.mjs` | -| UI / chrome | 8 | `validate-ui-contracts-all.mjs` | -| Scénarios GNOME | 17 | `validate-gnome-user-scenarios-all.mjs` | -| Terminal | 4 | `validate-terminal-commands.mjs` | -| Playbook général | 1 | `run-playbook-general.mjs` | -| VM / fidélité | 6 | collectors lab | -| Pédagogie / locale | 2 | `validate-pedagogical-modules.mjs` | -| OsRepro / cohérence | 2 | `validate-os-reproduction-coherence.mjs` | - -**Spine** : `os-reproduction-coherence.json` lie pipeline, apps, store, lab-recipe, slots, store-content. - ---- - -## 4. Surface tooling - -| Catégorie | Volume | -|-----------|--------| -| Validateurs `validate-*.mjs` | 75 | -| Smokes `smoke-*.mjs` | 107 | -| Orchestrateurs lab `run-*.mjs` | 26 | -| États `*-formal-state.json` | 5 persistés | - -**Pyramide H₂** : `validate-all` → assets + links + capsule + quality (dont OsRepro + ui-contracts). - -**Redondance** : `validate-css-asset-urls` et `audit-asset-paths` dans assets-all ET links-all (double exécution). - ---- - -## 5. Corpus `root/docs/` - -| Tier | Rôle | Exemples | -|------|------|----------| -| Canon §3.1 | Lire avant écrire | fondements, taxonomie, logique-formelle, reproduction-parfaite | -| Procédures | Exécuter campagnes | procedure-*-replication-formelle | -| État | Générer, ne pas éditer | `inventaires/*.json`, `avancement-formel-*.md` | -| Secondaire | Ne pas prioriser | `roadmap.md`, `*-roadmap*.md` | - -**Dette** : MD parité parallèles aux JSON inventaires (~240 fichiers inventaires). - ---- - -## 6. Familles OS (structure campagne) - -| Famille | Z0 chaîne | Profil recette | VM lab | -|---------|-----------|----------------|--------| -| GNOME triplet | replication + apps + store + OsRepro | `lab-recipe-profiles` | Rocky, Fedora, Alma, Ubuntu | -| Mint Cinnamon | `cinnamon-ground-truth-chain` | `skin-toolkit-recipe` | Mint | -| KDE | `kde-ground-truth-chain` | partiel | KDE-neon, openSUSE | -| Windows/macOS/mobile | proc/ sans manifeste VM | modèle distinct | N/A | - ---- - -## 7. Synthèse structurelle - -**Points forts** : zones Z0–Z4 documentées ; 56 contrats ; pipeline unifié déclaré ; OsRepro inscrit. - -**Points faibles** : contrats store/CR sans runtime complet (corrigé Phase 5 plan) ; état campagne éclaté ; tooling vendor-centrique (Rocky) ; deux vocabulaires recette (lab-recipe vs skin-toolkit-recipe). - -Voir [audit-processus-campagnes-2026-06.md](audit-processus-campagnes-2026-06.md) pour orchestration et hypothèses H1–H6. diff --git a/root/docs/branche-plasma-kde.md b/root/docs/branche-plasma-kde.md deleted file mode 100644 index e02f9721..00000000 --- a/root/docs/branche-plasma-kde.md +++ /dev/null @@ -1,166 +0,0 @@ -# Branche Plasma · toolkit KDE — référence CapsuleOS - -> **Modèle ground truth** : VM KDE neon User Edition (Plasma Wayland) · **Skin canonique** : `home/Debian/KDE-Neon/` · **Registre** : `linux-kde-neon`. - -Ce document fixe la **cartographie conceptuelle**, la **confrontation avec le KDE HIG**, le **découpage design** et les **règles de dérivation** pour toute entrée toolkit `kde` / cluster `toolkit.kde`. - -**Documents opérationnels liés** : - -| Document | Rôle | -|----------|------| -| [reference-kde-expert.md](reference-kde-expert.md) | Synthèse pile Plasma, Breeze, slots | -| [kde-hig-ressources.md](kde-hig-ressources.md) | Catalogue HIG officiel (22 pages) | -| [inventaire-parite-neon.md](inventaire-parite-neon.md) | Écarts classés P0/P1/P2 | -| [inventaires/linux-kde-neon-vm.json](inventaires/linux-kde-neon-vm.json) | Inventaire machine-readable | -| [inventaires/linux-kde-neon-roadmap.md](inventaires/linux-kde-neon-roadmap.md) | **Roadmap complète v3** (palliers, maturité, outils) | -| [inventaires/linux-kde-neon-repair-checklist.md](inventaires/linux-kde-neon-repair-checklist.md) | Historique réparation v1 + campagne v2 | -| [inventaires/linux-kde-neon-discover-closure.md](inventaires/linux-kde-neon-discover-closure.md) | Clôture Discover | -| [inventaires/linux-kde-neon-kickoff-closure.md](inventaires/linux-kde-neon-kickoff-closure.md) | Clôture Kickoff | -| [inventaires/linux-kde-neon-panel-tray-closure.md](inventaires/linux-kde-neon-panel-tray-closure.md) | Clôture panel + tray | -| [inventaires/linux-opensuse-repair-checklist.md](inventaires/linux-opensuse-repair-checklist.md) | Modèle Plasma partagé openSUSE | - ---- - -## 1. Positionnement dans CapsuleOS - -### 1.1 Hiérarchie branche Plasma - -```mermaid -flowchart TB - subgraph ref [Reference operationnelle] - NEON["linux-kde-neon skin canonique"] - end - subgraph registry [Registre upstreamId null] - DEBKDE["linux-debian-kde"] - OSS["linux-opensuse P1"] - end - subgraph deriv [Derives] - MX["linux-mx-kde"] - end - NEON --> DEBKDE - DEBKDE --> MX - OSS -.->|"toolkit.kde partage"| NEON -``` - -| Entrée | Rôle | Skin | Notes | -|--------|------|------|-------| -| `linux-kde-neon` | **Référence opérationnelle** (ground truth VM lab) | `home/Debian/KDE-Neon/` | Discover, Kickoff, panel clôturés juin 2026 | -| `linux-debian-kde` | Référence registre (`upstreamId: null`) | `home/Debian/Debian-KDE/` | Base théorique debian + Plasma | -| `linux-opensuse` | P1 active, Plasma mature | `home/SUSE/openSUSE/` | `upstreamId: null` — coque Plasma partagée | -| `linux-mx-kde` | Dérivé | `home/Debian/MX-KDE/` | `upstreamId: linux-debian-kde` | - -**Règle** : toute évolution structurelle Plasma (panel, Kickoff, tray, tokens Breeze) se fait d’abord sur **KDE Neon**, puis propagation vers openSUSE / MX / Debian-KDE. - -**Note registre** : `linux-kde-neon` déclare `upstreamId: linux-debian-kde` dans `os-registry.json`, mais le **skin le plus avancé** et la **VM lab** pointent vers Neon — c’est la vérité opérationnelle pour les agents. - -### 1.2 Analogie Rocky GNOME / Neon Plasma - -| Dimension | Rocky (GNOME) | KDE neon (Plasma) | -|-----------|---------------|-------------------| -| Référence skin | `home/RedHat/Rocky/` | `home/Debian/KDE-Neon/` | -| Explorateur VM | Nautilus | **Dolphin** | -| Slot CapsuleOS | `nemo` (template `nemo-gnome`) | `nemo` (template **`dolphin`**) | -| Shell | Top bar + Aperçu (pas de dock RHEL) | **Panel bas** permanent + Kickoff | -| MAJ / store | GNOME Software | **Discover** (Kirigami) | -| HIG skill | `gnome-hig-replication` | **`kde-hig-replication`** | -| Doc branche | [branche-redhat-gnome.md](branche-redhat-gnome.md) | Ce document | - ---- - -## 2. Ground truth VM KDE neon - -### 2.1 Stack observée (juin 2026) - -| Couche | VM | CapsuleOS | -|--------|-----|-----------| -| Distribution | KDE neon User Edition **24.04** noble | `linux-kde-neon` | -| Session | **Plasma Wayland** | `body#kde-neon`, profil `etc/capsuleos/profiles/linux-kde-neon.json` | -| Icônes / style | **Breeze** | Assets `toolkits/kde/` + `vendors/neon/` | -| Accent Discover | `#3daee9` | `update_manager.skin.css` | -| Fond | Wallpaper « Next » | `vendors/neon/wallpaper/neon-default.png` | -| Fichiers | **Dolphin** | Slot `nemo`, template `dolphin` — **P0** | -| Logiciels | **Discover 6.6.5** | `update_manager_kde_neon.html` — clôturé | -| Terminal | **Konsole** | Slot `terminal` | - -Viewport lab cible : **1211×756** (captures `screen_KDE-Neon/`). - -### 2.2 Panel Plasma (ordre tray VM) - -Ordre observé (juin 2026) : notifications → MAJ → clipboard → luminosité → réseau → volume → expand → horloge → show-desktop. - -Implémentation : [`tray-popover-kde.js`](../../home/Debian/KDE-Neon/js/tray-popover-kde.js), icônes `toolkits/kde/panel/tray/`. - ---- - -## 3. Confrontation documentation officielle - -### 3.1 KDE HIG - -Source : [develop.kde.org/hig](https://develop.kde.org/hig/) · catalogue : [kde-hig-ressources.md](kde-hig-ressources.md) - -| Domaine HIG | Application CapsuleOS | -|-------------|----------------------| -| Icons symbolic vs color | Tray 22 px, Kickoff actions/22, apps 32 px+ | -| Layout and navigation | Sidebar Discover, navigation Dolphin | -| Displaying content | Grilles Discover, vues Dolphin | -| Simple by default | Kickoff épuré, pas de surcharge panel | -| Accessibility | Contraste thème clair/sombre Breeze | - -**Limite** : le HIG ne couvre pas tout le **Plasma Shell** — panel, Kickoff et widgets s’appuient sur captures VM + patterns openSUSE partagés. - -### 3.2 Kirigami (Discover) - -Discover 6 utilise **Kirigami** (sidebar + pages empilées). Référence technique : https://develop.kde.org/docs/plasma/kirigami/ - -CapsuleOS reproduit le chrome visuel via HTML/CSS (`update_manager_kde_neon.html`, `discover-neon.js`) sans moteur QML. - ---- - -## 4. Dérivation vers autres distros KDE - -| Cible | Propagation depuis Neon | Spécificités vendor | -|-------|-------------------------|---------------------| -| `linux-opensuse` | Panel Plasma, Kickoff, `plasma-panel-mode.js` | Geeko launcher, profil `suse.js` | -| `linux-mx-kde` | Coque Plasma | Pack MX, `mainMenu-kde-chrome.js` | -| `linux-debian-kde` | Tokens Breeze de base | Branding Debian | - -Pas de script `sync-kde-*-skin.mjs` généralisé en v1 — propagation manuelle documentée jusqu’à outillage dédié. - ---- - -| **P0** | Fondations | Inventaire VM, indice Π, interactions JSON complètes | 4–8 h | -| **P1** | Shell + assets | Panel compare, kickoff Vp, audit `./assets/`, Firefox VM | 8–16 h | -| **P2** | Apps profondes | Dolphin §9, Discover filtres, tray dynamique, Konsole | 12–25 h | -| **P3** | Catalogue | 30 apps kickoff avec slots | 15–30 h | -| **P4** | Propagation | openSUSE, MX-KDE, Debian-KDE | 8–15 h | -| **P5** | Clôture P1 | tier P1, H₆ v3, maturité ≥ 90 % | 4–10 h | - -Source détaillée : [linux-kde-neon-roadmap.md](linux-kde-neon-roadmap.md). - ---- - -## 6. Évolutions futures (hors scope v1) - -- Skill `design-shell-plasma` dédié (équivalent `design-shell-layout` GNOME). -- Smoke Playwright KDE Neon généralisé (`smoke-kde-neon-shell-polish.mjs`). -- Crawl automatique du dépôt Markdown HIG sur invent.kde.org. -- Script propagation Neon → openSUSE / MX / Debian-KDE. - ---- - -## 7. Gates et captures - -```bash -# VM -bash root/tools/lab/vm-kde-neon-capture-host.sh - -# CapsuleOS -python3 -m http.server 5500 --bind 127.0.0.1 -node root/tools/lab/capture-capsule-kde-neon.mjs - -# Validation -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -Skill agent HIG : [`kde-hig-replication`](../skills/kde-hig-replication/SKILL.md). diff --git a/root/docs/branche-redhat-gnome.md b/root/docs/branche-redhat-gnome.md deleted file mode 100644 index 4ad44649..00000000 --- a/root/docs/branche-redhat-gnome.md +++ /dev/null @@ -1,288 +0,0 @@ -# Branche Red Hat · toolkit GNOME — référence CapsuleOS - -> **Modèle ground truth** : VM Rocky Linux 10 GNOME (Wayland) · **Skin canonique** : `home/RedHat/Rocky/` · **Registre** : `linux-rocky` (`upstreamId: null`). - -Ce document fixe la **cartographie conceptuelle**, la **confrontation avec la documentation officielle**, le **découpage design précis** et les **règles de dérivation** pour toute entrée de la branche RHEL sous GNOME. - -**Documents opérationnels liés** : - -| Document | Rôle | -|----------|------| -| [reference-gnome-expert.md](reference-gnome-expert.md) | Synthèse expertise GNOME (SUSE, Rocky, Mutter, HIG, libadwaita, apps) | -| [procedure-audit-vm-profonde.md](procedure-audit-vm-profonde.md) | Audit interactif complet VM (agents) | -| [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md) | Procédure bout-en-bout VM → Capsule (anti-échecs) | -| [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) | Création playbook Paramètres (matrice → VM → baseline → parity) | -| [inventaire-parite-rocky.md](inventaire-parite-rocky.md) | Écarts classés P0/P1/P2 | -| [inventaires/linux-rocky-vm.json](inventaires/linux-rocky-vm.json) | Inventaire machine-readable | -| [inventaires/linux-gnome-capsule-slots.md](inventaires/linux-gnome-capsule-slots.md) | Nautilus ↔ slot `nemo` | -| [lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md) | Infra SSH / Wayland | - ---- - -## 1. Positionnement dans CapsuleOS - -### 1.1 Hiérarchie branche RHEL - -```mermaid -flowchart TB - subgraph ref [Référence GNOME] - ROCKY[linux-rocky P1 upstream null] - end - subgraph deriv [Dérivés] - FEDORA[linux-fedora] - ALMA[linux-alma] - UBUNTU[linux-ubuntu] - ANDUIN[linux-anduinos] - end - ROCKY --> FEDORA - ROCKY --> ALMA - ROCKY --> UBUNTU - ROCKY --> ANDUIN -``` - -| Entrée | Rôle | Skin | Héritage coque GNOME | -|--------|------|------|----------------------| -| `linux-rocky` | **Référence** (comme Mint pour Cinnamon) | `home/RedHat/Rocky/` | Source tokens + Nautilus + overview | -| `linux-fedora` | Dérivé vendor | `home/RedHat/Fedora/` | `sync-gnome-*-skin.mjs` depuis Rocky | -| `linux-alma` | Dérivé vendor | `home/RedHat/Alma/` | idem + pack `vendors/alma/` | -| `linux-ubuntu` | Dérivé + dock Unity visible | `home/Debian/Ubuntu/` | coque + override dock `display:flex` | -| `linux-anduinos` | Dérivé taskbar | `home/Debian/AnduinOS/` | coque + chrome Anduin | - -**Règle** : toute évolution structurelle GNOME (overview, Nautilus, tokens shell) se fait d’abord sur **Rocky**, puis propagation scriptée vers les dérivés. - -### 1.2 Analogie Mint / Rocky - -| Dimension | Mint (Cinnamon) | Rocky (GNOME) | -|-----------|-----------------|---------------| -| Référence registre | `linux-mint` P0 | `linux-rocky` P1 | -| Explorateur VM | **Nemo** | **Nautilus** | -| Slot CapsuleOS | `nemo` (nom aligné) | `nemo` (gabarit partagé) | -| Template embed | `nemo` | `nemo-gnome` → `nautilus-app` | -| Skin CSS explorateur | `nemo.skin.css` | `nautilus.skin.css` | -| Panel / dock | Footer Cinnamon permanent | **Pas de dock permanent** (RHEL) — dash dans Aperçu | -| Sonde lab | `os-probe.sh` | `os-probe-gnome.sh` | - ---- - -## 2. Ground truth VM Rocky Linux 10 - -### 2.1 Stack observée (juin 2026) - -| Couche | VM | CapsuleOS | -|--------|-----|-----------| -| Distribution | Rocky Linux **10.2** Workstation (lab juin 2026) | `linux-rocky` | -| Session | **Wayland** (défaut RL10) + Xwayland `:0` | N/A (navigateur) | -| Shell | **GNOME Shell 49.4** (VM à jour ; coque Capsule reste `fedora-*`) | Classes `fedora-*` sous `html:has(#rocky)` | -| GTK / icônes | **Adwaita** | Tokens `--nemo-*`, `--fedora-*` | -| Accent | `gsettings` → `blue` → **#3584e4** | `--menu-accent` | -| Schéma couleurs | `default` (sombre) / `prefer-light` | `data-theme` + `gnome-theme` | -| Fond | `rocky-default-10-gemstone-skies-time.xml` | PNG jour/nuit dans `vendors/rocky/wallpaper/` | -| Terminal | **Ptyxis** (remplace GNOME Terminal en RL10) | Slot `terminal`, profil `linux:redhat` | -| Fichiers | **Nautilus 47** | Slot `nemo`, titre UI **« Fichiers »** | -| Éditeur texte | **GNOME Text Editor** (`gnome-text-editor`) | Slot `text_editor` | -| Logiciels | **GNOME Software** | Slot `update_manager` | - -Snapshots : [`linux-rocky-vm-state.json`](inventaires/linux-rocky-vm-state.json), [`linux-rocky-vm-theme.json`](inventaires/linux-rocky-vm-theme.json). - -### 2.2 Favoris dash GNOME (VM) - -Ordre typique observé sur la VM (8 icônes + grille apps) : - -1. Firefox -2. Calendrier -3. Musique -4. **Nautilus** (Fichiers) -5. **GNOME Software** -6. **Ptyxis** -7. **Text Editor** -8. **Calculator** - -**Écart P1 documenté** : le dock HTML CapsuleOS (`#tableau.fedora-dock`) est **masqué** sur RHEL GNOME ; les favoris passent par le **dash de l’Aperçu** (`fedora-overview__dash`). Le dock latéral Capsule hérite du modèle Fedora early-work (6 apps + accueil) — ne pas le confondre avec le dash natif GNOME. - ---- - -## 3. Confrontation documentation officielle - -### 3.1 Rocky Linux 10 — notes de version - -Source : [Rocky Linux 10 Release Notes — Desktop Component changes](https://docs.rockylinux.org/release_notes/10_0/) (aligné miroir communautaire). - -| Retiré en RL10 | Remplacement | Impact CapsuleOS | -|----------------|--------------|------------------| -| **GNOME Terminal** | **Ptyxis** | Profil terminal `linux:redhat` ; chrome Ptyxis dans `terminal.skin.css` | -| **gedit** | **GNOME Text Editor** | Gabarit `text_editor.html` (xed legacy) + skin GNOME | -| Eye of GNOME | GNOME Image Viewer (Loupe) | Slot `visionneur_images` (P2) | -| Cheese | Snapshot | Non émulé (P2) | -| Totem (vidéos) | Aucun lecteur par défaut | Slot `lecteur_multimedia` optionnel | -| PulseAudio daemon | PipeWire | Cosmétique tray (P2) | -| Tweaks standalone | Options dans Paramètres GNOME | Slot `themes` | -| LibreOffice RPM | Flatpak / upstream | Slot `librewriter` (gabarit générique) | - -**Wayland** : RL10 fait de Wayland le défaut ; Xwayland reste pour clients X11. CapsuleOS n’émule pas le compositeur — mais le **lab SSH** doit respecter Mutter/Xwayland ([lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md)). - -### 3.2 GNOME Shell — design officiel - -Sources : - -- [GNOME Human Interface Guidelines](https://developer.gnome.org/hig) — principes, patterns, Libadwaita -- [gnome-hig-ressources.md](gnome-hig-ressources.md) — **catalogue interne** (crawl récursif depuis [resources.html](https://developer.gnome.org/hig/resources.html)) -- [GNOME Shell Design (wiki archive)](https://wiki.gnome.org/Projects/GnomeShell/Design) — Activities Overview -- [Ubuntu Help — Visual overview of GNOME](https://help.ubuntu.com/stable/ubuntu-help/shell-introduction.html.en) — dash, grille apps, top bar - -| Composant GNOME | Spécification officielle | Implémentation CapsuleOS Rocky | -|-----------------|--------------------------|------------------------------| -| **Top bar** | Ancre visuelle permanente ; visible aussi dans l’Aperçu | `header.fedora-top-bar` — horloge, tray, déclencheur Aperçu | -| **Activities Overview** | Vue séparée ; focus-switching ; pas une destination | `section.fedora-overview` + `overview.js` | -| **Dash** | Favoris + apps en cours ; point sous l’icône active | `nav.fedora-overview__dash` — `data-overview-link` | -| **Grille apps** | Toutes les apps ; glisser vers favoris | `fedora-overview__apps-grid` | -| **Recherche** | Lance apps, fichiers, web | `CapsuleAppSearch` + catalogue `overview.js` | -| **Quick Settings** | Volume, réseau, thème, alimentation | `volume-popover` + `quick-settings` | -| **Calendrier popover** | Depuis l’horloge | `calendar-popover.js` (partagé noyau) | - -**Différence Ubuntu vs RHEL** : Ubuntu affiche un dock Unity permanent ; **Fedora / Rocky / Alma masquent `#tableau`** — seul l’Aperçu expose le dash. Voir [`linux-gnome-capsule-slots.md`](inventaires/linux-gnome-capsule-slots.md) § « Coque GNOME ». - -### 3.3 Nautilus 47 / Adwaita - -| Aspect | Doc / comportement GNOME | CapsuleOS | -|--------|--------------------------|-----------| -| Chrome fenêtre | Headerbar GTK (CSD), pas de menu bar classique | `explorers/nautilus/shell-gnome.html` | -| Sidebar | Places (Bureau, Documents, …) | `fileExplorerCore.js` + tokens `--nautilus-sidebar-w` | -| Thème clair sur bureau sombre | Adwaita `default` : chrome **clair** sur fond sombre | Tokens `--nemo-header-bg: #f6f6f6` sur `nautilus.skin.css` | -| « Open in Terminal » | Extension Nautilus → Ptyxis (Fedora patch) | P2 — menu contextuel Capsule | - -### 3.4 Ptyxis - -Sources : notes RL10, [Fedora adoption](https://leo3418.github.io/2025/08/14/trying-ptyxis.html). - -- Terminal **conteneur-oriented**, successeur de GNOME Terminal sur RHEL/Fedora/Rocky 10. -- CapsuleOS : slot `terminal`, invite `capsule@rocky`, palette sombre Breeze-like dans `terminal.skin.css`. -- **Ne pas** étiqueter « gnome-terminal » dans l’UI utilisateur Rocky. - ---- - -## 4. Découpage design — couches à reproduire - -Chaque couche possède des **fichiers propriétaires**, des **tokens CSS** et des **critères de validation**. - -### 4.1 Couche A — Shell GNOME (bureau) - -| Élément | Fichiers Rocky | Tokens clés | Validation | -|---------|----------------|-------------|------------| -| Variables globales | `style/gnome-shell/tokens.css` | `--fedora-top-bar-*`, `--fedora-dock-*` | Capture `rocky-*-desktop.png` | -| Coque workstation | `style/gnome-workstation.css` | `--fedora-bg`, `--linux-skin-label` | Fond gemstone-skies | -| Top bar | `gnome-workstation.css`, `tray.css` | hauteur, blur, couleur | Parité barre VM | -| Overview | `gnome-shell/overview.css`, `js/overview.js` | grille, dash, recherche | Smoke `smoke-rocky-gnome-ref.mjs` | -| Quick settings | `volume-popover.css` | tiles, slider | Capture manuelle | -| Surcharges vendor | `rocky-overrides.css` | `--menu-accent`, wallpaper URL | `linux-rocky-vm-theme.json` | - -**Propagation** : `node usr/lib/capsuleos/tools/linux/sync-gnome-workstation-skin.mjs` - -### 4.2 Couche B — Chrome fenêtre (noyau) - -| Élément | Fichiers noyau | Contrat | -|---------|----------------|---------| -| Contexte GNOME | `etc/capsuleos/overrides/linux-rocky.json` | `CAPSULE_WINDOW_CONTEXT`, bounds `fedora-desktop-area` | -| Comportements | `gnome-window-behaviors.js` | Pas de header obligatoire, CSD simulé | -| Lanceurs | `taskbar-launcher-state.js` | Dock `#tableau` + état fenêtres | -| Boot profil | `index.html` | `CAPSULE_SKIN_PROFILE_ID` **avant** `capsule-skin-boot.js` | - -Doc : [window-chrome-contexts.md](window-chrome-contexts.md). - -### 4.3 Couche C — Applications - -| App VM | Slot | Gabarit | Skin Rocky | -|--------|------|---------|------------| -| Nautilus | `nemo` | `nemo-gnome` | `nautilus.skin.css` | -| Firefox | `firefox` | embed | `firefox.skin.css` | -| Ptyxis | `terminal` | `terminal.html` | `terminal.skin.css` | -| GNOME Text Editor | `text_editor` | `text_editor.html` | `text_editor.skin.css` | -| GNOME Software | `update_manager` | `update_manager*.html` | (générique) | -| Calculator | `calculator` | `calculator.html` | `calculator.skin.css` | -| Clocks | `clocks` | `clocks.html` | `clocks.skin.css` | -| Calendar | `calendar` | `calendar.html` | `calendar.skin.css` | -| Paramètres | `themes` | `themes.html` | `themes` via embed | -| LibreOffice Writer | `librewriter` | embed | `librewriter.skin.css` | - -**Clôture obligatoire** après modif gabarit/skin : - -```bash -./root/tools/lab/update-rocky-nautilus.sh -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -### 4.4 Couche D — Assets vendor - -| Zone | Chemin | Source | -|------|--------|--------| -| Logo | `vendors/rocky/rocky-logo.svg` | VM + polish | -| Panel | `vendors/rocky/panel/` | **`pull-vm-assets.sh`** | -| Wallpaper | `vendors/rocky/wallpaper/` | VM gemstone-skies PNG | -| Adwaita symboles | `icons/gnome/adwaita/` | VM pull | -| Inventaire visuel | `vendors/rocky/inventory/` | Captures VM + Capsule | - -Règle absolue : [convention-assets-depuis-vm.md](convention-assets-depuis-vm.md). - -### 4.5 Couche E — Thèmes clair / sombre - -| gsettings VM (`org.gnome.desktop.interface color-scheme`) | CapsuleOS | -|-----------------------------------------------------------|-----------| -| `default` / `prefer-dark` | Sombre — `html:has(#rocky)` | -| `prefer-light` | Clair — `html[data-theme="light"]:has(#rocky)` | - -Mapping confirmé dans `linux-rocky-vm-theme.json`. Basculer via bouton Quick Settings (`capsule-theme.js`). - ---- - -## 5. Pièges documentés (anti-échecs) - -| # | Erreur fréquente | Symptôme | Prévention | -|---|------------------|----------|------------| -| 1 | Éditer la **façade** `OS/linux/families/redhat/rocky/` | pick-os ≠ skin ; validate-capsule KO | Éditer `home/RedHat/Rocky/` puis `sync-linux-skin-closure.mjs` | -| 2 | `CAPSULE_SKIN_PROFILE_ID` après `capsule-skin-boot` | Nautilus charge gabarit Nemo Cinnamon | Profil dans `` **avant** boot | -| 3 | Confondre **Nemo** et **Nautilus** | Mauvais template, 404 embed | Lire [`linux-gnome-capsule-slots.md`](inventaires/linux-gnome-capsule-slots.md) | -| 4 | Afficher dock permanent sur Rocky | Ne correspond pas à GNOME RHEL | `#tableau { display: none }` — favoris via Aperçu | -| 5 | SSH Wayland sans `XAUTHORITY` | `wmctrl` / sonde échoue | [lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md) §1 | -| 6 | Oublier rebuild **embed** | `file://` ou fetch → ancien gabarit | `update-rocky-nautilus.sh` ou `build-linux-embed.mjs` | -| 7 | Assets empruntés Fedora/Mint | Fidélité visuelle fausse | `pull-vm-assets.sh --id linux-rocky` | -| 8 | Parité panel VM `active:false` | Faux échecs checklist | P1 Wayland — pgrep dans `os-probe-gnome.sh` ; Capsule 6/6 = référence | -| 9 | Modifier dérivé sans sync Rocky | Dérive Fedora/Alma/Ubuntu | Scripts `sync-gnome-nautilus-skin.mjs`, `sync-gnome-workstation-skin.mjs`, etc. | -| 10 | Valider sans HTTP + Ctrl+F5 | Cache Live Server / ancien JS | Serveur `python3 -m http.server` + rechargement forcé | - ---- - -## 6. Scripts de propagation (dérivés) - -| Script | Cible | -|--------|-------| -| `sync-gnome-nautilus-skin.mjs` | Fedora, Ubuntu, Alma, AnduinOS | -| `sync-gnome-workstation-skin.mjs` | Fedora, Ubuntu, Alma | -| `sync-gnome-utility-app-skins.mjs` | text_editor, calculator, clocks, calendar | -| `bootstrap-alma-from-rocky.mjs` | Alma (skin + façade) | -| `sync-linux-skin-closure.mjs` | Toutes façades pick-os | - ---- - -## 7. Références externes (liens stables) - -| Sujet | URL | -|-------|-----| -| Rocky Linux 10 Release Notes | https://docs.rockylinux.org/release_notes/10_0/ | -| GNOME HIG | https://developer.gnome.org/hig | -| GNOME Shell Design | https://wiki.gnome.org/Projects/GnomeShell/Design | -| Libadwaita | https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/ | -| Nautilus | https://gitlab.gnome.org/GNOME/nautilus | -| Ptyxis | https://gitlab.gnome.org/World/ptyxis | - ---- - -## 8. Mise à jour de ce document - -Mettre à jour ce fichier quand : - -1. La VM Rocky change de version mineure (GNOME Shell x.y). -2. Un nouveau dérivé RHEL GNOME est ajouté au registre. -3. La checklist panel atteint parité VM 6/6 (actuellement P1 Wayland). -4. Les notes RL11+ modifient la liste des apps par défaut. - -**Collecte** : `bash root/tools/lab/vm-rocky-theme-snapshot.sh` → JSON thème · captures → `compare-rocky-visual-pass.mjs`. diff --git a/root/docs/briefs/README.md b/root/docs/briefs/README.md deleted file mode 100755 index 93608c2d..00000000 --- a/root/docs/briefs/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Briefs agents (générés) - -Briefs opérationnels par entrée `os-registry.json`, produits par : - -```bash -node usr/lib/capsuleos/tools/print-agent-brief.mjs --write -node usr/lib/capsuleos/tools/print-agent-brief.mjs --list --tier P2 --status planned -``` - -Exemple : `linux-elementary.md` après `print-agent-brief.mjs linux-elementary --write`. - -Ne pas éditer à la main si l’entrée registre change — regénérer le brief. - -Formation : [parcours-agent.md](../parcours-agent.md). diff --git a/root/docs/briefs/linux-elementary.md b/root/docs/briefs/linux-elementary.md deleted file mode 100755 index 8939fed5..00000000 --- a/root/docs/briefs/linux-elementary.md +++ /dev/null @@ -1,60 +0,0 @@ -# Brief agent — elementary OS - -> Généré par `print-agent-brief.mjs` — à copier dans la tâche agent ou committer sous `root/docs/briefs/`. - -## Contexte - -- **ID registre** : `linux-elementary` -- **Famille** : linux -- **Tier** : P2 · **Statut** : planned · **Maturité** : 0 -- **Toolkit** : pantheon (toolkits/pantheon) -- **Vendor** : elementary (vendors/elementary) -- **Shell** : pantheon · **Explorateur** : — -- **embedKey** / **bodyId** : `elementary` / `elementary` - -## Sources design - -- hig: [Human Interface Guidelines](https://docs.elementary.io/hig/) - -## Skills & formation - -1. `onboarding` → H0–H2 : `node usr/lib/capsuleos/tools/validate-all.mjs` -2. `os-linux` + `role-integrator` (skin) ; `role-graphic-artist` si pack vendor -3. Doc : [ajouter-os-scalable.md](../../docs/ajouter-os-scalable.md) - -## Fichiers canon - -- `etc/capsuleos/os-registry.json` -- Profil cible : `etc/capsuleos/profiles/linux-elementary.json` -- `usr/share/capsuleos/assets/manifest.json` -- [manifeste-noyau.md](../../docs/manifeste-noyau.md) · [contrib.md § toolkits](../../../contrib.md#bibliotheques-graphiques-linux-toolkits-gui) (si Linux) - -## Chemins proposés - -- **Façade** : `OS/linux/families/debian/elementary/index.html` _(à créer)_ -- **Skin miroir** : `home/Debian/Elementary/index.html` _(à créer)_ -- **Pack toolkit** : `assets/images/toolkits/pantheon/` -- **Pack vendor** : `assets/images/vendors/elementary/` - -## Livrables - -1. Entrée registre à jour (`facade`, `skin`, `status` si passage beta/active) -2. `skin.profile.json` (façade + home) + `etc/capsuleos/profiles/.json` -3. Façade + miroir home ; boot : `capsule-resource.js` → `capsule-skin-boot.js` -4. Tokens CSS / `content/strings.json` si Linux -5. `validate-all.mjs` → exit 0 -6. Regen embed Linux si templates/strings : `linux/build-linux-embed.mjs` -7. Smoke `file://` : shell, menu, 1 app, explorateur - -## Gates - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -## Interdits - -- Fork `contentLoader` / `CapsuleWindow` -- Images hors `usr/share/capsuleos/assets/` et `home/public/Images/` -- `CAPSULE_MEDIA_BASE` dans profil ; README sous `OS/` -- `?.` / `??` / object spread dans JS runtime diff --git a/root/docs/briefs/linux-kde-neon.md b/root/docs/briefs/linux-kde-neon.md deleted file mode 100644 index 8560a57c..00000000 --- a/root/docs/briefs/linux-kde-neon.md +++ /dev/null @@ -1,34 +0,0 @@ -# Brief agent — KDE neon User Edition - -> Campagne **v15-kde-settings-full-front** — front intégral Paramètres KDE Plasma (juin 2026). - -## Contexte - -- **ID registre** : `linux-kde-neon` -- **Famille** : linux · **Tier** : **P1** · **Statut** : active · **fidelityLevel** : 4 -- **Toolkit** : kde / Plasma · **Vendor** : neon -- **VM lab** : `` · clé `~/.ssh/capsuleos-lab` -- **Ground truth** : [`ground-truth-kde.md`](../ground-truth-kde.md) - -## v15 — objectifs - -1. **Inventaire VM exhaustif** : 92 modules KCM → `kde-settings-front-inventory.json` -2. **Registry option-par-option** : `kde-settings-controls-registry.json` (13 effets P0) -3. **Front multi-KCM** : `systemsettings_kde_neon.html` — hub + 4 surfaces KCM -4. **Se+** : `kde-kconfig-bindings.js` + verify chain (SeΣ) -5. **Crédibilité pédagogique** : 8 scénarios + seuil Φ_norm 90 -6. **Propagation** : `smoke-kde-v15-propagation` dérivés Plasma - -## Chaîne v15 (ordre) - -1. `collect-vm-kde-settings-inventory.mjs --id linux-kde-neon --write` -2. `collect-vm-kde-settings-interaction.mjs --id linux-kde-neon --write` -3. `sync-kde-settings-parity-matrix.mjs --write` -4. `generate-kde-kconfig-bindings.mjs` -5. `run-kde-settings-lab.mjs --id linux-kde-neon` -6. `sync-linux-skin-closure.mjs` - -## État - -- [`linux-kde-neon-replication-state.json`](../inventaires/linux-kde-neon-replication-state.json) -- Registre : [`kde-settings-controls-registry.json`](../../tools/lab/kde-settings-controls-registry.json) diff --git a/root/docs/briefs/linux-mint.md b/root/docs/briefs/linux-mint.md deleted file mode 100644 index 34ec09bf..00000000 --- a/root/docs/briefs/linux-mint.md +++ /dev/null @@ -1,73 +0,0 @@ -# Brief agent — Linux Mint (Cinnamon) - -> Généré par `print-agent-brief.mjs` — à copier dans la tâche agent ou committer sous `root/docs/briefs/`. - -## Contexte - -- **ID registre** : `linux-mint` -- **Famille** : linux -- **Tier** : P0 · **Statut** : active · **Maturité** : 0.95 -- **Toolkit** : cinnamon (toolkits/cinnamon) -- **Vendor** : mint (vendors/mint) -- **Shell** : cinnamon · **Explorateur** : nemo -- **embedKey** / **bodyId** : `mint` / `mint` - -## Sources design - -- design: [Cinnamon](https://projects.linuxmint.com/cinnamon/) - -## Skills & formation - -1. `onboarding` → H0–H2 : `node usr/lib/capsuleos/tools/validate-all.mjs` -2. `os-linux` + `role-integrator` (skin) ; `role-graphic-artist` si pack vendor -3. Doc : [ajouter-os-scalable.md](../../docs/ajouter-os-scalable.md) - -## Fichiers canon - -- `etc/capsuleos/os-registry.json` -- Profil cible : `etc/capsuleos/profiles/linux-mint.json` -- `usr/share/capsuleos/assets/manifest.json` -- [manifeste-noyau.md](../../docs/manifeste-noyau.md) · [contrib.md § toolkits](../../../contrib.md#bibliotheques-graphiques-linux-toolkits-gui) (si Linux) - -## Chemins proposés - -- **Façade** : `OS/linux/families/debian/mint/index.html` -- **Skin miroir** : `home/Debian/Mint/index.html` -- **Pack toolkit** : `assets/images/toolkits/cinnamon/` -- **Pack vendor** : `assets/images/vendors/mint/` - -## Clone VM (référence gold) - -- Procédure : [procedure-clonage-os-depuis-vm.md](../../docs/procedure-clonage-os-depuis-vm.md) -- Inventaire : [inventaires/linux-mint-vm.json](../../docs/inventaires/linux-mint-vm.json) -- Parité : [inventaire-parite-mint-vm.md](../../docs/inventaire-parite-mint-vm.md) -- Statut : [inventaires/linux-mint-clone-status.md](../../docs/inventaires/linux-mint-clone-status.md) -- Comportements : [mint-fenetres-muffin.md](../../docs/mint-fenetres-muffin.md) - -```bash -node usr/lib/capsuleos/tools/lab/collect-mint-inventory.mjs --write-doc -node usr/lib/capsuleos/tools/lab/compare-os-parity.mjs --id linux-mint --scenario panel-checklist -``` - -## Livrables - -1. Entrée registre à jour (`facade`, `skin`, `status` si passage beta/active) -2. `skin.profile.json` (façade + home) + `etc/capsuleos/profiles/.json` -3. Façade + miroir home ; boot : `capsule-resource.js` → `capsule-skin-boot.js` -4. Tokens CSS / `content/strings.json` si Linux -5. `validate-all.mjs` → exit 0 -6. Regen embed Linux si templates/strings : `linux/build-linux-embed.mjs` -7. Smoke `file://` : shell, menu, 1 app, explorateur - -## Gates - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -## Interdits - -- Fork `contentLoader` / `CapsuleWindow` -- Images hors `usr/share/capsuleos/assets/` et `home/public/Images/` -- `CAPSULE_MEDIA_BASE` dans profil ; README sous `OS/` -- `?.` / `??` / object spread dans JS runtime diff --git a/root/docs/campagne-credibilite-pedagogique.md b/root/docs/campagne-credibilite-pedagogique.md deleted file mode 100644 index 2d2df4cb..00000000 --- a/root/docs/campagne-credibilite-pedagogique.md +++ /dev/null @@ -1,229 +0,0 @@ -# Campagne crédibilité pédagogique — clone fidèle à la VM - -> **Statut** : **P-F clôturé** — 43 apps π=100 · 130 scénarios CredV/C/S — campagne `v3-credibility-pass` (juin 2026) -> **Contrat machine** : [`etc/capsuleos/contracts/app-fidelity-scenarios.json`](../../etc/capsuleos/contracts/app-fidelity-scenarios.json) -> **Orchestrateur** : `node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs` -> **Skill agent** : [`root/skills/vm-app-fidelity-pass/SKILL.md`](../skills/vm-app-fidelity-pass/SKILL.md) - -Complète sans remplacer : [moteur-clonage-experience.md](moteur-clonage-experience.md) (cycles C0–C10, **Π structurel**) · [procedure-apps-replication-formelle.md](procedure-apps-replication-formelle.md) (chaîne AppVv/AppVp). - ---- - -## 1. Vision : crédibilité pédagogique vs Π structurel - -| Dimension | Π structurel (C0–C10) | Crédibilité pédagogique (v3) | -|-----------|----------------------|------------------------------| -| **Question** | Le clone **ressemble** et **s'ouvre** comme la VM ? | L'utilisateur **se sent** sur la VM en **parcourant** menus et sous-écrans ? | -| **Mesure** | `pi_global`, `AppVp`, surfaces shell | `pi_credibility` par app et par scénario | -| **Périmètre** | 8 apps P0 + shell 8/8 | **Gaps cartographiés** (slots sans π=100), pas 101 apps linéaires | -| **Preuve** | Captures classées, matrices UI | Scénarios utilisateur documentés + smoke Playwright | - -**Π=100** clôt la campagne structurelle Mint (pallier 10). La campagne **v3** élève la **crédibilité pédagogique** : parcours utilisateur réaliste (persona, étapes, états hover/focus/erreur/vide) validés contre la VM ``. - ---- - -## 2. Phases P-A à P-Z - -| Phase | Id | Objectif | Prédicat | -|-------|-----|----------|----------| -| **P-A** | inventaire | Documenter scénarios VM (steps texte, persona) | **CredV** | -| **P-B** | vm-capture | Captures ground truth VM par scénario | **CredV** (enrichi) | -| **P-C** | impl | Implémenter interactions clone (gabarits, JS slot) | **CredC** | -| **P-D** | smoke | Smoke scénario Playwright (`smoke-app-fidelity-scenario.mjs`) | **CredS** | -| **P-E** | parité | Classer écarts, mesurer `pi_credibility` | **CredΠ** | -| **P-F** | extension ciblée | Voir **§2 bis** (P-F1→P-F5) | gaps `*-app-fidelity-gaps.json` | - -### 2 bis. Extension P-F v2 (post-P0) - -> **Révision juin 2026** : ne pas viser 101 apps × 3 scénarios. La cartographie P-F1 montre que **64/101** entrées menu sont déjà couvertes par 11 slots π=100 et **52/101** par Paramètres (`themes`). Il reste **~32 slots** catalogue sans crédibilité. - -| Sous-phase | Id | Objectif | Livrable | -|------------|-----|----------|----------| -| **P-F1** | cartographie | Menu 101 → slots 44 → scénarios existants | `linux-mint-app-fidelity-gaps.json` | -| **P-F2** | taxonomie | Variants Cinnamon (slot→variant toolkit) avant nouveaux gabarits | alignement [convention-taxonomie-semantique.md](convention-taxonomie-semantique.md) | -| **P-F3** | crédibilité par tiers | **Tier B** : ≥3 scénarios / slot gap (vague 1 P0+P1, puis P2) | inventaire scénarios enrichi | -| **P-F4** | ManΣ Mint | Clôturer ManSt/ManI sur `proc/linux-mint/` | alignement avancement-formel | -| **P-F5** | VM burst | Captures P-B pour scénarios sans π=100 | `vmCapture` renseigné | - -**Tiers de travail** : - -| Tier | Critère | Action | -|------|---------|--------| -| **A** | Slot π=100 ou structure seule suffisante | Aucun — déjà couvert | -| **B** | Slot catalogue sans π=100 | 3 scénarios CredV→CredS par slot | -| **C** | Entrée menu → `themes` (cs-*) | Couvert par campagne Paramètres ; pas de slot dédié | - -**Vagues P-F3** (générées par `map-app-fidelity-gaps.mjs`) : - -1. **Vague 1** — slots P0+P1 : `calendar`, `screenshot`, `drawing`, `lecteur_multimedia`, `libreoffice_startcenter`, `mintdrivers`, `librecalc`, `system_monitor`, `visionneur_images`, `visionneur_pdf` -2. **Vague 2** — slots P2 restants (~22) - -Boucle **récursive par application** : - -```text -shell (ouverture slot) - → menus contextuels (clic droit, barre menu) - → sous-écrans (onglets, panneaux cs-*, listes) - → états (hover, focus, erreur, vide, chargement) -``` - -Chaque niveau produit au moins un scénario dans l'inventaire `{id}-app-fidelity-scenarios.json`. - ---- - -## 3. Matrice scénario - -Chaque entrée suit le schéma : - -```json -{ - "id": "nemo-menu-context", - "app": "nemo", - "persona": "utilisateur bureau — clic droit", - "steps": [ - "Ouvrir Nemo depuis le panel", - "Naviguer vers ~/Bureau", - "Clic droit sur zone vide → menu contextuel Cinnamon" - ], - "vmCapture": null, - "capsuleCapture": null, - "predicates": { "CredV": true, "CredC": false, "CredS": false }, - "pi_credibility": null, - "phase": "P-A", - "selectors": { "capsule": ["#menu-app-context-menu", ".nemo-sidebar"] } -} -``` - -| Champ | Rôle | -|-------|------| -| `id` | Clé stable (`-`) | -| `app` | Slot catalogue / `data-link` | -| `persona` | Contexte utilisateur pédagogique | -| `steps[]` | Parcours humain documenté (ground truth VM) | -| `vmCapture` | Chemin capture VM (post P-B) | -| `capsuleCapture` | Chemin capture Capsule (post P-D) | -| `predicates[]` | Sous-ensemble CredV/CredC/CredS | -| `pi_credibility` | 0–100 par scénario ; `null` tant que non mesuré | -| `selectors.capsule` | Hooks DOM pour smoke Playwright futur | - ---- - -## 4. Intégration C0–C10 et AppVv/AppVp - -```mermaid -flowchart TB - C10[C10 Π_global=100] --> Cred[Cred v3-credibility-pass] - Cred --> CredV[CredV scénarios documentés] - CredV --> CredC[CredC clone implémenté] - CredC --> CredS[CredS smoke vert] - CredS --> CredPi[CredΠ pi_credibility=100/app] - AppVv[AppVv VM apps] -.-> CredV - AppVp[AppVp parité classée] -.-> CredPi -``` - -- **Prérequis** : campagne C0–C10 clôturée (**Π_global=100**) pour Mint P0. -- **AppVv/AppVp** alimentent les références visuelles ; la crédibilité ajoute la **dimension parcours** (menus, sous-menus, séquences). -- **Orchestrateurs** : `run-clone-cycle.mjs` (structurel) puis `run-app-fidelity-campaign.mjs` (pédagogique). - ---- - -## 5. File prioritaire Mint - -### P0 — clôturé (juin 2026) - -11 apps π=100 · 34 scénarios CredC/CredS · commit `a4e1918`. - -### P-F — clôturé (juin 2026) - -Inventaire gaps : [`linux-mint-app-fidelity-gaps.json`](inventaires/linux-mint-app-fidelity-gaps.json) — **0 slot tier B restant**. - -| Métrique | Final | -|----------|-------| -| Apps catalogue π=100 | **43/43** | -| Scénarios CredV/CredS | **130/130** | -| Vague 1 P0+P1 | 10 slots · commit `224c728` | -| Vague 2 P2 | 22 slots · commit `a5efaf9` | - ---- - -## 6. Commandes opérationnelles - -```bash -# Cartographie P-F1 (menu → slots → gaps) -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase map-gaps - -# État campagne -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase status - -# Prochain scénario / app (file vague 1 après P0) -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase next - -# Dry-run chaîne (collect VM, smoke, validate) -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase run --dry-run - -# Smoke scénario (squelette Playwright) -node usr/lib/capsuleos/tools/lab/smoke-app-fidelity-scenario.mjs --id linux-mint --scenario nemo-menu-context --dry-run - -# Clôture session -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -**Reprise** : `map-gaps` puis `next --app calendar` (vague 1 P0) - ---- - -## 6 bis. Clôture formelle CredΣ - -Après P-F3 (inventaire 130/130, 43/43 apps π=100, `gapSlotsTotal=0`), la chaîne **Cred*** formalise la clôture machine : - -| Prédicat | Condition | -|----------|-----------| -| **CredV** | `documented === totalScenarios` (> 0) | -| **CredC** | `implemented === total` | -| **CredS** | `smokeOk === total` + gate live (`CredS.liveVerified`) | -| **CredΠ** | `appsAtPi100 === appsTotal` ∧ `gapSlotsTotal === 0` | -| **CredΣ** | conjonction des quatre | - -```bash -# Baseline H₂ -node usr/lib/capsuleos/tools/validate-all.mjs - -# Évaluation Cred* (JSON ou humain) -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase formal -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase formal --json - -# Résolution R-CRED* (validate-all → smoke-all → formal-write) -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase resolve --max-steps 8 -node usr/lib/capsuleos/tools/lab/run-app-fidelity-formal-chain.mjs --id linux-mint --max-steps 8 - -# Agent JSON -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id linux-mint --scope app-fidelity - -# Écriture état formel + replication-state.credibilityCampaign.credSigma -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase formal-write - -# Smoke live batch (130 scénarios — long ; échantillon ou skip si inventaire déjà 100 %) -CAPSULE_HTTP_BASE=http://127.0.0.1:5500 node usr/lib/capsuleos/tools/lab/smoke-app-fidelity-all.mjs --id linux-mint --sample 10 -CAPSULE_HTTP_BASE=http://127.0.0.1:5500 node usr/lib/capsuleos/tools/lab/smoke-app-fidelity-all.mjs --id linux-mint --skip-live - -# Clôture release -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -Artefacts : `linux-mint-credibility-formal-state.json` · `linux-mint-credibility-formal-resolve.json` · patch `linux-mint-replication-state.json` (`credSigma`, `evaluatedAt`, `predicates`). - -Référence logique : [logique-formelle.md](logique-formelle.md) §2.9. - ---- - -## 7. Anti-patterns - -| Interdit | Raison | -|--------|--------| -| Scénario sans steps VM documentés | **R-INV1** — VM prime | -| Smoke avant implémentation slot | **CredC** requis | -| Parcours inventé (pas observé Mint) | Crédibilité ≠ fiction | -| `home/` direct en Playwright | Façade OS canonique uniquement | -| Sauter **validate-all** en clôture | **H₆** | - -*Campagne vivante — enrichir l'inventaire après chaque passe VM SSH ou noVNC.* diff --git a/root/docs/campagne-reproduction-gnome-toolkit.md b/root/docs/campagne-reproduction-gnome-toolkit.md deleted file mode 100644 index 021e78ce..00000000 --- a/root/docs/campagne-reproduction-gnome-toolkit.md +++ /dev/null @@ -1,197 +0,0 @@ -# Campagne reproduction GNOME toolkit — Paramètres puis extension multi-distro - -> **Statut** : active (juin 2026) -> **Pilote** : `linux-rocky` — propagation après **PbΣ réel** V0 -> **Références** : [logique-formelle.md](logique-formelle.md) · [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) · [procedure-apps-replication-formelle.md](procedure-apps-replication-formelle.md) · [branche-redhat-gnome.md](branche-redhat-gnome.md) · [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) - ---- - -## 1. Vision - -Reproduire **fidèlement** l'expérience GNOME (Paramètres puis applications) sur toutes les distributions toolkit `gnome`, avec une boucle **récursive** panneau → contrôles → effets shell → scénarios pédagogiques. La **crédibilité pédagogique** prime : tout écart VM↔Capsule est explicite (`contentGaps`, prédicats Cred*). - -**Cible registre** : **OsΣ-registry** = ManΣ ∧ AppΣ ∧ PbΣ ∧ StoreVp ∧ Tf ∧ H₆ ([logique-formelle.md](logique-formelle.md) §2.10). - ---- - -## 2. Périmètre distro - -| Vague | Registries | Condition d'entrée | -|-------|------------|-------------------| -| **V0** | `linux-rocky` seul | Pilote — PbΣ réel 18 panneaux | -| **V1** | `linux-fedora`, `linux-ubuntu`, `linux-alma`, `linux-anduinos` | Rocky V0 clôturé | -| **V2** | Apps P0 (6 slots) | V0 PbΣ | -| **V3** | Apps P1 (magasin + utilitaires) | V2 AppΣ pilote | -| **V4** | Apps P2 | V3 | - -Hors périmètre : `linux-popos` (toolkit `cosmic`), `linux-mint` (Cinnamon), KDE. - ---- - -## 3. Phases campagne (GC-0…GC-4) - -Contrat : `etc/capsuleos/contracts/os-reproduction-coherence.json` → `gnomeToolkitCampaign`. - -| Phase | Id | Objectif | Prédicats produits | -|-------|-----|----------|-------------------| -| Socle | **GC-0** | H₂ + matrices vendor + doc campagne | H₂ | -| Inventaire VM | **GC-1** | Playbook + interaction + assets VM | A, S, L | -| Enquête | **GC-2** | Enquête visuelle par contrôle | V | -| Implémentation | **GC-3** | parity.js, effets, HTML, baseline | G, Vc | -| Clôture | **GC-4** | Parité classée + scénarios Th + PbΣ | Vp, PbΣ | - -Orchestrateur : - -```bash -node usr/lib/capsuleos/tools/lab/run-gnome-toolkit-campaign.mjs --id linux-rocky --phase v0 -node usr/lib/capsuleos/tools/lab/generate-gnome-campaign-state.mjs --id linux-rocky --write -node usr/lib/capsuleos/tools/lab/smoke-gnome-campaign-state.mjs --id linux-rocky -``` - ---- - -## 4. Modèle récursif (6 niveaux par panneau) - -Chaque panneau Paramètres (puis chaque slot app) traverse : - -| Niveau | Symbole | Livrable | -|--------|---------|----------| -| 1. Structure | **Str** | `themes_gnome.html` — sidebar + contenu | -| 2. Playbook VM | **Pb** | `*-gnome-settings-playbook.json` — gsettings mappés | -| 3. Interactions | **Int** | `*-gnome-settings-interaction.json` — toggle + restore | -| 4. Enquête visuelle | **Vis** | `*-gnome-settings-visual-investigation.json` | -| 5. Effets shell | **Eff** | `settings-effects-chain.json` + CSS vendor | -| 6. Scénarios | **Sc** | `themes-user-scenarios.json` (Th1–Th4+) | - -**RealΣ panneau** : Str ∧ Pb ∧ (Vis documenté ∨ stub accepté) ∧ (Eff si P0 shell) ∧ ¬gap P0 ouvert. - -Suivi machine : `root/docs/inventaires/-gnome-campaign-state.json` (généré). - -```mermaid -flowchart TD - Str[Structure HTML] --> Pb[Playbook VM] - Pb --> Int[Interactions] - Int --> Vis[Enquête visuelle] - Vis --> Eff[Effets shell] - Eff --> Sc[Scénarios Th] - Sc -->|gap| Pb -``` - ---- - -## 5. Les 18 panneaux Paramètres - -| Panneau | `capsulePanel` | Priorité pédagogique | Notes | -|---------|----------------|---------------------|-------| -| Wi-Fi | `wifi` | P1 | Liste réseaux simulée | -| Réseau | `network` | P2 | Identifiant DHCP simulé | -| Bluetooth | `bluetooth` | P2 | Appareils simulés | -| Apparence | `appearance` | **P0** | Thème, accent — Th1, Th3 | -| Arrière-plan | `background` | **P0** | Grille fonds VM — Th2 | -| Notifications | `notifications` | P0 | DND shell | -| Recherche | `search` | P1 | Providers gsettings | -| Multitâche | `multitasking` | P0 | Bureaux dynamiques | -| Son | `sound` | P2 | Volume, alertes | -| Alimentation | `power` | P2 | Profils simulés | -| Écrans | `displays` | P0 | Échelle, night-light — Th4 | -| Souris/touchpad | `mouse` | P2 | 5 contrôles | -| Clavier | `keyboard` | P2 | Disposition, répétition | -| Imprimantes | `printers` | P3 stub | `contentGaps` décoratif | -| Accessibilité | `accessibility` | P1 | Contraste, taille texte | -| Confidentialité | `privacy` | P1 | Caméra, micro, verrou | -| Partage | `sharing` | P3 stub | Simulé — gaps acceptés | -| À propos | `about` | P3 info | Informatif vendor | - -Matrice pilote : `root/tools/lab/gnome-settings-parity-matrix-rocky.json`. - ---- - -## 6. V0 Rocky — commandes gates - -```bash -# Session -node usr/lib/capsuleos/tools/validate-all.mjs -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id linux-rocky --scope pipeline - -# Collecte VM (SSH lab requis) -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-playbook.mjs --id linux-rocky --write -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-assets.mjs --id linux-rocky -bash root/tools/lab/vm-gnome-settings-interaction-playbook.sh -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-visual-investigation.mjs --id linux-rocky - -# Implémentation + sync -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs --id linux-rocky - -# Clôture V0 -node usr/lib/capsuleos/tools/lab/verify-gnome-settings-parity-chain.mjs --id linux-rocky --strict -node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs --id linux-rocky -node usr/lib/capsuleos/tools/lab/smoke-h6-gnome-settings-ready.mjs --id linux-rocky -node usr/lib/capsuleos/tools/validate-gnome-settings-pbsigma.mjs -node usr/lib/capsuleos/tools/lab/smoke-gnome-themes-scenarios.mjs -node usr/lib/capsuleos/tools/lab/generate-gnome-campaign-state.mjs --id linux-rocky --write -node usr/lib/capsuleos/tools/lab/smoke-gnome-campaign-state.mjs --id linux-rocky -``` - -**Critère done V0** : `smoke-gnome-campaign-state` vert · `summary.v0Closed === true` · PbΣ validateur vert. - ---- - -## 7. V1 — Propagation dérivés - -Ordre : Fedora → Ubuntu → Alma → AnduinOS. - -```bash -node usr/lib/capsuleos/tools/lab/run-gnome-toolkit-campaign.mjs --phase v1 --id linux-fedora -node usr/lib/capsuleos/tools/lab/run-gnome-toolkit-campaign.mjs --phase v1 --id linux-ubuntu -node usr/lib/capsuleos/tools/lab/run-gnome-toolkit-campaign.mjs --phase v1 --id linux-alma -node usr/lib/capsuleos/tools/lab/run-gnome-toolkit-campaign.mjs --phase v1 --id linux-anduinos -``` - -Par registry (R-LOC1) : -1. Matrices `gnome-settings-*-matrix-{vendor}.json` locales -2. Collecte VM dédiée — pas de copie valeurs Rocky -3. Delta assets `usr/share/capsuleos/assets/images/vendors//` -4. `run-capsule-pipeline.mjs --id ` -5. `smoke-h6-gnome-settings-ready.mjs --id ` - -Scripts propagation : voir [branche-redhat-gnome.md](branche-redhat-gnome.md) §6. - ---- - -## 8. V2–V4 — Applications GNOME - -Patron : [procedure-apps-replication-formelle.md](procedure-apps-replication-formelle.md) + [procedure-playbook-gnome-apps-overview.md](procedure-playbook-gnome-apps-overview.md). - -```bash -node usr/lib/capsuleos/tools/lab/run-gnome-toolkit-campaign.mjs --phase v2 --id linux-rocky -node usr/lib/capsuleos/tools/lab/run-apps-replication-chain.mjs --id linux-rocky --auto -``` - -| Vague | Slots | -|-------|-------| -| V2 P0 | `nemo`, `firefox`, `terminal`, `update_manager`, `text_editor`, `calculator` | -| V3 P1 | `clocks`, `visionneur_images`, `visionneur_pdf`, `snapshot`, `calendar`, `file_roller` | -| V4 P2 | `baobab`, `system_monitor`, `characters`, `tour` | - -Après chaque slot pilote Rocky : `sync-gnome-nautilus-skin.mjs`, `sync-gnome-workstation-skin.mjs`, `sync-gnome-utility-app-skins.mjs`. - ---- - -## 9. Skills agent - -| Besoin | Skill | -|--------|-------| -| Pilote Rocky | `distributions/linux-rocky` | -| Paramètres GNOME | `procedure-creation-playbook-gnome-settings.md` | -| HIG / chrome | `gnome-hig-replication` | -| Apps overview | `procedure-playbook-gnome-apps-overview.md` | - ---- - -## 10. Anti-patterns - -1. Fallback matrice Rocky sur Ubuntu (P11). -2. Clôture H₆ sans `smoke-gnome-campaign-state` (RealΣ). -3. Stub imprimantes/partage sans `contentGaps` documenté. -4. Playwright sur `home/` au lieu de façade `/OS/`. -5. Fork contrat scénarios par vendor au lieu du toolkit partagé. diff --git a/root/docs/cluster-registry.md b/root/docs/cluster-registry.md deleted file mode 100644 index 7c34eaeb..00000000 --- a/root/docs/cluster-registry.md +++ /dev/null @@ -1,26 +0,0 @@ -# Registre des clusters — gabarits CapsuleOS - -Classification hiérarchique des templates HTML/CSS. - -**Source JSON** : [`etc/capsuleos/cluster-registry.json`](../../etc/capsuleos/cluster-registry.json) -**Runtime** : `usr/lib/capsuleos/core/cluster-registry.js` -**Résolution** : `contentLoader.js` → `CapsuleClusterRegistry.resolveHtmlPath()` - -## Niveaux - -| Niveau | Exemple ID | Rôle | -|--------|------------|------| -| `kernel` | (dans kernels.json) | Specs OS | -| `branch` | `debian`, `kde` | Tokens branche Linux | -| `toolkit` | `toolkit.gnome` | Window chrome | -| `cluster` | `explorer.dolphin.kde` | HTML + CSS base | -| `leaf` | `linux-opensuse` | Overrides skin | - -## Regénération - -```bash -node usr/lib/capsuleos/tools/build-cluster-registry.mjs -node usr/lib/capsuleos/tools/build-cluster-registry.mjs --check # gate validate-capsule -``` - -Après toute modification de `etc/capsuleos/cluster-registry.json`, regénérer le runtime **avant** merge. diff --git a/root/docs/compatibilite-navigateurs.md b/root/docs/compatibilite-navigateurs.md deleted file mode 100644 index 92aa359c..00000000 --- a/root/docs/compatibilite-navigateurs.md +++ /dev/null @@ -1,38 +0,0 @@ -# Compatibilité navigateurs — CapsuleOS - -Matrice moteurs pour le noyau central (`CapsuleBrowserCapabilities`). - -## Moteurs supportés (développement et CI cible) - -| Moteur | Détection | Statut | -|--------|-----------|--------| -| Chromium / Blink | Chrome, Edge Chromium | Référence lab Playwright | -| Gecko | Firefox | Supporté — tests probes noyau | -| WebKit | Safari | Supporté — préfixes `-webkit-` | - -## Hors périmètre - -| Moteur | Raison | -|--------|--------| -| Trident (IE ≤ 10) | ES6 strict, pas de maintenance | -| EdgeHTML (Edge legacy) | Idem | - -Le module `usr/lib/capsuleos/engines/legacy-mshtml.js` affiche un avertissement explicite. - -## Capacités exposées - -- `clipboard` — presse-papiers async -- `serviceWorker` — mode hors ligne HTTP -- `customEvent` — bus `capsule:*` -- `maskImage` / `backdropFilter` — chrome et icônes -- `fileProtocolEmbed` — gabarits inline en `file://` - -## Mode lab - -Pick-os : 12 entrées (waves 1–5). Skins archivés : `?devSkin=` sur le portail. - -## Fichiers - -- `usr/lib/capsuleos/core/browser-capabilities.js` -- `usr/lib/capsuleos/engines/*.js` -- Gate : `validate-browser-capabilities.mjs` diff --git a/root/docs/contrat-liens.md b/root/docs/contrat-liens.md deleted file mode 100755 index 7d320f84..00000000 --- a/root/docs/contrat-liens.md +++ /dev/null @@ -1,32 +0,0 @@ -# Contrat et conformité - -## Référence unique - -Le contrat machine strict est **`writing.md`** à la racine du workspace Cursor : - -`/mnt/#TEAM/#INTERNE/#WEB/CapsuleOS/writing.md` - -(rel. workspace : `writing.md`) - -**Ne pas copier** ce fichier dans `root/`. Les agents doivent s’y référer pour : - -- langages autorisés (HTML5, CSS3, ES6) ; -- fidélité des OS simulés ; -- familles d’OS à couvrir ou extensibles ; -- intention pédagogique ; -- règles CSS (ordre des propriétés, variables) ; -- offline et structure rootfs. - -## Checklist opérationnelle - -Avant merge ou livraison : [checklist contrat](../../contrib.md#checklist-contrat-avant-merge-ou-release). - -Points sensibles Linux : variables `CAPSULE_*` avant scripts noyau, embeds, explorateurs (`CAPSULE_EXPLORER_TEMPLATE`), pas de doc sous `OS/`. - -## Skills associés - -| Sujet | Skill | -|-------|--------| -| Code | `skills/role-developer` | -| Conformité livrable | `skills/role-manager` | -| Intégration skins | `skills/role-integrator` | diff --git a/root/docs/contrats-ui-bureau.md b/root/docs/contrats-ui-bureau.md deleted file mode 100755 index cea97527..00000000 --- a/root/docs/contrats-ui-bureau.md +++ /dev/null @@ -1,61 +0,0 @@ -# Contrats UI — bureau, fenêtres, interactivité - -Cinq validateurs et skills transverses garantissent la cohérence du **système de fenêtres central** et de l’**interactivité vanilla** sur les ressources distribuées (skins `home/`, façades `OS/`). - -## Skills - -| Skill | Gate | Rôle | -|-------|------|------| -| [`window-side-effects`](../skills/window-side-effects/SKILL.md) | `validate-window-side-effects.mjs` | Profils `CAPSULE_WINDOW_CONTEXT`, ancrage `object#desktop`, chemins façade | -| — | `validate-window-chrome-contexts.mjs` | Contextes chrome par toolkit DE (Nemo/Nautilus/Dolphin) | -| [`css-selectors-contract`](../skills/css-selectors-contract/SKILL.md) | `validate-css-selectors-contract.mjs` | IDs/classes chrome + Nemo vs JS | -| [`css-variables-contract`](../skills/css-variables-contract/SKILL.md) | `validate-css-variables-contract.mjs` | `var(--*)` définies dans la chaîne thème — voir [convention-css-variables-tokens.md](../../docs/convention-css-variables-tokens.md) | -| [`vanilla-js-interactivity`](../skills/vanilla-js-interactivity/SKILL.md) | `validate-vanilla-interactivity.mjs` | Init slots, `resolveRelative`, handlers explorateur | -| — | `validate-interactions-contract.mjs` | Hover / active / focus / grab CSS + `requireHeader` Linux | - -Complément : [`window-desktop`](../skills/window-desktop/SKILL.md) (boot scripts WM). - -## Contrats machine - -- `etc/capsuleos/contracts/desktop-selectors.json` — IDs DOM contractuels -- `etc/capsuleos/contracts/css-variable-sources.json` — fichiers sources de variables - -Bibliothèque partagée : `usr/lib/capsuleos/tools/lib/ui-contract-lib.mjs` - -## Validation - -```bash -# Orchestrateur (5 validateurs) -node usr/lib/capsuleos/tools/validate-ui-contracts-all.mjs - -# Inclus dans validate-quality-all.mjs → validate-all.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -## Interactions (clic, hover, focus, drag) - -Fichier partagé : `usr/share/capsuleos/themes/global/interactions-window.base.css` (importé via `window-chrome.base.css` et façades Windows 11 / macOS Sonoma). - -| État | CSS / JS | -|------|----------| -| Survol boutons chrome | `:hover` dans `window-chrome.base.css` ou shell vendor | -| Clic enfoncé | `:active` sur `#windowHeader > nav > button` | -| Focus clavier | `:focus-visible` + fichiers `a11y-*.css` par skin (`body#…`) | -| Fenêtre active | `.windowElementActive` — `capsule-window-shell.js` / `stack.js` | -| Déplacement | `pointerdown` + `setPointerCapture` — `window/drag.js` ; **Linux** : `requireHeader: true` dans `capsule-window-context.js` | -| Poignée drag | `data-window-drag-handle` sur `#windowHeader` — `window/chrome.js` (sauf Firefox onglets, Nemo GNOME avec handle interne) | -| Curseur drag | `cursor: grab` / `grabbing` sur `#windowHeader` | - -## Règles transverses - -1. **Façades Linux P0** : `CAPSULE_CONTENT_ROOT = CapsuleUserHome.resolveRelative()` (pas `fromRepoDepth(3)`). -2. **Bureau Mint / Cinnamon** : `mainSelector` / `desktopSelector` = `object#desktop` ; `subtractFooter: false` si le CSS exclut déjà le panel. -3. **Nemo** : layout flex dans `nemo.base.css` ; drag depuis `#windowHeader` uniquement. -4. **Après noyau `window/`** : `node usr/lib/capsuleos/tools/build-capsule-window.mjs`. -5. **Après profil skin** : `node usr/lib/capsuleos/tools/build-skin-profiles.mjs`. - -## Références - -- [convention-contexte-fenetres.md](convention-contexte-fenetres.md) -- [mint-fenetres-muffin.md](mint-fenetres-muffin.md) -- [skills-hierarchie.md](skills-hierarchie.md) diff --git a/root/docs/convention-accueil-os.md b/root/docs/convention-accueil-os.md deleted file mode 100644 index 8bbce6c7..00000000 --- a/root/docs/convention-accueil-os.md +++ /dev/null @@ -1,264 +0,0 @@ -# Convention — accueil d’un nouvel OS (contributeur) - -> **Statut** : obligatoire (juin 2026) — humains et agents IA qui **branchent** une distribution sans impacter le noyau. -> **Public** : contributeur OS (leaf) · intégrateur noyau (PR Z1) · mainteneur recette. - -Complète sans remplacer : [ajouter-os-scalable.md](ajouter-os-scalable.md) (catalogue) · [convention-reproduction-os.md](convention-reproduction-os.md) (clone VM) · [processus-branchement-noyau.md](processus-branchement-noyau.md) (hooks noyau ↔ skin) · [logique-formelle.md](logique-formelle.md) (**R-LOC1**, **P11**). - -En cas de conflit → [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) prime. - ---- - -## 1. Objectif - -Permettre à un humain ou à un agent IA d’**accueillir** un nouvel OS dans CapsuleOS : - -- en recevant un **espace dédié** et une **recette** (ordre, gates, fin de travail) ; -- sans **modifier le noyau** (`usr/lib/`, `usr/share/`) pour contourner un manque de contrat ; -- en remontant vers l’intégrateur uniquement quand le **contrat public** du noyau doit évoluer. - -**Phrase-synthèse** : - -```text -Registre + profil recette → espace home/ + proc// → hooks documentés → gates leaf → PR intégrateur si Z1 -``` - ---- - -## 2. Espace contributeur (où écrire) - -| Zone | Chemin | Contributeur OS | Rôle | -|------|--------|-----------------|------| -| **Z2 — skin** | `home///` | **Libre** (HTML, CSS, JS vendor, tokens, chrome) | Source de vérité UI de la distro | -| **Z0 — vérité** | `proc//` | Via **pipeline lab** uniquement | Manifestes, playbooks, assets VM importés | -| **Z0 — déclaration** | `etc/capsuleos/profiles/.json` | **1 entrée** + miroir `skin.profile.json` | `CAPSULE_*`, packs assets, chrome context | -| **Z0 — catalogue** | `etc/capsuleos/os-registry.json` | **1 entrée** (ou générateur) | Identité leaf : `id`, `toolkit`, `facade`, `skin` | -| **Z0 — recette** | `etc/capsuleos/contracts/lab-recipe-profiles.json` | **1 profil** si toolkit lab couvert | Matrices, scripts collecte, `upstreamId`, bootstrap | -| **Z0 — inventaires** | `root/docs/inventaires/-*` | Générés / versionnés | État parité, clôture formelle | -| **Assets vendor** | `usr/share/capsuleos/assets/images/vendors//` | Pack **propre** au vendor | Logos, fonds — jamais empruntés à un autre vendor | -| **Matrices lab** | `root/tools/lab/*-matrix-.json` | Si GNOME Paramètres / campagnes | R-LOC1 — pas de matrice d’un autre vendor | - -**Z3 (`OS/...`)** : façade pick-os — **ne pas éditer à la main**. Régénérer : - -```bash -node usr/lib/capsuleos/tools/linux/build-linux-facades.mjs -# ou clôture globale : -node usr/lib/capsuleos/tools/sync-all-views.mjs -``` - ---- - -## 3. Zones interdites au contributeur OS (PR intégrateur) - -| Zone | Chemin | Pourquoi | -|------|--------|----------| -| **Z1 — noyau JS** | `usr/lib/capsuleos/` | Comportements partagés — régression cross-toolkit | -| **Z1 — gabarits système** | `usr/share/capsuleos/` (apps, explorers, themes) | Vérité embed — impacte toutes les distros du toolkit | -| **Z4 — embeds** | `var/lib/capsuleos/generated/` | Projection build — regen globale | -| **Contrats globaux** | `etc/capsuleos/contracts/*.json` (hors profil dédié) | Sauf PR avec `run-cross-regression-gates.mjs` | -| **Noyau archivé** | `OS/linux/kernel/` | **DEPRECATED** — ne pas étendre | - -**Règle** : si le besoin se résout par `if (registryId === '…')` dans `usr/lib/`, **stop** → ouvrir une PR intégrateur ou étendre le **contrat** (`skin.profile.json`, `window-chrome-contexts.json`, `cluster-registry.json`). - -**Signal d’escalade** (issue ou PR intégrateur) : - -- nouveau toolkit DE non couvert ; -- nouveau type d’explorateur (gabarit `usr/share/`) ; -- comportement WM / panel / menu absent des hooks [processus-branchement-noyau.md](processus-branchement-noyau.md) ; -- extension `CAPSULE_*` non listée dans le profil type. - ---- - -## 4. Deux chemins d’accueil - -### 4.1 Accueil à froid (sans VM) - -Objectif : **enregistrer** le leaf et livrer un skin **navigable minimal** (shell squelette, pick-os, smoke statique). - -| Étape | Action | -|-------|--------| -| 1 | Choisir **upstream** : même `toolkit` qu’une référence ([repertoire-os.md](repertoire-os.md)) | -| 2 | Entrée registre + profil — voir [ajouter-os-scalable.md §2–4](ajouter-os-scalable.md) | -| 3 | Copier skin proche sous `home/` ; adapter `bodyId`, tokens CSS, `strings.json` | -| 4 | Profil recette : `upstreamId` + `bootstrap` matrices — `bootstrap-gnome-settings-matrices.mjs` si GNOME | -| 5 | Gates **leaf** (pas `validate-all` global tant que `status: planned` si politique équipe) | - -```bash -node usr/lib/capsuleos/tools/print-agent-brief.mjs --write -node usr/lib/capsuleos/tools/lab/resolve-lab-recipe.mjs --id --human -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id --scope pipeline -``` - -**Definition of Done (froid)** : façade + home miroir · `skin.profile.json` valide · pick-os affiche l’entrée · ouverture `file://` sans 404 critiques · profil recette sans gap bloquant (R-LOC1). - -### 4.2 Maturation (avec VM ground truth) - -Objectif : parité documentée VM ↔ Capsule — workflow complet [convention-reproduction-os.md](convention-reproduction-os.md). - -| Étape | Action | -|-------|--------| -| 1 | `lab-inventory.json` + SSH VM | -| 2 | Inventaire `root/docs/inventaires/-vm.json` | -| 3 | Pipeline : `run-capsule-pipeline.mjs --id ` | -| 4 | Chaîne maturité : **M → ManΣ → AppΣ → PbΣ → Vp → VΣ → Tf → H₆** | - -**Definition of Done (maturation)** : prédicats du plan maître pour le `tier` cible · `validate-all.mjs` exit 0 · pas de fuite toolkit (`validate-toolkit-paradigm`, `validate-skin-vendor-isolation`). - ---- - -## 5. Recette = cadre de contribution - -La recette n’est **pas** le noyau : c’est la **politique d’orchestration** pour un `registryId`. - -| Source | Rôle | -|--------|------| -| `etc/capsuleos/contracts/lab-recipe-profiles.json` | Matrices, scripts collecte, bootstrap, `upstreamId` | -| `resolve-lab-recipe.mjs` | Gaps explicites — **P11** : pas de fallback silencieux vers un autre vendor | -| `resolve-agent-action.mjs` | Prochaine action pipeline admissible | -| `lab-recipe-resolver.mjs` | Algorithme **R-LOC1** | - -**Ajouter un profil recette** (contributeur autorisé sur Z0 dédié) : - -```json -"linux-exemple": { - "toolkit": "gnome", - "vendor": "exemple", - "upstreamId": "linux-ubuntu", - "matrices": { - "parity": "root/tools/lab/gnome-settings-parity-matrix-exemple.json", - "assets": "root/tools/lab/gnome-settings-assets-matrix-exemple.json", - "visual": "root/tools/lab/gnome-settings-visual-investigation-matrix-exemple.json" - }, - "bootstrap": { - "parity": "toolkit:gnome+upstream:linux-ubuntu", - "assets": "upstream:linux-ubuntu", - "visual": "toolkit:gnome+skinRewrite+upstream:linux-ubuntu" - } -} -``` - -Puis : - -```bash -node usr/lib/capsuleos/tools/lab/bootstrap-gnome-settings-matrices.mjs --id linux-exemple -node usr/lib/capsuleos/tools/lab/resolve-lab-recipe.mjs --id linux-exemple --human -``` - ---- - -## 6. Branchement noyau ↔ skin (sans toucher Z1) - -Le contributeur **branche** via : - -| Mécanisme | Fichier / lieu | -|-----------|----------------| -| Profil skin | `skin.profile.json` — `CAPSULE_*`, `assetsBase`, `toolkitPack`, `vendorPack` | -| DOM | `body#`, slots `data-link`, structure panel/tray | -| CSS | Tokens sous `body#` — variables, pas fork de modules noyau | -| JS vendor | `home/.../content/*.js` — tray, chrome, strings — **garde toolkit** | -| Registre apps | `etc/capsuleos/contracts/apps-catalog.json` → `registryOverrides.` si besoin | - -Table complète comportement → noyau → hook : [processus-branchement-noyau.md](processus-branchement-noyau.md). - -**Anti-patterns** (rejet PR) : - -- fork `contentLoader.js` ou `capsule-window.js` dans `home/` ; -- import du tray Mint sur un skin GNOME ; -- chemins `../../../usr/lib/` en dur dans le JS runtime skin ; -- édition manuelle des façades `OS/` ; -- assets empruntés à un autre vendor ([convention-assets-depuis-vm.md](convention-assets-depuis-vm.md)). - ---- - -## 7. Séquence agent (résumé) - -```bash -# 0 — baseline (intégrateur ou avant gros patch global) -node usr/lib/capsuleos/tools/validate-all.mjs - -# 1 — brief + recette -node usr/lib/capsuleos/tools/print-agent-brief.mjs --write -node usr/lib/capsuleos/tools/lab/resolve-lab-recipe.mjs --id --human - -# 2 — décision pipeline -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id --scope pipeline - -# 3 — implémentation sous home/ + proc/ + profils (§2) - -# 4 — clôture vues -node usr/lib/capsuleos/tools/sync-all-views.mjs - -# 5 — gates -node usr/lib/capsuleos/tools/validate-skin-profiles.mjs -node usr/lib/capsuleos/tools/validate-skin-icon-paths.mjs --id -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -Serveur local : `python3 -m http.server 8765 --bind 127.0.0.1` depuis la racine du dépôt. - ---- - -## 8. Revue PR — périmètre attendu - -### PR « accueil OS » (contributeur) - -**Autorisé** : - -- `home//…` -- `proc//…` -- `etc/capsuleos/profiles/.json` + entrée registre + `lab-recipe-profiles` (bloc du leaf) -- `usr/share/capsuleos/assets/images/vendors//…` -- `root/docs/inventaires/-*` -- `root/tools/lab/*-.json` (matrices du vendor) - -**Refusé sans label intégrateur** : - -- tout diff sous `usr/lib/capsuleos/` ou `usr/share/capsuleos/` hors pack vendor ; -- modification de contrats globaux partagés ; -- `var/lib/capsuleos/generated/` commité manuellement. - -### PR « extension noyau » (intégrateur) - -Obligatoire si §3 · exécuter : - -```bash -node usr/lib/capsuleos/tools/lab/run-cross-regression-gates.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - ---- - -## 9. Checklist copiable — accueil leaf - -``` -[ ] registryId choisi (1 identité utilisateur = 1 leaf) -[ ] toolkit existant confirmé — upstream documenté -[ ] Entrée os-registry + profil etc/capsuleos/profiles/.json -[ ] skin.profile.json miroir sous home/ -[ ] Profil lab-recipe-profiles (si GNOME lab) + matrices bootstrap -[ ] home// squelette depuis upstream toolkit -[ ] vendor pack sous assets/images/vendors// (pas d’emprunt) -[ ] Aucune édition manuelle OS/ — sync-linux-facades ou sync-all-views -[ ] resolve-lab-recipe sans gap bloquant (R-LOC1) -[ ] validate-skin-profiles + validate-skin-icon-paths --id -[ ] Smoke file:// : shell, 1 app, explorateur si slot présent -[ ] validate-all exit 0 (maturation) ou accord équipe (accueil froid planned) -[ ] Issue ou PR séparée si besoin Z1 (§3) -``` - ---- - -## 10. Documents liés - -| Besoin | Document | -|--------|----------| -| Catalogue & façade | [ajouter-os-scalable.md](ajouter-os-scalable.md) | -| Clone VM détaillé | [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) | -| Zones Z0–Z4 | [README.md](README.md) §2 | -| Clean code P12 | [convention-clean-code.md](convention-clean-code.md) | -| Gates par changement | [agent-validation-discipline.md](agent-validation-discipline.md) | -| Guide racine | [contrib.md](../../contrib.md) | - ---- - -*Un OS accueilli correctement n’élargit pas le noyau : il remplit son espace et consomme les services déjà publiés.* diff --git a/root/docs/convention-assets-depuis-vm.md b/root/docs/convention-assets-depuis-vm.md deleted file mode 100644 index cc60f603..00000000 --- a/root/docs/convention-assets-depuis-vm.md +++ /dev/null @@ -1,99 +0,0 @@ -# Convention — assets images et icônes depuis la VM (ground truth) - -> **Règle obligatoire** pour tout clone de distribution à partir d’une VM lab : les icônes et fonds d’écran affichés dans CapsuleOS doivent provenir de la **VM réelle**, pas d’un autre skin (Fedora générique, Mint-Y, pack Cinnamon du dépôt) ni d’icônes « proches » réinventées. -> Chemins VM + specs Internet : [referentiel-assets-vm-officiels.md](referentiel-assets-vm-officiels.md). - -Formalisation : prédicats **A**, **S**, **T** et règles **R-A1**–**R-S2** dans [logique-formelle.md](logique-formelle.md). - -## Pourquoi - -- Sous **GNOME**, l’explorateur est **Nautilus** (thème **Adwaita**) ; le slot CapsuleOS reste **`nemo`** (gabarit partagé) — voir [`inventaires/linux-gnome-capsule-slots.md`](inventaires/linux-gnome-capsule-slots.md). -- Réutiliser les assets Cinnamon sur Rocky produit des **icônes cassées** et une parité visuelle fausse. -- Un seul pack VM par vendor limite le stockage navigateur : pas de copie du thème Adwaita entier, seulement le **sous-ensemble utile**. - -## Zones CapsuleOS (inchangé) - -| Type | Chemin | Exemple Rocky | -|------|--------|---------------| -| Fond d’écran | `usr/share/capsuleos/assets/images/vendors//wallpaper/` | `rocky-default-10-gemstone-skies-night.png` | -| Lanceurs dock / panel | `.../vendors//panel/` | `org.gnome.Nautilus.svg`, `firefox-48.png`, `org.gnome.Ptyxis.svg` | -| Dossiers Nautilus (places) | `usr/share/capsuleos/assets/icons/gnome/adwaita/places/` | `folder-documents.svg`, `user-desktop.svg`, … | -| Symboles UI Nautilus | `icons/gnome/adwaita/symbolic/{actions,places,status}/` | barre d’outils + sidebar (remap depuis gabarit `nemo-gnome`) | -| Apps (optionnel) | `assets/images/toolkits/gnome/apps/` | copie VM si le dock réutilise ce pack | - -Traçabilité : fichier `SOURCE-VM.txt` dans `vendors//` (généré par le script). - -## Workflow - -### 1. Inventaire VM (avant copie) - -Sur la VM (SSH) : - -```bash -gsettings get org.gnome.desktop.interface icon-theme -gsettings get org.gnome.desktop.background picture-uri -grep ^Icon= /usr/share/applications/org.gnome.Nautilus.desktop -``` - -Noter : nom de l’app (**Nautilus**), thème icônes, fond par défaut. - -### 2. Pull automatisé (Rocky / GNOME) - -```bash -bash root/tools/lab/pull-vm-assets.sh --id linux-rocky -# ou : bash root/tools/lab/pull-vm-assets.sh --ssh --vendor rocky -``` - -Prérequis : `etc/capsuleos/lab-inventory.json`, clé SSH lab, session GNOME active sur la VM. - -### 2bis. Normalisation web (post-pull) - -Pipeline complet (pull + WebP + miniatures fonds + captures lab) : - -```bash -node usr/lib/capsuleos/tools/lab/run-vendor-assets-pipeline.mjs --id linux- -``` - -Ou manuellement — formats VM non affichables (ex. fonds **JXL**) : - -```bash -node usr/lib/capsuleos/tools/prepare-web-media.mjs --vendor rocky --rewrite-refs --wallpaper-thumbnails -# ou opt-in : PREPARE_WEB_MEDIA=1 bash root/tools/lab/pull-vm-assets.sh --id linux-rocky -``` - -Voir [spec-prepare-web-media.md](spec-prepare-web-media.md). Les **SVG** et **polices** ne passent pas par WebP. Miniatures sélecteur fonds : `wallpaper/thumbnails/*-thumb.webp`. - -### 3. Câblage noyau - -- Profil skin : `iconPacks: ["icons/gnome"]` dans `etc/capsuleos/profiles/linux-rocky.json`. -- Runtime : `usr/lib/capsuleos/shells/linux/fileExplorer/explorer-icon-base.js` (remap `cinnamon/nemo` → `gnome/adwaita/places` pour `body#rocky` / `#fedora`). -- Dock : `index.html` du skin pointe vers `vendors/rocky/panel/` (icônes VM). -- Fond : variable `--fedora-bg` → `url(.../vendors/rocky/wallpaper/...)`. - -### 4. Gates - -```bash -# Playbook Paramètres GNOME — présence absolue assets référencés -node usr/lib/capsuleos/tools/lab/verify-playbook-assets.mjs --registry linux-rocky --strict -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-assets.mjs --id linux-rocky - -node usr/lib/capsuleos/tools/validate-asset-zones.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -node root/tools/lab/capture-capsule-rocky.mjs # vérif visuelle -``` - -Voir [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) §0 (logique formelle gates **A** / **S**). - -## Ce qu’il ne faut pas faire - -- Copier le répertoire entier `/usr/share/icons/Adwaita/` dans le dépôt. -- Utiliser les icônes Mint-Y pour un skin GNOME « parce que le slot s’appelle nemo ». -- Générer des PNG/SVG « à la main » sans passe VM quand une VM lab est disponible. -- Oublier de relancer `pull-vm-assets.sh` après changement de version Rocky ou de thème GNOME sur la VM. - -## Références - -- Phase clone : [`procedure-clonage-os-depuis-vm.md`](procedure-clonage-os-depuis-vm.md) § Phase 3 -- Politique zones : [`politique-assets.md`](politique-assets.md) -- Lab Rocky : [`lab-vm-rhel-wayland.md`](lab-vm-rhel-wayland.md) -- Parité visuelle : [`inventaires/linux-rocky-comparaison-visuelle.md`](inventaires/linux-rocky-comparaison-visuelle.md) diff --git a/root/docs/convention-clean-code.md b/root/docs/convention-clean-code.md deleted file mode 100644 index 6daa021c..00000000 --- a/root/docs/convention-clean-code.md +++ /dev/null @@ -1,135 +0,0 @@ -# Convention — clean code CapsuleOS - -> **Statut** : **obligatoire** (juin 2026) — agents, contributeurs, revues · principe constitutionnel **P12** -> **Intègre par référence** : [README.md](README.md) (corpus & vision technique) — toute clause du README s’applique comme si elle figurait ici -> **Cloisonnement** : [fondements-philosophiques.md](fondements-philosophiques.md) §7 · zones [convention-reproduction-os.md](convention-reproduction-os.md) §2 · **P11** / **R-LOC1** - -**Objectif** : écrire **dans le bon contexte** — bonne zone Z0–Z4, bon `registryId`, bon toolkit — avec le **minimum de lignes** vérifiables par gates. Éviter doc, code et données **hors couche** qui parasitent agents et humains. - -**Règle Cursor** : `.cursor/rules/capsuleos-clean-code.mdc` (`alwaysApply`). - ---- - -## 1. Portée — trois surfaces - -| Surface | Où | Règle clean | -|---------|-----|-------------| -| **Code** | `usr/lib/`, `usr/share/`, `home/`, outils `usr/lib/capsuleos/tools/` | Zone + toolkit ; pas de fork par distro | -| **Documentation** | `root/docs/` | Corpus [README.md](README.md) ; pas de priorité parallèle | -| **Données** | `proc/`, `etc/`, `root/docs/inventaires/` | Vérité locale **P11** ; pas d’instantané éphémère versionné | - -Clean code CapsuleOS = **cloisonnement respecté** + **corpus respecté** + **gate avant merge**. - ---- - -## 2. Obligation corpus — contenu du README.md - -Toute écriture (code, doc, JSON, règle Cursor) doit être **compatible** avec [README.md](README.md). En résumé obligatoire : - -### 2.1 Avant d’écrire - -1. Lire **Canon** README §1 (fondements → logique → plan maître → phase active). -2. Résoudre la tâche : `run-capsule-pipeline.mjs --id ` ou `resolve-agent-action.mjs --scope pipeline`. -3. Identifier **zone** (Z0–Z4 plan maître §1 bis) et **couche** (core / toolkit / vendor / proc). - -### 2.2 Documentation — interdit hors contexte - -| Interdit | À la place | -|----------|------------| -| Nouvelle « roadmap » ou plan d’exécution parallèle | Entrée backlog §16 plan maître | -| Prioriser depuis `roadmap.md` ou un inventaire JSON | `generate-formal-advancement-report.mjs --write` | -| Committer `*-resolve.json` | Régénérer en session ; voir `.gitignore` | -| MD de procédure sans lien plan maître | Spécialisation listée README §2 | -| Commentaires TODO non classés P0/P1/P2 | Écart dans inventaire parité ou backlog | - -### 2.3 Code — interdit hors contexte - -| Interdit | À la place | -|----------|------------| -| Logique commune dans `home//` | `usr/lib/capsuleos/` ou cluster `toolkit-*` | -| Asset d’un vendor dans un autre skin | `vendors//` + **P11** | -| Matrice / playbook / manifeste emprunté | Artefact local ou FAIL (**R-LOC1**) | -| Script lab `smoke--.mjs` dupliqué | Smoke paramétré + contrat `apps-catalog.json` | -| Module parallèle au lieu d’étendre l’existant | Enrichir chaîne documentée (plan maître §0) | -| Patch skin sans `proc/` / gate **I** | Chaîne ManΣ ou inventaire VM | - -### 2.4 Données — interdit hors contexte - -| Interdit | À la place | -|----------|------------| -| Vérité VM inventée dans le skin | `proc//` | -| JSON d’état partiel de pipeline raté | Re-run ou ne pas versionner | -| Catalogue apps sans `registryId` | `apps-catalog.json` + overrides | - ---- - -## 3. Clean code et agnosticisme (P3, P4, P7) - -### 3.1 Noyau agnostique - -- **`usr/lib/capsuleos/common/`** : aucune mention vendor, aucun chemin `vendors/ubuntu` en dur. -- **Comportement partagé** ≥ 2 distros même toolkit → noyau ou `shells/linux/`, pas copie dans deux `home/`. - -### 3.2 Toolkit-first - -- Cinnamon, GNOME, KDE : variables et chrome dans `usr/share/capsuleos/themes/clusters/toolkit-/`. -- Le skin **configure** (tokens, `skin.profile.json`), il ne **réimplémente** pas le DE. - -### 3.3 Vendor-sealed - -- `home///` : layout, overrides CSS, refs assets **locaux** uniquement. -- Pas de « fallback » vers un autre vendor pour combler un trou (**P11**). - -### 3.4 Sobre (**P7**) - -Avant d’ajouter un fichier : - -1. Une gate ou un prédicat l’exige-t-il ? -2. Un fichier existant peut-il être **étendu** ? -3. La ligne ajoutée est-elle **donnée** (JSON/proc) plutôt que logique ? - -Si non aux trois → ne pas ajouter. - ---- - -## 4. Recette économe (code) - -Alignée plan maître §4.4 : - -```text -Donnée (proc/, inventaire, contrat JSON) - → génération ou binding (tokens, refs, grille) - → skin minimal - → smoke / validate-all -``` - -- **Diff minimal** : une intention, une zone, un gate vert. -- **Pas de commentaire narratif** : le code et le contrat portent la vérité ; commenter seulement invariant non évident. -- **ES modules** : outils lab Node ; noyau navigateur reste script classique sauf `import()` lazy documenté. - ---- - -## 5. Checklist avant commit (humain ou agent) - -- [ ] Tâche traçable au **plan maître** ou backlog §16 ? -- [ ] Zone Z0–Z4 correcte ? -- [ ] Pas d’écriture cross-vendor (**P11**) ? -- [ ] Pas de doc/inventaire parasite (README §3–§5) ? -- [ ] `validate-all.mjs` vert sur la zone touchée (**H₂**) ? -- [ ] Pas de nouveau module si extension possible (**P7**) ? - ---- - -## 6. Liens normatifs - -| Document | Lien | -|----------|------| -| [README.md](README.md) | Corpus — **inclus par référence** dans cette convention | -| [fondements-philosophiques.md](fondements-philosophiques.md) | **P12** | -| [logique-formelle.md](logique-formelle.md) | **R-LOC1**, **R-IMP1**, **R-AGN1** | -| [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) | Zones §1 bis, recette §4.4 | -| `.cursor/rules/logique-formelle-capsuleos.mdc` | Application agent | - ---- - -*Clean code ici ne désigne pas un style esthétique arbitraire : c’est l’**alignement des écritures sur les couches et le corpus**, au service de l’agnosticisme du noyau et du scellement vendor.* diff --git a/root/docs/convention-composants-cinnamon.md b/root/docs/convention-composants-cinnamon.md deleted file mode 100644 index faf6d9e6..00000000 --- a/root/docs/convention-composants-cinnamon.md +++ /dev/null @@ -1,77 +0,0 @@ -# Convention — composants Cinnamon (squelette) - -> **Statut** : **squelette** (juin 2026) — extension du modèle [convention-composants-gnome.md](convention-composants-gnome.md). -> **Contrat** : [`etc/capsuleos/contracts/ui-components-cinnamon.json`](../../etc/capsuleos/contracts/ui-components-cinnamon.json) -> **Référence distro** : `linux-mint` - ---- - -## 1. Objectif - -Reproduire les **apps par défaut Linux Mint / Cinnamon** avec la même méthode que GNOME : - -- composants N1 documentés (panel, menu, Nemo, tray, XApp…) ; -- compositions N2 par slot ; -- acquisition VM étiquetée `composant/état`. - -**Hors scope squelette** : catalogue complet des 101 apps Mint — priorité P0 shell + Nemo + Paramètres + mintinstall. - ---- - -## 2. Sources officielles - -| Source | URL | -|--------|-----| -| Projet Cinnamon | https://projects.linuxmint.com/cinnamon/ | -| Dépôt Cinnamon | https://github.com/linuxmint/Cinnamon | -| Nemo | https://github.com/linuxmint/nemo | -| Doc utilisateur Mint | https://linuxmint.com/documentation.php | -| Paradigme CapsuleOS | [paradigme-toolkit-cinnamon.md](paradigme-toolkit-cinnamon.md) | - -Pas de HIG unique type GNOME : s’appuyer sur **captures VM** + docs Mint + code Cinnamon (CJS). - ---- - -## 3. Composants N1 (squelette) - -Voir contrat JSON `components{}`. Synthèse : - -| ID | Surface | -|----|---------| -| `cinnamon.muffin-window` | Chrome fenêtre Muffin | -| `cinnamon.panel` | Panel 40px | -| `cinnamon.menu-popup` | Menu Démarrer | -| `cinnamon.nemo-explorer` | Nemo | -| `cinnamon.tray-applets` | Tray | -| `cinnamon.settings-panels` | cinnamon-settings | -| `cinnamon.xapp-window` | Apps mint-* / XApp | - ---- - -## 4. Sortie du statut skeleton - -Checklist pour passer `status: model` : - -``` -[ ] slotSpecs cinnamon dans apps-catalog.json -[x] validate-ui-components-cinnamon.mjs (aligné apps-catalog P0) -[ ] appCompositions P0 complétées (sans planned: true) -[x] mintSlotsAboutis couverts dans appCompositions (32 slots) -[ ] sync-mint-visual-investigation-compositions.mjs sur inventaire P0/P1 -[ ] Campagne VM linux-mint (AppV → AppC) -[ ] Lien convention-composants-ui.md § extension -``` - ---- - -## 5. Documents liés - -| Document | Rôle | -|----------|------| -| [convention-composants-ui.md](convention-composants-ui.md) | Cadre transversal | -| [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) | Clone Mint | -| [linux-mint-apps-catalog.json](inventaires/linux-mint-apps-catalog.json) | Catalogue existant | - ---- - -*Cinnamon partage des gabarits HTML avec d’autres toolkits (Nemo, Firefox) mais pas la grammaire visuelle — tokens `toolkit-cinnamon` obligatoires.* diff --git a/root/docs/convention-composants-gnome.md b/root/docs/convention-composants-gnome.md deleted file mode 100644 index 5475445a..00000000 --- a/root/docs/convention-composants-gnome.md +++ /dev/null @@ -1,236 +0,0 @@ -# Convention — composants GNOME (modèle, apps par défaut) - -> **Statut** : modèle de référence (juin 2026) — premier toolkit documenté ; Cinnamon/KDE suivront [convention-composants-ui.md](convention-composants-ui.md). -> **Contrat machine** : [`etc/capsuleos/contracts/ui-components-gnome.json`](../../etc/capsuleos/contracts/ui-components-gnome.json) - -**VM de référence design** : `linux-rocky` (RL10, GNOME natif RHEL). -**VM de référence ManΣ** : `linux-ubuntu` (écarts retail documentés dans `apps-catalog.json`). - ---- - -## 1. Sources officielles (obligatoires) - -| Source | URL | Usage | -|--------|-----|-------| -| **GNOME HIG** | https://developer.gnome.org/hig/ | Patterns UI normatifs | -| **HIG Resources** | https://developer.gnome.org/hig/resources.html | Outils design (Palette, Icon Library, Adwaita Demo) | -| **GNOME Components** | https://developer.gnome.org/components/ | Widgets libadwaita / GTK 4 | -| **libadwaita CSS** | https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/css-variables.html | Variables → tokens CapsuleOS | -| **Apps GNOME** | https://apps.gnome.org/fr/ | Périmètre apps Core | -| **Inventaire crawlé** | [gnome-hig-resources.json](inventaires/gnome-hig-resources.json) | 58 pages HIG indexées | - -Skill agent : [`gnome-hig-replication`](../skills/gnome-hig-replication/SKILL.md). - ---- - -## 2. Composants N1 (plateforme) - -Référence complète : champ `components` du contrat JSON. Synthèse : - -| ID contrat | Widget GNOME | Page HIG | Fichier CapsuleOS principal | -|------------|--------------|----------|----------------------------| -| `gnome.adw-application-window` | AdwApplicationWindow | [windows](https://developer.gnome.org/hig/patterns/containers/windows.html) | `gnome-app-csd.base.css` | -| `gnome.adw-header-bar` | AdwHeaderBar | [header-bars](https://developer.gnome.org/hig/patterns/containers/header-bars.html) | `gnome-app-csd.base.css` | -| `gnome.adw-navigation-split` | AdwNavigationSplitView | [sidebars](https://developer.gnome.org/hig/patterns/nav/sidebars.html) | `nemo.base.css` | -| `gnome.gtk-column-view` | GtkColumnView | [list-column-views](https://developer.gnome.org/hig/patterns/containers/list-column-views.html) | `nemo.base.css` | -| `gnome.gtk-search-entry` | GtkSearchEntry | [search](https://developer.gnome.org/hig/patterns/nav/search.html) | skins / overview | -| `gnome.adw-preferences-page` | AdwPreferencesPage | [settings](https://developer.gnome.org/hig/patterns/nav/settings.html) | `themes_gnome.base.css` | -| `gnome.adw-preferences-group` | AdwPreferencesGroup | [boxed-lists](https://developer.gnome.org/hig/patterns/containers/boxed-lists.html) | `gnome-shell-preferences.base.css` | -| `gnome.gtk-grid-view` | GtkGrid | [grid-views](https://developer.gnome.org/hig/patterns/containers/grid-views.html) | `calculator.base.css` | -| `gnome.popover` | GtkPopover | [popovers](https://developer.gnome.org/hig/patterns/containers/popovers.html) | apps (calc, menus) | -| `gnome.browser-chrome` | — (Firefox) | [tabs](https://developer.gnome.org/hig/patterns/nav/tabs.html) | `firefox.base.css` | -| `gnome.terminal-chrome` | — (Ptyxis) | header-bars | `terminal-ptyxis.base.css` | - -États UI à capturer par composant : champ `states` dans le contrat (hover, focus, selection, etc.). - ---- - -## 3. Apps par défaut — compositions N2 - -Chaque ligne = un **slot** `apps-catalog.json` · détail dans `appCompositions` du contrat. - -### 3.1 Core GNOME (RL10 / triplet RHEL) - -| Slot | App VM (.desktop) | Composants N1 clés | Priorité catalogue | -|------|-------------------|--------------------|--------------------| -| `nemo` | org.gnome.Nautilus | navigation-split, column-view, search | P0 | -| `firefox` | firefox | browser-chrome | P0 | -| `terminal` | org.gnome.Ptyxis | terminal-chrome | P0 | -| `update_manager` | org.gnome.Software | software-grid, search | P0 | -| `text_editor` | org.gnome.TextEditor | monospace-editor | P0 | -| `calculator` | org.gnome.Calculator | header-bar, grid-view, popover | P0 | -| `themes` | org.gnome.Settings | preferences-page, preferences-group | P0 | -| `clocks` | org.gnome.clocks | clocks-face | P1 | -| `visionneur_pdf` | org.gnome.Papers | media-viewer, toolbar-view | P1 | -| `visionneur_images` | org.gnome.Loupe | media-viewer | P1 | -| `snapshot` | org.gnome.Snapshot | camera-preview | P1 | -| `calendar` | org.gnome.Calendar | calendar-grid | P1 | -| `baobab` | org.gnome.baobab | chart-disk-usage | P2 | -| `system_monitor` | org.gnome.SystemMonitor | system-metrics | P2 | -| `tour` | org.gnome.Tour | welcome-flow | P2 | -| `characters` | org.gnome.Characters | character-grid | P2 | - -### 3.2 Spécifiques CapsuleOS / retail (hors Core strict) - -| Slot | Note | Référence | -|------|------|-----------| -| `screenshot` | Quick Settings Rocky — simulé | `linux-rocky` | -| `profile` | À propos distro — simulé | chaque vendor | -| `checklist` | Pédagogie CapsuleOS | `capsuleOnly` | -| `librewriter` | Flatpak/deb optionnel | `linux-ubuntu` retail | -| `lecteur_multimedia` | Rhythmbox Ubuntu | `linux-ubuntu` retail | - -Les écarts **par distro** restent dans `registryOverrides` ; la **composition** reste commune. - ---- - -## 4. Campagne VM — entraînement intensif (catalogue) - -Ordre recommandé pour constituer le catalogue GNOME sur **linux-rocky** : - -### Phase A — Inventaire apps - -```bash -node usr/lib/capsuleos/tools/lab/collect-vm-apps-inventory.mjs --id linux-rocky --write --ssh -node usr/lib/capsuleos/tools/lab/generate-apps-catalog.mjs --id linux-rocky --write -node usr/lib/capsuleos/tools/lab/smoke-apps-catalog.mjs --id linux-rocky -``` - -### Phase B — Acquisition par composant (P0) - -Pour chaque slot P0, exécuter `acquisitionOrder` du contrat : - -| # | Slot | Vues à capturer sur VM | -|---|------|------------------------| -| 1 | `nemo` | sidebar, colonnes, fil d'Ariane, menu contextuel fichier | -| 2 | `firefox` | onglets, URL, menu | -| 3 | `terminal` | headerbar, onglets, palette | -| 4 | `update_manager` | explorer, détail app, mises à jour | -| 5 | `text_editor` | document vide, avec texte | -| 6 | `calculator` | basique, avancée, historique | -| 7 | `themes` | Wi-Fi, Affichage, À propos (playbook Paramètres) | - -```bash -node usr/lib/capsuleos/tools/lab/collect-vm-apps-visual-investigation.mjs --id linux-rocky --filter P0 --ssh -node usr/lib/capsuleos/tools/lab/collect-capsule-apps-visual-investigation.mjs --id linux-rocky -node usr/lib/capsuleos/tools/lab/enrich-apps-visual-investigation-parity.mjs --id linux-rocky -``` - -### Phase C — Fidélité **contenu** applicatif (overview, hors Nautilus / Paramètres) - -**Périmètre actif** : apps visibles dans l’**Aperçu** (`data-overview-link`) dont le chrome N1 est déjà crédible, mais le **contenu simulé** (proportions, alignements, libellés, données factices) n’est pas encore aligné VM. - -**Hors scope Phase C** (déjà clôturés) : - -| Slot | Raison | -|------|--------| -| `nemo` | Nautilus — parité explorateur + menus | -| `themes` | Paramètres GNOME — chaîne gsettings / playbook H₆ | - -**Cible** : couche **N2 contenu** — gabarit HTML + `*.skin.css` (grilles, sidebar, textes, états vides), pas le CSD ni le shell. - -#### Priorité overview Rocky - -| Vague | Slots | `functionalDepth` catalogue | Focus contenu | -|-------|-------|----------------------------|---------------| -| **C1 — Dash + overview P0** | `firefox`, `update_manager`, `calculator`, `text_editor`, `terminal` | partial / full | proportions fenêtre, mock data VM, typo `--font-ui` | -| **C2 — Overview P1** | `clocks`, `visionneur_images`, `visionneur_pdf`, `snapshot` | partial | vues par défaut, barres d’outils, placeholders | -| **C3 — Overview P2** | `characters`, `system_monitor`, `baobab`, `tour` | partial | grilles, graphiques, cartes | -| **C4 — Décoratif overview** | icônes sans slot (Disques, Polices, SELinux…) | decorative | icône + libellé grille uniquement | - -#### Grille d’audit contenu (par slot) - -Pour chaque app, comparer VM ↔ Capsule (même viewport 1280×800) : - -| Dimension | Exemple | -|-----------|---------| -| **Proportions** | largeur sidebar Logiciels, ratio pavé Calculatrice, hauteur headerbar vs contenu | -| **Position** | padding contenu, centrage titre, offset recherche | -| **Alignement** | baseline libellés liste, icônes symboliques 16px | -| **Contenu pur** | libellés FR VM, compteurs (badges mises à jour), noms paquets fictifs crédibles, état vide | - -Livrable par slot : entrée `contentSpec` dans `*-apps-visual-investigation.json` (`contentGaps[]`) + patch `usr/share/.../*.html` et `home/.../style/apps/*.skin.css`. - -```bash -# Captures VM réelles par app (une fenêtre ouverte — pas virsh plein bureau) -# Sur VM : gtk-launch puis gnome-screenshot -w - -CAPSULE_HTTP_BASE=http://127.0.0.1:8765 node usr/lib/capsuleos/tools/lab/collect-capsule-apps-visual-investigation.mjs --id linux-rocky -# Comparaison manuelle ou run-visual-parity-pass par slot -node usr/lib/capsuleos/tools/lab/run-apps-lab.mjs --id linux-rocky --playwright -``` - -Prédicat cible : **AppCt** (contenu aligné) — extension de **AppVp** ; `visualMatch: partial` → `match` quand `contentGaps` est vide. - -### Phase D — Clôture globale - -```bash -node usr/lib/capsuleos/tools/lab/validate-ui-components-gnome.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - ---- - -## 5. Reproduction CapsuleOS (sans redondance) - -```text -Contrat appCompositions - → gabarit HTML (usr/share/capsuleos/linux/apps/) - → *.base.css (N1 partagé) - → *.skin.css (tokens vendor sous home/) - → sync-gnome-utility-app-skins.mjs / pack.json -``` - -**Ne pas** recréer une headerbar dans Fedora si Rocky l’a déjà définie — synchroniser via `toolkit-gnome/pack.json`. - -Provider chrome : `etc/capsuleos/contracts/window-chrome-contexts.json` (`libadwaita-gnome`, `nemo-gnome`, …). - ---- - -## 6. Ajouter un composant ou une app - -1. Lire la page HIG / fiche GNOME Components correspondante. -2. Ajouter l’entrée dans `components` ou `appCompositions` du contrat JSON. -3. Vérifier que `template` et `baseCss` existent (ou PR intégrateur Z1). -4. Lier le slot dans `apps-catalog.json` → `toolkits.gnome.slotSpecs`. -5. `node usr/lib/capsuleos/tools/validate-ui-components-gnome.mjs` - ---- - -## 7. Extension autres distros GNOME - -| registryId | Action | -|------------|--------| -| `linux-fedora` | `registryOverrides` + sync skins depuis Rocky | -| `linux-ubuntu` | Écarts retail (`snap-store`, Rhythmbox…) — compositions inchangées | -| `linux-alma` | Héritage Rocky — pas de nouveau composant | - -Nouveau leaf GNOME : [convention-accueil-os.md](convention-accueil-os.md) — **pas** de fork composant. - ---- - -## 8. Hors scope actuel (documenté pour suite) - -| Surface | Raison | Extension future | -|---------|--------|------------------| -| GNOME Shell (panel, overview, QS) | Shell ≠ app GTK | `ui-components-gnome-shell.json` | -| Extensions tierces | Non default | — | -| Apps Flatpak non installées VM | Hors default | entrée `distroOptional` | - ---- - -## 9. Checklist composant GNOME - -``` -[ ] higUrl ou gnomeComponents référencé -[ ] Entrée components{} avec states + acquisitionVm -[ ] appCompositions{} avec acquisitionOrder -[ ] template + baseCss présents sur disque -[ ] slotSpecs apps-catalog aligné (même clé slot) -[ ] validate-ui-components-gnome → exit 0 -[ ] Captures VM étiquetées composant/état -``` - ---- - -*GNOME est le modèle : les autres toolkits répliquent cette forme (contrat JSON + convention + validateur + campagne VM).* diff --git a/root/docs/convention-composants-ui.md b/root/docs/convention-composants-ui.md deleted file mode 100644 index 3c9aeef6..00000000 --- a/root/docs/convention-composants-ui.md +++ /dev/null @@ -1,129 +0,0 @@ -# Convention — composants UI documentés (tous environnements de bureau) - -> **Statut** : obligatoire (juin 2026) — cadre transversal pour acquisition graphique VM, reproduction fidèle et anti-redondance. -> **Modèle initial** : [convention-composants-gnome.md](convention-composants-gnome.md) · contrat `etc/capsuleos/contracts/ui-components-gnome.json` - -Complète : [procedure-apps-catalog.md](procedure-apps-catalog.md) · [convention-fidelite-visuelle.md](convention-fidelite-visuelle.md) · [gnome-hig-ressources.md](gnome-hig-ressources.md) - ---- - -## 1. Objectif - -Éviter que chaque application ou chaque distribution soit clonée **en silo**. À la place : - -1. **Lire** les ressources officielles du bureau (HIG, Components, docs distro). -2. **Découper** l’interface en **composants réutilisables** (N1). -3. **Assembler** les apps par défaut (N2) à partir de ces composants. -4. **Acquérir** sur VM par composant et par état UI, pas seulement par capture plein écran. -5. **Étendre** toolkit par toolkit (GNOME → Cinnamon → KDE → …). - -**Périmètre actuel** : **applications installées par défaut** sur la VM de référence — pas les apps tierces optionnelles, pas encore le shell complet (panel, overview) sauf mention pour extension. - ---- - -## 2. Trois niveaux (tous toolkits) - -| Niveau | Nom | Emplacement CapsuleOS | Documenté dans | -|--------|-----|----------------------|----------------| -| **N0** | Primitives (tokens, typo, palette) | `usr/share/capsuleos/themes/clusters/toolkit-*/` | Contrat toolkit + [convention-fidelite-visuelle.md](convention-fidelite-visuelle.md) | -| **N1** | Composants plateforme | `*.base.css`, sélecteurs gabarits | `ui-components-.json` → `components` | -| **N2** | Compositions (slots apps) | `usr/share/capsuleos/linux/apps/*.html` + `style/apps/*.skin.css` | `ui-components-.json` → `appCompositions` | - -**Règle** : l’API publique reste les **variables CSS** ([manifeste-noyau.md](manifeste-noyau.md)) — les composants documentent structure + tokens, pas une lib JS parallèle. - ---- - -## 3. Sources officielles (par toolkit) - -| Toolkit | Sources web obligatoires | Contrat CapsuleOS | -|---------|-------------------------|-------------------| -| **GNOME** (modèle) | [HIG](https://developer.gnome.org/hig/) · [Components](https://developer.gnome.org/components/) · [apps.gnome.org](https://apps.gnome.org/fr/) · libadwaita CSS | `ui-components-gnome.json` | -| **Cinnamon** | [Cinnamon](https://projects.linuxmint.com/cinnamon/) · Nemo · [convention-composants-cinnamon.md](convention-composants-cinnamon.md) | `ui-components-cinnamon.json` *(squelette)* | -| **KDE** | [HIG Plasma](https://develop.kde.org/hig/) · Dolphin | `ui-components-kde.json` *(à créer)* | -| **COSMIC** | System76 COSMIC docs | `ui-components-cosmic.json` *(à créer)* | - -Inventaire HIG crawlé : [`inventaires/gnome-hig-resources.json`](inventaires/gnome-hig-resources.json). - ---- - -## 4. Méthode d’acquisition VM (apps par défaut) - -Pour chaque slot **N2** du contrat toolkit : - -```text -1. Ouvrir l’app sur VM ground truth (référence : linux-rocky pour GNOME design) -2. Parcourir acquisitionOrder du contrat (vues / panneaux / états) -3. Pour chaque vue : identifier les composants N1 visibles -4. Capturer + noter mesures (px/rem, couleurs, polices) → inventaire visuel -5. Comparer CapsuleOS au niveau composant (pas seulement fenêtre entière) -6. Ajuster tokens skin vendor — pas fork gabarit Z1 sauf PR intégrateur -``` - -Chaîne formelle existante : **AppV → AppC → AppVv → AppVp** ([procedure-apps-replication-formelle.md](procedure-apps-replication-formelle.md)). - -Le contrat composants **enrichit** AppVv : chaque capture est étiquetée `composantId + état`. - ---- - -## 5. Lien catalogue apps - -| Artefact | Rôle | -|----------|------| -| `apps-catalog.json` | Quelles apps **sur cette distro** (`registryOverrides`) | -| `ui-components-.json` | Comment **reproduire** chaque slot (composition N1) | - -Un même slot `calculator` sert Rocky, Fedora, Ubuntu : **une composition**, skins dérivés via `toolkit-gnome/pack.json`. - -```bash -node usr/lib/capsuleos/tools/lab/collect-vm-apps-inventory.mjs --id linux-rocky --write --ssh -node usr/lib/capsuleos/tools/lab/generate-apps-catalog.mjs --id linux-rocky --write -node usr/lib/capsuleos/tools/validate-ui-components-gnome.mjs -``` - ---- - -## 6. Extension progressive - -| Phase | Livrable | -|-------|----------| -| **1 — GNOME modèle** | `ui-components-gnome.json` + convention GNOME + validateur | -| **2 — Campagne VM Rocky** | Inventaire composant par slot P0/P1 | -| **3 — Cinnamon** | Contrat miroir (Nemo, menu Cinnamon, boxed lists Mint) | -| **4 — KDE** | Contrat Dolphin / Kirigami | -| **5 — Shell surfaces** | Composants panel, overview, tray (hors scope apps actuel) | - ---- - -## 7. Anti-patterns - -| Interdit | Alternative | -|----------|-------------| -| Nouveau `*.html` app sans entrée `appCompositions` | Ajouter au contrat toolkit d’abord | -| Dupliquer headerbar CSD par app | Réutiliser `gnome.adw-header-bar` + tokens | -| Captures VM sans étiquette composant | `acquisitionOrder` + `states` du contrat | -| Composants JS framework dans `home/` | Tokens CSS + gabarit Z1 | -| Ignorer HIG au profit d’intuition | Lien `higUrl` obligatoire par composant N1 | - ---- - -## 8. Validation - -```bash -node usr/lib/capsuleos/tools/validate-ui-components-gnome.mjs -node usr/lib/capsuleos/tools/validate-ui-contracts-all.mjs # inclus -``` - ---- - -## 9. Documents liés - -| Document | Rôle | -|----------|------| -| [convention-composants-gnome.md](convention-composants-gnome.md) | Détail modèle GNOME | -| [convention-accueil-os.md](convention-accueil-os.md) | Espace contributeur distro | -| [procedure-apps-catalog.md](procedure-apps-catalog.md) | Prédicats AppΣ | -| Skill `gnome-hig-replication` | Routage pages HIG | - ---- - -*Un toolkit documenté = une grammaire visuelle partagée ; une distro = une dialecte tokens sur la même grammaire.* diff --git a/root/docs/convention-contexte-fenetres.md b/root/docs/convention-contexte-fenetres.md deleted file mode 100755 index fbdd581d..00000000 --- a/root/docs/convention-contexte-fenetres.md +++ /dev/null @@ -1,81 +0,0 @@ -# Convention — contexte fenêtres (référence macOS Sonoma) - -Objectif : **même cycle de vie** que macOS Sonoma (ouverture → chrome → drag → resize → activation) sur **tous les vendors** CapsuleOS (Linux, Windows, macOS, Android), avec un habillage visuel par toolkit. - -## Référence fonctionnelle - -macOS Sonoma : à chaque ouverture de `.windowElement`, le shell clone le chrome, appelle `makeDraggable` + `makeResizable`, active la fenêtre. C’est le comportement cible, factorisé dans le noyau commun. - -## Modules communs (`usr/lib/capsuleos/shells/common/`) - -| Script | Rôle | -|--------|------| -| `capsule-window-context.js` | `CAPSULE_WINDOW_CONTEXT` + défauts par famille (`linux`, `macos`, `windows`, `android`) | -| `capsule-window-shell.js` | `CapsuleWindowShell` — ouverture/fermeture, liens `target="windowElement"` | -| `capsule-desktop-shell.js` | Garde-fou chargement + `boot()` | -| `capsule-window-header-buttons.js` | Fermer / réduire / maximiser (`.windowElement`, `.win-window`) | - -Noyau : `common/capsule-window.js`, `resizeWindow.js`, `window-drag.js`. - -## Ordre de chargement (toutes familles) - -1. `capsule-window.js` → `resizeWindow.js` → `window-drag.js` -2. Scripts **common** ci-dessus (dans l’ordre du tableau) -3. Shell vendor : - - Linux : `shells/linux/windowContainer.js` - - macOS : `OS/macos/…/js/windowContainer.js` - - Windows : `kernel/js/windowManager.js` (après `win-window-drag.js`) - - Android : `OS/android/js/windowContainer.js` - -Optionnel : `window.CAPSULE_WINDOW_FAMILY = 'linux'|'macos'|'windows'|'android'` ou profil `skin.profile.json` → `capsuleGlobals.CAPSULE_WINDOW_CONTEXT` et `CAPSULE_WINDOW_CHROME_CONTEXT` (toolkit DE : cinnamon, gnome, kde). Voir [window-chrome-contexts.md](window-chrome-contexts.md). - -## Contexte déclaratif - -```js -window.CAPSULE_WINDOW_CONTEXT = { - draggable: true, - resizable: true, - forceOnOpen: true, - skipSlots: ['mainMenu'], - bounds: { - mainSelector: 'object#desktop, #desktop', - desktopSelector: 'object#desktop, #desktop', - footerSelector: 'footer, #tableau', - subtractFooter: false, // #desktop CSS exclut déjà le panel Mint - }, -}; -``` - -Source canonique : `etc/capsuleos/profiles/linux-mint.json` → `node usr/lib/capsuleos/tools/build-skin-profiles.mjs` (obligatoire après modification du contexte). - -API globale : `CapsuleWindowContext` (alias `CapsuleLinuxWindowContext`). - -## Cycle de vie - -1. Clic lien → `CapsuleWindowShell.handleOpen` -2. Affichage + `beforeOpen` (tailles CSS Linux, icônes KDE, iframe Finder macOS, …) -3. `CapsuleWindowContext.ensureWindowChrome` + `applyWindowInteraction({ force: true })` -4. Injection app → `capsule:slot-injected` → re-bind -5. Boutons header → `capsule-window-header-buttons.js` - -### Headerbar sans zone vide (Nautilus, Firefox onglets, …) - -Poignée `data-window-drag-passthrough="true"` : les clics sur boutons/liens ne déplacent pas la fenêtre. Le grab passe par des **`data-window-drag-region`** (bandes flex ou calque sous les contrôles). Double-clic et clic droit titre : `gnome-window-behaviors.js` (GNOME) / `cinnamon-window-behaviors.js` (Mint). Module : `common/window/drag-targets.js`. - -## Gate - -```bash -node usr/lib/capsuleos/tools/validate-desktop-window-boot.mjs -``` - -(intégré à `validate-capsule.mjs`) - -## Skills - -- `window-desktop` — diagnostic drag/resize -- `os-linux` / vendors — habillage CSS uniquement ; pas de logique drag dupliquée - -## Références - -- [usr/lib/capsuleos/common/window/README.md](../../usr/lib/capsuleos/common/window/README.md) -- [contrib.md § Noyau fenêtre](../../contrib.md#12-noyau-fenetre-capsule-windowjs) diff --git a/root/docs/convention-contrib-apps.md b/root/docs/convention-contrib-apps.md deleted file mode 100644 index 8e8a08dd..00000000 --- a/root/docs/convention-contrib-apps.md +++ /dev/null @@ -1,178 +0,0 @@ -# Convention — applications contrib et internet simulé - -> **Statut** : juin 2026 — paradigme contribution apps transversales + corpus web local. -> Complète : [architecture-catalogue-apps.md](architecture-catalogue-apps.md) · [convention-modules-mnt.md](convention-modules-mnt.md) · [politique-assets.md](politique-assets.md) - -## 1. Quatre couches - -| Couche | Chemin | Rôle | -|--------|--------|------| -| **Fonction** | `usr/share/capsuleos/linux/apps/` + `usr/lib/capsuleos/shells/linux/` | Slot, gabarit HTML, kernel (ex. `firefox.html`, `firefoxBrowser.js`) | -| **Contrib app** | `usr/share/capsuleos/contrib/{catégorie}/{vendor}/{app}/` | Manifeste, moteur de recherche, favoris — **pas** de duplication du gabarit | -| **Web simulé** | `usr/share/capsuleos/web/{siteId}/` | Sites statiques servis en local (offline-first) | -| **Présentation** | `home/*/style/apps/*.skin.css` | Chrome vendor (Proton, onglets, couleurs) | - -Index machine (Z0) : [`etc/capsuleos/contracts/simulated-web-index.json`](../../etc/capsuleos/contracts/simulated-web-index.json) -Runtime généré : `var/lib/capsuleos/generated/capsule-simulated-web-index.js` · `capsule-firefox-contrib.js` - -## 2. Arborescence contrib - -```text -usr/share/capsuleos/contrib/internet/browser/mozilla/firefox/ -├── manifest.json -├── search-engine.json -├── bookmarks.default.json -└── README.md -``` - -Catégories suggérées : `internet/browser`, `internet/email`, `office`, `multimedia`, `system`. - -## 3. Arborescence web - -```text -usr/share/capsuleos/web/{siteId}/ -├── site.json # hosts[], titre, licence contenu -└── index.html -``` - -Gabarit minimal : [`usr/share/capsuleos/web/_template/`](../usr/share/capsuleos/web/_template/). - -## 4. Règles (R-CONTRIB) - -| Id | Règle | -|----|-------| -| **R-CONTRIB1** | Todo package contrib déclare `manifest.json` + `slotId` existant dans `slots-manifest.json` | -| **R-CONTRIB2** | Contenu web **original** ou licence documentée dans `site.json` — pas de scrape intégral de sites tiers | -| **R-CONTRIB3** | Hosts déclarés dans `site.json` + index — pas de hardcode dans le kernel navigateur | -| **R-CONTRIB4** | Modules `/mnt` référencés par id stable dans l’index (`type: mnt`) | -| **R-CONTRIB5** | Gates `validate-contrib-packages.mjs` + `validate-simulated-web.mjs` avant merge | - -## 5. Résolution URL (navigateur) - -| Entrée | Comportement | -|--------|--------------| -| Vide / `about:newtab` | Nouvel onglet | -| Texte sans `.` (recherche) | SERP locale (`search-google?q=…`) | -| Host connu | Iframe → `web/{siteId}/` | -| `capsuleos://mnt/{moduleId}/{scenarioId}` | Ouverture scénario pédagogique | -| Inconnu | Page d’erreur réseau simulée | - -Kernel : [`simulatedWebResolver.js`](../../usr/lib/capsuleos/shells/linux/simulatedWebResolver.js) · consommé par [`firefoxBrowser.js`](../../usr/lib/capsuleos/shells/linux/firefoxBrowser.js). - -## 6. Checklist contributeur - -1. Copier `web/_template/` → `web/{siteId}/`, remplir `site.json`. -2. `node usr/lib/capsuleos/tools/build-simulated-web-index.mjs` -3. `node usr/lib/capsuleos/tools/build-firefox-contrib-bundle.mjs` -4. `node usr/lib/capsuleos/tools/validate-simulated-web.mjs` -5. `node usr/lib/capsuleos/tools/validate-contrib-packages.mjs` -6. Tester : `python3 -m http.server` à la racine → Firefox → saisir le host déclaré. -7. En-têtes SPDX sur nouveaux fichiers JS/MJS. -8. Modèles PR : [`templates/contrib-pr-nouveau-site-web.md`](templates/contrib-pr-nouveau-site-web.md) · [`templates/contrib-pr-favori-firefox.md`](templates/contrib-pr-favori-firefox.md) - -## 7. Réalisme (P9 / P10) - -- **Chrome navigateur** : tokens couleur et chrome fenêtre par vendor (`firefox.skin.css`, inventaires lab) — **pas** de gabarit HTML vendor pour Firefox. -- **Moteur web** : simulé, local, sans Gecko — objectif immersion pédagogique, pas clone Mozilla complet. - -## 8. Firefox — slot partagé (toutes distributions) - -Firefox est **transversal** : une seule fonction (kernel + gabarit Z1), plusieurs présentations (skins). - -| Couche | Chemin | Contenu | -|--------|--------|---------| -| **Kernel** | `usr/lib/capsuleos/shells/linux/firefoxBrowser.js` | Onglets, navigation, résolution URL (`simulatedWebResolver.js`) | -| **Gabarit** | `usr/share/capsuleos/linux/apps/firefox.html` | DOM Proton (`capsule-browser--proton`) — toolbar, newtab, 7 raccourcis, Pocket | -| **CSS structurel** | `firefox.base.css` + `firefox-proton.base.css` | Layout Proton · assets `images/toolkits/firefox/` (pull VM) | -| **Skin vendor** | `home/*/style/apps/firefox.skin.css` | Tokens couleur, onglets actifs, chrome fenêtre (CSD GNOME vs Muffin Mint) | -| **Données contrib** | `usr/share/capsuleos/contrib/internet/browser/mozilla/firefox/` | Favoris, moteur recherche — **sans** dupliquer le gabarit | - -### Règle R-FF-SLOT - -| Id | Règle | -|----|-------| -| **R-FF-SLOT1** | **Interdit** : `home/{Vendor}/apps/firefox.html` — la parité VM se promeut dans le slot Z1, pas en override skin | -| **R-FF-SLOT2** | Styles Proton structurels → `firefox-proton.base.css` (embed via `build-linux-embed.mjs`) | -| **R-FF-SLOT3** | Skins : tokens + `--firefox-proton-brand-logo` vendor uniquement | -| **R-FF-SLOT4** | Nouveau raccourci newtab → asset dans `usr/share/capsuleos/assets/images/toolkits/firefox/newtab/` + `pull-firefox-vm-assets.sh` si sourcing VM | - -### Règle R-CENTRAL-SLOT (gabarits fonctionnels Z1) - -| Id | Règle | -|----|-------| -| **R-CENTRAL-SLOT1** | **Interdit** : `home/{Vendor}/apps/{slot}.html` hors allowlist (`mainMenu.html`, `mainMenu-gnome.html`) — promouvoir en Z1 + `CAPSULE_TEMPLATE_OVERRIDES` si variant toolkit ≠ `{slot}.html` | -| **R-CENTRAL-SLOT2** | Variants multi-toolkit : gabarits explicites (`visionneur_images_pix.html`, `cinnamon_settings.html`, `update_manager_gnome.html`) dans `usr/share/capsuleos/linux/apps/` | -| **R-CENTRAL-SLOT3** | Skins : `home/*/style/apps/*.skin.css` uniquement (tokens, icônes toolbar) | -| **R-CENTRAL-SLOT4** | Gate `validate-skin-app-html-overrides.mjs` avant merge | - -**Correction juin 2026 (Mint)** : `home/Debian/Mint/apps/` supprimé — visionneurs Pix/Xreader promus en Z1 ; Paramètres via `cinnamon_settings.html` (slot `themes`). - -### Pourquoi un override skin ne se propage pas - -`contentLoader.js` résout le gabarit via `resolveTemplateHtmlCandidates()` : un fichier sous `home/{Vendor}/apps/{slot}.html` **primait** sur `usr/share/capsuleos/linux/apps/` (désormais bloqué par R-CENTRAL-SLOT). La parité VM doit remonter en Z1 ou passer par `CAPSULE_TEMPLATE_OVERRIDES` déclaré dans le profil. - -**Correction juin 2026** : gabarit Proton Mint remonté en Z1 ; override Mint supprimé ; smokes F1–F6 sur Alma/Rocky/Fedora/Ubuntu/Mint. - -Gates : `validate-firefox-user-scenarios.mjs` · `smoke-gnome-firefox-scenarios.mjs` · `smoke-mint-firefox.mjs` · `validate-skin-app-html-overrides.mjs` · `sync-linux-skin-closure.mjs` avant merge skin. - -### Sourcing icônes (R-A1 / VM) - -Script lab : `bash root/tools/lab/pull-firefox-vm-assets.sh --id linux-mint` - -| Dossier | Contenu | Source | -|---------|---------|--------| -| `toolkits/firefox/chrome/` | back, forward, reload, menu, pocket, profil, bouclier | `omni.ja` Mozilla (MPL-2.0) | -| `toolkits/firefox/brand/` | logo application, wordmark | hicolor + newtab extension | -| `toolkits/firefox/newtab/` | tuiles sponsorisées + favicons sites | Contile FR + fetch VM | - -Ne pas inventer de SVG placeholder : les gabarits CSS pointent vers ce pack partagé. - -## 9. Navigation interne (web simulé ↔ Firefox) - -| Id | Règle | -|----|-------| -| **R-WEB-NAV1** | Liens relatifs (`?page=`, `./`) restent dans l'iframe du site courant | -| **R-WEB-NAV2** | Hosts indexés (`data-capsule-web-nav` ou URL absolue) → `postMessage` parent `{ type: 'capsule:web-navigate', href }` | -| **R-WEB-NAV3** | Script partagé `usr/share/capsuleos/web/_shared/site-nav.js` inclus dans chaque mock | -| **R-WEB-NAV4** | Kernel : `firefox-iframe-bridge.js` + historique onglet dans `firefoxBrowser.js` — pas de hardcode host | - -Pont : [`firefox-iframe-bridge.js`](../../usr/lib/capsuleos/shells/linux/firefox-iframe-bridge.js) · [`site-nav.js`](../../usr/share/capsuleos/web/_shared/site-nav.js) - -## 10. Navigateurs simulés — enveloppe vs app (multi-produits) - -Complète : [compatibilite-navigateurs.md](compatibilite-navigateurs.md) · [processus-branchement-noyau.md](processus-branchement-noyau.md) (terminal, explorateur). - -### Deux « moteurs » distincts (ne pas confondre) - -| Axe | Module / doc | Question | Contenu | -|-----|--------------|----------|---------| -| **Enveloppe** | `usr/lib/capsuleos/engines/` · `CapsuleBrowserCapabilities` | Quel navigateur **hôte** charge CapsuleOS ? | UA (Gecko / Blink / WebKit), préfixes CSS, capacités (`file://`, `maskImage`…) | -| **App simulée** | slot `firefox` (+ futurs slots) · contrib `internet/browser/` | Quelle app **internet du bureau** est affichée ? | Chrome UI, onglets, favoris, navigation web simulé | - -**Interdit** : brancher Firefox / Chromium simulés sur `CapsuleEngineRegistry` — le lab Playwright (Chromium) peut afficher l’app Firefox ; l’enveloppe et le produit sont orthogonaux. - -### Quatre sous-couches (apps internet) - -Modèle calqué sur **terminal** (`shells/linux/terminal/`, agnostique) et **explorateur** (Nemo / Nautilus / Dolphin — gabarit + kernel partagé partiel) : - -```text -Z0/Z1 Web simulé web/ + simulatedWebResolver.js + site-nav.js (partagé, neutre produit) -Z1 Runtime onglets, historique, iframe-bridge, raccourcis (aujourd’hui dans firefoxBrowser.js) -Z1 Slot + gabarit firefox.html · futur chromium.html… (un slot = une app) -Z2 Skin firefox.skin.css · futur chromium.skin.css -contrib Pack vendor contrib/internet/browser/{vendor}/{app}/ -``` - -Métadonnée contrib optionnelle : `"browserFamily": "gecko"` (Firefox) ou `"blink"` (Chromium) — **doc / parité VM uniquement**, pas dispatch runtime. - -### Règles (R-BROWSER) - -| Id | Règle | -|----|-------| -| **R-BROWSER1** | Web simulé et resolver **sans** hardcode produit (pas de « Firefox only » dans `simulatedWebResolver.js`) | -| **R-BROWSER2** | **Un slot manifest** par app (`firefox`, puis `chromium` si ground truth VM) — pas de slot générique `browser` | -| **R-BROWSER3** | **Ne pas extraire** `browserRuntime.js` tant qu’un second slot navigateur n’est pas requis par inventaire VM (**P7**) | -| **R-BROWSER4** | À l’extraction : runtime agnostique + adaptateur fin par slot (Proton/Pocket restent dans l’adaptateur Firefox) | -| **R-BROWSER5** | DOM partagé : préfixe neutre `capsule-browser__*` ; détails vendor dans classes ou gabarit slot | - -**État juin 2026** : seul Firefox est P0 sur toutes les distros simulées ; couches web + resolver déjà partagées ; kernel monolithique Firefox acceptable jusqu’au second produit VM. diff --git a/root/docs/convention-css-variables-tokens.md b/root/docs/convention-css-variables-tokens.md deleted file mode 100644 index 9b048d60..00000000 --- a/root/docs/convention-css-variables-tokens.md +++ /dev/null @@ -1,91 +0,0 @@ -# Convention — variables CSS et tokens (API visuelle) - -> **Statut** : norme interne actée (juin 2026) · complète [manifeste-noyau.md](manifeste-noyau.md) §3 et [fondements-philosophiques.md](fondements-philosophiques.md) §6.1. -> **Gate** : `validate-css-variables-contract.mjs` · contrat `etc/capsuleos/contracts/css-variable-sources.json` - ---- - -## 1. Ce que la norme impose (et n’impose pas) - -| Affirmation courante | Réalité CapsuleOS | -|--------------------|-------------------| -| « Variables CSS **partout** » | **Tokens = API publique** du noyau ; le skin **configure** des variables, il ne refork pas les composants | -| « Interdiction des `#hex` » | **Non** — les littéraux couleur sont autorisés **dans les fichiers tokens (N0)** ; les consommateurs (N1+) **préfèrent** `var(--*)` | -| « Tout CSS du dépôt est gate-ifié » | **Non** — la gate couvre un **périmètre contractuel** (chrome, shell, apps clés) ; voir §4 | - -**Thèse** : l’interface publique du noyau, ce sont les **variables CSS anticipées** — pas les classes privées du skin. - ---- - -## 2. Trois niveaux (aligné convention-composants-ui) - -| Niveau | Rôle | Où | Littéraux `#hex` / `px` | -|--------|------|-----|-------------------------| -| **N0 — Primitives** | Palette, typo, échelle | `themes/**/variables*.css`, `*-tokens.css` | **Autorisés** (source de vérité visuelle) | -| **N1 — Composants** | Chrome, layouts partagés | `*.base.css`, `window-chrome*.css`, clusters toolkit | **Via `var(--*)`** sauf exception documentée | -| **N2 — Skin / app** | Overrides vendor | `home/**/style/**/*.skin.css`, shell vendor | **`var(--*)` d’abord** ; hex résiduel toléré pour parité VM ponctuelle | - -**Règle d’ajout** : réutiliser un token existant avant d’en créer un ; nouvelle variable globale → `variables-linux.css` ou `variables-linux-computed.css`. - ---- - -## 3. Chaîne d’import obligatoire (skins Linux) - -```text -reset.css → variables.css → variables-linux.css → variables-linux-computed.css - → window-chrome.base.css → tokens shell → *.skin.css -``` - -Alias sémantiques (`--f`, `--n`, `--fix`) : définis dans `themes/global/variables.css` — ne pas redéfinir. - ---- - -## 4. Périmètre de la gate `validate-css-variables-contract` - -La gate vérifie une propriété **nécessaire et suffisante pour le CI** : - -> **Toute `var(--nom)` utilisée dans le périmètre scan est définie** dans la chaîne de définition (`css-variable-sources.json`). - -Elle **ne vérifie pas** : - -- l’absence de couleurs littérales dans les skins ; -- la couverture de 100 % du CSS du dépôt ; -- le respect de N0/N1/N2 (discipline humaine + revue). - -Périmètre scan (juin 2026) : chrome noyau, clusters toolkit, apps explorateur/fichiers, tokens shell, portail et a11y global — voir `scanGlobs` du contrat. - -**Hors scan actuel** : `*.skin.css` apps (tokens dans fichiers compagnons `*-tokens.css`, `debian-breeze.css`, etc.) — extension prévue via `definitionGlobs` dédiés avant d’élargir le scan. - ---- - -## 5. État visuel vs session (plan maître §10) - -| Donnée | Stockage | -|--------|----------| -| Accent, thème, échelle UI (gsettings-like) | Variables CSS `--capsule-*` + bus `capsule:*` | -| Fond d’écran (id) | `localStorage` léger + `background-image` CSS | -| Onglets explorateur / terminal | `localStorage` session | -| Parité VM mesurée | JSON inventaire (`proc/`, `root/docs/inventaires/`) | - -Ne pas persister en `localStorage` ce qui doit être dérivé en CSS. - ---- - -## 6. Validation - -```bash -node usr/lib/capsuleos/tools/validate-css-variables-contract.mjs -node usr/lib/capsuleos/tools/validate-ui-contracts-all.mjs # orchestrateur -node usr/lib/capsuleos/tools/validate-all.mjs # H₂ / H₆ -``` - -Skill : [`css-variables-contract`](../skills/css-variables-contract/SKILL.md). - ---- - -## 7. Références - -- [contrats-ui-bureau.md](contrats-ui-bureau.md) -- [convention-reproduction-os.md](convention-reproduction-os.md) § chaîne CSS -- [convention-composants-ui.md](convention-composants-ui.md) § N0–N2 -- [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) §10 diff --git a/root/docs/convention-fidelite-visuelle.md b/root/docs/convention-fidelite-visuelle.md deleted file mode 100644 index 8deca3a3..00000000 --- a/root/docs/convention-fidelite-visuelle.md +++ /dev/null @@ -1,216 +0,0 @@ -# Convention — fidélité visuelle (typographie, vues, MIME, accessibilité) - -> **Statut** : contrat de reproduction **transversal** — s’applique à **toute** distribution (`registryId`) avant et pendant l’implémentation skin. -> Complète [convention-reproduction-os.md](convention-reproduction-os.md) · [logique-formelle.md](logique-formelle.md) · Contrat machine : `etc/capsuleos/contracts/visual-fidelity.json` - -**Principe** : la reproduction doit être **identique en tout point** sur l’ensemble de la distribution simulée. Aucun détail (police, breakpoint, type MIME, focus clavier) n’est optionnel s’il est observable sur la VM ground truth. - ---- - -## 1. Prédicats formels - -| Symbole | Signification | Gate | -|---------|---------------|------| -| **Tp** | Typographie inventoriée + tokens alignés | `*-visual-fidelity.json` + `smoke-visual-fidelity.mjs` | -| **Tv** | Contextes de vue inventoriés | résolutions, échelles, viewports lab/Playwright | -| **Tm** | MIME & associations documentés | handlers, icônes, globs | -| **Ta** | Accessibilité fidèle si activée | hooks `data-*` + CSS a11y + captures | -| **Tf** | Fidélité visuelle prête | **Tp ∧ Tv ∧ Tm ∧ Ta** | - -```bash -node usr/lib/capsuleos/tools/lab/collect-visual-fidelity-inventory.mjs --id --write --ssh -node usr/lib/capsuleos/tools/lab/smoke-visual-fidelity.mjs --id -bash root/tools/lab/pull-vm-assets.sh --id # polices + icônes MIME -``` - ---- - -## 2. Typographie (Tp) - -### 2.1 Ground truth VM - -Collecter **avant** tout patch CSS applicatif : - -| Champ | Source VM | -|-------|-----------| -| `fontName` / `documentFontName` | `gsettings org.gnome.desktop.interface` | -| `monospaceFontName` | idem | -| Familles installées | `fc-list` ou phase `fonts` de `*-deep-audit.json` | -| Taille effective (pt/px) | GTK / gsettings `text-scaling-factor` | - -**Rocky RL10** : Red Hat Text **11** pt, Red Hat Mono **10** pt (Adwaita GTK). - -### 2.2 Tokens CapsuleOS (obligatoires) - -Définir **une seule fois** par skin : - -```css -html:has(#rocky) { - --font-ui: "Red Hat Text", "Cantarell", ui-sans-serif, system-ui, sans-serif; - --font-mono: "Red Hat Mono", "DejaVu Sans Mono", ui-monospace, monospace; -} -``` - -Fichier canonique : `rocky-overrides.css` (ou équivalent `bodyId`). - -### 2.3 Règles strictes - -1. **Interdit** : `font-family: "Cantarell"` ou `"Inter"` en dur dans `home///style/` — utiliser `var(--font-ui)` ou `var(--font-mono)`. -2. **Tailles** : `calc(var(--head) / n)` ou `calc(1rem * var(--a11y-font-scale-factor))` — pas de `px` magiques pour le texte shell/apps. -3. **Chaîne d’échelle** : `--head` provient de `variables-linux-computed.css` ; toute app CSD hérite du bureau. -4. **Embarquement polices** : si la VM utilise une police non web-safe, pull vers `usr/share/capsuleos/assets/fonts/vendors//` + `@font-face` documenté dans l’inventaire (**A**, **T**). -5. **Gate** : `smoke-visual-fidelity.mjs` scanne le skin et échoue sur les violations. - -### 2.4 Uniformité distribution - -La **même** pile `--font-ui` / `--font-mono` s’applique à : shell, Aperçu, Quick Settings, calendrier, **toutes** les apps (`style/apps/*.skin.css`), Paramètres GNOME, terminal. - ---- - -## 2.5 Mise en page shell (alignements, espacements) - -Complément **Tp** pour les surfaces shell (top bar, dock, Aperçu) : - -1. **Tokens avant composants** — gaps, paddings, hauteurs dans `style/gnome-shell/tokens.css` (`--gnome-shell-clock-*`, `--fedora-top-bar-height`, etc.). -2. **Échelle `--head`** — pas de `px` magiques pour espacements shell ; voir skill `design-shell-layout`. -3. **Alignement optique** — éléments centrés (horloge GNOME) : position absolue `left: 50%` + `translate`, pas seulement grille flex asymétrique. -4. **Format texte VM** — ex. horloge Rocky FR : `jour mois` + `HH:MM` sur **une ligne** (sans jour de semaine dans la barre). -5. **Gate** — `smoke-rocky-shell-polish.mjs --playwright` (décentrement < 3 px, pas de débordement top bar). - ---- - -## 3. Contextes de vue (Tv) - -### 3.1 À inventorier avant reproduction - -| Dimension | Exemples | Effet Capsule | -|-----------|----------|---------------| -| Résolution bureau | 1920×1080, 1680×1050, 1280×720 | `data-display-resolution` → ratios CSS | -| Échelle affichage | 100 %, 125 %, 150 %, 200 % | `data-display-scale` → `--gnome-display-scale` | -| Orientation | paysage, portrait | `data-display-orientation` | -| Viewport lab | VM native | captures VM | -| Viewport Playwright | 1280×800 (défaut smokes) | captures Capsule comparables | -| Fenêtre app | min/max par slot | `*.skin.css` `windowElement` | - -Documenter dans `*-visual-fidelity.json` → section `viewContexts`. - -### 3.2 CSS central - -`usr/share/capsuleos/themes/linux/gnome-shell-preferences.base.css` — **ne pas dupliquer** la logique d’échelle dans chaque skin. - -### 3.3 Règle - -**Aucune capture comparative** sans entrée `viewContexts` validée (résolution + échelle + viewport). - ---- - -## 4. MIME et normes de types (Tm) - -### 4.1 Périmètre - -Tout ce qui affecte l’**icône**, le **libellé** ou l’**application par défaut** d’un fichier : - -- [shared-mime-info](https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/) -- Entrées `/usr/share/mime/packages/` -- `MimeType=` dans les `.desktop` -- Associations Nautilus / `gio mime` - -### 4.2 Inventaire minimal - -```json -"mime": { - "iconTheme": "Adwaita", - "defaultHandlers": [ - { "mime": "inode/directory", "app": "org.gnome.Nautilus", "capsuleSlot": "nemo" }, - { "mime": "text/plain", "app": "org.gnome.TextEditor", "capsuleSlot": "text_editor" } - ], - "globsSample": ["*.pdf → application/pdf"] -} -``` - -### 4.3 Règles - -1. **VM prime** — ne pas inventer un type ou une icône absente de la VM sans tag `CapsuleOnly` / `P2`. -2. Explorateur : cartographie icônes MIME dans `usr/share/capsuleos/linux/icons/` (voir KDE : `dolphin-icon-map.js`). -3. Changement de norme (ex. `org.gnome.Papers` vs `application/pdf`) → noter `delta` dans l’inventaire. - ---- - -## 5. Accessibilité (Ta) - -### 5.1 Réglages à reproduire fidèlement - -| Réglage VM | Hook Capsule | Fichier CSS | -|------------|--------------|-------------| -| Taille texte 100/110/125 % | `html[data-font-scale]` | `gnome-shell-preferences.base.css`, `a11y-*.css` | -| Contraste élevé | `html[data-contrast-mode="high"]` | `a11y-fedora.css` (GNOME Rocky) | -| Échelle affichage | `html[data-display-scale]` | `gnome-shell-preferences.base.css` | -| Éclairage nocturn | `html[data-night-light]` | idem | -| Focus clavier | `:focus-visible` | `--a11y-focus-ring`, `--a11y-focus-shadow` | - -### 5.2 Règles - -1. **Activation utilisateur** (Paramètres → Accessibilité) doit produire un **changement visible** sur shell + apps concernées — pas de toggle décoratif. -2. Captures VM + Capsule pour P0/P1 (voir playbook `font-scale`, `contrast`). -3. Import obligatoire `a11y-.css` dans `style/imports.css` du skin. -4. Zoom / contraste ne doivent **pas** casser la mise en page CSD (overflow testé en smoke). - ---- - -## 6. Workflow agent (ordre) - -```mermaid -flowchart LR - I[Inventaire VM] --> VF[visual-fidelity.json] - VF --> Tp[Tp tokens typo] - VF --> Tv[Tv contextes] - VF --> Tm[Tm MIME] - VF --> Ta[Ta a11y] - Tp --> H5[H5 skin] - Tv --> H5 - Tm --> H5 - Ta --> H5 - H5 --> Smoke[smoke-visual-fidelity] - Smoke --> Tf[Tf] -``` - -| Étape | Quand | Bloquant | -|-------|-------|----------| -| Collecte `*-visual-fidelity.json` | Après `*-vm.json` / deep-audit static | **Oui** avant H5 typo/MIME/a11y | -| Alignement tokens | Avant apps/shell polish | **Oui** | -| Smokes a11y Paramètres | Avec playbook GNOME | P1 | -| `smoke-visual-fidelity.mjs` | Avant merge / H6 | **Oui** | - ---- - -## 7. Rocky — référence - -Inventaire : [linux-rocky-visual-fidelity.json](inventaires/linux-rocky-visual-fidelity.json) - -| Élément | VM | Capsule | -|---------|-----|---------| -| UI | Red Hat Text 11 | `--font-ui` rocky-overrides | -| Mono | Red Hat Mono 10 | `--font-mono` | -| a11y shell | gsettings | `a11y-fedora.css` + datasets | -| Viewport smokes | — | 1280×800 | -| MIME | Adwaita + apps GNOME | Nautilus slot `nemo` | - ---- - -## 8. Anti-patterns - -1. Police générique (`sans-serif` seul) alors que la VM documente une police vendor. -2. `Cantarell` en dur dans 15 fichiers skin au lieu d’un token unique. -3. Captures sans viewport documenté. -4. Toggle accessibilité sans effet CSS mesurable. -5. Icône MIME inventée non présente dans `hicolor` VM. - ---- - -## 9. Références - -- [procedure-audit-vm-profonde.md](procedure-audit-vm-profonde.md) — phase `fonts` -- [procedure-apps-catalog.md](procedure-apps-catalog.md) -- [contrats-ui-bureau.md](contrats-ui-bureau.md) — focus `:focus-visible` -- [reference-gnome-expert.md](reference-gnome-expert.md) § accessibilité -- [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) — hooks `data-*` diff --git a/root/docs/convention-manifest-vm.md b/root/docs/convention-manifest-vm.md deleted file mode 100644 index 1e37a7b6..00000000 --- a/root/docs/convention-manifest-vm.md +++ /dev/null @@ -1,108 +0,0 @@ -# Convention — manifeste distribution VM - -> Complète [convention-assets-depuis-vm.md](convention-assets-depuis-vm.md), [procedure-apps-catalog.md](procedure-apps-catalog.md) et **[referentiel-assets-vm-officiels.md](referentiel-assets-vm-officiels.md)** (chemins VM + specs Internet). - -## Objectif - -Un **manifeste par distribution** (`proc//ubuntu-manifest.json`, etc.) sert de **référence unique** ground truth : - -- applications (deb, snap, flatpak, user) ; -- **médias v2** : polices, mimetypes, places, emblems, symbolic, panel, branding, fonds, icônes apps ; -- catalogue vendor : `etc/capsuleos/contracts/vm-manifest-media-catalog.json` ; -- plan d’import rsync groupé vers `usr/share/capsuleos/assets/`. - -Le moteur est **multi-toolkit** (GNOME, KDE, Cinnamon) et **multi-vendor** (chemins snap/flatpak/deb). - -## Prédicats - -| Symbole | Gate | -|---------|------| -| **ManV** | `collect-vm-distribution-manifest.mjs --write --ssh` | -| **ManS** | `smoke-vm-distribution-manifest.mjs` | -| **ManA** | `approve-vm-distribution-manifest.mjs --write` | -| **PbM** | `generate-manifest-replication-playbook.mjs --write` | -| **ManSt** | `run-manifest-staging-on-vm.mjs --write` | -| **ManI** | `import-manifest-staging.mjs --write` (recommandé) | -| **ManΣ** | ManV ∧ ManS ∧ ManA ∧ ManI | -| **ManΣ′** | ManV ∧ PbM ∧ ManS ∧ ManA ∧ ManSt ∧ ManI | - -Contrat : `etc/capsuleos/contracts/vm-distribution-manifest.json`. - -## Chaîne - -```bash -node usr/lib/capsuleos/tools/lab/run-manifest-replication-chain.mjs --id --auto --write -# ou étape par étape : -node usr/lib/capsuleos/tools/lab/ensure-vm-manifest-vendor.mjs --id --write -node usr/lib/capsuleos/tools/lab/collect-vm-distribution-manifest.mjs --id --write --ssh -node usr/lib/capsuleos/tools/lab/smoke-vm-distribution-manifest.mjs --id -node usr/lib/capsuleos/tools/lab/generate-manifest-replication-playbook.mjs --id --write -node usr/lib/capsuleos/tools/lab/approve-vm-distribution-manifest.mjs --id --write -node usr/lib/capsuleos/tools/lab/run-manifest-staging-on-vm.mjs --id --write -node usr/lib/capsuleos/tools/lab/import-manifest-staging.mjs --id --write -``` - -Catalogue médias v2 : blocs `toolkits` + `vendors` avec héritage `extends` — voir `vm-manifest-media-catalog-lib.mjs`. - -## Commits par phase (réplication Mint et vendors) - -**Un commit par prédicat clôturé** — message `Mint : …` (remplacer `Mint` par le vendor si besoin). - -| Phase | Prédicat | Quand committer | Exemple message | -|-------|----------|-----------------|-----------------| -| Collecte | **ManV** | `distribution-manifest.json` écrit | `Mint ManV : collecte manifeste VM 22.3.` | -| Smoke | **ManS** | rarement seul ; couplé à ManV ou ManA | — | -| Playbook | **PbM** | `*-manifest-playbook.json` régénéré | `Mint PbM : playbook pull=N drift=M.` | -| Approbation | **ManA** | `validation.approved` | `Mint ManA : manifeste approuvé post-smoke.` | -| Staging VM | **ManSt** | `staging.status=completed` | `Mint ManSt : staging VM 157 fichiers.` | -| Import | **ManI** | assets + `SOURCE-VM.txt` | `Mint ManI : import assets panel et fonds.` | -| Intégration | **Int** | inventaires parité + rapport `integration-pass-*.json` | `Mint Int : inventaire VM et playbook aligné.` | -| Parité panel | **Vp** | `compare-os-parity` / outillage lab | `Mint Vp : compare panel export 6 étapes.` | -| Application | **App#N** | une app du catalogue alphabétique | `Mint App#10 : gestionnaire pilotes (mintdrivers).` | -| Campagne v2 pallier | **P0…P5** | clôture d’un pallier réplique exacte VM | `Mint P1 : panel grouped-window-list (réplique VM).` | - -Ne pas mélanger deux phases dans un même commit sauf **ManΣ** initial (bootstrap vendor). - -**Enchaînement agent (campagne v2)** : à chaque pallier clôturé (gates + smokes du périmètre) → **sync vues** → **commit + push auto** → pallier suivant sans approbation humaine. État : `linux-mint-replication-state.json`. - -## Vues avant push (obligatoire) - -Toute poussée Git doit précéder la régénération des **vues dérivées** (façades `OS/linux/families/`, embeds offline, manifestes `home/public/`) : - -```bash -node usr/lib/capsuleos/tools/sync-all-views.mjs -# puis commit si des fichiers ont changé -``` - -**Automatisation** : - -| Mécanisme | Rôle | -|-----------|------| -| `sync-all-views.mjs` | Gate unique — manifest public + `sync-linux-skin-closure` + embed Android + validation façades | -| `.githooks/pre-push` | Refuse le push si le working tree diffère après sync (vues périmées dans le commit) | -| `.githooks/post-commit` | Push auto vers `origin` après chaque commit (via `git-remote-sync.sh`) | -| `root/tools/install-git-hooks.sh` | Installe `pre-push` + `post-commit` dans `.git/hooks/` (une fois par clone) | -| `git-remote-sync.sh` | `pull` (ff-only) · `push` (vues + origin) · `sync` (les deux) | -| `push-with-view-sync.sh` | Implémentation push : sync → commit auto des vues → `git push` | - -Ordre campagne : smokes verts du périmètre → `sync-all-views.mjs` → commit → `git push` (ou `push-with-view-sync.sh`). - -**AppV** est dérivé du manifeste (plus de scrape bash partiel) : - -```bash -node usr/lib/capsuleos/tools/lab/collect-vm-apps-inventory.mjs --id --write -``` - -## Import rsync - -Remplace le SCP fichier-par-fichier pour les lots définis dans `manifest.import.bundles` : - -- icônes apps (`media.appIcons[].vmPaths`) ; -- fonds (`media.wallpapers`) ; -- extensions futures : mimetypes, emblems, fonts. - -Traçabilité : `usr/share/capsuleos/assets/images/vendors//SOURCE-VM.txt`. - -## Écarts contrat vs VM - -Les apps **P0 simulées** (absentes VM lab) portent `onVm: false` dans `apps-catalog.json`. Le smoke manifeste les signale en **avertissement**, pas en erreur. diff --git a/root/docs/convention-modules-mnt.md b/root/docs/convention-modules-mnt.md deleted file mode 100644 index cb8568ef..00000000 --- a/root/docs/convention-modules-mnt.md +++ /dev/null @@ -1,140 +0,0 @@ -# Convention — modules pédagogiques (`/mnt`) - -> **Contrat** : `etc/capsuleos/contracts/pedagogical-modules.json` -> **Métaphore** : points de montage Linux — supports pédagogiques **branchés** ou **retirés** sans modifier le noyau. - ---- - -## 1. Positionnement formel - -CapsuleOS simule un **rootfs**. Le dossier `mnt/` est le **répertoire d’injection de scénarios pédagogiques** : parcours, missions et contenus didactiques pouvant être **déployés sur n’importe quel OS** du catalogue (GNOME, Windows, macOS…). La métaphore Linux `mount` reste utile en documentation ; l’essentiel est la **portabilité cross-OS** des scénarios, sans fork du noyau. - -Voir [fondements-philosophiques.md](fondements-philosophiques.md) §4.3. - -```mermaid -flowchart TB - subgraph rootfs [Rootfs CapsuleOS] - USR[usr/lib — noyau] - ETC[etc/capsuleos — contrats] - HOME[home/ — skins] - PUB[home/public — FS utilisateur] - MNT[mnt/ — modules montables] - end - PROF[skin.profile.json CAPSULE_MNT_MODULES] --> MNT - MNT --> CHK[checklist / missions] - MNT --> SCN[scénarios terminal shell] - USR --> CHK -``` - -| Chemin | Rôle | À ne pas confondre avec | -|--------|------|-------------------------| -| **`mnt/`** | Parcours, scénarios, missions **modulaires** | `home/public/` (fichiers de l’utilisateur simulé) | -| **`usr/lib/`** | Comportements (terminal, explorateur) | Contenu des exercices | -| **`etc/capsuleos/`** | Registre, contrats, profils | Données pédagogiques | - -### Prédicats - -| Symbole | Signification | -|---------|---------------| -| **Pm** | Module présent `mnt///` | -| **Pm_Σ** | `module.json` + scénarios valides | -| **Pm_mount** | Module listé dans `CAPSULE_MNT_MODULES` | -| **PΣ** | Parcours actif = skin + modules montés | - -```text -R-PM1 besoin scénario ∧ ¬Pm → créer module mnt/ avant patch skin ciblé -R-PM2 Pm ∧ ¬Pm_Σ → validate-pedagogical-modules.mjs -R-PM3 Pm_mount ∧ conflit slot → un propriétaire explicite par slot (ou fusion documentée) -``` - ---- - -## 2. Niveaux - -| Répertoire | Public | Exemples | -|------------|--------|----------| -| `debutant/` | Première découverte du bureau et du terminal | `linux-bases` | -| `intermediaire/` | Commandes, FS, paquets | (à venir) | -| `confirme/` | Scripts, permissions, réseau simulé | (à venir) | -| `expert/` | Chaînes complètes, audit | (à venir) | -| `cybertech/` | Sécurité, forensics pédagogiques | (à venir) | - -Catalogue machine : [`mnt/catalog.json`](../../mnt/catalog.json). - ---- - -## 3. Anatomie d’un module - -```text -mnt/debutant/linux-bases/ -├── module.json # manifeste Pm_Σ -└── scenarios/ - └── s01-decouverte-terminal.json -``` - -### `module.json` (champs clés) - -| Champ | Rôle | -|-------|------| -| `id` | Identifiant stable | -| `level` | `debutant` \| `intermediaire` \| … | -| `locale` | `fr-FR` par défaut (**Lj_fr**) | -| `slots` | Slots UI concernés (`terminal`, `nemo`, `checklist`…) | -| `prerequisites` | IDs modules à monter avant | -| `scenarios` | Fichiers JSON relatifs au module | - -### Scénario - -Décrit missions, étapes, critères de réussite, liens vers prédicats shell (**TΣ**, **Ts**, **To**) quand le terminal est impliqué. - ---- - -## 4. Montage (projection statique) - -Dans `skin.profile.json` ou profil registre : - -```json -{ - "capsuleGlobals": { - "CAPSULE_MNT_BASE": "../../../mnt", - "CAPSULE_MNT_MODULES": ["debutant/linux-bases"] - } -} -``` - -| Global | Défaut | Rôle | -|--------|--------|------| -| `CAPSULE_MNT_BASE` | `../../../mnt` | Racine des modules (depuis skin) | -| `CAPSULE_MNT_MODULES` | `[]` | Liste `niveau/id` montés | - -**Chargement** : `usr/lib/capsuleos/shells/common/capsule-mnt-modules.js` — expose `window.CapsuleMntModules` (manifestes résolus). - -**Démontage** : retirer l’entrée de `CAPSULE_MNT_MODULES` — le noyau et le skin restent ; seul le parcours disparaît. - ---- - -## 5. Intégration progressive - -| Phase | Livrable | Statut | -|-------|----------|--------| -| P1 | Contrat + `mnt/` + module pilote | **fait** | -| P2 | `validate-pedagogical-modules.mjs` | **fait** | -| P3 | Checklist alimentée depuis scénarios montés | planned | -| P4 | Terminal : validation auto des étapes (`capsule:task`) | planned — reprise shell | - ---- - -## 6. Gate - -```bash -node usr/lib/capsuleos/tools/validate-pedagogical-modules.mjs -``` - ---- - -## 7. Références - -- [manifeste-noyau.md](manifeste-noyau.md) — rootfs simulé -- [convention-shell-global.md](convention-shell-global.md) — scénarios terminal -- [scalabilite-noyau.md](scalabilite-noyau.md) — modularité horizontale -- [locale-scalability.json](../../etc/capsuleos/contracts/locale-scalability.json) — **Lj_fr** diff --git a/root/docs/convention-rafraichissement-vues.md b/root/docs/convention-rafraichissement-vues.md deleted file mode 100644 index 0925af9b..00000000 --- a/root/docs/convention-rafraichissement-vues.md +++ /dev/null @@ -1,119 +0,0 @@ -# Convention — rafraîchissement des vues (réel vs irréel) - -> **Statut** : contrat validé (`etc/capsuleos/contracts/view-refresh-vigilance.json`). -> **Condition sine qua non** de la reproduction OS au plus près du réel : toute action utilisateur doit laisser la **vue** alignée sur l’**état modèle** attendu, sans refresh parasite. - -**Références** : [logique-formelle.md](logique-formelle.md) (prédicats **Rv₁**, **Rv₂**, **Rv**) · [convention-reproduction-os.md](convention-reproduction-os.md) · Playbook : [view-refresh-vigilance-playbook.json](inventaires/view-refresh-vigilance-playbook.json) - ---- - -## 1. Problème - -En CapsuleOS, l’**irréel** n’est pas l’absence de VM : c’est tout état où la surface visible (**V**) diverge du modèle (**M**) après une action admissible, ou se met à jour sans que **M** ait changé. - -| Symbole | Définition | -|---------|------------| -| **M** | Session, manifest VFS, chemins, onglets, cwd terminal, sélection, historique **runtime** | -| **V** | DOM rendu (grille, libellés onglets, bandeau, sortie terminal, chrome) | -| **Réel** | `V = projection(M)` une fois `completion(A_user)` stabilisée | -| **Irréel** | `V ≠ projection(M)` ou `refresh(V)` sans `ΔM` | - -La **logique formelle** sert à trancher réel / irréel pendant les phases de reproduction : on ne corrige pas « au feeling » — on vérifie **Rv₁** (post-action) et **Rv₂** (pas de parasite). - ---- - -## 2. Prédicats - -| Symbole | Signification | Vérification | -|---------|---------------|--------------| -| **Rv₁** | Vue cohérente **après** action | Checklist playbook + smokes ciblés | -| **Rv₂** | Pas de refresh **parasite** pendant / hors action | Revue des listeners focus, timers, races | -| **Rv** | **Rv₁ ∧ Rv₂** | Admissible pour clôture slot interactif P0 | - -Contrat machine : `etc/capsuleos/contracts/view-refresh-vigilance.json`. - ---- - -## 3. Déclencheurs légitimes - -Un refresh est **admis** seulement si l’un des cas suivants s’applique : - -1. **Post-action** — navigation, mutation FS, renommage, changement d’onglet initié par l’utilisateur. -2. **Événement inter-surfaces** — le modèle a changé sur une autre surface (`capsule:fs-changed`, fermeture fenêtre). -3. **Activation fenêtre avec Δ état** — autre instance Nautilus active (snapshot différent), pas un simple refocus. -4. **Changement d’onglet** — restauration path / label / surface de l’onglet cible. - -Tout autre re-render est un candidat **P0** (irréel) jusqu’à preuve du contraire dans l’inventaire VM. - ---- - -## 4. Patterns noyau (référence) - -### 4.1 Nautilus - -| Besoin | Mécanisme | -|--------|-----------| -| Grille à jour après commande terminal | `capsule:fs-changed` → `renderDirectory` si path courant affecté | -| Titre bandeau onglets après navigation | `syncNautilusTabs()` en fin de `navigateToFileExplorerDirectory` | -| Pas de race focus / navigation | `fileExplorerWindowState.js` — `activateExplorerWindow` ne refresh que si `activeNemoRoot` change | -| Fermeture fenêtre | Purge SESSION onglets + `resetTabRuntimeState` | - -Vigilance liée : `focus-refresh-race` dans [nautilus-interactions-playbook.json](inventaires/nautilus-interactions-playbook.json). - -### 4.2 Terminal - -| Besoin | Mécanisme | -|--------|-----------| -| Onglets / cwd cohérents après commande | `syncTerminalTabs()` | -| Sortie éphémère (comme Ptyxis session) | Pas de `outputHtml` / `history` en localStorage ; `resetTerminalVisualSurface` à fermeture | -| Réouverture | Vue vide, historique flèche ↑ limité à la session fenêtre ouverte | - -### 4.3 FS terminal ↔ explorateur - -Playbook dédié : [fs-sync-playbook.json](inventaires/fs-sync-playbook.json) · smoke `smoke-fs-terminal-explorer-sync.mjs` (assertions **Rv₁** sur la grille). - ---- - -## 5. Workflow agent (reproduction) - -À intégrer dans toute implémentation **H5** touchant un slot interactif : - -| # | Action | Gate | -|---|--------|------| -| 1 | Identifier `A_user` et la surface **V** impactée | Inventaire / playbook slot | -| 2 | Définir `projection(M)` attendu (VM ou spec playbook) | **I** ou phase VM | -| 3 | Implémenter sync **post-action** (pas seulement à l’ouverture) | Code noyau | -| 4 | Auditer listeners focus / async pour **Rv₂** | Checklist playbook | -| 5 | Smoke ou test manuel documenté | **Rv₁** sur le scénario | - -**Interdit** : considérer la reproduction terminée si un scénario P0 du playbook laisse **V** stale. - -**Avant push** (lot skin / slot interactif) : vérifier **Rv** sur les scénarios touchés, puis `sync-linux-skin-closure.mjs` si Linux, puis `validate-all.mjs` — ordre détaillé : [agent-validation-discipline.md](agent-validation-discipline.md) §4. - ---- - -## 6. Classification écarts - -| Tag | Exemple | -|-----|---------| -| **P0** | Grille non rafraîchie après `rm` ; titre onglet faux ; terminal réaffiche l’ancienne sortie à réouverture | -| **P1** | Délai visible avant refresh sans incohérence finale documentée | -| **P2** | Animation de transition absente sur VM | - ---- - -## 7. Anti-patterns (¬ admissible) - -1. Refresh au `focus` / `visibilitychange` sans `ΔM`. -2. État onglets persisté en SESSION qui contredit le modèle à la réouverture. -3. Une seule surface mise à jour (terminal OK, Nautilus stale) après mutation FS partagée. -4. `window.prompt` ou modal bloquant qui empêche la mise à jour inline de **V**. -5. Oublier `sync*Tabs` après mutation de path ou label. - ---- - -## 8. Références croisées - -- [procedure-playbook-general.md](procedure-playbook-general.md) — couche τ : chaque playbook slot référence **Rv** -- [convention-fidelite-visuelle.md](convention-fidelite-visuelle.md) — **Tv** (contextes de vue) complète mais ne remplace pas **Rv** -- [fs-sync-playbook.json](inventaires/fs-sync-playbook.json) — cas d’école **Rv₁** multi-surfaces diff --git a/root/docs/convention-raisonnement-inductif-deductif.md b/root/docs/convention-raisonnement-inductif-deductif.md deleted file mode 100644 index 1fb94076..00000000 --- a/root/docs/convention-raisonnement-inductif-deductif.md +++ /dev/null @@ -1,99 +0,0 @@ -# Convention — raisonnement inductif et déductif (campagnes OS) - -> **Complète** : [fondements-philosophiques.md](fondements-philosophiques.md) §3 · [convention-reproduction-parfaite.md](convention-reproduction-parfaite.md) · [logique-formelle.md](logique-formelle.md) §2.15 -> **Contrat** : `etc/capsuleos/contracts/os-reproduction-coherence.json` - -CapsuleOS articule deux mouvements complémentaires pour atteindre des reproductions parfaites — sans ajouter une 4ᵉ couche « meta-meta » (limite plan maître §3). - ---- - -## 1. Induction opérationnelle (amont) - -**Mouvement** : cas concrets → **SlotMap(VM, dépôt)** → **GapΔ** → patterns → hypothèses architecture. - -| Étape | Action | Artefacts | -|-------|--------|-----------| -| I1 Observer | VM SSH, inventaire apps installées | `*-vm-apps-installed.json` | -| I1b SlotMap | Croiser VM avec slots/contrats existants | `slots-manifest`, `apps-catalog` | -| I2 GapΔ | Ne retenir que les écarts explicites | `contentGaps[]` ouverts, `p0Gaps` | -| I3 Classer | Grille 5 dimensions sur GapΔ seulement | `contentGaps[]` | -| I4 Généraliser | Patterns récurrents (ex. contrat sans runtime) | audits, hypothèses H1–H6 | -| I5 Hypothétiser | Proposition architecture testable | décisions dans audit processus | - -**Rang épistémique** (fondements §3.1) : **R** (référent VM) prime sur doc officielle ; **M** (modèle `proc/` + inventaires) prime sur **E** (expérience DOM). - -**Règles inductives** : - -- **R-INV1** : pas de patch skin sans inventaire **I** -- **C1 VM prime** : baseline depuis VM ou contrat ground explicite -- **C6 écart explicite** : tout partial/gap documenté — pas de silence sur P0 - ---- - -## 2. Déduction opérationnelle (aval) - -**Mouvement** : prédicats vérifiés → règle unique → action R-AUTO ou blocage. - -| Étape | Action | Artefacts | -|-------|--------|-----------| -| D1 Prémices | M, I, H₂, V… | `*-formal-state.json` | -| D2 Inférer | Règles D-*, R-* (première admissible) | `resolve-agent-action` | -| D3 Exécuter | Commande unique si `autoExecute` | logs campagne | -| D4 Clôturer | OsΣ-slot, OsΣ-registry | gates, validate-all | - -**Inférences interdites** (déductives) : - -- AppVp sans AppVc -- StoreVp sans StoreVc -- Implémentation H5 sous ¬H₂ (R-IMP1) -- Fallback artefact vendor d′ ≠ d (R-LOC1) - ---- - -## 3. Falsification (Peirce) - -Une hypothèse d'architecture est **rejetée** si un gate ciblé échoue après implémentation. - -| Hypothèse | Test falsifiable | -|-----------|------------------| -| H1 Contrat = runtime | `validate-os-reproduction-coherence.mjs` (steps ↔ scripts) | -| H2 Ordre pipeline = formal | `resolve-agent-action --scope pipeline` vs `--scope formal` même registryId | -| H3 campaignPhases actives | `run-store-replication-chain.mjs --dry-run` liste phases filtrées | -| H4 Store branché | StoreG vrai après `run-store-replication-chain` | -| H5 État éphémère | absence `*-resolve.json` versionnés | -| H6 AppΣ / AppVp séparés | couche `apps` (AppΣ) complétable avant H6 ; `apps-parity` après H6 | - ---- - -## 4. Boucle campagne (CR-0…CR-6) - -```text -Induction : VM observe → inventaire → contentGaps (grille) -Déduction : H₂ → StoreG → StoreVc → StoreVp -Falsification : validate-all + smokes slot -``` - -Phases CR (contrat OsRepro) — filtrées par `campaignPhases` **puis** par `differentialCampaign.skipWhen` (C9) via `differential-campaign-lib.mjs` : - -**Ne pas** lancer CR-2 (enquête VM complète) si P0 déjà documenté sans gap ouvert — corriger uniquement le delta. - -| Phase | Prédicat produit | Registry pilote | -|-------|------------------|-------------------| -| CR-0 | H₂ | tous | -| CR-1 | AppV | linux-fedora (ground) | -| CR-2 | AppVv | linux-fedora | -| CR-3 | contentSpec | dérivés + pilote | -| CR-4 | StoreG | linux-fedora | -| CR-5 | StoreVc | tous GNOME store | -| CR-6 | StoreVp | tous GNOME store | - ---- - -## 5. Usage agent - -1. **Avant H5** : induction — inventaire VM, grille, contentGaps -2. **Décision** : `resolve-agent-action.mjs --scope pipeline` (une entrée) -3. **Après patch** : déduction — gates zone touchée, pas `validate-all` sur typo doc seule -4. **Clôture** : falsification — H₂ vert, prédicats aval documentés - -Références audit juin 2026 : [audit-structure-depot-2026-06.md](audit-structure-depot-2026-06.md) · [audit-processus-campagnes-2026-06.md](audit-processus-campagnes-2026-06.md). diff --git a/root/docs/convention-reproduction-os.md b/root/docs/convention-reproduction-os.md deleted file mode 100644 index 4d908395..00000000 --- a/root/docs/convention-reproduction-os.md +++ /dev/null @@ -1,192 +0,0 @@ -# Convention — reproduction d’un OS dans CapsuleOS - -**Contrat unique** pour agents IA et contributeurs humains qui clonent un bureau réel (VM) vers une simulation web. - -> **Ordre d’exécution** : [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) §4.2–4.4 · [README.md](README.md) · **P11** / **R-LOC1**. - -Complète sans la remplacer : [convention-taxonomie-semantique.md](convention-taxonomie-semantique.md) (**pierre angulaire** — slot, variant, cluster, skin), [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) (détail opératoire), [manifeste-noyau.md](manifeste-noyau.md) (vision noyau), [logique-formelle.md](logique-formelle.md) (prédicats **I**, **A**, **S**, **M**, **Tax**, règles **R-INV**), [convention-shell-global.md](convention-shell-global.md) (socle terminal **Ti–TΣ**, agnosticité noyau), [convention-fidelite-visuelle.md](convention-fidelite-visuelle.md) (prédicats **Tp–Tf** : typographie, vues, MIME, accessibilité), [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) (prédicats **Rv₁–Rv** : cohérence vue ↔ modèle après action). - ---- - -## 1. Portée du projet (rappel) - -CapsuleOS est une **sandbox statique** : bureaux simulés en HTML5 / CSS3 / ES6, sans framework, exécutables en `file://` ou HTTP minimal. Objectif pédagogique : laisser explorer des environnements familiers sans installer de VM. - -**Stade actuel** : consolider un **noyau robuste** (`usr/lib/capsuleos/`, `usr/share/capsuleos/`) et des **skins** (`home/`) alignés sur des **ground truth VM**, avec conventions **imposées** (pas d’improvisation par distro). - ---- - -## 2. Concepts techniques (vocabulaire imposé) - -| Concept | Emplacement | Rôle | -|---------|-------------|------| -| **Noyau** | `usr/lib/capsuleos/`, `usr/share/capsuleos/` | Comportements et gabarits **partagés** (fenêtres, explorateur, embed) | -| **Skin** | `home///` | **Source de vérité** HTML/CSS/JS d’une distro | -| **Façade pick-os** | `OS/linux/families/.../index.html` | URL stable + `` → skin ; **générée**, ne pas éditer à la main | -| **Registre** | `etc/capsuleos/os-registry.json` | Catalogue OS (id, tier, façade, toolkit, vendor) | -| **Profil skin** | `home/.../skin.profile.json`, `etc/capsuleos/profiles/linux-*.json` | `CAPSULE_*`, assets, chrome context | -| **Vendor pack** | `usr/share/capsuleos/assets/images/vendors//` | Logos, panel, fonds **propres au vendor** (jamais empruntés) | -| **Toolkit** | `gnome`, `cinnamon`, `kde`, `cosmic` | Patron DE (shell, chrome fenêtre, slots apps) | -| **Taxonomie** | [convention-taxonomie-semantique.md](convention-taxonomie-semantique.md), `etc/capsuleos/contracts/taxonomy.json` | Hiérarchie kernel→branch→toolkit→registryId ; gate `validate-taxonomy.mjs` | -| **Slot** | `data-link="nemo"`, `firefox`, `terminal`… | Ancre logique stable (≠ variant gabarit) | -| **Variant** | `update_manager_gnome.html`, `themes_gnome.html`… | Gabarit + `*.base.css` par toolkit — voir `apps-catalog.slotSpecs` | -| **Socle shell** | `usr/lib/capsuleos/shells/linux/terminal/` | Moteur CLI agnostique + pont `CapsuleUserFs` — [convention-shell-global.md](convention-shell-global.md) | -| **Gabarit explorateur** | `nemo`, `nemo-gnome`, `dolphin`… | HTML embarqué via `build-linux-embed.mjs` | -| **Chrome context** | `etc/capsuleos/contracts/window-chrome-contexts.json` | Provider drag/header par toolkit — [window-chrome-contexts.md](window-chrome-contexts.md) | -| **Embed** | `var/lib/capsuleos/generated/` | Projection offline ; régénérer après gabarit/skin partagé | - -**Règle d’or** : centraliser dans le noyau tout ce qui est **identique entre distros du même toolkit** ; ne dupliquer dans le skin que le **token visuel** et la **structure chrome** propre au vendor. - ---- - -## 3. Les trois couches (ne pas mélanger) - -| Couche | Document | Quand | -|--------|----------|-------| -| **Accueil contributeur** | [convention-accueil-os.md](convention-accueil-os.md) | Espace dédié, recette, périmètre PR, accueil à froid | -| **Catalogue** | [ajouter-os-scalable.md](ajouter-os-scalable.md) | Entrée registre, pick-os, profil minimal | -| **Clonage** | [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) | Parité VM → skin (inventaire d’abord) | -| **Contrôle** | [procedure-controle-distributions-reelles.md](procedure-controle-distributions-reelles.md) | Sonde JSON, `compare-os-parity.mjs` | -| **Réplication formelle** | [procedure-replication-formelle.md](procedure-replication-formelle.md) | Chaîne **V → G → Vc → Vp** (Paramètres GNOME, tous vendors) | - -**Estimation coût clone VM** : [`linux-mint-replication-cost-estimate.md`](inventaires/linux-mint-replication-cost-estimate.md) (tous vendors — modèle Mint). - -**Moteur de cycles** : [`moteur-clonage-experience.md`](moteur-clonage-experience.md) — **10–11 cycles automatiques** (C0–C10) pour Π_global=100 ; cross-régression `run-cross-regression-gates.mjs` après touch noyau partagé. Contrat : `etc/capsuleos/contracts/clone-cycle-engine.json`. - -```text -VM (ground truth) → inventaire JSON/MD → skin home/ → sync façades → validate-all -``` - ---- - -## 4. Workflow agent (obligatoire) - -Spécialisation de [logique-formelle.md §5](logique-formelle.md) — prédicats **H₂**, **M**, **I**, **A**, **S**, **H₆**. - -| # | Action | Gate / script | -|---|--------|----------------| -| 0 | `validate-all.mjs` baseline | **H₂** — exit 0 | -| 1 | Brief : `print-agent-brief.mjs ` | — | -| 2 | VM : SSH + sonde (`lab-inventory.json`) | Rocky : [lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md) | -| 3 | Inventaire versionné `root/docs/inventaires/-vm.json` | — | -| 3b | **Audit profond VM** : [procedure-audit-vm-profonde.md](procedure-audit-vm-profonde.md) → `-deep-audit.json` | `collect-vm-deep-audit.mjs` | -| 3c | **Fidélité visuelle** : typo, contextes de vue, MIME, a11y → `-visual-fidelity.json` | `collect-visual-fidelity-inventory.mjs` · **bloquant avant H5 typo/MIME/a11y** | -| 4 | Implémentation **sous `home/`** (+ noyau si sync vues) | **Rv** sur scénarios slot — [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) | -| 4b | Slot **terminal** : inventaire `*-terminal-vm.json` (**Ti**), puis **TΣ** | [convention-shell-global.md](convention-shell-global.md) · `validate-terminal-commands.mjs` · `smoke-fs-terminal-explorer-sync.mjs` | -| 5 | Assets VM → `pull-vm-assets.sh` | [convention-assets-depuis-vm.md](convention-assets-depuis-vm.md) | -| 6 | Clôture Linux : `sync-linux-skin-closure.mjs` | façades ≡ home | -| 6b | **Avant push** : **Rv** sur slots touchés + smokes lab (attentes conditionnelles) | [agent-validation-discipline.md](agent-validation-discipline.md) §4 | -| 7 | `validate-all.mjs` + captures comparatives | — | -| 7a | **Passe visuelle shell** : `run-visual-parity-pass.mjs` | **Vp** — skill `visual-parity-lab` | -| 7b | **Apps VM** : `collect-vm-apps-inventory` → `generate-apps-catalog` | **AppV**, **AppC** | -| 7c | **États UI & effets** : `run-ui-state-effects-pass.mjs` | **Va → VΣ** — apps détectées étendent la matrice auto | -| 7d | **Clôture P1 → Vp** (ordre obligatoire GNOME) | voir §4bis ci-dessous | - -### 4bis. Ordre P1 shell — hooks noyau avant pixels (**R-VΣ1**) - -Après **Tp** (assets WebP) et avant de considérer **Vp** acquis : - -1. **Hooks noyau** — scripts/DOM partagés manquants (`gnome-desktop-context-menu`, export `window.CapsuleGnomeOverview`, `data-overview-link` sur apps grille). -2. **Alignement inventaire VM** — favoris dock/dash (`dashFavoritesVm` → slots Capsule ; apps non simulées en `*-unavailable`). -3. **Clôture façade** — `sync-linux-skin-closure.mjs` **avant** toute sonde Capsule : `lab-inventory.json` → `capsuleUrl` pointe vers `OS/linux/families/…`, pas `home/` ; sans sync, `--capsule-only` reste `missing` alors que le skin source est prêt. -4. **Gaps VΣ sémantiques** — `collect-ui-state-effects.mjs --capsule-only` jusqu'à `visualMatch ≠ unknown` sur P0 (cible : `partial` ou mieux). -5. **Passe visuelle shell** — `run-visual-parity-pass.mjs` (Capsule : `CapsuleGnomeOverview` ; VM Ubuntu GNOME ≥ 41 : `OverviewActive` D-Bus — pas `Eval`/`xdotool` ; virsh via `lab-capture-session.sh` si sudo requis). - -Règle : **ne pas** lancer une passe **Vp** complète tant que les transitions P0 restent `missing` par absence de hook DOM ou de façade non synchronisée (étapes 1–4). - -**Interdit** : patch massif du skin sans inventaire ; édition manuelle de `OS/linux/families/...` ; icônes d’un autre vendor ; `px` en dur si un token `--*` existe. - ---- - -## 5. CSS — contrat strict - -| Règle | Détail | -|-------|--------| -| **Pas de nesting** | CSS plat (pas de `@nest`, pas de SCSS) | -| **Ordre des propriétés** | position → display → width → height → margin → padding → border → font → color → background → transform → animation → transition → overflow → z-index | -| **Variables** | Toute `var(--x)` doit être définie dans la chaîne d’import du skin | -| **Calcul** | Préférer `calc(var(--head) / n)` aux valeurs magiques | -| **Chaîne Linux** | `variables.css` → `variables-linux.css` → `variables-linux-computed.css` → `window-chrome.base.css` → skin | -| **Surcharge skin** | Tokens sous `body#` ou `html:has(#)` | -| **Typographie** | Une pile `--font-ui` / `--font-mono` par skin ; `var(--font-ui)` partout — voir [convention-fidelite-visuelle.md](convention-fidelite-visuelle.md) | -| **Accessibilité** | Hooks `html[data-font-scale]`, `data-contrast-mode`, etc. — effet visible obligatoire | -| **Spécificité** | Les IDs legacy (`#nemoHeaderContainer`, `#nemoMainContainer`) priment souvent sur les classes — surcharger par **sélecteur ID + classe gabarit** (ex. Nautilus N47) | - -Gate : `validate-css-variables-contract.mjs`, `validate-css-selectors-contract.mjs`. - -Référence normative : [convention-css-variables-tokens.md](convention-css-variables-tokens.md) (N0/N1/N2, périmètre gate). - -Skill : `css-variables-contract`, `role-web-designer`. - ---- - -## 6. JavaScript — contrat strict - -| Règle | Détail | -|-------|--------| -| **ES6 strict** | Modules IIFE `'use strict'` ; pas de framework | -| **API globales explicites** | `CapsuleWindow`, `CapsuleResource`, `window.CAPSULE_*` | -| **Pas de fork par distro** | Étendre le noyau ou le provider chrome, pas copier `fileExplorerCore.js` | -| **Rafraîchissement vues** | Toute mutation **M** (navigation, FS, onglets) synchronise **V** — **Rv₁** ; pas de re-render au seul focus — **Rv₂** | -| **Init slots** | `data-link` + `capsule-window-shell` ; drag selon chrome context | -| **Embeds** | Après modif gabarit `usr/share/capsuleos/linux/` → `build-linux-embed.mjs` | - -Gate : `validate-vanilla-js.mjs`, `validate-vanilla-interactivity.mjs`, `validate-window-chrome-contexts.mjs`. - -Skill : `vanilla-js-interactivity`, `role-developer`. - ---- - -## 7. Classification des écarts VM ↔ Capsule - -Chaque écart doit être tagué dans le rapport de parité : - -| Tag | Signification | -|-----|----------------| -| **P0** | Bloquant fidélité pédagogique | -| **P1** | Documenté, assumé | -| **P2** | Souhaitable, non bloquant | -| **CapsuleOnly** | Exclusif sandbox (checklist, lien accueil) | - ---- - -## 8. Rocky Linux — référence GNOME (juin 2026) - -Rocky est la **base canonique** du toolkit GNOME (comme Mint pour Cinnamon). Les skins Fedora, Ubuntu et dérivés héritent de `home/RedHat/Rocky/` pour shell, overview et Nautilus. - -**Nemo** = Cinnamon/Mint uniquement. **Nautilus** = GNOME (slot logique `data-link="nemo"` + template `nemo-gnome` + skin `nautilus.skin.css`). Propagation CSS : `node usr/lib/capsuleos/tools/linux/sync-gnome-nautilus-skin.mjs`. - -| Élément | Valeur | -|---------|--------| -| `registryId` | `linux-rocky` | -| Tier / upstream | **P1**, `upstreamId: null` | -| Skin | `home/RedHat/Rocky/` | -| VM | `` (Wayland + Xwayland) | -| Toolkit | GNOME 49 — Nautilus (`CAPSULE_EXPLORER_SKIN_KEY: nautilus`), Ptyxis → `terminal` | -| Dérivés | `linux-fedora` → `linux-rocky` ; `linux-alma` → `linux-rocky` | -| Script clôture Nautilus | `./root/tools/lab/update-rocky-nautilus.sh` | - -Inventaire : [linux-rocky-vm.md](inventaires/linux-rocky-vm.md) · JSON : [linux-rocky-vm.json](inventaires/linux-rocky-vm.json) · Parité : [inventaire-parite-rocky.md](inventaire-parite-rocky.md). - -**Documentation maître branche RHEL + GNOME** : [branche-redhat-gnome.md](branche-redhat-gnome.md) · **Procédure lab anti-échecs** : [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md). - ---- - -## 9. Skills à charger (clone OS) - -1. `onboarding` -2. `os-clone-from-vm` (cette convention) -3. `os-linux` + `capsuleos-distro-` + `capsuleos-vendor-` -4. `visual-parity-lab` puis `ui-state-effects-replication` (fidélité visuelle complète) -5. `role-integrator` ; `asset-pipeline` si assets ; `css-variables-contract` si CSS - ---- - -## 10. Références croisées - -- [contrib.md](../../contrib.md) — formation H0–H6 -- [politique-assets.md](politique-assets.md) -- [contrats-ui-bureau.md](contrats-ui-bureau.md) -- [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) -- [view-refresh-vigilance-playbook.json](inventaires/view-refresh-vigilance-playbook.json) -- [linux-gnome-capsule-slots.md](inventaires/linux-gnome-capsule-slots.md) diff --git a/root/docs/convention-reproduction-parfaite.md b/root/docs/convention-reproduction-parfaite.md deleted file mode 100644 index 522b65fc..00000000 --- a/root/docs/convention-reproduction-parfaite.md +++ /dev/null @@ -1,202 +0,0 @@ -# Convention — reproduction parfaite d'OS - -> **Contrat machine** : `etc/capsuleos/contracts/os-reproduction-coherence.json` -> **Formel** : [logique-formelle.md](logique-formelle.md) §2.15 -> **Store** : [procedure-store-replication-formelle.md](procedure-store-replication-formelle.md) - -Cette convention inscrit dans les manifests et recettes de campagne les quatre piliers demandés pour atteindre des reproductions parfaites d'OS avant de poursuivre le travail store. - ---- - -## 1. Logique de cohérence (C1–C9) - -| Id | Principe | Règle opérationnelle | -|----|----------|----------------------| -| **C1** | VM prime | Baseline depuis inventaire VM ou contrat ground — jamais fallback vendor (P11) | -| **C2** | Flux Z0→Z3 | Contrat → noyau → skin → façade ; le skin ne définit pas la vérité machine | -| **C3** | Prédicats séquentiels | Pas de Vp / StoreVp sans Vc / StoreVc documenté | -| **C4** | Ground avant skin | ¬I → pas de patch skin ; contentSpec avant template/CSS | -| **C5** | Façade canonique | Playwright via `resolveCapsuleOsUrl` — pas `home/` direct | -| **C6** | Écart explicite | Chaque écart classé dans `contentGaps[]` (grille) | -| **C7** | Clôture déductive | Reproduction parfaite = toutes dimensions P0 à `ok` ou `accepted` documenté | -| **C8** | Composition par slots | Assembler l'OS depuis `slots-manifest` — ne pas cloner un OS déjà couvert | -| **C9** | Delta VM seulement | Comparer inventaire VM au dépôt ; extraire/analyser **uniquement** sur GapΔ explicite | - ---- - -## 2. Logique déductive - -### Prémices - -- **M** — VM lab accessible -- **I** — Inventaire VM -- **H₂** — Socle `validate-all` -- **V** — Enquête visuelle documentée - -### Règles d'inférence (extrait) - -```text -D-STRUCT : H₂ ∧ AppV ∧ AppC ∧ AppP0 ∧ AppL → AppΣ -D-VISUAL : AppΣ ∧ AppVv ∧ AppVc ∧ AppVp → parité classée -D-STORE-G : StoreG ∧ StoreΣ ∧ H₂ → magasin branché -D-STORE-P : StoreG-ready ∧ StoreVc ∧ StoreVp → StoreΣ-perfect -D-OS-P : ManΣ ∧ AppΣ ∧ PbΣ ∧ Tf ∧ H₆ → OsΣ-registry -D-REAL : AppVp ∧ VΣ ∧ SlotF-full → RealΣ (réalisme vécu P0) -D-REAL-REG : ∀ slot P0 : RealΣ → RealΣ-registry -``` - -### Inférences interdites - -| Pattern | Remède | -|---------|--------| -| AppVp sans AppVc | Captures Capsule slot | -| Patch skin sans contentSpec | `contentGaps` dans inventaire visuel | -| Ground vendor A sur registry B sans overlay | `byRegistry` ou `slotOverlays` | -| ¬H₂ ∧ implémentation | R-IMP1 — gate d'abord | -| Campagne complète VM alors que SlotMap couvre P0 et GapΔ vide | `campaignPhases` réduit ; corriger gaps ouverts seulement | -| Nouveau gabarit pour slot déjà Σ satisfait | `byRegistry`, slotOverlays, contrat contenu | -| `partial` P0 sans `contentGaps` ouverts | `resolve-slot-gap-delta --write` (matérialise RealΣ) | - ---- - -## 2d. Réalisme vécu (RealΣ) - -**Formule** : `RealΣ = Vp ∧ VΣ ∧ functionalDepth ∉ {partial}` (slots P0). - -| Composante | Signification | Gap auto si manquant | -|------------|---------------|----------------------| -| **Vp** | `visualMatch ∈ {ok, accepted}` | `chrome` | -| **VΣ** | Matrice effets UI clôturée | `Vc` (registre) | -| **depth** | `functionalDepth = full` (ou full équivalent) | `interaction` | - -`resolve-slot-gap-delta --write` ouvre automatiquement des `contentGaps` pour chaque **realSigmaDebt** (P0 sans RealΣ et sans gap ouvert) — prédicat **F-SILENT-PARTIAL** interdit le partial silencieux. - -```bash -node usr/lib/capsuleos/tools/lab/resolve-slot-gap-delta.mjs --id --write -``` - ---- - -## 2b. Anticipation création OS (P-OS1–P-OS9) - -Principes inscrits dans `os-reproduction-coherence.json` → `osAnticipationPrinciples` : - -| Id | Essentiel | -|----|-----------| -| **P-OS1** | Pilote unique, dérivés explicites (`campaignPhases` réduit) | -| **P-OS2** | Σ structurel ≠ Vp parité | -| **P-OS3** | Contrat Z0 = prédicat + script + gate | -| **P-OS4** | Induction (VM) avant déduction (pipeline) | -| **P-OS5** | Grille 5 dimensions, zéro gap silencieux | -| **P-OS6** | Spine unique `run-capsule-pipeline` | -| **P-OS7** | Recette économe par registry | -| **P-OS8** | Façade canonique + rapport formel agrégé | -| **P-OS9** | **Réutiliser avant recréer** — SlotMap puis GapΔ seulement | - ---- - -## 2c. Campagne différentielle (C9) - -Workflow : **VmInventory → SlotMap → GapDelta → SelectiveCR → PatchGapOnly** - -| Étape | Rôle | -|-------|------| -| **SlotMap** | Croiser `*-vm-apps-installed.json` avec `slots-manifest` + `apps-catalog` | -| **GapΔ** | Lister `contentGaps` ouverts, `p0Gaps`, slots absents | -| **SelectiveCR** | Exécuter seulement les phases CR non sautées (`differential-campaign-lib.mjs`) | - -**Saut de phase** (si condition vraie) : - -- **CR-1** : inventaire VM déjà présent -- **CR-2** : P0 documenté sans `contentGaps` ouverts -- **CR-4** : `byRegistry` store présent sans gaps catalog/content - -**Déclencher extraction / analyse** seulement si : - -- `contentGaps[].status = open` sur la dimension concernée -- ou slot VM sans mapping catalogue -- ou `p0Gaps > 0` - -**Outil** (avant toute campagne CR ou store) : - -```bash -node usr/lib/capsuleos/tools/lab/resolve-slot-gap-delta.mjs --id --write -``` - -Artefacts : `root/docs/inventaires/-slot-gap-delta.json` et `.md`. - ---- - -## 3. Grille d'argumentation - -Chaque slot **P0** (ex. `update_manager`) est évalué sur **cinq dimensions** : - -| Dimension | Preuves attendues | -|-----------|-------------------| -| **chrome** | Captures VM/Capsule, ancres CSS, CSD | -| **content** | Inventaire VM, contrat contenu, contentGaps | -| **catalog** | apps-catalog, store catalog, apps installées VM | -| **interaction** | userScenarios, smoke Playwright, data-* | -| **detail** | Fiche app, champs meta, capture VM détail | - -### Verdicts par dimension - -`ok` · `partial` · `gap` · `accepted` (avec note et référence VM) - -### Promotion globale - -- **Parfaite** : ∀ dim P0 ∈ {ok, accepted} -- **Merge-ready** : aucune dimension `gap` -- **Bloquée** : ∃ dim P0 = `gap` - -Forme inventaire : `contentGaps[]` avec `id`, `dimension`, `severity`, `status`. - ---- - -## 4. Liste de critères (reproduction parfaite) - -### Par couche registre - -| Couche | Prédicats | Critères | -|--------|-----------|----------| -| Socle | H₂ | `validate-all` exit 0 | -| Manifeste | ManΣ | vm-distribution-manifest approuvé | -| Apps | AppΣ, AppVp | p0Gaps=0, visualMatch documenté | -| Store | StoreΣ, StoreG, StoreVp | ground Fedora, 5 dimensions grille | -| Release | H₆, Tf | validate-all post-patch, sync skin si Z2 | - -### Profil slot `update_manager` - -- **Référence** : `linux-fedora` -- **Vues VM minimales** : explore-grid, featured-hero, updates-banner, app-detail -- **Contrats** : `gnome-software-store-content.json`, `store-installable-apps.json` -- **Noyaux** : `gnome-software-ground.js`, `gnome-store-catalog.js` - ---- - -## 5. Recette de campagne (phases CR-0…CR-6) - -Ordre obligatoire avant continuation store : - -1. **CR-0** — `validate-all.mjs` (H₂) -2. **CR-1** — Inventaire VM apps -3. **CR-2** — Enquête visuelle VM P0 -4. **CR-3** — Grille + `contentGaps` (`enrich-apps-visual-investigation-parity`) -5. **CR-4** — Ground contrat + `generate-store-catalog.mjs` -6. **CR-5** — Captures Capsule store (`capture-capsule-software-views`) -7. **CR-6** — Clôture StoreVp - -Gate : `validate-os-reproduction-coherence.mjs` (intégré **H₂**). - ---- - -## 6. Liens contrats - -| Fichier | Rôle | -|---------|------| -| `os-reproduction-coherence.json` | Cadre canonique (ce document) | -| `apps-replication-chain.json` | Chaîne apps + référence cohérence | -| `store-replication-chain.json` | Chaîne magasin GNOME | -| `lab-recipe-profiles.json` | Hooks campagne par registryId | -| `gnome-software-store-content.json` | Ground contenu store | -| `slots-manifest.json` | `groundReferenceRegistryId` slot | diff --git a/root/docs/convention-schema-org.md b/root/docs/convention-schema-org.md deleted file mode 100644 index 26b255b4..00000000 --- a/root/docs/convention-schema-org.md +++ /dev/null @@ -1,62 +0,0 @@ -# Convention — données structurées schema.org - -> **Statut** : norme interne actée · [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) §9 · [fondements-philosophiques.md](fondements-philosophiques.md) §4.3. -> **Outils** : `build-schema-org.mjs` · `validate-schema-org.mjs` - ---- - -## 1. Périmètre - -| Zone | JSON-LD | Types schema.org | -|------|---------|------------------| -| **Portail** `index.html` | Oui (injecté) | `WebSite`, `ItemList` global | -| **Hub `/OS/linux/`** | Oui (injecté) | `CollectionPage`, `ItemList` Linux | -| **Hub `/mnt/`** | Oui (injecté) | `CollectionPage`, `LearningResource` + scénarios (`Course`) | -| **Façades skin** `OS/.../index.html` | Via hubs (URLs catalogue) | `SoftwareApplication` | -| **Intérieur bureau simulé** | **Non** | Pas de JSON-LD par fenêtre / slot | - -La métadonnée OS pointe vers les **façades** `OS/.../index.html` ; le HTML skin sous `home/` reste hors périmètre SEO. - ---- - -## 2. Sources machine - -| Source | Rôle | -|--------|------| -| `etc/capsuleos/os-registry.json` | Entrées OS (`id`, `displayName`, `facade`, `status`) | -| `mnt/catalog.json` + `mnt/**/module.json` | Modules et scénarios pédagogiques | -| `etc/capsuleos/contracts/schema-org-site.json` | URL publique, éditeur | - ---- - -## 3. Génération et injection - -```bash -node usr/lib/capsuleos/tools/build-schema-org.mjs -node usr/lib/capsuleos/tools/validate-schema-org.mjs -``` - -Artefacts : - -- `var/lib/capsuleos/generated/schema-org/graph.json` — graphe `@graph` complet -- `var/lib/capsuleos/generated/schema-org.hash.json` — empreinte sources -- Bloc `` … `END` dans `index.html`, `OS/linux/index.html`, `mnt/index.html` - -Regénérer après modification du registre OS ou du catalogue `/mnt`. - ---- - -## 4. Gate - -`validate-schema-org.mjs` (inclus dans `validate-quality-all.mjs`) : - -- fichiers générés présents et à jour ; -- `index.html` contient un JSON-LD valide entre les marqueurs ; -- structure minimale `@context`, `@graph`, types attendus. - ---- - -## 5. Références - -- [convention-modules-mnt.md](convention-modules-mnt.md) -- [convention-css-variables-tokens.md](convention-css-variables-tokens.md) — données visuelles vs JSON diff --git a/root/docs/convention-shell-global.md b/root/docs/convention-shell-global.md deleted file mode 100644 index edb87e28..00000000 --- a/root/docs/convention-shell-global.md +++ /dev/null @@ -1,257 +0,0 @@ -# Convention — socle shell global (investigation → conversion → réplication) - -> **Statut** : contrat validé (`etc/capsuleos/contracts/terminal-replication-chain.json`). -> **Rôle** : définir le processus critique qui alimente le **shell virtuel** de CapsuleOS — socle partagé du noyau, projections par OS, intégration scalable des futurs environnements. - -**Références** : [logique-formelle.md](logique-formelle.md) (prédicats **Ti–TΣ′**) · [procedure-terminal-commandes.md](procedure-terminal-commandes.md) (opératoire commandes) · [convention-terminal-rendu-sortie.md](convention-terminal-rendu-sortie.md) (**To**, **Tb**) · [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) (**Rv**) · [convention-reproduction-os.md](convention-reproduction-os.md) - ---- - -## 1. Positionnement — oui, c’est un socle du shell global - -Le terminal CapsuleOS n’est pas une app isolée : c’est la **projection CLI** du bureau simulé. Il partage avec Nautilus, le manifeste utilisateur et les slots `data-link` la même vérité machine. - -```mermaid -flowchart LR - subgraph vm [Ground truth VM] - VM[PTY / bash / paquets] - end - subgraph icr [Processus I → C → R] - I[Investigation Ti] - C[Conversion Tc Tf Tv Te] - R[Réplication Ts Tr Rv] - end - subgraph kernel [Noyau agnostique usr/lib] - CORE[terminal-core + executeCommand] - BRIDGE[CapsuleUserFs virtual-shell] - PARSE[shell-parse package-managers] - end - subgraph projection [Projection OS] - FAM[famille paquets] - VEND[vendor chrome] - SKIN[skin globals] - end - VM --> I - I --> C - C --> CORE - C --> FAM - R --> projection - CORE --> BRIDGE - FAM --> SKIN - BRIDGE --> NEMO[Nautilus / manifeste] -``` - -| Terme usuel | Terme CapsuleOS | Emplacement | -|-------------|-----------------|-------------| -| Shell réel (bash) | Ground truth VM | VM lab | -| Moteur de commandes | **Noyau executor** | `executeCommand.js` (unique) | -| Session sans DOM | **Noyau session** | `terminal-core.js` | -| Liste blanche distro | **Famille + vendor** | profils + `terminal-profile.js` | -| Chrome Ptyxis/Konsole | **Projection UI** | `terminal.js`, CSS skin | -| Pont FS | **Bridge** | `CapsuleUserFs`, `virtual-shell.js` | - -**Robustesse** : une seule implémentation par commande ; les gates empêchent la dérive registre ↔ exécuteur. -**Résilience** : modules optionnels (package-managers, shell-parse) dégradent proprement ; état terminal en **SESSION** (purge à fermeture). -**Scalabilité** : nouvel OS = inventaire **Ti** + profil famille (souvent existant) + globals skin — pas de fork `executeCommand.js`. - -**International (prévision)** : **Lj_fr** défaut · **Lj_en** / **Lk_qwerty** en projection additive ([scalabilite-noyau.md §7](scalabilite-noyau.md)) — la parité VM garde la locale de l'inventaire (**R-LJ2**). - ---- - -## 2. Processus I → C → R (investigation · conversion · réplication) - -### 2.1 Investigation (**Ti**) - -**But** : établir le **réel** VM avant toute implémentation (règle **R-INV1** — VM prime). - -| # | Action | Livrable | -|---|--------|----------| -| 1 | VM accessible (**M**) | SSH + session graphique | -| 2 | Recenser commandes : `compgen -c`, paquets par défaut, gestionnaire dominant | | -| 3 | Capturer : prompt, `ls` (colonnes/long), sorties `apt`/`dnf`/`zypper`, éditeur par défaut | | -| 4 | Noter redirections/pipes usuels (école / doc distro) | | -| 5 | Rédiger inventaire | `root/docs/inventaires/-terminal-vm.json` | - -Modèle : [`_template-terminal-vm.json`](inventaires/_template-terminal-vm.json). - -**Ti** = inventaire présent ∧ `commandAudit[]` renseigné ∧ `packageManager` documenté. - ---- - -### 2.2 Conversion (**Tc**, **Tf**, **Tv**, **Te**) - -**But** : traduire le réel en **couches noyau** sans duplication. - -```text -Pour chaque commande VM : - 1. Classifier → core | family | vendor | CapsuleOnly | defer - 2. Si core → command-core.js + case unique executeCommand.js - 3. Si family → profil linux/{debian,redhat,suse,arch}.js - 4. Si vendor → terminal-vendor-extensions.js - 5. Registre → command-registry.js (help, examples) - 6. Contrat → terminal-commands.json - 7. Gate → validate-terminal-commands.mjs -``` - -| Couche | Critère d’admission | -|--------|---------------------| -| **core** | Pertinent sur ≥ 2 familles Linux actives ; comportement POSIX ou universel pédagogique | -| **family** | Gestionnaire de paquets ou outil lié à la famille (APT, DNF, Zypper, pacman) | -| **vendor** | Singularité d’une distro (ex. `cinnamon` sur Mint) | -| **CapsuleOnly** | Sandbox (pas sur VM) — tag explicite dans l’inventaire | -| **defer** | P1/P2 — documenté, non implémenté | - -**Interdit** : copier `executeCommand.js` dans `home/` ; fork par `body.id` dans le moteur. - -Détail opératoire : [procedure-terminal-commandes.md](procedure-terminal-commandes.md). - ---- - -### 2.3 Réplication (**Ts**, **Tr**, **Rv**) - -**But** : prouver que CapsuleOS **reproduit** le comportement documenté (pas seulement compile). - -| # | Vérification | Prédicat | Gate | -|---|--------------|----------|------| -| 1 | Sync FS terminal ↔ Nautilus | **Ts** | `smoke-fs-terminal-explorer-sync.mjs` (T1–T8) | -| 2 | Rafraîchissement vues post-action | **Rv₁** | [view-refresh-vigilance-playbook.json](inventaires/view-refresh-vigilance-playbook.json) | -| 3 | Scénarios commandes vs inventaire VM | **Tr** | Matrice dans `-terminal-vm.json` → `replicationScenarios[]` | -| 4 | Sorties gestionnaires de paquets | **Tr** | Tests manuels / smokes documentés | -| 5 | Régression référentiel | **Te** | `validate-terminal-commands.mjs` | - -**Tr** = tous les scénarios P0 de l’inventaire terminal sont `pass` ou écart classé P1 assumé. - -**Ts** = smoke fs-sync vert sur le `registryId` cible. - ---- - -### 2.4 Clôture shell (**TΣ** / **TΣ′**) - -```text -TΣ = Ti ∧ Tc ∧ Tf ∧ Te ∧ Ts ∧ Tr -To = To₁ ∧ To₂ ∧ To₃ (indentation · sauts de ligne · coloration) -TΣ′ = TΣ ∧ To (clôture P0 stricte — voir convention-terminal-rendu-sortie) -Tb = profil ~/.bashrc virtuel (optionnel TΣ ; requis personnalisation shell) -``` - -(Tv requis si l’inventaire VM liste des singularités vendor.) - -Pour un **nouveau registryId** avec slot terminal P0 : - -```text -H₂ ∧ I ∧ Ti ∧ TΣ ∧ Rv → admissible merge (comportement + sync) -H₂ ∧ I ∧ Ti ∧ TΣ′ ∧ Rv → admissible merge fidélité sortie stricte -``` - ---- - -## 3. Agnosticité du noyau - -L’**agnosticité** signifie : le même moteur sert toutes les distros ; seules les **projections** et les **données** changent. - -### 3.1 Séparation des responsabilités - -| Couche | Agnostique ? | Modules | Règle | -|--------|--------------|---------|-------| -| **L0 — Session** | Oui | `terminal-core.js` | Zéro DOM ; API `CapsuleTerminal.createSession` | -| **L1 — Parse / exec** | Oui* | `terminal-shell-parse.js`, `executeCommand.js`, `terminal-package-managers.js` | *FS Linux simulé ; futur : adapters `osFamily` | -| **L1 — Référentiel** | Oui | `command-registry.js`, `command-core.js`, `terminal-profile-builder.js` | Contrat JSON = vérité déclarative | -| **L2 — Pont données** | Partiel | `virtual-shell.js`, `CapsuleUserFs` | Contrat manifeste explorateur | -| **L3 — UI chrome** | Non | `terminal.js`, `terminal-tabs.js`, `terminal-konsole-chrome.js` | Par toolkit / `body.id` | -| **L4 — Identité** | Non | `CAPSULE_TERMINAL_*`, `terminal-profile.js` | Prompt user@host ; hint → famille | - -```text -Règle d’or agnosticité : - Si le comportement est identique sur ≥ 2 OS → L0–L2 (noyau). - Si le comportement dépend du gestionnaire de paquets → famille (L4 data). - Si le comportement est visuel ou DE-spécifique → L3–L4 (skin). -``` - -### 3.2 Résolution à l’exécution - -```text -CAPSULE_TERMINAL_OS_FAMILY (linux|windows|macos) - + CAPSULE_TERMINAL_PROFILE (hint vendor : rocky, ubuntu, mint…) - → normalizeCommandDistro() → linux:{debian|redhat|suse|arch} - → CAPSULE_TERMINAL_CORE_COMMANDS ∪ familyCommands ∪ vendorCommands - → filtre CAPSULE_TERMINAL_COMMAND_REGISTRY - → CAPSULE_TERMINAL_ACTIVE_COMMANDS -``` - -Aucune branche `if (rocky)` dans `executeCommand.js` pour la **disponibilité** des commandes — uniquement pour des **formats de sortie** documentés (ex. `ls` colonnes GNOME), à migrer vers providers si la dette grossit. - -### 3.3 Intégration d’un nouvel OS (checklist) - -| # | Tâche | Zone | -|---|-------|------| -| 1 | Entrée `os-registry.json` + skin | catalogue | -| 2 | `CAPSULE_TERMINAL_PROFILE` dans profil skin | `skin.profile.json` | -| 3 | Famille commandes : existante ou nouveau `profiles/linux/.js` | noyau | -| 4 | Script profil dans `index.html` (chaîne §8 procedure-terminal-commandes) | skin | -| 5 | Inventaire **Ti** `-terminal-vm.json` | inventaire | -| 6 | Scénarios **Tr** + smoke **Ts** | lab | -| 7 | Chrome terminal (Ptyxis/Konsole/classique) | `terminal.js` + CSS skin | -| 8 | **TΣ** + **Rv** avant clôture | gates | - -Héritage typique : Fedora/Alma → famille `redhat` ; Ubuntu/Mint → `debian` ; openSUSE → `suse`. - ---- - -## 4. Résilience et robustesse - -| Risque | Mitigation | -|--------|------------| -| Dérive registre / exécuteur | `validate-terminal-commands.mjs` dans `validate-quality-all` | -| État terminal fantôme | **Rv₂** + SESSION purge (`CapsuleWindowMemory`) | -| Grille Nautilus stale | **Ts** + `capsule:fs-changed` | -| Module non chargé | Message d’erreur explicite (pas de throw silencieux) | -| Copie legacy `OS/linux/kernel/js/terminal/` | **Interdit** — canon = `usr/lib/capsuleos/shells/linux/terminal/` | -| Inventaire sans VM | Pas de baseline arbitraire (**R-PRI4**) | - ---- - -## 5. Chaîne formelle et contrats - -| Artefact | Rôle | -|----------|------| -| `etc/capsuleos/contracts/terminal-commands.json` | Couches core / family / vendor | -| `etc/capsuleos/contracts/terminal-replication-chain.json` | Ordre **Ti → TΣ**, gates | -| `inventaires/-terminal-vm.json` | Ground truth + scénarios **Tr** | -| `inventaires/fs-sync-playbook.json` | Pont FS (**Ts**) | -| `inventaires/view-refresh-vigilance-playbook.json` | **Rv** transversal | - -```bash -# Référentiel commandes -node usr/lib/capsuleos/tools/validate-terminal-commands.mjs - -# Sync FS terminal ↔ explorateur -CAPSULE_HTTP_BASE=http://127.0.0.1:8765 node usr/lib/capsuleos/tools/lab/smoke-fs-terminal-explorer-sync.mjs -``` - ---- - -## 6. Règles d’inférence (extrait) - -``` -R-TI1 H5 slot terminal ∧ ¬Ti → collecter inventaire VM terminal d’abord -R-TC1 Ti ∧ ¬Te → validate-terminal-commands.mjs -R-TS1 Te ∧ mutation FS ∧ ¬Ts → smoke-fs-terminal-explorer-sync -R-TR1 Ts ∧ ¬Tr → exécuter replicationScenarios P0 -R-TΣ1 Tr ∧ Ts ∧ Te ∧ Tc ∧ Ti → TΣ — shell admissible pour clôture skin -R-AGN1 comportement commun → noyau usr/lib (jamais home/ pour executor) -``` - ---- - -## 7. Modules pédagogiques (`mnt/`) - -Les scénarios terminal (**Tr**, **Ts**, **To**) peuvent être embarqués dans des modules montables — ex. `mnt/debutant/linux-bases/scenarios/s02-premieres-commandes.json`. Voir [convention-modules-mnt.md](convention-modules-mnt.md) (**Pm**, **PΣ**). - ---- - -## 8. Références croisées - -- [manifeste-noyau.md](manifeste-noyau.md) — distribution noyau / skins -- [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) — clone bureau global -- [procedure-playbook-general.md](procedure-playbook-general.md) — couche τ -- `usr/lib/capsuleos/shells/shared/terminal/README.md` — ordre scripts diff --git a/root/docs/convention-taxonomie-semantique.md b/root/docs/convention-taxonomie-semantique.md deleted file mode 100644 index 5ac33483..00000000 --- a/root/docs/convention-taxonomie-semantique.md +++ /dev/null @@ -1,199 +0,0 @@ -# Convention — taxonomie et sémantique CapsuleOS - -> **Statut** : **pierre angulaire** (juin 2026) — obligatoire pour agents IA et contributeurs humains. -> **Contrat machine** : [`etc/capsuleos/contracts/taxonomy.json`](../../etc/capsuleos/contracts/taxonomy.json) -> **Gate** : `node usr/lib/capsuleos/tools/validate-taxonomy.mjs` - -Complète : [convention-reproduction-os.md](convention-reproduction-os.md) · [paradigme-toolkit-de.md](paradigme-toolkit-de.md) · [convention-composants-ui.md](convention-composants-ui.md) · [skin-toolkit-recipe](../../etc/capsuleos/contracts/skin-toolkit-recipe.json) - -En cas de conflit entre une procédure locale et cette convention sur **l'identité** ou le **cloisonnement** → **cette convention prime**. - ---- - -## 1. Pourquoi une taxonomie - -CapsuleOS simule plusieurs distributions qui **partagent des scripts** mais **ne partagent pas** le même environnement graphique. Les collisions naissent quand : - -- un **slot logique** (`update_manager`) est confondu avec un **fichier gabarit** (`update_manager.html` = Cinnamon, pas GNOME) ; -- un **skin Rocky** importe du chrome ou des tokens **Mint** ; -- un **embed** injecte le HTML d'un toolkit et le CSS d'un autre. - -La taxonomie fixe **qui nomme quoi**, **où ça vit**, et **comment résoudre** sans fallback silencieux (**R-LOC1** / **P11**). - ---- - -## 2. Hiérarchie de résolution (ordre strict) - -```text -kernelId → linux | windows | android | … - └── branchId → rhel | debian | ubuntu | mint | fedora | opensuse | arch | … - └── toolkitId → gnome | cinnamon | kde | cosmic | … - └── registryId → linux-rocky | linux-mint | linux-ubuntu | … - └── vendor → rocky | mint | ubuntu | … -``` - -| Dimension | Exemple Rocky | Exemple Mint | Rôle | -|-----------|---------------|--------------|------| -| **kernelId** | `linux` | `linux` | Famille noyau simulée | -| **branchId** | `rhel` | `mint` | Lignée packaging (≠ marque) | -| **toolkitId** | `gnome` | `cinnamon` | Paradigme DE (Adwaita vs Mint-Y) | -| **registryId** | `linux-rocky` | `linux-mint` | Instance feuille (clé `proc/`, lab, profil) | -| **vendor** | `rocky` | `mint` | Pack assets `vendors/{vendor}/` | -| **bodyId** | `rocky` | `mint` | Scope CSS `body#` | -| **embedKey** | `rocky` | `mint` | Clé `CAPSULE_APP_EMBED.skins` | - -**Clé `extends`** (profil) — forme normative : - -```text -kernel:{kernelId}/branch:{branchId}/toolkit:{toolkitId} -``` - -Exemple : `kernel:linux/branch:rhel/toolkit:gnome` pour Rocky et Alma. - ---- - -## 3. Cinq zones (où écrire quoi) - -| Zone | Chemin | Contient | N'écrit pas | -|------|--------|--------|-------------| -| **Z0** | `etc/`, `proc/` | Contrats, registre, manifestes VM | Tokens visuels vendor | -| **Z1** | `usr/lib/`, `usr/share/` | Scripts partagés, gabarits **multi-variants**, clusters | Couleur dock Rocky | -| **Z2** | `home//` | Skin : HTML bureau, `style/`, tokens `*.skin.css` | Logique métier dupliquée | -| **Z3** | `OS/.../index.html` | Façades pick-os (générées) | CSS métier | -| **Z4** | `var/.../generated/` | Embeds, profils sérialisés | Source de vérité | - -**Règle scripts vs skins** : - -| Couche | Partagé entre distros ? | Exemple | -|--------|-------------------------|---------| -| **Scripts** (`usr/lib/capsuleos/`) | Oui (agnostique vendor) | `contentLoader.js`, `update-manager.js` | -| **Variant** (`usr/share/.../apps/`) | Par **toolkit**, pas par vendor | `update_manager_gnome.html` vs `update_manager.html` | -| **Skin** (`home/.../style/`) | Non — un vendor = un skin | `Rocky/.../update_manager.skin.css` (tokens Adwaita) | - ---- - -## 4. Couches sémantiques (ne pas confondre) - -### 4.1 Slot logique - -- **Définition** : ancre DOM stable `data-link="…"`. -- **Exemples** : `nemo`, `update_manager`, `themes`, `firefox`. -- **Règle** : même nom fonctionnel sur toutes les distros du même rôle (explorateur, logiciels, paramètres). -- **Anti-pattern** : renommer le slot par distro (`logiciels_rocky`). - -### 4.2 Variant (gabarit toolkit) - -- **Définition** : couple HTML + `*.base.css` pour un slot **dans un toolkit**. -- **Nommage** : - - `{slot}.html` — variant **canon** du toolkit quand slot = fichier (Cinnamon `update_manager.html`) ; - - `{slot}_{toolkit}.html` — variant explicite (`update_manager_gnome.html`) ; - - `{slot}_{flavor}.html` — variante registry historique (ex. `update_manager_kde.html`). -- **Catalogue** : `apps-catalog.json` → `toolkits.{toolkitId}.slotSpecs`. -- **Runtime** : `CAPSULE_TEMPLATE_OVERRIDES` quand le variant ≠ `{slot}.html`. -- **Explorateurs** : résolus via `CAPSULE_EXPLORER_TEMPLATE` + `cluster-registry.json`, pas via overrides slot classiques. - -### 4.3 Cluster - -- **Définition** : enregistrement structuré gabarit + CSS (`cluster-registry.json`). -- **ID** : `toolkit.gnome`, `explorer.nautilus.gnome`, `cluster.app.firefox`. -- **Profil** : `clusterIds[]` doit référencer des clusters existants et compatibles `toolkitId`. - -### 4.4 Chrome provider - -- **Définition** : comportement fenêtre (SSD/CSD, drag, headerbar). -- **Source** : `window-chrome-contexts.json` + `chrome.js`. -- **Exemples** : `libadwaita-gnome`, `nemo-gnome`, `cinnamon`, `file-roller-gtk`. - -### 4.5 Skin CSS (vendor) - -- **Définition** : `home/.../style/apps/{slot}.skin.css` — **tokens** (couleurs, tailles fenêtre, icônes vendor). -- **Règle** : pas de grille/layout structurel copié d'un autre toolkit ; structure dans `*.base.css` du variant. - -### 4.6 Composant UI (N1) - -- **ID** : `{toolkit}.{nom}` — ex. `gnome.adw-header-bar`, `cinnamon.xapp-window`. -- **Contrat** : `ui-components-{toolkit}.json`. - ---- - -## 5. Collisions interdites - -| ID | Interdit | Gate | -|----|----------|------| -| **cross-toolkit-chrome** | `toolkit-gnome/chrome.css` dans un skin Cinnamon | `validate-toolkit-chrome-isolation` | -| **cross-toolkit-variant** | Profil GNOME → `update_manager.html` (Cinnamon) | `validate-slot-variant-wiring` | -| **cross-vendor-assets** | `vendors/mint/` dans `home/RedHat/Rocky/` | `validate-skin-vendor-isolation` | -| **slot-default-assumption** | Charger `{slot}.html` sans résoudre le toolkit | `validate-taxonomy` | -| **embed-css-mismatch** | HTML variant A + cssBase variant B dans l'embed | `validate-taxonomy` | -| **z2-in-kernel** | Layout GNOME Software entier dans `home/` sans base partagée | revue + `validate-ui-components-*` | - ---- - -## 6. Résolution opératoire (agents) - -### 6.1 Avant tout patch skin/app - -```bash -# 1. Identifier la feuille -registryId=linux-rocky # proc/, profil, lab - -# 2. Lire le profil effectif -# etc/capsuleos/profiles/linux-rocky.json → toolkitId, branchId, extends - -# 3. Résoudre le variant d'un slot -# apps-catalog.json → toolkits.gnome.slotSpecs.update_manager - -# 4. Gates taxonomie -node usr/lib/capsuleos/tools/validate-taxonomy.mjs -node usr/lib/capsuleos/tools/validate-slot-variant-wiring.mjs -``` - -### 6.2 Recette complète (rien au hasard) - -```bash -node usr/lib/capsuleos/tools/linux/run-toolkit-skin-recipe.mjs -``` - -### 6.3 Prédicats - -| Symbole | Signification | -|---------|---------------| -| **Tax** | Profils, extends, clusterIds, toolkitPack cohérents | -| **TaxV** | Variants sans collision toolkit | -| **TaxΣ** | Tax ∧ TaxV ∧ isolation chrome | - ---- - -## 7. Matrice sémantique — exemple `update_manager` - -| Entité | Rocky (GNOME) | Mint (Cinnamon) | Ubuntu (GNOME) | -|--------|---------------|-----------------|----------------| -| Slot | `update_manager` | `update_manager` | `update_manager` | -| Variant | `update_manager_gnome.html` | `update_manager.html` | `update_manager_gnome.html` | -| Base CSS | `update_manager_gnome.base.css` | `update_manager.base.css` | `update_manager_gnome.base.css` | -| Chrome | `libadwaita-gnome` | `cinnamon` | `libadwaita-gnome` | -| Skin CSS | `Rocky/.../update_manager.skin.css` | `Mint/.../update_manager.skin.css` | `Ubuntu/.../update_manager.skin.css` | -| Libellé FR | Logiciels | Gestionnaire de mises à jour | Logiciels | - ---- - -## 8. Checklist commit (taxonomie) - -- [ ] `extends` aligné sur `kernelId` + `branchId` + `toolkit.id` -- [ ] Slot touché : variant déclaré dans `apps-catalog` pour le bon `toolkitId` -- [ ] Pas de CSS structurel d'un autre toolkit dans le skin -- [ ] `validate-taxonomy.mjs` OK -- [ ] `run-toolkit-skin-recipe.mjs` OK si Z1/Z2/embed touchés -- [ ] `skin.profile.json` miroir synchronisé avec `etc/capsuleos/profiles/` - ---- - -## 9. Références croisées - -| Besoin | Document / outil | -|--------|------------------| -| Cloisonnement chrome | [inventaires/toolkit-cloisonnement-audit.md](inventaires/toolkit-cloisonnement-audit.md) | -| Composants N1/N2 | [convention-composants-ui.md](convention-composants-ui.md) | -| Catalogue apps | [procedure-apps-catalog.md](procedure-apps-catalog.md) | -| Zones Z0–Z4 détaillées | [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) §1 bis | -| R-LOC1 | [logique-formelle.md](logique-formelle.md) | diff --git a/root/docs/convention-terminal-rendu-sortie.md b/root/docs/convention-terminal-rendu-sortie.md deleted file mode 100644 index b2525dca..00000000 --- a/root/docs/convention-terminal-rendu-sortie.md +++ /dev/null @@ -1,212 +0,0 @@ -# Convention — rendu des sorties terminal (indentation · sauts de ligne · coloration) - -> **Statut** : contrat `etc/capsuleos/contracts/terminal-output-fidelity.json` -> **Parent** : [convention-shell-global.md](convention-shell-global.md) · prédicats **To**, **Tb** dans [logique-formelle.md](logique-formelle.md) - -La reproduction fidèle du shell ne se limite pas au **texte brut** des commandes : l’élève reconnaît un terminal Linux à l’**indentation**, aux **retours à la ligne** et à la **coloration** (invite, `ls`, erreurs, DNF). Ces dimensions font partie de **Tr** (réplication comportementale visuelle). - ---- - -## 1. Problème — réel vs Capsule aujourd’hui - -| Dimension | Ground truth VM | CapsuleOS actuel | Écart | -|-----------|-----------------|------------------|-------| -| **Invite (PS1)** | Segments colorés bash/Ptyxis | CSS `terminal-ptyxis.base.css` + spans si chrome Fedora | P1 — teintes à caler sur capture VM | -| **`ls` colonnes** | Souvent multi-colonnes + `LS_COLORS` | Rocky : une ligne `join(' ')` ; Ubuntu/Pop : 5 colonnes | P0 Rocky — `usesGnomeStyleLsListing()` exclut `rocky` | -| **Erreurs** | stderr souvent rouge | Classe `.capsule-terminal__line--error` | P1 — comparer `#ff7b72` vs VM | -| **DNF / apt** | Sorties structurées, parfois ANSI | Lignes texte dans `terminal-package-managers.js` | P1 — pas de couleur transaction | -| **Sauts de ligne** | `\n` final parfois significatif | `split('\n')` + une `
` par ligne | P2 — lignes vides finales | -| **Espaces** | Tabs / alignement `ls -l` | `formatLsLongLine` simplifié | P1 — colonnes non calées VM | -| **Personnalisation** | `~/.bashrc`, `~/.bash_profile` | Module `terminal-bashrc.js` (v1 : alias, PS1, LS_COLORS) | **Tb** — voir §4 | - -**Règle** : pendant l’**investigation Ti**, capturer des **échantillons de sortie** (texte + capture couleur) pour chaque commande P0 — pas seulement « la commande existe ». - ---- - -## 2. Architecture cible — séparer texte, structure et rendu - -```mermaid -flowchart TB - subgraph exec [L1 Exécuteur — agnostique DOM] - CMD[executeCommand / package-managers] - OUT[CommandOutput structuré] - end - subgraph profile [L1.5 Profil shell] - BRC[terminal-bashrc.js] - PS1[PS1 alias LS_COLORS] - end - subgraph render [L3 Rendu — projection skin] - TR[terminal.js / konsole-chrome] - CSS[terminal-ptyxis.base.css tokens] - end - BRC --> PS1 - PS1 --> CMD - CMD --> OUT - OUT --> TR - TR --> CSS -``` - -### 2.1 Modèle `CommandOutput` (évolution) - -```text -{ - lines: Line[], - listing?: boolean, // ls multi-colonnes - error?: boolean, - clear?: boolean -} - -Line = string - | { text: string, spans?: { start, end, role }[] } - | { ansi: string } // séquence ANSI complète (futur) - -role ∈ { dir, file, executable, symlink, error, bold, dim, package, success } -``` - -| Couche | Responsabilité | -|--------|----------------| -| **Exécuteur** | Verbatim logique + structure sémantique (`listing`, `role` spans) | -| **Profil bashrc** | PS1, alias, `LS_COLORS` → état session `state.shellEnv` | -| **Rendu** | `textContent` **ou** spans/CSS — **jamais** de couleur en dur dans l’exécuteur | - -### 2.2 Indentation et sauts de ligne (**To₁**, **To₂**) - -| Règle | Spécification | -|-------|---------------| -| **To₁** | Espaces significatifs préservés (`white-space: pre` / `pre-wrap` sur lignes monospaces) | -| **To₂** | Une ligne executor = une ligne affichée ; pas de fusion ni split arbitraire | -| **To₂b** | `echo -e` / littéraux `\n` : hors scope v1 (documenter defer) | -| **Listing `ls`** | Largeur colonne = `max(len(nom))+marge` VM ou variable CSS `--terminal-ls-col-width` | - -Investigation : enregistrer dans l’inventaire `outputSamples[].raw` la sortie **exacte** (`od -c` ou copie Ptyxis). - -### 2.3 Coloration (**To₃**) - -| Zone | Mécanisme Capsule | Token / classe | -|------|-------------------|----------------| -| Invite user@host | Spans prompt | `--terminal-prompt-user-color` | -| Chemin invite | Span path | `--terminal-prompt-path-seg-color` | -| Répertoires `ls` | `.capsule-terminal__dir` | `--terminal-ls-dir-color` | -| Erreurs | `.capsule-terminal__line--error` | `--fedora-terminal-error` | -| DNF « Complete! » | (futur) span `success` | à définir par skin | - -**Interdit** : couleurs hex en dur dans `executeCommand.js` — uniquement `role` ou classes contractuelles. - ---- - -## 3. Processus I → C → R (rendu) - -| Phase | Action | Livrable | -|-------|--------|----------| -| **I** | `ssh` : `echo $PS1`, `alias`, `declare -p LS_COLORS`, captures `ls`, `dnf check-update`, `ls -l` | `outputSamples[]` dans `*-terminal-vm.json` | -| **C** | Provider sortie par commande ; tokens CSS skin ; étendre `listing` si multi-colonnes | patch noyau + `terminal.skin.css` | -| **R** | Diff texte normalisé + capture couleur côte à côte | scénarios **Tr** `S-out-*` | - -### Prédicat **To** - -```text -To = To₁ ∧ To₂ ∧ To₃ -TΣ′ = TΣ ∧ To (clôture terminal P0 stricte) -``` - ---- - -## 4. Couche **bashrc** (**Tb**) - -### 4.1 Pourquoi - -Sur Linux réel, le comportement perçu du terminal est largement défini par **`~/.bashrc`** (et `/etc/bashrc`) : invite, alias (`ll`, `la`), couleurs `ls`, variables d’environnement. Ignorer cette couche casse la crédibilité pédagogique et empêche les scénarios « l’élève édite son bashrc ». - -### 4.2 Périmètre v1 (module `terminal-bashrc.js`) - -| Directive | Support v1 | Effet | -|-----------|------------|-------| -| `alias nom='cmd'` | ✓ | Expansion avant parse (une passe) | -| `export PS1='…'` | ✓ | `\u \h \w \W \$` → invite | -| `export LS_COLORS='…'` | ✓ stocké | Rendu `ls` (v2 : application couleurs) | -| `export VAR=value` | ✓ stocké | Lecture future | -| `source`, fonctions, `if` | ✗ defer | Documenter dans inventaire | - -### 4.3 Emplacement données - -| Source | Chemin virtuel | -|--------|----------------| -| Manifeste explorateur / `fileContents` | `$HOME/.bashrc` | -| Défaut pédagogique (optionnel) | `home/public/.bashrc` seed | - -**Investigation VM** : - -```bash -ssh capsule@ 'cat ~/.bashrc; echo ---; echo PS1=$PS1; alias' -``` - -Champ inventaire : `bashrcSnapshot.path`, `bashrcSnapshot.sha256`, `bashrcSnapshot.excerpt`. - -### 4.4 Prédicat **Tb** - -```text -Tb = profil shell chargeable depuis ~/.bashrc virtuel - ∧ alias|PS1 documentés dans inventaire - ∧ pas de régression TΣ sur scénarios sans bashrc custom -``` - -**Tb** est **requis** pour les scénarios pédagogiques « personnalisation shell » ; **optionnel** pour TΣ minimal. - ---- - -## 5. Checklist Rocky (première passe **To**) - -| # | Commande | Capturer VM | Capsule | -|---|----------|-------------|---------| -| 1 | `(invite)` | Couleurs Ptyxis | `terminal-ptyxis.base.css` | -| 2 | `ls` | Colonnes + couleurs | Étendre listing Rocky | -| 3 | `ls -l` | Alignement colonnes | `formatLsLongLine` | -| 4 | `dnf check-update` | Texte + emphase | package-managers | -| 5 | `cd /nope` | Rouge stderr | `--error` | -| 6 | `echo -n` / `printf` | defer P2 | — | - ---- - -## 6. Gates et références - -```bash -node usr/lib/capsuleos/tools/validate-terminal-commands.mjs -# Futur : smoke-terminal-output-fidelity.mjs (diff texte + screenshot) -``` - -| Artefact | Rôle | -|----------|------| -| `terminal-output-fidelity.json` | Rôles, tokens, prédicats To/Tb | -| `terminal-bashrc.js` | Charge profil depuis FS virtuel | -| `terminal-ptyxis.base.css` | Tokens couleur invite / erreur | -| `*-terminal-vm.json` | `outputSamples`, `bashrcSnapshot` | - ---- - -## 7. Locale — FR défaut, EN en prévision - -| Priorité | Règle | -|----------|-------| -| 1 | **Lj_fr** — UI et docs CapsuleOS restent français par défaut | -| 2 | **Parité VM** — sorties terminal alignées sur la locale de l'inventaire (Rocky FR → `dnf` FR) | -| 3 | **Lj_en** — providers `terminal-package-managers` par `family × locale` ; pas de fork `executeCommand` | - -```text -providers.redhat['fr-FR'] → messages DNF français (cible To₃ Rocky) -providers.redhat['en-US'] → messages DNF anglais (portage international) -``` - -Contrat : `etc/capsuleos/contracts/locale-scalability.json` · jalon **S8** dans [scalabilite-noyau.md](scalabilite-noyau.md). - -L'écart **G-dnf-locale-fr** se corrige via provider **Lj_fr**, sans inverser la priorité FR du projet. - ---- - -## 8. Règles d’inférence - -``` -R-TO1 Tr ∧ sortie P0 ∧ ¬To₁ → corriger whitespace / colonnes avant chrome -R-TO2 To₁ ∧ ¬To₃ → tokens CSS + spans (pas hex dans executor) -R-TB1 scénario bashrc ∧ ¬Tb → terminal-bashrc.js + ~/.bashrc manifeste -R-TΣ2 clôture P0 stricte → TΣ ∧ To (pas seulement TΣ comportemental) -``` diff --git a/root/docs/dette-technique-2026-06.md b/root/docs/dette-technique-2026-06.md deleted file mode 100644 index f792f98c..00000000 --- a/root/docs/dette-technique-2026-06.md +++ /dev/null @@ -1,64 +0,0 @@ -# Dette technique — juin 2026 - -Registre vivant des écarts connus CapsuleOS. Mis à jour à chaque cycle P0/P1. - -## P0 résolus (cycle registryOverrides — juin 2026) - -| Écart | Résolution | -|-------|------------| -| `registryOverrides` absent — `linux-popos`, `linux-anduinos`, `linux-opensuse`, `linux-kde-neon` | Générateurs `generate-registry-overrides.mjs` + skin scan | -| `linux-mint` — 5 apps P0 seulement | `generate-mint-registry-overrides.mjs` → **102** entrées depuis inventaire | -| `audit-gnome-overview-scenarios.mjs` crash | Contrat présent ; audit cinnamon/KDE documenté (skip overview GNOME) | -| Gate `validate-app-catalog-integrity.mjs` manquante | Ajoutée + intégrée `validate-ui-contracts-all.mjs` | -| Ubuntu store UI — smoke S5–S12 `deferred` | **Option A** : `CAPSULE_TEMPLATE_OVERRIDES.update_manager` → `update_manager_gnome.html` (comme Pop!_OS) ; branding snap-store conservé dans `presentation-bindings` (Centre d'applications, sources snap/deb/flatpak) ; smoke `smoke-gnome-software-scenarios.mjs --id linux-ubuntu` | -| Mint — overrides HTML skin (`home/Debian/Mint/apps/`) | Gabarits Pix/Xreader promus Z1 (`visionneur_images_pix.html`, `visionneur_pdf_xreader.html`) ; gate `validate-skin-app-html-overrides.mjs` ; embed sans scan Mint/apps | - -### Comptage overrides (post-cycle) - -| registryId | apps | -|------------|------| -| linux-mint | 102 | -| linux-rocky | 22 | -| linux-alma | 25 | -| linux-fedora | 22 | -| linux-ubuntu | 12 | -| linux-popos | 26 | -| linux-anduinos | 23 | -| linux-kde-neon | 13 | -| linux-opensuse | 10 | - -## P1 résolus (scénarios overview — juin 2026) - -| Écart | Résolution | -|-------|------------| -| Rocky Loupe (`visionneur_images`) — ¬ScΣ | Contrat `loupe-user-scenarios.json` · Li1–Li4 · `syncLoupeGnomeDataset` · smoke + captures | -| Rocky Papers (`visionneur_pdf`) — ¬ScΣ | Contrat `papers-user-scenarios.json` · Pa1–Pa4 · `syncPapersGnomeDataset` · navigation pages | -| Ubuntu Rhythmbox (`lecteur_multimedia`) — ¬ScΣ dash+overview | Contrat `rhythmbox-user-scenarios.json` · Rb1–Rb4 · override `rhythmbox.html` · smoke Ubuntu | -| KDE Discover store (`linux-kde-neon`) | `storeCatalogStatus: active` · **11** apps magasin · section « À découvrir » dans `discover-kde.js` · smoke `smoke-discover-kde-neon.mjs` | -| Cinnamon Logithèque (`linux-mint`) | Socle `CapsuleCinnamonStore` · section « À découvrir » + vedette VM · align `align-mint-store-vm-ground.mjs` · smoke `smoke-mint-store-scenarios.mjs` · **Π_app=100** | - -Manifeste scénarios GNOME : **18 → 21** contrats (`gnome-user-scenarios-index.json`). - -## P1 restants - -| Domaine | Détail | -|---------|--------| -| Rocky Loupe / Papers | Polish visuel Vc ground truth (captures VM dédiées Papers) | -| Vc VM | Captures ground truth manquantes pour distros P1+ | -| KDE Discover store (openSUSE) | `storeCatalogStatus: deferred` — 0 apps magasin (priorité neon levée) | -| KDE neon VM lab | `` hors réseau au 2026-06-11 — réinventaire plasma-discover/flatpak à reprendre | -| Pop!_OS COSMIC | Toolkit `cosmic` sans `slotSpecs` dédiés — résolution via `storeToolkit: gnome` | -| Inventaires VM | `*-vm-apps-installed.json` absent hors rocky/ubuntu/mint | - -## P2 / maintenance - -- Étendre `collect-vm-apps-inventory.mjs` pour KDE et COSMIC -- Parité `text_editor` Kate/COSMIC polish -- Formal-state `AppΣ` par distro après inventaires VM - -## Références - -- [architecture-catalogue-apps.md](architecture-catalogue-apps.md) § bootstrap overrides -- [procedure-apps-catalog.md](procedure-apps-catalog.md) -- [inventaires/linux-kde-neon-discover-closure.md](inventaires/linux-kde-neon-discover-closure.md) -- Contrat lab : `etc/capsuleos/contracts/linux-kde-neon-vm.json` diff --git a/root/docs/equipe-agentique.md b/root/docs/equipe-agentique.md deleted file mode 100755 index 5f1862ae..00000000 --- a/root/docs/equipe-agentique.md +++ /dev/null @@ -1,213 +0,0 @@ -# Équipe agentique CapsuleOS — staffing à l'échelle - -Modèle d'organisation des agents Cursor pour faire grandir le catalogue OS **sans chaos**. - -**Références** : [AGENTS.md](../AGENTS.md) · [repertoire-os.md](repertoire-os.md) · [scalabilite-noyau.md](scalabilite-noyau.md) - ---- - -## Principe - -> **Un orchestrateur route, un skill OS possède, vendor/distribution/version/langage précisent, un rôle exécute.** - -Hiérarchie générée : [skills-hierarchie.md](skills-hierarchie.md) — `seed-agent-skills.mjs --write`. - -Pas d'agent « généraliste » sur un skin KDE + checklist + assets — découper en tâches avec contrats JSON vérifiables. - -**Formation avant action** : skill [`onboarding`](../skills/onboarding/SKILL.md) + [logique-formelle.md](logique-formelle.md) + [parcours-agent.md](parcours-agent.md) (H0–H6) ; gate [`validate-all.mjs`](../../usr/lib/capsuleos/tools/validate-all.mjs). Extension catalogue : [ajouter-os-scalable.md](ajouter-os-scalable.md). - -**Staffing = conséquence des prédicats** : ¬**A** → `kernel-supervisor` ; clone sans **I** → bloquer `role-integrator` ; parité Paramètres → `capsuleos-distro-*` après **A∧S** (voir §4 logique formelle). - ---- - -## Organigramme - -``` - ┌─────────────────────┐ - │ onboarding │ - │ H0–H6, validate-all │ - └──────────┬──────────┘ - │ - ┌──────────▼──────────┐ - │ kernel-supervisor │ - │ (migration noyau, │ - │ assets, hydratation)│ - └──────────┬──────────┘ - │ - ┌──────────▼──────────┐ - │ os-orchestrator │ - │ (routage demande) │ - └──────────┬──────────┘ - │ - ┌───────────────────────┼───────────────────────┐ - ▼ ▼ ▼ -┌─────────────┐ ┌─────────────┐ ┌─────────────┐ -│ os-linux │ │ os-windows │ │ os-macos │ -│ os-android │ │ os-ios │ │ os-bsd │ -│ os-chromeos*│ │ │ │ │ -└──────┬──────┘ └──────┬──────┘ └──────┬──────┘ - │ │ │ - └──────────────────────┼──────────────────────┘ - ▼ - ┌───────────────────────────────┐ - │ Rôles (1 par tâche dominante) │ - │ role-integrator │ - │ role-developer │ - │ role-web-designer │ - │ role-graphic-artist │ - │ role-designer │ - │ role-manager │ - └───────────────────────────────┘ - │ - ▼ - ┌─────────────────────┐ - │ coordinator │ - │ (multi-familles) │ - └─────────────────────┘ -``` - -\* `os-chromeos`, `os-harmonyos`, `os-unix` : stubs → copier `os-stub/SKILL.md`. - ---- - -## Matrice d'affectation par type de tâche - -| Tâche | Skill OS | Rôle | Entrées obligatoires | -|-------|----------|------|----------------------| -| Nouveau skin Linux dérivé KDE | `os-linux` | `role-integrator` | `os-registry.json`, toolkit `kde` | -| Correctif Dolphin / Nemo | `os-linux` | `role-developer` | `contrib.md`, explorateurs README | -| Tokens CSS distro | `os-linux` | `role-web-designer` | `body#`, variables-linux | -| Pack icônes FOSS | `os-linux` | `role-graphic-artist` + `asset-pipeline` | `assets/manifest.json`, licence | -| Migration assets → noyau | **`kernel-supervisor`** | `asset-pipeline` + `kernel-guardian` | `validate-asset-zones.mjs`, [roadmap §0.5](roadmap.md) | -| Noyau CapsuleWindow | `kernel-guardian` | `role-developer` | `common/window/README.md` | -| Version Windows historique | `os-windows` | `role-integrator` | kernel `OS/windows/` | -| Parcours checklist pédagogique | `os-orchestrator` | `role-designer` | missions, vocabulaire local | -| Release / roadmap | — | `role-manager` | `roadmap.md`, checklist dans `contrib.md` | -| Portail pick-os | `coordinator` | `role-developer` | `os-registry.json` | - ---- - -## Staffing par tier OS - -| Tier | Équipe minimale | Durée indicative | Gate qualité | -|------|-----------------|------------------|--------------| -| **P0** | integrator + developer + designer | continu | Régression Mint 0 tolérance | -| **P1** | integrator + web-designer | 1–2 sem / OS | DoD skin abouti (roadmap) | -| **P2** | integrator seul (toolkit existant) | 3–5 j | Shell + explorateur + 3 apps | -| **P3** | integrator + graphic-artist | 1 sem | L1 maturité | -| **P4** | os-stub + manager | spike 1 j | Faisabilité doc only | - ---- - -## Superviseur noyau (formel) - -### [`kernel-supervisor`](../skills/kernel-supervisor/SKILL.md) - -Orchestre Phase 0.5 roadmap, séquence les vagues de migration, bloque les skins tant que `validate-asset-zones` échoue. Délègue à : - -| Skill fils | Rôle | -|------------|------| -| [`asset-pipeline`](../skills/asset-pipeline/SKILL.md) | Copie, rewrite chemins, manifest, pick-os | -| [`kernel-guardian`](../skills/kernel-guardian/SKILL.md) | JS noyau, embeds, régression Mint P0 | - -Le `coordinator` reste le routeur **produit multi-familles** ; il renvoie au superviseur dès qu’assets/noyau sont en jeu. - -## Rôles émergents (recommandés) - -### Curateur registre (`registry-curator`) - -**Non-skill formel aujourd'hui** — fonction assignée à `role-manager` ou `coordinator` : - -- Maintenir `os-registry.json` et `build-os-registry.mjs` -- Vérifier sync pick-os ↔ registre (jusqu'à génération auto S7) -- Valider `sources[]` et licences assets - ---- - -## Brief type pour lancer un agent - -Génération automatique depuis le registre : - -```bash -node usr/lib/capsuleos/tools/print-agent-brief.mjs linux-elementary --write -node usr/lib/capsuleos/tools/print-agent-brief.mjs --list --tier P2 --status planned -``` - -Sortie : `root/docs/briefs/.md`. Modèle manuel ci-dessous si besoin. - -```markdown -## Contexte -- Entrée registre : `linux-elementary` (P2, planned) -- Toolkit : pantheon -- Référence visuelle : elementary HIG - -## Fichiers canon -- etc/capsuleos/os-registry.json -- usr/share/capsuleos/linux/explorers/ -- root/docs/manifeste-noyau.md § Hydratation - -## Livrables -1. Façade OS/linux/families/debian/elementary/ + home miroir -2. skin.profile.json -3. style/imports.css + tokens pantheon -4. Entrée status → beta dans build-os-registry.mjs -5. Checklist DoD roadmap § skin abouti - -## Interdits -- Fork contentLoader -- Assets dans home/public/ -- @import dans CSS injecté -``` - ---- - -## Parallélisation sûre - -| Peut paralléliser | Ne pas paralléliser | -|-------------------|---------------------| -| Skins Linux de toolkits différents | 2 agents sur même skin | -| Assets pack + doc registre | 2 agents sur CapsuleWindow | -| Windows version + macOS version | embed regen concurrent | -| CSS skin + JS app métier | contentLoader + windowContainer même PR | - ---- - -## Escalade - -| Situation | Agent | -|-----------|-------| -| Famille OS inconnue | `os-orchestrator` | -| Toucher > 2 familles | `coordinator` | -| Conflit toolkit (GNOME vs KDE) | `role-manager` tranche | -| Régression P0 Mint | stop — `kernel-guardian` | -| Migration assets bloquée / 45+ violations | `kernel-supervisor` planifie vague | - ---- - -## Skills à créer (backlog) - -| Skill | Quand | -|-------|-------| -| `os-chromeos` (réel) | Entrée chromeos → beta | -| `registry-curator` | S4 validate-capsule en place | - -Copier depuis [`skills/os-stub/SKILL.md`](../skills/os-stub/SKILL.md). - -**Créés juin 2026 :** `kernel-supervisor`, `asset-pipeline`, `kernel-guardian`, [`vm-app-fidelity-pass`](../skills/vm-app-fidelity-pass/SKILL.md) (campagne crédibilité pédagogique v3). - -### [`vm-app-fidelity-pass`](../skills/vm-app-fidelity-pass/SKILL.md) - -Campagne **v3-credibility-pass** — scénarios utilisateur fidèles à la VM (au-delà de Π structurel C0–C10). Pairing : `os-clone-from-vm`, `role-integrator`, `distributions/linux-mint`. Orchestrateur : `run-app-fidelity-campaign.mjs`. - ---- - -## Checklist onboarding nouvel agent - -- [ ] Lire [manifeste-noyau.md](manifeste-noyau.md) -- [ ] Lire skill OS + rôle assignés -- [ ] Identifier entrée `os-registry.json` -- [ ] Confirmer tier et maturité cible -- [ ] Lister `CAPSULE_*` existants du toolkit de référence -- [ ] Ne pas créer README sous `OS/` (règle projet) - -*Staffing vivant — ajuster après retours terrain conseillers numériques.* diff --git a/root/docs/familles-os.md b/root/docs/familles-os.md deleted file mode 100755 index 2fd50358..00000000 --- a/root/docs/familles-os.md +++ /dev/null @@ -1,45 +0,0 @@ -# Familles d’OS simulées - -Cartographie **dépôt actuel** + extension prévue (`writing.md` §3). - -> **Catalogue complet (57 entrées, 12 actives waves 1–5)** : [repertoire-os.md](repertoire-os.md) · [manifeste-kernels.md](manifeste-kernels.md) · JSON : [`etc/capsuleos/kernels.json`](../../etc/capsuleos/kernels.json) · [`etc/capsuleos/os-registry.json`](../../etc/capsuleos/os-registry.json) - -| Famille | Facade `OS/` | Skins `home/` | Skill agent | Entrées actives | -|---------|--------------|---------------|-------------|-----------------| -| Linux Debian | `OS/linux/families/debian/*` | `home/Debian/*` | `os-linux` | 7 | -| Linux Red Hat | `OS/linux/families/redhat/*` | `home/RedHat/*` | `os-linux` | 2 | -| Linux SUSE | `OS/linux/families/suse/*` | `home/SUSE/*` | `os-linux` | 1 | -| Linux Arch | (prévu) | — | `os-linux` | 0 | -| Linux Slackware | (prévu) | — | `os-linux` | 0 | -| Windows | `OS/windows/versions/*`, `shared/` | — | `os-windows` | 11 | -| macOS | `OS/macos/` | `home/MacOS/` | `os-macos` | 1 | -| Android | `OS/android/` | — | `os-android` | 1 | -| iOS | `OS/ios/` | — | `os-ios` | 1 | -| BSD | `OS/bsd/` | — | `os-bsd` | 0 | -| Rocky (GNOME) | `OS/linux/families/redhat/rocky/` | `home/RedHat/Rocky/` | `os-linux` + vendor `rocky` | 1 (P1, référence GNOME) — [branche-redhat-gnome.md](branche-redhat-gnome.md) · [procédure lab](procedure-lab-linux-rocky-gnome.md) | -| UNIX | convention héritée / à structurer | — | `os-unix` | 0 | -| ChromeOS | non présent | — | `os-chromeos` → stub | 0 | -| HarmonyOS | non présent | — | `os-harmonyos` → stub | 0 | -| Rétro | `OS/retro/` (prévu) | — | `os-stub` | 0 | - -## Commun inter-OS - -- **`home/public/`** — arborescence utilisateur simulée (manifestes) — **pas** d'assets système. -- **`usr/share/capsuleos/assets/`** — icônes et images noyau ([manifest.json](../../usr/share/capsuleos/assets/manifest.json)). -- **`usr/lib/capsuleos/common/`** — noyau JS (`capsule-window.js`, `user-home.js`, …). -- **`etc/capsuleos/os-registry.json`** — répertoire machine-lisible. -- **Branding portail** — `usr/share/capsuleos/branding/`. - -## Scalabilité & agents - -- [scalabilite-noyau.md](scalabilite-noyau.md) -- [equipe-agentique.md](equipe-agentique.md) -- [manifeste-noyau.md](manifeste-noyau.md) - -## Ajouter une famille - -1. Enregistrer dans `usr/lib/capsuleos/tools/build-os-registry.mjs` → `node …/build-os-registry.mjs`. -2. Créer l’arborescence sous `OS//` (façade) et assets sous `usr/share/capsuleos/assets/`. -3. Factoriser le JS dans `usr/lib/capsuleos/shells//` si possible. -4. Dupliquer le pattern skill : `skills/os-stub/` → `skills/os-/`. -5. Mettre à jour [repertoire-os.md](repertoire-os.md) et ce fichier. diff --git a/root/docs/fondements-philosophiques.md b/root/docs/fondements-philosophiques.md deleted file mode 100644 index 77320e99..00000000 --- a/root/docs/fondements-philosophiques.md +++ /dev/null @@ -1,287 +0,0 @@ -# Fondements académico-philosophiques — CapsuleOS - -> **Statut** : document fondateur (juin 2026) — complète [manifeste-noyau.md](manifeste-noyau.md) et [logique-formelle.md](logique-formelle.md) -> **Public** : contributeurs, agents, formateurs -> **Phrase-synthèse** : *CapsuleOS est une **expérience de pensée** (Gedankenexperiment) matérialisée : reproduction **maximale** de l’expérience bureau réelle, dans l’enveloppe **statique + navigateur** — la fidélité est la clé de l’apprentissage.* - ---- - -## 1. Positionnement — ce que CapsuleOS est (et n’est pas) - -### 1.1 Nature du projet - -CapsuleOS est un **rootfs web statique** : une arborescence de fichiers (HTML, CSS, JS, JSON) qui **simule** des environnements de bureau familiers, exécutable sans hyperviseur, sans compte cloud, sans installation lourde. - -| CapsuleOS **est** | CapsuleOS **n’est pas** | -|-------------------|-------------------------| -| Une **expérience de pensée** : bureau réel reproduit au plus près | Un émulateur de noyau (QEMU, Box86…) | -| Un **dispositif où la fidélité fait l’apprentissage** | Une maquette iconographique « inspirée de » | -| Un **modèle** structuré de bureau (slots, chrome, FS, effets, apps) | Une VM conteneurisée dans le navigateur | -| Une **archive active** de conventions UI (GNOME, NT, Darwin…) | Un exécutable système hors navigateur | - -**Contrainte d’enveloppe** (non négociable) : 100 % statique, exécutable en navigateur, sans noyau réel. **À l’intérieur de cette enveloppe**, nous poussons la fidélité **au maximum** — pas au minimum. - -### 1.2 Thèse centrale — la fidélité comme clé - -> **La fidélité n’est pas un enrichissement optionnel : c’est le moteur pédagogique.** - -CapsuleOS vise la reproduction d’une **expérience** aussi complète que possible — layout, typographie, transitions, menus, effets, apps, gestes — comme dans une **expérience de pensée très définie** : l’apprenant doit *vivre* le bureau cible, pas seulement le reconnaître de loin. - -| Dimension | Statut | -|-----------|--------| -| Gestuelle & sémantique (L2–L3) | Nécessaire, insuffisant seul | -| Parité visuelle pixel (L4, **Vp**) | **Objectif P0** | -| États UI & effets (**VΣ**, apps incluses) | **Objectif P0** — shell **et** applications | -| Ontologie machine (binaire réel) | Hors enveloppe — seule limite structurelle | - -Les écarts P1/P2/CapsuleOnly restent **classés et documentés**, mais ils ne définissent pas la cible : ils marquent ce qu’il reste à combler. - ---- - -## 2. Ontologie — qu’est-ce qu’un « OS » ici ? - -### 2.1 Strates d’existence - -Dans CapsuleOS, un OS n’est pas une entité unique : c’est une **pile de projections** : - -```text -Ontologie CapsuleOS (du réel au vécu) - - [R] Référent réel VM lab, documentation officielle, captures - ↓ mesure - [M] Modèle machine proc/, inventaires JSON, contrats etc/ - ↓ interprétation - [N] Noyau simulé usr/lib + usr/share (comportements partagés) - ↓ stylisation - [S] Skin vendor home/ (tokens, chrome, layout) - ↓ exposition - [F] Façade URL OS/ (point d’entrée pick-os) - ↓ vécu - [E] Expérience DOM hydraté dans le navigateur -``` - -Chaque strate a un **mode d’être** différent : - -- **R** existe hors dépôt (monde physique / VM) -- **M** existe comme **vérité documentée** versionnée -- **N, S, F, E** existent comme **artefacts web** - -Confondre **M** et **E** (référencer dans le skin un asset non importé) est une **erreur ontologique** — c’est précisément la défaillance observée sur Ubuntu (grille avant import). - -### 2.2 Simulacre et transparence - -Au sens de la théorie des représentations (Eco, *Lector in fabula* ; Gombrich, *Art and Illusion*), CapsuleOS produit un **simulacre fonctionnel** : l’interface *se comporte comme* un bureau sans *être* le bureau. - -**Exigence méthodologique** : lorsque la simulation diverge encore du réel (P1, CapsuleOnly), l’écart doit être **classé, documenté et planifié** — c’est une **dette de fidélité**, pas un choix de design durable. La cible reste la convergence vers l’expérience réelle. - ---- - -## 3. Épistémologie — comment nous connaissons la « vérité » - -### 3.1 Hiérarchie des sources - -| Rang | Source | Statut épistémique | -|------|--------|-------------------| -| 1 | VM lab observable (SSH, captures, `.desktop`) | **Ground truth** primaire (Linux) | -| 2 | `proc//` dérivé de la VM | **Vérité machine** du dépôt | -| 3 | Inventaires `root/docs/inventaires/` | Interprétation curatée + écarts classés | -| 4 | Documentation officielle (HIG, MSDN-like) | Vérité normative (Windows/macOS/mobile sans VM) | -| 5 | Skin `home/` | **Hypothèse** jusqu’à validation gates | -| 6 | Mémoire agent / intuition | **Inadmissible** sans gate | - -**Règle épistémique (R-INV1)** : ¬**I** → pas d’implémentation skin. Ce n’est pas de la bureaucratie : c’est la barrière entre *croire* et *savoir*. - -### 3.2 Falsifiabilité - -Chaque affirmation de parité doit être **réfutable** par un script : - -- `validate-all.mjs` — cohérence structurelle -- smokes lab — comportement slot -- captures VM ↔ Capsule — evidence visuelle - -Un skin sans gate vérifiable n’est pas une connaissance : c’est une **opinion esthétique**. - -### 3.3 Le rôle de la logique formelle - -Les prédicats (**H₂**, **ManΣ**, **AppΣ**, **VΣ**…) ne sont pas un exercice de logique pure. Ils incarnent une **éthique de l’ingénierie** : - -> *Ne pas avancer sans avoir rendu la prochaine ignorance visible.* - -C’est un pragmatisme à la Peirce : la « vérité » est ce qui **résiste** aux gates, pas ce qui plaît en revue de code. - ---- - -## 4. Finalité pédagogique - -### 4.1 Constructionnisme situé - -Inspiré de Papert (*Mindstorms*) et des environnements de **situated learning** (Lave & Wenger), CapsuleOS place l’apprenant dans un **bureau reconnaissable** pour ancrer : - -- la navigation fichiers ; -- les métaphores fenêtre / application ; -- les conventions terminal / explorateur ; -- la variété des écosystèmes (Debian-like, NT, Plasma…). - -Le noyau ne **enseigne** pas la syntaxe `apt` ou `dnf` par théorie : il **expose** un environnement où la syntaxe a un **contexte crédible**. - -### 4.2 Niveaux de fidélité — échelle de progression, pas de relâchement - -| Niveau | Contenu | Rôle | -|--------|---------|------| -| **L1** | Paradigme bureau navigable | Amorçage catalogue (P3/P4) | -| **L2** | Apps / chrome reconnaissables | Palier intermédiaire | -| **L3** | Parcours checklist structurel | Prérequis avant clôture | -| **L4** | Pixel-parité, animations, **VΣ apps complètes** | **Cible P0 / P1 actifs** | - -Un skin **P0** n’est pas « terminé » sans **Vp** et **VΣ** (shell + apps). Les tiers P2/P3 peuvent démarrer plus bas, mais la **trajectoire** du plan maître vise L4/VΣ pour tout registry réactivé. - -### 4.3 Dossier `/mnt` — scénarios pédagogiques cross-OS - -`/mnt` est le **répertoire d’injection de scénarios pédagogiques** : parcours, missions, contenus didactiques qui peuvent être **déployés sur n’importe quel OS** du catalogue (Ubuntu, Rocky, Windows 11, Sonoma…). - -- Ce n’est pas un fork du noyau : les scénarios **s’appuient** sur les bureaux simulés existants. -- La métaphore Linux `mount` reste **utile en doc**, mais la définition opératoire est : *dossier de scénarios poussables sur tous les OS*. -- Données structurées **schema.org** : applicable à `/mnt` **et** à `/OS` (voir §10). - ---- - -## 5. Éthique de la représentation - -### 5.1 Principes - -1. **Fidélité maximale dans l’enveloppe** — Pousser l’expérience au plus près du réel ; seules limites : statique + navigateur (pas d’hyperviseur, pas de noyau exécuté). Ce n’est pas une invitation à la médiocrité visuelle. -2. **Sécurité opérationnelle** — Distinct de la fidélité : ne pas présenter CapsuleOS comme environnement de production pour opérations sensibles (réseau réel, données critiques). La **ressemblance** est haute ; le **risque système** reste nul. -3. **Non-emprunt** — Les assets d’un vendor ne servent pas un autre (intégrité identitaire des distributions). -4. **Classification des écarts** — P0/P1/P2/CapsuleOnly : dette mesurée vers la fidélité cible, pas excuse permanente. -5. **Accessibilité opt-in** — Une variante orientée accessibilité doit pouvoir être **activée** (`data-font-scale`, contrastes, etc.) ; **par défaut**, le skin reproduit le **comportement VM / vendor** (souvent sans a11y forcée). L’a11y Capsule est une **couche additive**, pas l’état nominal du clone. - -### 5.2 Rapport au travail réel des admin / dev - -La reproduction fidèle de Rocky ou Ubuntu **respecte** le travail des communautés libres : logos, polices, layouts ne sont pas pastiches génériques. Le **cloisonnement vendor** est une forme de **reconnaissance** des identités techniques, pas seulement du branding. - ---- - -## 6. Esthétique et forme — le CSS comme langage public - -### 6.1 Thèse formelle - -> **L’interface publique du noyau, ce sont les variables CSS — pas les classes privées du skin.** - -Cette thèse évite deux dérives : - -- **Dérive décorative** : pixels copiés sans structure ; -- **Dérive framework** : logique UI cachée dans React alors que le contrat est statique. - -Les tokens (`--head`, `--win-*`, `--nemo-*`) sont l’équivalent des **API stables** en système distribué : le skin **configure**, il ne **réimplémente** pas. - -### 6.2 Statique comme choix moral de portabilité - -Le statisme (pas de bundler obligatoire) est un choix **démocratique d’accès** : - -- école sans CI ; -- formateur avec clé USB ; -- élève hors ligne. - -L’embed offline est une **projection compilée**, pas une dépendance : le source reste lisible. - ---- - -## 7. Agnosticisme — philosophie du cloisonnement - -### 7.1 Thèse d’architecture (validée juin 2026) - -> **Noyau `core` agnostique → adaptateur `kernelId` → comportements `toolkit` → skin scellé `vendor` → vérité machine `proc/`.** - -### 7.2 Justification philosophique - -Le cloisonnement n’est pas de la froideur technique : c’est une **séparation des responsabilités** au sens de Simondon (*L’individu et sa genèse physico-biologique*) — chaque couche **individue** un ensemble de propriétés sans absorber la couche inférieure. - -| Couche | Question philosophique | Réponse CapsuleOS | -|--------|------------------------|-------------------| -| `core/` | Qu’est-ce qui est universel au navigateur ? | Fenêtre, ressource, bus | -| `shells//` | Qu’est-ce qui est propre à une famille OS ? | Boot, intégration FS | -| Toolkit | Qu’est-ce qui est propre à un DE ? | Chrome GNOME vs Plasma | -| Vendor | Qu’est-ce qui est propre à une distro ? | Dock Ubuntu, Yaru, DNF | -| `proc/` | Qu’est-ce qui est mesuré sur le réel ? | Manifeste, apps, médias | - -**Mélanger les couches** (dock Ubuntu sur Rocky) n’est pas une « optimisation » : c’est une **confusion ontologique** qui détruit la crédibilité des deux vendors. - -Synthèse post-campagne store (juin 2026) : [introspection-ontologique-2026-06.md](introspection-ontologique-2026-06.md). - -### 7.3 Allowlist + denylist - -- **Allowlist** (`skin.profile.json`, `CAPSULE_*`) : ce que le skin **peut** être -- **Denylist** (`skin-vendor-isolation.json`) : ce qu’il **ne doit jamais** charger - -La philosophie est **positive** (identité définie) complétée par **garde-fous** (porosité interdite). - ---- - -## 8. Rapport au réel — clone, parité, amélioration continue - -### 8.1 Mimesis progressive - -La chaîne VM → `proc/` → assets → skin n’est pas un snapshot figé : c’est une **mimesis itérative** (réf. Auerbach, *Mimesis* — représentation fidèle du réel dans l’art occidental, adaptée ici à l’ingénierie). - -Chaque passe (ManΣ, AppΣ, VΣ) **rapproche** la projection **E** du modèle **M**, sans prétendre fusionner **E** et **R**. - -### 8.2 Amélioration continue multi-vendor - -L’universalisation du manifeste n’abolit pas le vendor : elle **formalise** la mesure pour chaque identité. Fedora n’est pas Rocky ; Mint n’est pas Ubuntu. L’outil est commun ; la **vérité** est locale à chaque `registryId`. - ---- - -## 9. Principes non négociables (constitution du projet) - -| # | Principe | Implication | -|---|----------|-------------| -| **P1** | Statique d’abord | Pas de dépendance build en lecture | -| **P2** | Vérité machine avant skin | `proc/` / inventaires avant `home/` | -| **P3** | Un noyau, des adaptateurs | Pas de fork `CapsuleWindow` par distro | -| **P4** | Toolkit-first, vendor-sealed | Mutualisation par DE, scellement par distro | -| **P5** | Falsifiabilité | Gate ou ça n’existe pas | -| **P6** | Écarts classés | Dette vers fidélité, pas relâchement | -| **P7** | Ressource sobre | Pas de module sans dette prouvée | -| **P8** | Deux mondes assets | Système (`usr/share`) ≠ utilisateur (`home/public`) | -| **P9** | Fidélité expérientielle | **Vp ∧ VΣ** (apps complètes) pour P0 | -| **P10** | A11y opt-in | Mode accessibilité activable, pas défaut clone ; gate mesurable [`validate-a11y.mjs`](../../usr/lib/capsuleos/tools/validate-a11y.mjs) (WCAG 2.2 AA, axe-core) — voir [audit-conformite-normes.md](audit-conformite-normes.md) | -| **P11** | Vérité locale, pas de fallback cross-vendor | Matrices, manifestes, playbooks, inventaires liés à un `registryId` ; absence = gate rouge explicite — jamais emprunt silencieux à un autre vendor | -| **P12** | Clean code & corpus | Toute écriture (code, doc, données) respecte [convention-clean-code.md](convention-clean-code.md) — inclut [README.md](README.md) ; pas d’écriture hors zone ni hors plan | - ---- - -## 10. Décisions actées (juin 2026) - -| Question | Décision | -|----------|----------| -| **Profondeur VΣ** | **Apps complètes** — shell + toutes les apps P0 du registry, pas shell seul | -| **schema.org** | **`/mnt`** (scénarios) **et `/OS`** (entrées catalogue / métadonnées façade) — pas chaque fenêtre interne du bureau | -| **localStorage vs CSS vars** | État visuel dérivé VM → **variables CSS** ; persistance session utilisateur (onglets, préférences) → **localStorage** | -| **Internationalisation** | **FR par défaut** ; **EN** (et QWERTY) en **couche additive** (Lj, Lk) | - ---- - -## 11. Documents du corpus fondateur - -| Document | Rôle philosophique | -|----------|-------------------| -| **Ce fichier** | Fondations — pourquoi | -| [manifeste-noyau.md](manifeste-noyau.md) | Vision technique — quoi | -| [manifeste-kernels.md](manifeste-kernels.md) | Taxonomie — qui hérite de qui | -| [logique-formelle.md](logique-formelle.md) | Méthode — comment décider | -| [convention-reproduction-os.md](convention-reproduction-os.md) | Éthique opératoire du clone | -| [convention-clean-code.md](convention-clean-code.md) | Écriture in situ — code, doc, données (corpus README) | -| [README.md](README.md) | Point d’entrée corpus unique | -| [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) | Trajectoire — quand / dans quel ordre | - ---- - -## 12. Formule de validation (juin 2026, amendement fondateur) - -> Nous construisons une **expérience de pensée matérialisée** : reproduction **maximale** de l’expérience bureau dans l’enveloppe statique navigateur, structurée en couches distinctes, vérifiable par des gates (**Vp**, **VΣ** apps complètes, **Tf**, **H₆**), respectueuse des identités vendor, sobre en modules, avec scénarios **`/mnt`** déployables sur tout OS et amélioration continue mesurée sur le réel. - -Cette formule est la base académico-philosophique sur laquelle reposent l’architecture **toolkit-first, vendor-sealed, proc-backed** et le plan maître de reproduction. - ---- - -*Amendement juin 2026 — fidélité maximale, VΣ apps complètes, a11y opt-in, `/mnt` scénarios cross-OS, schema.org `/mnt` + `/OS`.* diff --git a/root/docs/gnome-hig-ressources.md b/root/docs/gnome-hig-ressources.md deleted file mode 100644 index eefcdc96..00000000 --- a/root/docs/gnome-hig-ressources.md +++ /dev/null @@ -1,191 +0,0 @@ -# GNOME HIG — ressources officielles pour la reproduction fidèle - -> **Public** : agents développant les versions **toolkit GNOME** (Rocky, Fedora, Alma, Ubuntu GNOME, etc.) -> **Source racine** : [Tools & Resources — GNOME HIG](https://developer.gnome.org/hig/resources.html) -> **Inventaire machine** : [`inventaires/gnome-hig-resources.json`](inventaires/gnome-hig-resources.json) (crawl récursif, régénérable) -> **Skill agent** : [`gnome-hig-replication`](../skills/gnome-hig-replication/SKILL.md) - -La plateforme GNOME moderne s’appuie sur **GTK 4** et **libadwaita**. Le HIG est la source normative pour apps et patterns UI ; le **GNOME Shell** (top bar, Aperçu) complète via wiki design et captures VM — voir [branche-redhat-gnome.md](branche-redhat-gnome.md). - ---- - -## 1. Méthode de crawl (régénération) - -```bash -node root/tools/lab/crawl-gnome-hig-resources.mjs -``` - -- Point d’entrée : `https://developer.gnome.org/hig/resources.html` -- Parcours récursif de tous les liens `https://developer.gnome.org/hig/*` (pages de contenu, hors `_static/`) -- Liens sortants collectés : apps design Flathub, GitLab GNOME Design, API libadwaita, GTK inspector, templates SVG - -Dernière génération : voir champ `crawledAt` dans le JSON. - ---- - -## 2. Arborescence HIG (58 pages de contenu) - -### 2.1 Principes et ressources - -| Page | URL | Usage CapsuleOS | -|------|-----|-----------------| -| Accueil HIG | https://developer.gnome.org/hig/ | Vue d’ensemble, GTK 4 + libadwaita | -| Design Principles | https://developer.gnome.org/hig/principles.html | Simplicité, effort utilisateur, copy courte | -| **Tools & Resources** | https://developer.gnome.org/hig/resources.html | **Point d’entrée** outils + templates | -| Index | https://developer.gnome.org/hig/genindex.html | Recherche alphabétique | - -### 2.2 Guidelines (conventions transverses) - -| Page | URL | CapsuleOS | -|------|-----|-----------| -| Guidelines (hub) | https://developer.gnome.org/hig/guidelines.html | — | -| Accessibility | https://developer.gnome.org/hig/guidelines/accessibility.html | `data-contrast-mode`, Orca, focus | -| Scaling & Adaptiveness | https://developer.gnome.org/hig/guidelines/adaptive.html | `data-display-scale`, breakpoints | -| App Icons | https://developer.gnome.org/hig/guidelines/app-icons.html | Grille Aperçu, icônes RL10 | -| App Naming | https://developer.gnome.org/hig/guidelines/app-naming.html | Libellés dash / overview | -| Keyboard | https://developer.gnome.org/hig/guidelines/keyboard.html | Raccourcis shell + apps | -| Navigation | https://developer.gnome.org/hig/guidelines/navigation.html | Structure apps Paramètres | -| Pointer & Touch | https://developer.gnome.org/hig/guidelines/pointer-touch.html | Zones clic, hover | -| **Typography** | https://developer.gnome.org/hig/guidelines/typography.html | `--font-ui`, Red Hat Text | -| UI Icons | https://developer.gnome.org/hig/guidelines/ui-icons.html | Symbolic vs fullcolor, tray | -| UI Styling | https://developer.gnome.org/hig/guidelines/ui-styling.html | Adwaita, coins, élévation | -| Writing Style | https://developer.gnome.org/hig/guidelines/writing-style.html | Placeholders FR (« Saisissez pour rechercher ») | - -### 2.3 Patterns — Containers - -| Page | URL | CapsuleOS | -|------|-----|-----------| -| Containers (hub) | https://developer.gnome.org/hig/patterns/containers.html | — | -| Windows | https://developer.gnome.org/hig/patterns/containers/windows.html | CSD, ombres Mutter | -| **Header Bars** | https://developer.gnome.org/hig/patterns/containers/header-bars.html | `windows-chrome.css`, Nautilus | -| Popovers | https://developer.gnome.org/hig/patterns/containers/popovers.html | Calendrier, Quick Settings | -| Utility Panes | https://developer.gnome.org/hig/patterns/containers/utility-panes.html | Paramètres GNOME sidebar | -| Boxed Lists | https://developer.gnome.org/hig/patterns/containers/boxed-lists.html | Panneaux `themes` | -| Grid Views | https://developer.gnome.org/hig/patterns/containers/grid-views.html | Fond d’écran, apps grid | -| List & Column Views | https://developer.gnome.org/hig/patterns/containers/list-column-views.html | Nautilus liste | -| Selection & Edit Modes | https://developer.gnome.org/hig/patterns/containers/selection-mode.html | Nautilus multi-sélection | - -### 2.4 Patterns — Navigation - -| Page | URL | CapsuleOS | -|------|-----|-----------| -| Navigation (hub) | https://developer.gnome.org/hig/patterns/nav.html | — | -| Browsing | https://developer.gnome.org/hig/patterns/nav/browsing.html | NavigationView apps | -| **Search** | https://developer.gnome.org/hig/patterns/nav/search.html | Aperçu `CapsuleAppSearch` | -| Sidebars | https://developer.gnome.org/hig/patterns/nav/sidebars.html | Nautilus Places | -| Tabs | https://developer.gnome.org/hig/patterns/nav/tabs.html | Firefox, Terminal | -| View Switchers | https://developer.gnome.org/hig/patterns/nav/view-switchers.html | Paramètres panneaux | - -### 2.5 Patterns — Controls - -Hub : https://developer.gnome.org/hig/patterns/controls.html - -| Contrôle | URL | -|----------|-----| -| Buttons | https://developer.gnome.org/hig/patterns/controls/buttons.html | -| Menus | https://developer.gnome.org/hig/patterns/controls/menus.html | -| Switches | https://developer.gnome.org/hig/patterns/controls/switches.html | -| Text Fields | https://developer.gnome.org/hig/patterns/controls/text-fields.html | -| Checkboxes | https://developer.gnome.org/hig/patterns/controls/checkboxes.html | -| Radio Buttons | https://developer.gnome.org/hig/patterns/controls/radio-buttons.html | -| Drop-Down Lists | https://developer.gnome.org/hig/patterns/controls/drop-downs.html | -| Sliders | https://developer.gnome.org/hig/patterns/controls/sliders.html | -| Spin Buttons | https://developer.gnome.org/hig/patterns/controls/spin-buttons.html | -| Overlaid Controls | https://developer.gnome.org/hig/patterns/controls/overlaid.html | - -### 2.6 Patterns — Feedback - -Hub : https://developer.gnome.org/hig/patterns/feedback.html - -| Feedback | URL | -|----------|-----| -| Notifications | https://developer.gnome.org/hig/patterns/feedback/notifications.html | -| Toasts | https://developer.gnome.org/hig/patterns/feedback/toasts.html | -| Banners | https://developer.gnome.org/hig/patterns/feedback/banners.html | -| Dialogs | https://developer.gnome.org/hig/patterns/feedback/dialogs.html | -| Progress Bars | https://developer.gnome.org/hig/patterns/feedback/progress-bars.html | -| Spinners | https://developer.gnome.org/hig/patterns/feedback/spinners.html | -| Placeholder Pages | https://developer.gnome.org/hig/patterns/feedback/placeholders.html | -| Tooltips | https://developer.gnome.org/hig/patterns/feedback/tooltips.html | - -### 2.7 Reference - -| Page | URL | CapsuleOS | -|------|-----|-----------| -| Reference (hub) | https://developer.gnome.org/hig/reference.html | — | -| **Palette** | https://developer.gnome.org/hig/reference/palette.html | Accent `#3584e4` (Blue 3), tokens | -| Backgrounds | https://developer.gnome.org/hig/reference/backgrounds.html | Fonds Adwaita / RL10 | -| Standard Keyboard Shortcuts | https://developer.gnome.org/hig/reference/keyboard.html | Super, Aperçu, workspaces | - ---- - -## 3. Outils et assets (liens depuis Resources) - -### 3.1 Apps design (Flatpak) - -| App | URL | Rôle | -|-----|-----|------| -| Icon Library | https://flathub.org/apps/details/org.gnome.design.IconLibrary | Icônes UI GNOME | -| Typography | https://flathub.org/apps/details/org.gnome.design.Typography | Styles texte, glyphes | -| Color Palette | https://flathub.org/apps/details/org.gnome.design.Palette | Palette officielle | -| App Icon Preview | https://flathub.org/apps/details/org.gnome.design.AppIconPreview | Icônes apps | -| Symbolic Preview | https://flathub.org/apps/details/org.gnome.design.SymbolicPreview | Icônes symboliques tray | - -### 3.2 Toolkit & inspection - -| Ressource | URL | -|-----------|-----| -| Adwaita Demo (flatpakref) | https://nightly.gnome.org/repo/appstream/org.gnome.Adwaita1.Demo.flatpakref | -| GTK 4 — lancer + inspector | https://docs.gtk.org/gtk4/running.html | -| libadwaita — variables CSS | https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/css-variables.html | -| libadwaita — style classes | https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/style-classes.html | - -### 3.3 Templates & dépôts design - -| Ressource | URL | -|-----------|-----| -| GNOME Design (GitLab) | https://gitlab.gnome.org/Teams/Design | -| Mockup resources | https://gitlab.gnome.org/Teams/Design/mockup-resources | -| App icon template (SVG) | https://gitlab.gnome.org/Teams/Design/HIG-app-icons/-/blob/master/template.svg | -| Palette GIMP (GPL) | https://gitlab.gnome.org/Teams/Design/HIG-app-icons/raw/master/GNOME%20HIG.gpl?inline=false | -| HIG sources (GitLab) | https://gitlab.gnome.org/Teams/Websites/developer.gnome.org-hig | -| Fonds Adwaita (XML) | https://gitlab.gnome.org/GNOME/gnome-backgrounds/-/blob/main/backgrounds/adwaita.xml.in | - ---- - -## 4. Compléments CapsuleOS (hors HIG strict) - -Le HIG couvre surtout **applications GTK/libadwaita**. Pour le **shell** : - -| Besoin | Doc CapsuleOS | -|--------|----------------| -| Top bar, Aperçu, dash | [design-shell-layout](../skills/design-shell-layout/SKILL.md), [branche-redhat-gnome.md](branche-redhat-gnome.md) | -| GNOME Shell design (wiki) | https://wiki.gnome.org/Projects/GnomeShell/Design | -| Expertise stack | [reference-gnome-expert.md](reference-gnome-expert.md) | -| Fidélité typo/vue/MIME | [convention-fidelite-visuelle.md](convention-fidelite-visuelle.md) | -| Composants plateforme | https://developer.gnome.org/components/ | - ---- - -## 5. Matrice rapide surface → pages HIG - -| Surface CapsuleOS | Pages HIG prioritaires | -|-------------------|------------------------| -| Top bar + horloge + tray | Typography, UI Icons, Popovers, Reference keyboard | -| Aperçu + recherche | Search, Writing Style, App Icons | -| Dash / grille apps | App Icons, App Naming, Grid Views | -| Quick Settings / volume | Popovers, Switches, Sliders | -| Fenêtres CSD | Windows, Header Bars | -| Nautilus (`nemo`) | Sidebars, List & Column Views, Header Bars | -| Paramètres (`themes`) | Utility Panes, View Switchers, Boxed Lists, Switches | -| Notifications | Notifications, Toasts | -| Tokens couleur | Reference palette, UI Styling, libadwaita css-variables | - ---- - -## 6. Règles agents - -1. **Avant** un patch visuel GNOME : identifier la page HIG correspondante dans ce document ou le JSON. -2. **Ground truth** : captures VM + HIG ; en cas de conflit, VM prime pour le shell, HIG pour les apps GTK. -3. **Ne pas** inventer espacements — skill `design-shell-layout` + palette HIG. -4. **Régénérer** l’inventaire JSON après montée de version GNOME majeure (ex. 47 → 48). diff --git a/root/docs/ground-truth-cinnamon.md b/root/docs/ground-truth-cinnamon.md deleted file mode 100644 index c2f8fb3d..00000000 --- a/root/docs/ground-truth-cinnamon.md +++ /dev/null @@ -1,136 +0,0 @@ -# Ground truth Cinnamon — Linux Mint - -> **Pivot** : juin 2026 — retour au cloisonnement Cinnamon (abandon branche KDE active). -> **Modèle** : miroir de la chaîne Cred* et du schéma ground-truth KDE (prédicats nommés, contrat JSON, orchestrateur lab). -> **registryId** : `linux-mint` · **VM** : `` - -**Contrat machine** : [`etc/capsuleos/contracts/cinnamon-ground-truth-chain.json`](../../etc/capsuleos/contracts/cinnamon-ground-truth-chain.json) -**Cartographie** : `node usr/lib/capsuleos/tools/lab/map-cinnamon-ground-truth-gaps.mjs --id linux-mint --write` -**Orchestrateur** : `node usr/lib/capsuleos/tools/lab/run-cinnamon-formal-chain.mjs --id linux-mint` - ---- - -## 1. Positionnement - -Linux Mint n'utilise **pas** GNOME Shell ni Plasma. Le ground truth opérationnel est **Cinnamon 6.6** (Muffin, Nemo, mint-*). CapsuleOS modélise cela comme toolkit `cinnamon` distinct. - -| Dimension | Ground truth | CapsuleOS | -|-----------|--------------|-----------| -| DE | Cinnamon 6.6 / Muffin | `toolkit.cinnamon`, `cinnamon-window-behaviors.js` | -| Explorateur | Nemo | template `nemo`, slot `data-link="nemo"` | -| Menu | mint menu + cs-* | `mainMenu-data-cinnamon.js` | -| Assets shell | `/usr/share/icons`, mint panel | `toolkits/cinnamon/`, `vendors/mint/` | -| Parité structurelle | Campagne C0–C10 | `linux-mint-parity-index.json` | -| Crédibilité | Campagne v3 | Chaîne **Cred*** → **CredΣ** | - -Docs liées : [paradigme-toolkit-cinnamon.md](paradigme-toolkit-cinnamon.md) · [recette-clone-mint-integral.md](recette-clone-mint-integral.md) · [campagne-credibilite-pedagogique.md](campagne-credibilite-pedagogique.md) - ---- - -## 2. Prédicats Cin* - -| Symbole | Signification | Vérification | -|---------|---------------|--------------| -| **CinI** | Inventaire VM | `linux-mint-vm.json` + `collectedAt` | -| **CinM** | ManΣ proc/ | `integration-pass-*.json`, drift=0 | -| **CinA** | Assets clone | `validate-clone-assets.mjs --id linux-mint` | -| **CinC** | Cloisonnement | `validate-toolkit-paradigm.mjs --id linux-mint` | -| **CinS** | Shell parity | panel 6/6, UI 8/8, géométrie ≤1 px | -| **CinΠ** | Parité globale | `pi_global` ≥ 100 | -| **CinCred** | Crédibilité | **CredΣ** (130 scénarios, 43 apps π=100) | -| **CinΣ** | Clôture Cinnamon | CinI ∧ … ∧ CinCred | - -Extension live : **CinCred_live** — batch HTTP `smoke-app-fidelity-all.mjs` (non skip). - ---- - -## 3. Noyau & composants - -| Composant | Fichier noyau / skin | Gate | -|-----------|---------------------|------| -| Embed Cinnamon | `contentLoader.js` — `CINNAMON_PANEL_MENU_SKINS` | recette § Phase 3 | -| Panel | `home/Debian/Mint/style/mint-panel.css` | panel browser 6/6 | -| Menu | `mainMenu.skin.css` + data cinnamon | validate-toolkit-paradigm | -| WM | `cinnamon-window-behaviors.js` | ui-state windowChrome | -| Nemo ctx | `bindNemoContextMenu` | paradigm + Cred scénarios | -| Icônes apps | `toolkits/cinnamon/apps/` | ManΣ drift=0 | - ---- - -## 4. Lien Cred* - -La chaîne **Cred*** reste le sous-domaine crédibilité pédagogique : - -```text -C10 (Π_global=100) → CredV → CredC → CredS → CredΠ → CredΣ - ↘ - CinCred → CinΣ -``` - -Résolution agent : - -```bash -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --scope app-fidelity --id linux-mint -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --scope cinnamon --id linux-mint -``` - ---- - -## 5. Écarts résiduels documentés (juin 2026) - -| ID | Priorité | État | -|----|----------|------| -| TIER-C-THEMES | P2 | 52 entrées menu → slot `themes` (cs-*) | -| CRED-S-LIVE | P1 | Rejouer smoke batch HTTP si gate skip inventory | - ---- - -## 6. Commandes reprise - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -node usr/lib/capsuleos/tools/lab/map-cinnamon-ground-truth-gaps.mjs --id linux-mint --write --sync-man -node usr/lib/capsuleos/tools/lab/run-cinnamon-formal-chain.mjs --id linux-mint -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node usr/lib/capsuleos/tools/lab/smoke-app-fidelity-all.mjs --id linux-mint --sample 20 -node usr/lib/capsuleos/tools/lab/run-app-fidelity-campaign.mjs --id linux-mint --phase formal -``` - -### Phase interactivité — menus contextuels (clic droit) - -Matrice ground truth VM ↔ recette : [`root/docs/inventaires/interactions/linux-mint/context-menus.json`](inventaires/interactions/linux-mint/context-menus.json) - -**Cycle** : VM inventaire → `context-menus.json` → impl (`bindNemoContextMenu` + `fileExplorerNemoOps.js`) → smoke → `map-cinnamon-ground-truth-gaps.mjs --write` - -| Étape | Commande | Attendu | -|-------|----------|---------| -| Checklist | `node usr/lib/capsuleos/tools/lab/print-mint-context-menu-checklist.mjs` | libellés P0/P1 + P2 documentés | -| **Étape 2 — Nemo P1+** | patch `NEMO_ITEMS` + ops corbeille / renommage / terminal / document | `expectedLabels` matrice alignés VM fr | -| Smoke P0/P1 | `CAPSULE_MINT_URL=http://127.0.0.1:5501/OS/linux/families/debian/mint/index.html node usr/lib/capsuleos/tools/lab/smoke-mint-context-menus.mjs` | exit 0 — libellés + `data-nemo-ctx-action` branchés | -| Nemo intégration | `node usr/lib/capsuleos/tools/lab/smoke-mint-nemo.mjs` | exit 0 — navigation + chrome | -| Gap map | `node usr/lib/capsuleos/tools/lab/map-cinnamon-ground-truth-gaps.mjs --id linux-mint --write` | état formal mis à jour | -| UI state shell | `node usr/lib/capsuleos/tools/lab/run-ui-state-effects-pass.mjs --id linux-mint --shell desktop,mainMenu,panel` | desktop ctx visible | -| Inventaire VM | `ssh -i ~/.ssh/capsuleos-lab 'DISPLAY=:0 …'` | relire libellés fr si drift Nemo | - -**Critères done étape 2** : fond liste (document, terminal, tout sélectionner) ; fichier/dossier (ouvrir avec…, renommer, corbeille, compresser) ; smoke exit 0 ; sous-menu modèles « Créer un nouveau document » reste P2 documenté. - -**Critères done étape 3** : raccourcis bureau visibles (Dossier personnel, Corbeille) ; menu contextuel icône (`#desktop-icon-context-menu`) branché via `mint-desktop-icons.js` ; smoke `desktop.icon` exit 0. - -**Critères done étape 4** : menu contextuel barre titre (`#muffin-window-context-menu`) branché via `cinnamon-window-behaviors.js` sur `#windowHeader` des fenêtres `data-window-chrome-toolkit="cinnamon"` ; libellés VM fr (Réduire, Agrandir/Restaurer, Fermer, Toujours au premier plan) ; smoke `window.title` exit 0 ; règle **R-CIN-CTX4**. - -**Critères done étape 5** : menu contextuel panel (`#mint-panel-context-menu`) branché via `mint-panel-context-menu.js` sur zone vide `#tableau.mint-panel` ; actions → `CAPSULE_CS_PENDING_PANEL` + `openWindowByDataLink('themes')` (applets / panel) ; smoke `panel.background` exit 0 ; règle **R-CIN-CTX5**. - -Contextes **P2** documentés (non bloquants CinΣ) : sous-menu modèles « Créer un nouveau document » — voir matrice § notes VM. - -### Phase App P1 — fidélité slot (pilote `file_roller`) - -Modèle généralisé du checkpoint Nemo : **RecF → RecA** avec prédicats **AppP1_FR** et **Rv₁**. - -| Étape | Commande | Attendu | -|-------|----------|---------| -| Matrice | [`file-roller-scenarios.json`](inventaires/interactions/linux-mint/file-roller-scenarios.json) | scénarios P0/P1 + notes VM | -| Checklist | `print-mint-app-p1-checklist.mjs file_roller` | liste reproductible | -| Campagne | `smoke-mint-file-roller-fidelity.mjs` | exit 0 · JSON `file-roller-campaign-capsule.json` | -| Checkpoint | [`file-roller-fidelity-checkpoint.md`](inventaires/interactions/linux-mint/file-roller-fidelity-checkpoint.md) | GO/NO-GO avant push | -| Gate formelle | **R-CIN-APP-P1-FR** | `cinnamon-ground-truth-chain.json` | - -**NO-GO** si P0 campagne > 0 ou régression `smoke-mint-context-menus.mjs` / `smoke-mint-nemo.mjs`. diff --git a/root/docs/ground-truth-kde.md b/root/docs/ground-truth-kde.md deleted file mode 100644 index 89382188..00000000 --- a/root/docs/ground-truth-kde.md +++ /dev/null @@ -1,52 +0,0 @@ -# Ground truth KDE Plasma — Linux - -> **Pilote** : `linux-kde-neon` · **Amont** : `linux-debian-kde` · **Toolkit** : `kde` / Plasma -> **Contrat machine** : [`etc/capsuleos/contracts/kde-ground-truth-chain.json`](../../etc/capsuleos/contracts/kde-ground-truth-chain.json) -> **Effets système** : [`etc/capsuleos/contracts/settings-effects-chain.json`](../../etc/capsuleos/contracts/settings-effects-chain.json) (Phase 2b) - -KDE Plasma n'utilise **pas** GNOME Shell ni Cinnamon. CapsuleOS modélise Plasma comme toolkit `kde` distinct ([`paradigme-toolkit-de.md`](paradigme-toolkit-de.md)). - ---- - -## Prédicats Kd* (v15) - -| Symbole | Signification | Vérification | -|---------|---------------|--------------| -| **KdI** | Inventaire VM | `linux-kde-neon-vm.json` ou proc/ | -| **KdF** | Inventaire front System Settings | `linux-kde-neon-kde-settings-front-inventory.json` | -| **KdM** | ManΣ assets KDE | `validate-clone-assets.mjs --id linux-kde-neon` | -| **KdC** | Cloisonnement | `validate-toolkit-paradigm.mjs --id linux-kde-neon` | -| **KdS** | Shell Plasma | panel, kickoff, tray, Dolphin | -| **KdSe** | Effets Paramètres | `verify-kde-settings-parity-chain.mjs` (13 effets P0 v15) | -| **KdV** | Parité visuelle | Φ_norm ≥ 90 par shot P0 | -| **KdCred** | Scénarios pédagogiques | `validate-kde-settings-user-scenarios.mjs` | -| **KdΠ** | Parité globale | parity-index registry | -| **KdP4** | Propagation dérivés | debian-kde, mx-kde, openSUSE | -| **KdΣ** | Clôture KDE pilote | KdF ∧ KdC ∧ KdS ∧ KdSe ∧ KdV ∧ KdCred | - ---- - -## Composants noyau / skin - -| Composant | Chemin | Gate | -|-----------|--------|------| -| Explorateur | `dolphin` · slot `nemo` | paradigm | -| Panel | `home/Debian/KDE-Neon/style/plasma-panel-dock.css` | skin | -| Menu | `mainMenu-plasma.js` | paradigm | -| Paramètres | slot `themes` + registry `kde-settings-controls-registry.json` | Phase 2b v15 | -| A11y Se | `a11y-overrides.css` | settings-effects-chain | - ---- - -## Commandes v15 - -```bash -node usr/lib/capsuleos/tools/lab/collect-vm-kde-settings-inventory.mjs --id linux-kde-neon --write -node usr/lib/capsuleos/tools/lab/collect-vm-kde-settings-interaction.mjs --id linux-kde-neon --write -node usr/lib/capsuleos/tools/lab/sync-kde-settings-parity-matrix.mjs --write -node usr/lib/capsuleos/tools/lab/generate-kde-kconfig-bindings.mjs -node usr/lib/capsuleos/tools/lab/map-kde-ground-truth-gaps.mjs --id linux-kde-neon --write -node usr/lib/capsuleos/tools/lab/verify-kde-settings-parity-chain.mjs --id linux-kde-neon -``` - -Docs liées : [`procedure-kde-settings.md`](procedure-kde-settings.md) · [`ground-truth-cinnamon.md`](ground-truth-cinnamon.md) (modèle parallèle). diff --git a/root/docs/introspection-ontologique-2026-06.md b/root/docs/introspection-ontologique-2026-06.md deleted file mode 100644 index 92bfe9eb..00000000 --- a/root/docs/introspection-ontologique-2026-06.md +++ /dev/null @@ -1,152 +0,0 @@ -# Introspection ontologique — CapsuleOS (juin 2026) - -> **Statut** : note de synthèse — complète [fondements-philosophiques.md](fondements-philosophiques.md) §2 et [logique-formelle.md](logique-formelle.md) §2 -> **Contexte** : clôture vague store GNOME GS50, Logithèque Mint, alignement KDE deferred, branchement Pop!_Shop -> **Public** : agents, intégrateurs, relecteurs architecture - ---- - -## 1. Objet de cette introspection - -CapsuleOS avance vite sur la **structure** (contrats, générateurs, smokes). L’erreur récurrente n’est pas technique au sens « bug CSS » : c’est une **confusion de strate** — traiter une projection **E** comme une vérité **M**, ou un prédicat **StoreΣ** comme une parité **StoreVp**. - -Cette note fixe, après la campagne magasin juin 2026, **ce qui existe réellement** dans le dépôt, **à quelle strate**, et **quels couples de notions ne doivent jamais être identifiés**. - ---- - -## 2. Carte ontologique — strates et zones - -### 2.1 Deux vocabulaires, une même réalité - -| Strate (fondements) | Zone (taxonomie) | Mode d’être | Exemple store juin 2026 | -|---------------------|------------------|-------------|---------------------------| -| **R** Référent réel | (hors dépôt) | VM, `.desktop`, captures | Pop Shop sur VM Pop!_OS | -| **M** Modèle machine | **Z0** `etc/`, `proc/` | JSON versionné, gates | `store-installable-apps.json`, `gnome-software-store-content.json` | -| **N** Noyau simulé | **Z1** `usr/lib/`, `usr/share/` | JS/CSS partagés | `gnome-software-ground.js`, `mintinstall.js`, `update-manager.js` | -| **S** Skin vendor | **Z2** `home/` | HTML/CSS/JS scellé | Scripts `capsule-store-catalog.js` chargés dans `home/Debian/Mint/` | -| **F** Façade URL | **Z3** `OS/.../index.html` | Miroir `` | `OS/linux/families/debian/mint/` | -| **E** Expérience | Navigateur | DOM hydraté | Grille « À découvrir », Logithèque, Pop Shop ouvert | - -**Règle** : la connaissance descend **R → M → N → S → F → E**. Remonter **E → M** (déduire le contrat depuis ce qu’on voit à l’écran) est une **induction non falsifiée** — interdite sans gate. - -### 2.2 Flux épistémique du magasin (juin 2026) - -```text -Z0 store-installable-apps.json + presentation-bindings + slots-manifest - ↓ generate-store-catalog.mjs -Z4 capsule-store-catalog.js (+ capsule-gnome-software-content.js) - ↓ - -``` - -`mergeVmSettingsBaseline()` applique les défauts VM aux handlers au boot. - -### Étape 7 — Suite lab + embed - -```bash -node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs - -# Avec Playwright (serveur HTTP requis) -CAPSULE_HTTP_BASE=http://127.0.0.1:8765 \ - node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs --playwright - -# Régénérer l’embed apps -node usr/lib/capsuleos/tools/linux/build-linux-embed.mjs -``` - -### Étape 8 — Enquête visuelle & transitions (§10) - -À exécuter **après** les playbooks gsettings (étapes 4–5), **avant** la passe gsettings approfondie : - -```bash -node usr/lib/capsuleos/tools/lab/smoke-gnome-settings-visual-matrix.mjs - -# Lot P0 VM (gsettings + captures via org.gnome.Shell.Screenshot D-Bus — Rocky 10) -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-visual-investigation.mjs --id linux-rocky --filter P0 -# → root/docs/inventaires/-gnome-settings-visual-investigation.json -# → root/docs/inventaires/captures/linux-rocky/gnome-settings-visual/ (PNG) -``` - ---- - -## 5. Checklist agent (nouveau panneau ou contrôle) - -- [ ] Entrée asset dans `gnome-settings-assets-matrix.json` si contenu visuel (fond, filigrane, icône) -- [ ] `verify-playbook-assets.mjs --strict` vert (**gate A**) -- [ ] `collect-vm-gnome-settings-assets.mjs` exécuté si VM dispo (**gate S**) -- [ ] `SOURCE-VM.txt` à jour après pull -- [ ] Panneau identifié dans la VM (`gccArgv` testé manuellement) -- [ ] Entrée ajoutée dans `gnome-settings-parity-matrix.json` -- [ ] Contrôle câblé dans `themes_gnome.html` (attributs `data-settings-*`) -- [ ] Handler dans `gnome-settings-parity.js` avec effet shell vérifiable -- [ ] `smoke-gnome-settings-playbook.mjs` vert -- [ ] Collecte playbook VM : panneau `gccRunning: true` -- [ ] Collecte interaction : statut `ok`, `restoredOk: true` -- [ ] `generate-vm-settings-baseline.mjs` exécuté -- [ ] `verify-gnome-settings-parity-chain.mjs --strict` vert -- [ ] `build-linux-embed.mjs` si HTML modifié -- [ ] Entrée enquête visuelle dans `gnome-settings-visual-investigation-matrix.json` (si effet shell) -- [ ] Captures VM before/during/after + croisement doc officielle (§10) -- [ ] Hook CSS `gnome-shell-preferences.base.css` ou dataset vérifié -- [ ] `smoke-gnome-settings-visual-matrix.mjs` vert - ---- - -## 6. Dépannage - -| Symptôme | Cause | Action | -|----------|-------|--------| -| `panelsOpened: 0` | gcc refuse la session SSH | Exporter `XDG_CURRENT_DESKTOP=GNOME` (voir §2) | -| `gccRunning: false` mais process visible | Mauvais `pgrep` | Utiliser `pgrep -af gnome-control-center` (pas le chemin absolu seul) | -| `uint32 500` → `32 ms` | Regex naïve | Utiliser `parse_uint32()` / mappeur `keyboardDelayMs` corrigé | -| Wi-Fi interaction `failed` | Pas de carte Wi-Fi VM | Statut `skipped` — note « HW absent » | -| `powerprofilesctl` absent | Paquet non installé sur VM | `partial` + défaut Capsule « Équilibré » | -| Fenêtre `windowDetected: false` | `wmctrl` limité en Wayland | Non bloquant si `gccRunning: true` | -| Dérive parity ↔ VM | Défaut handler ≠ VM | Aligner `default` dans parity ou régénérer baseline | - ---- - -## 7. Adapter à une autre distro GNOME - -1. Dupliquer la matrice ou ajouter une section `registryId` (évolution future). -2. Créer `gnome-settings-vm-baseline-.js` via collecte playbook sur la VM cible. -3. Référencer la baseline dans le `index.html` du skin correspondant. -4. Ajuster `gccArgv` si la distro renomme des panneaux (ex. `color` vs `appearance`). -5. Mettre à jour `etc/capsuleos/lab-inventory.json` avec le bon `registryId` et IP SSH. - ---- - -## 8. Commandes rapides (lab) - -```bash -# Gate assets dépôt (bloquant) -node usr/lib/capsuleos/tools/lab/verify-playbook-assets.mjs --registry linux-rocky --strict - -# Suite lab locale (inclut gate A + smoke matrice visuelle) -node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs - -# VM complète (playbook + interaction + baseline) -node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs --vm --id linux-rocky - -# Dérive défauts -node usr/lib/capsuleos/tools/lab/compare-vm-parity-defaults.mjs --registry linux-rocky --strict - -# Chaîne complète -node usr/lib/capsuleos/tools/lab/verify-gnome-settings-parity-chain.mjs --strict - -# Smoke enquête visuelle (matrice ↔ handlers ↔ CSS) -node usr/lib/capsuleos/tools/lab/smoke-gnome-settings-visual-matrix.mjs - -# Audit profond (phase dédiée) -node usr/lib/capsuleos/tools/lab/collect-vm-deep-audit.mjs \ - --id linux-rocky --phase settings-playbook -``` - ---- - -## 9. Suite recommandée après création du playbook - -Une fois la procédure validée sur `linux-rocky` : - -1. **Gates assets** — `verify-playbook-assets --strict` + inventaire VM si dérive (§0). -2. **Enquête visuelle** — compléter l’inventaire §10 pour chaque contrôle P0/P1 de la matrice visuelle. -3. **Passe gsettings approfondie** — reprendre les écarts `gsettingsDeferred` de l’enquête (schémas secondaires, clés liées, synchronisation QS ↔ Paramètres). -4. **Propagation** — baseline + parity sur Fedora / Alma (même toolkit GNOME). -5. **Playwright** — étendre `smoke-gsettings-snapshot.mjs` / interactions pour datasets visuels après reload. -6. **UI gcc réelle** — si `ydotool` ou AT-SPI devient disponible, remplacer `gsettings set` par clic UI dans le playbook interaction. -7. **CI** — intégrer `run-gnome-settings-lab.mjs` dans la pipeline de validation du skin Rocky. - ---- - -## 10. Enquête visuelle, transitions et documentation officielle - -> **Objectif** : au-delà de la valeur `gsettings`, documenter **ce que l’utilisateur voit** (surfaces touchées, animations, délais) et **comment CapsuleOS doit le reproduire**, en croisant les constats VM avec la documentation GNOME officielle. Cette phase alimente la **passe gsettings approfondie** (clés secondaires, effets différés, schémas simulés). - -### 10.1 Quand l’exécuter - -| Moment | Action | -|--------|--------| -| Après gates **A ∧ S** (§0) | Les fichiers fond / filigrane comparés VM ↔ dépôt | -| Après playbook **interactions** (§ étape 5) | Les bascules sont connues ; on observe l’effet visuel | -| Avant patch CSS/dataset CapsuleOS | Éviter d’implémenter « au feeling » | -| Avant passe gsettings **approfondie** | L’enquête liste les clés à re-vérifier (`gsettingsDeferred`) | - -### 10.2 Grille d’enquête (matrice) - -Fichier : `root/tools/lab/gnome-settings-visual-investigation-matrix.json` - -Chaque entrée `investigations[]` décrit : - -| Champ | Rôle | -|-------|------| -| `controlId` | Aligné sur `gnome-settings-parity-matrix.json` | -| `surfaces` | Zones UI impactées (bureau, QS, Aperçu, panneau gcc, …) | -| `vmObservation` | Description factuelle sur la VM | -| `transition` | Type, `durationMs`, easing, propriété animée | -| `capsuleHook` | `dataset`, CSS, JS, événement custom | -| `officialDocs[]` | URLs doc GNOME / freedesktop à confronter | -| `investigationSteps[]` | Protocole de capture reproductible | -| `parityPriority` | P0 / P1 / P2 | - -Étendre la matrice pour tout **nouveau contrôle** dont le handler parity modifie le shell au-delà du panneau Paramètres. - -### 10.3 Protocole de capture VM - -**Prérequis** : session graphique ouverte, gcc accessible. **Rocky Linux 10** : - -| Outil | Rôle | -|-------|------| -| **Snapshot** (`/usr/bin/snapshot`, `org.gnome.Snapshot`) | App graphique GNOME — pas de CLI capture | -| **Shell.Screenshot** (D-Bus) | Session locale VM ; **refusé en SSH** (GNOME 47+) | -| **virsh screenshot** (hôte libvirt) | Repli lab automatisé — `collect-vm-gnome-settings-visual-investigation.mjs` + `vm-rocky-capture-host.sh` | - -`gnome-screenshot` n’est pas dans les dépôts EL10 par défaut. - -Pour chaque contrôle de la matrice visuelle : - -1. **État initial** — capture `before.png` (bureau + surface cible si pertinent). -2. **Bascule** — via gcc (ou `gsettings set` si EL10 sans clic UI) ; noter l’heure T0. -3. **Transition** — captures `during-500ms.png`, `during-1500ms.png` si effet progressif (éclairage nocturne, Aperçu). -4. **État stable** — capture `after.png` ; décrire delta vs `before`. -5. **Surfaces multiples** — répéter pour QS, calendrier, Aperçu si `surfaces[]` le demande. -6. **Restauration** — revenir à la valeur initiale (comme playbook interaction). - -**Chronométrage** : noter `durationMs` observé ; comparer à `transition.durationMs` de la matrice et à la doc (ex. gsd-color ~1000 ms pour Night Light). - -**Commandes utiles VM** : - -```bash -# Capture plein écran (Rocky 10 / GNOME 47+) -gdbus call --session --dest org.gnome.Shell.Screenshot \ - --object-path /org/gnome/Shell/Screenshot \ - --method org.gnome.Shell.Screenshot.Screenshot false false /tmp/settings-inv-night-before.png - -# Notification test (panneau notifications) -notify-send "CapsuleOS lab" "Test bannière" - -# Lister clés liées pendant l'observation -gsettings monitor org.gnome.settings-daemon.plugins.color night-light-enabled -``` - -### 10.4 Protocole capture CapsuleOS (miroir) - -Sur l’hôte, serveur HTTP à la racine du dépôt : - -```bash -python3 -m http.server 8765 --bind 127.0.0.1 -node root/tools/lab/capture-capsule-rocky.mjs # si scène Paramètres déjà définie -``` - -Comparer avec [linux-rocky-comparaison-visuelle.md](inventaires/linux-rocky-comparaison-visuelle.md) et `compare-rocky-visual-pass.mjs`. - -**Playwright** (datasets après toggle) : - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:8765 \ - node usr/lib/capsuleos/tools/lab/smoke-gsettings-snapshot.mjs -``` - -### 10.5 Croisement documentation officielle - -Pour chaque enquête, remplir `officialDocCrossCheck[]` dans le livrable : - -| Source | Usage | -|--------|--------| -| [GNOME Help](https://help.gnome.org/users/gnome-help/stable/) | Comportement utilisateur attendu | -| [HIG](https://developer.gnome.org/hig/) | Patterns libadwaita, transitions UI apps | -| [mutter.gnome.org](https://mutter.gnome.org/) | Workspaces, échelle, orientation | -| [gnome-settings-daemon](https://gitlab.gnome.org/GNOME/gnome-settings-daemon) | Night Light, power, color plugins | -| [gsettings-desktop-schemas](https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas) | Sémantique des clés | -| [gnome-shell](https://gitlab.gnome.org/GNOME/gnome-shell) | DND, Aperçu, QS, search | -| [reference-gnome-expert.md](reference-gnome-expert.md) | Synthèse CapsuleOS | - -**Règle** : si la doc contredit l’observation VM, **la VM prime** (ground truth) ; noter l’écart dans `delta` et la version GNOME. - -### 10.6 Implémentation CapsuleOS - -Chaîne cible : - -``` -toggle Paramètres → gnome-settings-parity.js → dataset documentElement - → gnome-shell-preferences.base.css (effet visuel) - → événements (capsule:dnd-changed, capsule:workspaces-config-changed, …) -``` - -| Type d’effet | Fichier prioritaire | -|--------------|---------------------| -| Filtre global bureau | `gnome-shell-preferences.base.css` | -| Accent / thème | `capsule-theme-storage.js`, tokens Rocky | -| Aperçu / recherche | `overview.js`, `gnome-workspaces.js` | -| Tuiles QS | `volume.js`, datasets + CSS QS | - -**Transitions CSS** : privilégier les variables existantes (`--eas2`, `--ease`) ; documenter si la VM utilise une courbe non reproduite (ex. spring Shell → approximer `cubic-bezier`). - -### 10.7 Livrable inventaire - -Copier le modèle : - -`root/docs/inventaires/_template-gnome-settings-visual-investigation.json` - -Vers : - -`root/docs/inventaires/-gnome-settings-visual-investigation.json` - -Et résumé Markdown optionnel `*-gnome-settings-visual-investigation.md` (tableau contrôle / match visuel / écart / priorité). - -Champs clés par investigation : - -- `vmCaptures[]` — chemins PNG horodatés -- `transitionObserved` — mesures réelles -- `officialDocCrossCheck[]` — `matchesObservation`, `delta` -- `capsuleParity.visualMatch` — `match` | `partial` | `gap` -- `gsettingsDeferred` — notes pour la **passe gsettings approfondie** (clés à revisiter) - -### 10.8 Checklist enquête (par contrôle) - -- [ ] `investigationSteps` de la matrice exécutés sur VM -- [ ] Captures before / during / after archivées -- [ ] `transitionObserved.durationMs` renseigné (ou `instant` / `delayed` confirmé) -- [ ] Au moins une URL doc officielle lue et citée -- [ ] `capsuleHook` vérifié dans le dépôt (smoke matrice visuelle vert) -- [ ] Écart classé P0/P1/P2 dans `capsuleParity` -- [ ] Entrée `gsettingsDeferred` si la clé gsettings actuelle ne suffit pas - -### 10.9 Vers la passe gsettings approfondie - -L’enquête visuelle **ne remplace pas** gsettings ; elle **priorise** la prochaine itération : - -| Signal enquête | Action gsettings suivante | -|----------------|---------------------------| -| Effet différé (extinction écran) | Valider timeout + type `sleep-inactive-ac-type` | -| DND + QS + calendrier | Consolider schéma simulé / session shell | -| Night Light exclut top bar | Vérifier si une clé gsettings existe ; sinon CSS ciblé | -| Thème + fond jour/nuit liés | Lier `picture-uri` / `picture-uri-dark` / `color-scheme` | -| Recherche overview | Parser fin `disabled[]` providers | - -Commandes passe approfondie (après enquête) : - -```bash -node usr/lib/capsuleos/tools/lab/compare-playbook-gsettings-capsule.mjs --registry linux-rocky --strict -node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs --vm --id linux-rocky -``` - ---- - -## 11. Commandes rapides (aide-mémoire) - -```bash -# Gates assets (bloquant) -node usr/lib/capsuleos/tools/lab/verify-playbook-assets.mjs --registry linux-rocky --strict -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-assets.mjs --id linux-rocky -bash root/tools/lab/pull-vm-assets.sh --id linux-rocky - -# Lab complet -node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs -CAPSULE_HTTP_BASE=http://127.0.0.1:8765 \ - node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs --playwright - -# Playbooks VM -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-playbook.mjs --id linux-rocky -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-interaction.mjs --id linux-rocky - -# Enquête visuelle -node usr/lib/capsuleos/tools/lab/smoke-gnome-settings-visual-matrix.mjs -# Inventaire : root/docs/inventaires/-gnome-settings-visual-investigation.json - -# Passe gsettings approfondie + clôture visuelle (chaîne formelle) -node usr/lib/capsuleos/tools/lab/compare-playbook-gsettings-capsule.mjs --registry linux-rocky --strict -node usr/lib/capsuleos/tools/lab/enrich-visual-investigation-gsettings-pass.mjs --id linux-rocky -node usr/lib/capsuleos/tools/lab/collect-capsule-visual-investigation.mjs --id linux-rocky -node usr/lib/capsuleos/tools/lab/enrich-visual-investigation-capsule-parity.mjs --id linux-rocky -node usr/lib/capsuleos/tools/lab/run-replication-chain.mjs --id linux-rocky --dry-run -node usr/lib/capsuleos/tools/lab/generate-gsettings-bindings.mjs -node usr/lib/capsuleos/tools/lab/smoke-gsettings-snapshot.mjs - -# Baseline + embed -node usr/lib/capsuleos/tools/lab/generate-vm-settings-baseline.mjs --registry linux-rocky -node usr/lib/capsuleos/tools/linux/build-linux-embed.mjs -``` diff --git a/root/docs/procedure-kde-settings.md b/root/docs/procedure-kde-settings.md deleted file mode 100644 index 230f4a56..00000000 --- a/root/docs/procedure-kde-settings.md +++ /dev/null @@ -1,77 +0,0 @@ -# Procédure — Paramètres KDE Plasma - -> **Pilote** : `linux-kde-neon` · **Slots** : `themes`, `kinfocenter` -> **Contrats** : [`kde-ground-truth-chain.json`](../../etc/capsuleos/contracts/kde-ground-truth-chain.json) · [`kde-settings-controls-registry.json`](../../tools/lab/kde-settings-controls-registry.json) -> **Statut** : v15 — front intégral, registry option-par-option, seuil Φ_norm 90 - ---- - -## Architecture (slot `themes`) - -```text -systemsettings_kde_neon.html (gabarit unifié v15) - ├─ surface hub [data-kde-settings-surface="hub"] — 10+ catégories - └─ surfaces KCM [data-kde-settings-surface="kcm-*"] - kcm-display · kcm-colors · kcm-keys · kcm-lookandfeel - -kde-systemsettings-nav.js → prepareShot(shotId) — 10 investigations P0 -kde-settings-parity.js + kde-kconfig-bindings.js → bus capsule:* -``` - -Registre canon : [`kde-settings-controls-registry.json`](../../tools/lab/kde-settings-controls-registry.json) - ---- - -## Campagne v15 — séquence - -```bash -node usr/lib/capsuleos/tools/lab/reset-kde-neon-campaign.mjs --write --campaign v15-kde-settings-full-front -node usr/lib/capsuleos/tools/lab/collect-vm-kde-settings-inventory.mjs --id linux-kde-neon --write -node usr/lib/capsuleos/tools/lab/collect-vm-kde-settings-interaction.mjs --id linux-kde-neon --write -node usr/lib/capsuleos/tools/lab/sync-kde-settings-parity-matrix.mjs --write -node usr/lib/capsuleos/tools/lab/generate-kde-kconfig-bindings.mjs -CAPSULE_HTTP_BASE=http://127.0.0.1:8766 node usr/lib/capsuleos/tools/lab/run-kde-settings-lab.mjs --id linux-kde-neon -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -``` - ---- - -## Captures par shot (P0) - -| shotId | VM | Capsule (`prepareShot`) | -|--------|-----|-------------------------| -| `kcm-display-config` | `systemsettings kcm_kscreen` | `kcm-display` | -| `hub-sidebar` | `gtk-launch systemsettings.desktop` | hub | -| `appearance-panel` | `systemsettings kcm_lookandfeel` | `kcm-lookandfeel` | -| `accessibility-panel` | `systemsettings kcm_access` | hub + accessibilité | -| `desktop-panel` | `systemsettings kcm_desktoptheme` | hub + bureau | -| `workspace-panel` | `systemsettings kcm_workspace` | hub + espace de travail | -| `notifications-panel` | `systemsettings kcm_notifications` | hub + notifications | -| `applications-panel` | `systemsettings kcm_componentchooser` | hub + applications | -| `colors-panel` | `systemsettings kcm_colors` | `kcm-colors` | -| `about-panel` | `systemsettings kcm_about-distro` | hub + à propos | - -Seuil clôture visuelle : **Φ_norm ≥ 90** (`kde-settings-controls-registry.json` · `phiThreshold`). - ---- - -## Gates KdΣ v15 - -```bash -node usr/lib/capsuleos/tools/lab/verify-kde-settings-parity-chain.mjs --id linux-kde-neon -node usr/lib/capsuleos/tools/lab/smoke-kde-settings-front-inventory.mjs --id linux-kde-neon -node usr/lib/capsuleos/tools/validate-kde-settings-user-scenarios.mjs -node usr/lib/capsuleos/tools/lab/map-kde-ground-truth-gaps.mjs --id linux-kde-neon --write -``` - ---- - -## Propagation - -| Dérivé | Héritage | -|--------|----------| -| `linux-debian-kde` | upstream neon | -| `linux-mx-kde` | upstream debian-kde | -| `linux-opensuse` | matrices vendor si GapΔ | - -Smoke : `smoke-kde-v15-propagation.mjs` diff --git a/root/docs/procedure-lab-linux-alma-gnome.md b/root/docs/procedure-lab-linux-alma-gnome.md deleted file mode 100644 index a3858a2a..00000000 --- a/root/docs/procedure-lab-linux-alma-gnome.md +++ /dev/null @@ -1,374 +0,0 @@ -# Procédure lab — AlmaLinux GNOME (VM → CapsuleOS) - -> **Objectif** : reproduire le bureau **AlmaLinux 10 Workstation GNOME** dans `home/RedHat/Alma/`, en dérivant `linux-rocky` avec personnalisation vendor (fonds `almalinux-day/night`, accent blue, assets `vendors/alma/`). - -**Lire d'abord** : [branche-redhat-gnome.md](branche-redhat-gnome.md) · modèle Rocky : [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md). - -**Couches complémentaires** : - -| Couche | Document | -|--------|----------| -| Infra VM SSH/Wayland | [lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md) | -| Scénarios pédagogiques GNOME | [procedure-scenarios-pedagogiques-gnome.md](procedure-scenarios-pedagogiques-gnome.md) · [procedure-lab-linux-gnome-scenarios.md](procedure-lab-linux-gnome-scenarios.md) · [procedure-playbook-gnome-apps-overview.md](procedure-playbook-gnome-apps-overview.md) | -| Parité JSON | [inventaire-parite-alma.md](inventaire-parite-alma.md) · [`linux-alma-parity-index.json`](inventaires/linux-alma-parity-index.json) | -| Playbook Paramètres GNOME | [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) · matrice `gnome-settings-parity-matrix-alma.json` (C21) | - ---- - -## Vue d'ensemble — cycles Alma (C0–C30) - -```mermaid -flowchart LR - C0[C0_Inventaire_VM] --> C1[C1_ManΣ_assets] - C1 --> C2[C2_Shell_panel] - C2 --> C3[C3-C4_VΣ_captures] - C3 --> C5[C5-C10_apps_P0] - C5 --> H6[PbΣ_fonds_vendor] - H6 --> C11[C11-C12_AppΣ_Π90] - C11 --> C13[C13_Software_96] - C13 --> C14[C14_Software_100] - C14 --> C15[C15_S1-S4] - C15 --> C16[C16_T1-T4] - C16 --> C17[C17_C1-C4] - C17 --> C18[C18_Th1-Th4_themes] - C18 --> C19[C19_H1-H4_clocks] - C19 --> C20[C20_Cal1-Cal4_calendar] - C20 --> C21[C21_Playbook_Settings] - C21 --> C22[C22_Watermark] - C22 --> C23[C23_Vc_Settings] - C23 --> C24[C24_Baobab_Tour] - C24 --> C25[C25_P2_cloture_Pi] - C25 --> C26[C26_Nautilus] - C26 --> C27[C27_Firefox] - C27 --> C28[C28_Ptyxis] - C28 --> C29[C29_LibreWriter] - C29 --> C30[C30_Checklist_15-15] -``` - -| Cycle | Commit / passe | Prédicats atteints | Π global | -|-------|----------------|-------------------|----------| -| **C0** | `61e8036a` | **I**, inventaire VM 10.2 | — | -| **C1** | `8afa870f` | **ManΣ**, **A∧S** assets Alma | — | -| **C2** | `02608f4d` | Shell panel / top-bar | — | -| **C3–C4** | `fc5b7802` | **VΣ** matrice surfaces | — | -| **C5–C10** | `6938ab0e` | Apps P0, recette intégrale | ~86 | -| **PbΣ H6** | `0fc3992e` | Fonds vendor, playbook GNOME | — | -| **C11–C12** | `8c064e79`, `3ba91ec1` | **AppΣ**, captures Capsule P1 | **90** | -| **C13** | `08f15ea2` | GNOME Software explore grid | **96** | -| **C14** | `b6f99faf` | Logiciels clôturé | **100** (slot) | -| **C15** | `2c98dc36` | **ScΣ** Software S1–S4 | — | -| **C16** | `2417c650` | **ScΣ** Éditeur T1–T4 | — | -| **C17** | `8f947d14` | **ScΣ** Calculatrice C1–C4 | **94** | -| **C18** | `5c50a1cc` | **ScΣ** Paramètres Th1–Th4 | **96** | -| **C19** | `244cff54` | **ScΣ** Horloges H1–H4 | **96** | -| **C20** | `aa606f82` | **ScΣ** Agenda Cal1–Cal4 | **96** | -| **C21** | `3201ec12` | Playbook Paramètres GNOME dédié (18 panneaux) | **96** (Π étendu **93**) | -| **C22** | `832b23c1` | Filigrane bureau Alma (`smoke-alma-watermark`) | **96** | -| **C23** | `10db0422` | **Vc** Paramètres GNOME — captures Capsule P0/P1 | **96** | -| **C24** | `316a9cab` | **ScΣ** Baobab B1–B4 + Tour T1–T4 | **96** (Π étendu **91**) | -| **C25** | (cette passe) | **ScΣ** snapshot/characters/system_monitor/screenshot + clôture Π | **96** (Π étendu **92**) | -| **C26** | — | **ScΣ** Nautilus N1–N4 · slot `nemo` | **96** | -| **C27** | — | **ScΣ** Firefox F1–F4 | **96** | -| **C28** | — | **ScΣ** Terminal Ptyxis Te1–Te4 | **96** | -| **C29** | — | **ScΣ** LibreWriter Lw1–Lw4 | **96** | -| **C30** | — | **ScΣ** Checklist Ck1–Ck4 · overview **15/15** | **96** | - -### Clôture overview scénarios (C30) - -Tous les slots overview Alma câblés avec contrats scénarios (15/15). Backlog manifeste `gnome-user-scenarios-index.json` : **[]**. - -```bash -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id linux-alma -node usr/lib/capsuleos/tools/validate-gnome-user-scenarios-all.mjs -``` - -Gaps restants honnêtes : Vc VM (D-Bus) · `screenshot` Capsule-only (rpm absent el10) · `snapshot` sans webcam lab · LibreOffice absent VM RL10. - -### Clôture clone Π structurel (C25) - -| Livrable | Chemin | -|----------|--------| -| Manifeste contrats | `etc/capsuleos/contracts/gnome-user-scenarios-index.json` | -| Gate agrégée | `validate-gnome-user-scenarios-all.mjs` | -| Audit overview | `audit-gnome-overview-scenarios.mjs --id ` | -| Playbook overview | [procedure-playbook-gnome-apps-overview.md](procedure-playbook-gnome-apps-overview.md) | -| Procédure générique | [procedure-lab-linux-gnome-scenarios.md](procedure-lab-linux-gnome-scenarios.md) | - -Overview Alma **15/15** — voir [inventaire-parite-alma.md § Overview](inventaire-parite-alma.md#overview-alma--scénarios-avant--après-c27-doc) · [point-etape-2026-06.md](point-etape-2026-06.md). - ---- - -## Phase 0 — Prérequis (bloquants) - -### 0.1 VM AlmaLinux 10 - -| Critère | Vérification | -|---------|--------------| -| AlmaLinux **10.2** Workstation | `cat /etc/os-release` | -| Session **graphique** (GDM Wayland) | pas SSH seul | -| Utilisateur lab `capsule` | IP NAT typique `` | -| Domaine libvirt | `virshName: almalinux10` (peut être absent sur hôte agent — VM joignable par IP) | - -### 0.2 Paquets sonde (VM) - -Identique Rocky — voir [procedure-lab-linux-rocky-gnome.md §0.2](procedure-lab-linux-rocky-gnome.md#02-paquets-sonde-sur-la-vm). - -### 0.3 Clé SSH (hôte) - -```bash -ssh-keygen -t ed25519 -f ~/.ssh/capsuleos-lab -N "" -ssh-copy-id -i ~/.ssh/capsuleos-lab.pub -``` - -### 0.4 Test Wayland - -```bash -ssh -i ~/.ssh/capsuleos-lab \ - 'export DISPLAY=:0 XAUTHORITY=$(ls /run/user/$(id -u)/.mutter-Xwaylandauth.* 2>/dev/null | head -1); wmctrl -l; echo exit:$?' -``` - -Attendu : **`exit:0`**. - -### 0.5 Inventaire lab local - -Copier l'entrée `linux-alma` depuis [`etc/capsuleos/lab-inventory.example.json`](../../etc/capsuleos/lab-inventory.example.json) vers `etc/capsuleos/lab-inventory.json` (gitignoré). - -Champs clés : `registryId: linux-alma`, `virshName: almalinux10`, `capsuleUrl: http://127.0.0.1:5501/home/RedHat/Alma/index.html`. - -### 0.6 Serveur HTTP CapsuleOS - -```bash -cd /chemin/vers/CapsuleOS -python3 -m http.server 5501 -``` - -### 0.7 Playbook captures VM - -Documenté dans [`linux-alma-vm.json`](inventaires/linux-alma-vm.json) → `lab.screenshotCapture` : - -| Backend | Statut Alma (juin 2026) | -|---------|-------------------------| -| `org.gnome.Shell.Screenshot` (D-Bus SSH) | **AccessDenied** — session distante | -| `gnome-screenshot -w` | Absent CRB el10 par défaut | -| `virsh screenshot almalinux10` | Domaine absent hôte agent courant | -| **Compensation** | Captures Capsule Playwright (`capture-capsule-*-views.mjs`) | - -Collecteur : `node usr/lib/capsuleos/tools/lab/collect-vm-apps-visual-investigation.mjs --id linux-alma --filter P0 --ssh` - ---- - -## Phase 1 — Inventaire ground truth - -```bash -bash root/tools/lab/bootstrap-vm.sh linux-alma -node usr/lib/capsuleos/tools/lab/lab-ssh.mjs --id linux-alma --cmd '$HOME/capsuleos-lab/os-probe-gnome.sh state' -bash root/tools/lab/pull-vm-assets.sh --id linux-alma -``` - -Mettre à jour [`linux-alma-vm.json`](inventaires/linux-alma-vm.json) et [`linux-alma-vm.md`](inventaires/linux-alma-vm.md). - -Checklist Alma spécifique : - -- [ ] Fonds `/usr/share/backgrounds/almalinux-day.jpg` + `almalinux-night.jpg` -- [ ] `gsettings get org.gnome.desktop.interface accent-color` → `blue` -- [ ] `gsettings get org.gnome.desktop.background picture-uri-dark` → `almalinux-night.jpg` -- [ ] 7 favoris dash (pas Music) - ---- - -## Phase 2 — Bootstrap skin depuis Rocky - -```bash -node usr/lib/capsuleos/tools/linux/bootstrap-alma-from-rocky.mjs -``` - -Puis personnaliser : - -``` -home/RedHat/Alma/ -├── alma-overrides.css # wallpaper Alma, accent #3584e4 -├── content/profile-data.js # url almalinux.org -└── style/apps/*.skin.css # overrides vendor si besoin -``` - -Assets : `usr/share/capsuleos/assets/images/vendors/alma/` · `SOURCE-VM.txt` obligatoire. - ---- - -## Phase 3 — Apps P0 et parité - -Brief agent : - -```bash -node usr/lib/capsuleos/tools/print-agent-brief.mjs linux-alma -node usr/lib/capsuleos/tools/lab/compare-os-parity.mjs --id linux-alma -``` - -Slots **priority** (poids apps 0,75) : `nemo`, `firefox`, `terminal`, `themes`, `update_manager`, `text_editor`, `calculator`. - -Smokes shell : - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node usr/lib/capsuleos/tools/lab/smoke-rocky-shell-polish.mjs --playwright -``` - ---- - -## Phase 4 — Scénarios pédagogiques (pattern réutilisable) - -Ordre logique par slot (après Π structurel ≥ 90 sur le slot) : - -```text -contrat JSON → validateur → smoke Playwright → captures Capsule → parity-index -``` - -| Slot | Contrat | Scénarios P0 | Smoke | Capture | -|------|---------|--------------|-------|---------| -| Logiciels | `software-user-scenarios.json` | S1–S4 | `smoke-gnome-software-scenarios.mjs` | `capture-capsule-software-views.mjs` | -| Éditeur | `text-editor-user-scenarios.json` | T1–T4 | `smoke-gnome-text-editor-scenarios.mjs` | `capture-capsule-text-editor-views.mjs` | -| Calculatrice | `calculator-user-scenarios.json` | C1–C4 | `smoke-gnome-calculator-scenarios.mjs` | `capture-capsule-calculator-views.mjs` | -| Paramètres | `themes-user-scenarios.json` | Th1–Th4 | `smoke-gnome-themes-scenarios.mjs` | `capture-capsule-themes-views.mjs` | -| Horloges | `clocks-user-scenarios.json` | H1–H4 | `smoke-gnome-clocks-scenarios.mjs` | `capture-capsule-clocks-views.mjs` | -| Agenda | `calendar-user-scenarios.json` | Cal1–Cal4 | `smoke-gnome-calendar-scenarios.mjs` | `capture-capsule-calendar-views.mjs` | - -Exemple copy-paste (Calculatrice, Alma) : - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 \ - node usr/lib/capsuleos/tools/lab/smoke-gnome-calculator-scenarios.mjs --id linux-alma - -node usr/lib/capsuleos/tools/validate-calculator-user-scenarios.mjs - -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 \ - node usr/lib/capsuleos/tools/lab/capture-capsule-calculator-views.mjs --id linux-alma -``` - -Détail du pattern : [procedure-scenarios-pedagogiques-gnome.md](procedure-scenarios-pedagogiques-gnome.md). - -### C20 — Agenda (org.gnome.Calendar) - -**Install VM** : le RPM `gnome-calendar` est absent des dépôts el10. Contournement lab — Flatpak Flathub : - -```bash -ssh -i ~/.ssh/capsuleos-lab \ - 'sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo && \ - sudo flatpak install -y flathub org.gnome.Calendar' -``` - -| Source | Version | Libellé fr_FR | -|--------|---------|---------------| -| flatpak `org.gnome.Calendar` | **50.0** | Agenda | -| rpm `gnome-calendar` | absent | — | - -Inventaire : [`linux-alma-calendar-vm-inventory.json`](inventaires/linux-alma-calendar-vm-inventory.json) - -Scénarios P0 : Cal1 vue mois · Cal2 créer évènement · Cal3 vue semaine · Cal4 mois suivant. - -```bash -node usr/lib/capsuleos/tools/validate-calendar-user-scenarios.mjs - -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 \ - node usr/lib/capsuleos/tools/lab/smoke-gnome-calendar-scenarios.mjs --id linux-alma - -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 \ - node usr/lib/capsuleos/tools/lab/capture-capsule-calendar-views.mjs --id linux-alma -``` - -Π slot calendar : **63 → 87**. **Vc VM** : pending (captures Capsule documentées). - ---- - -## Phase 4b — Playbook Paramètres GNOME (C21) - -Matrice vendor dédiée (R-LOC1) — plus d'emprunt silencieux sur `gnome-settings-parity-matrix-rocky.json`. - -```bash -# Bootstrap initial (déjà fait) — recréer si dérive -node usr/lib/capsuleos/tools/lab/bootstrap-gnome-settings-matrices.mjs --id linux-alma --write - -# Collecte tour panneaux VM (SSH ) -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-playbook.mjs --id linux-alma - -# Gates playbook -node usr/lib/capsuleos/tools/lab/smoke-alma-gnome-settings-playbook.mjs -node usr/lib/capsuleos/tools/lab/verify-gnome-settings-parity-chain.mjs --id linux-alma - -# Vc Paramètres (C23 — compensation Capsule, VM D-Bus bloquée) -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node root/tools/lab/capture-capsule-alma.mjs -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node usr/lib/capsuleos/tools/lab/collect-capsule-visual-investigation.mjs --id linux-alma --filter P0 -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node usr/lib/capsuleos/tools/lab/collect-capsule-visual-investigation.mjs --id linux-alma --filter P1 -node usr/lib/capsuleos/tools/lab/enrich-visual-investigation-capsule-parity.mjs --id linux-alma -node usr/lib/capsuleos/tools/lab/smoke-alma-gnome-settings-visual.mjs -``` - -**Profil H6 Alma** (`h6-gnome-settings-lib.mjs`) : `requiresBaseline: false` — pas de `gnome-settings-vm-baseline-linux-alma.js` ; playbook inventaire + clôture `linux-alma-gnome-settings-h6-closure.json` suffisent. - -Ground truth VM (juin 2026) : - -- `picture-uri` → `file:///usr/share/backgrounds/almalinux-day.jpg` -- `picture-uri-dark` → `almalinux-night.jpg` -- `accent-color` → `blue` - -Inventaires : [`linux-alma-gnome-settings-playbook.json`](inventaires/linux-alma-gnome-settings-playbook.json) · [`linux-alma-gnome-settings-parity-drift.json`](inventaires/linux-alma-gnome-settings-parity-drift.json) - -**Π global** : `pi_global` reste sur les 7 slots priority (gate campagne). `pi_global_extended` documente l'inclusion P2 `clocks` (87) et `calendar` (87) — voir [`inventaire-parite-alma.md`](inventaire-parite-alma.md). - ---- - -## Phase 5 — Clôture technique - -```bash -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/linux/build-linux-embed.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -Checklist humaine : - -- [ ] `home/RedHat/Alma/index.html` ≡ façade générée -- [ ] Fonds Alma day/night basculent via Paramètres → Apparence -- [ ] Accent blue par défaut (VM ground truth) -- [ ] [`linux-alma-parity-index.json`](inventaires/linux-alma-parity-index.json) à jour - ---- - -## Gaps restants (juin 2026) - -| Gap | Priorité | Action | -|-----|----------|--------| -| **Vc VM** pixel-perfect apps | P1 | D-Bus screenshot ou console GDM locale | -| `virsh almalinux10` absent hôte | P1 | Enregistrer domaine libvirt ou documenter IP seule | -| Watermark Alma (`fedora_logo_*`) | P2 | Inventaire VM ou gradient CSS fallback | -| `clocks`, `calendar` | P2 | Π **87** (H1–H4, Cal1–Cal4) · **Vc** Capsule | -| Vc Paramètres GNOME VM | P2 | D-Bus bloqué — **compensé Capsule C23** (`smoke-alma-gnome-settings-visual`) | -| `baobab`, `tour` | P2 | Π **88** / **87** (B1–B4, T1–T4) · **Vc** Capsule C24 | - ---- - -## Skills agent - -1. `onboarding` -2. `os-linux` + `capsuleos-distro-linux-alma` + `capsuleos-vendor-alma` -3. `gnome-hig-replication` + `design-shell-layout` -4. [branche-redhat-gnome.md](branche-redhat-gnome.md) - -Brief : `node usr/lib/capsuleos/tools/print-agent-brief.mjs linux-alma` - ---- - -## Historique des passes - -| Date | Passe | Résultat | -|------|-------|----------| -| 2026-06-09 | C0 inventaire VM | Alma 10.2 · Shell 49.4 · SSH OK | -| 2026-06-09 | C1 assets | ManΣ · pull-vm-assets Alma | -| 2026-06-10 | C11–C12 AppΣ | Captures Capsule · Π **90** | -| 2026-06-10 | C13–C14 Software | Explore grid · Π slot **100** | -| 2026-06-10 | C15–C17 scénarios | S/T/C P0 · Π global **94** | -| 2026-06-10 | C18 themes | Th1–Th4 · Π **96** | -| 2026-06-10 | C19 clocks | H1–H4 · Π slot **87** | -| 2026-06-10 | C20 calendar | Cal1–Cal4 · flatpak 50.0 · Π slot **87** | -| 2026-06-10 | C21 playbook Settings | Matrice Alma · 18/18 VM · smoke + verify chain | -| 2026-06-10 | C22 watermark | Filigrane `background-logo` · tokens `--alma-watermark` | -| 2026-06-10 | C23 Vc Settings | Captures Capsule P0/P1 · Vc=4 Vp=4 · baobab → C24 | -| 2026-06-10 | C24 baobab + tour | B1–B4 · T1–T4 · rpm VM confirmés · Π étendu **91** | diff --git a/root/docs/procedure-lab-linux-gnome-scenarios.md b/root/docs/procedure-lab-linux-gnome-scenarios.md deleted file mode 100644 index 392d0509..00000000 --- a/root/docs/procedure-lab-linux-gnome-scenarios.md +++ /dev/null @@ -1,123 +0,0 @@ -# Procédure lab — scénarios pédagogiques GNOME (tous vendors) - -> **Objectif** : appliquer le pattern **contrat → validateur → smoke → capture** sur tout skin toolkit GNOME, sans dupliquer la procédure par distro. - -**Référence modèle Alma (C15–C25)** : [procedure-lab-linux-alma-gnome.md](procedure-lab-linux-alma-gnome.md) -**Pattern technique** : [procedure-scenarios-pedagogiques-gnome.md](procedure-scenarios-pedagogiques-gnome.md) -**Overview → slot** : [procedure-playbook-gnome-apps-overview.md](procedure-playbook-gnome-apps-overview.md) - ---- - -## 1. Périmètre - -| Vendor GNOME | `registryId` | Procédure lab VM | -|--------------|--------------|------------------| -| Rocky Linux 10 | `linux-rocky` | [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md) | -| AlmaLinux 10 | `linux-alma` | [procedure-lab-linux-alma-gnome.md](procedure-lab-linux-alma-gnome.md) | -| Fedora | `linux-fedora` | [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md) (infra identique) | -| Ubuntu GNOME | `linux-ubuntu` | [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md) + overrides catalogue | - -Cette procédure couvre **uniquement la couche scénarios** — complémentaire aux procédures clone VM ci-dessus. - ---- - -## 2. Prérequis - -| Critère | Vérification | -|---------|--------------| -| **AppΣ** structurel | `run-apps-lab.mjs --id ` vert | -| Π slot ≥ 85 | `linux--parity-index.json` | -| HTTP local | `python3 -m http.server 5500` ou 5501 | -| Playwright | Chromium headless (smokes scénarios) | -| VM SSH (optionnel) | Inventaire ground truth — [lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md) | - -```bash -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id linux-alma -``` - ---- - -## 3. Cycle type (un slot) - -| # | Action | Livrable | -|---|--------|----------| -| 1 | Sonde VM SSH | `linux---vm-inventory.json` | -| 2 | Contrat scénarios | `etc/capsuleos/contracts/-user-scenarios.json` | -| 3 | Kernel + gabarit | `data--gnome-*` dans toolkit partagé | -| 4 | Validateur | `validate--user-scenarios.mjs` | -| 5 | Smoke | `smoke-gnome--scenarios.mjs` | -| 6 | Captures | `capture-capsule--views.mjs` | -| 7 | Index manifeste | entrée dans `gnome-user-scenarios-index.json` | -| 8 | Parity index | champ `scenarios` sur le slot | -| 9 | Gates | `validate-gnome-user-scenarios-all` + `validate-all` | - ---- - -## 4. Commandes copy-paste - -### Audit overview (début de cycle) - -```bash -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id linux-alma -``` - -### Gate contrats (tous slots) - -```bash -node usr/lib/capsuleos/tools/validate-gnome-user-scenarios-all.mjs -``` - -### Smoke un scénario - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 \ - node usr/lib/capsuleos/tools/lab/smoke-gnome-software-scenarios.mjs \ - --id linux-alma --scenario S1 -``` - -### Captures Capsule - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 \ - node usr/lib/capsuleos/tools/lab/capture-capsule-software-views.mjs --id linux-alma -``` - -### Clôture skin Linux - -```bash -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - ---- - -## 5. Slots livrés (manifeste juin 2026) - -Voir `etc/capsuleos/contracts/gnome-user-scenarios-index.json` — **12 contrats** : - -`update_manager`, `text_editor`, `calculator`, `themes`, `clocks`, `calendar`, `baobab`, `tour`, `snapshot`, `characters`, `system_monitor`, `screenshot`. - ---- - -## 6. Backlog P0 overview (C26+) - -| Cycle | Slot | Priorité | -|-------|------|----------| -| C26 | `nemo` (Fichiers) | P0 dash | -| C27 | `firefox` | P0 dash | -| C28 | `terminal` | P0 dash + grid | -| C29 | `librewriter` | P0 dock + grid | -| C30 | `checklist` | P0 capsuleOnly | - -Détail gaps : [procedure-playbook-gnome-apps-overview.md §6](procedure-playbook-gnome-apps-overview.md#6-alma--tableau-overview-juin-2026). - ---- - -## 7. Distinction domaines - -| Domaine | Orchestrateur | Ne pas fusionner | -|---------|---------------|------------------| -| Apps structurel | `run-apps-lab.mjs` | — | -| Scénarios pédagogiques | cette procédure | Paramètres GNOME | -| Paramètres GNOME | `run-gnome-settings-lab.mjs` | Apps scénarios | -| Terminal commandes | `terminal-replication-chain` | Ptyxis chrome seul | diff --git a/root/docs/procedure-lab-linux-rocky-gnome.md b/root/docs/procedure-lab-linux-rocky-gnome.md deleted file mode 100644 index ce4aee34..00000000 --- a/root/docs/procedure-lab-linux-rocky-gnome.md +++ /dev/null @@ -1,368 +0,0 @@ -# Procédure lab — Rocky Linux GNOME (VM → CapsuleOS) - -> **Objectif** : reproduire **l’intégralité** du bureau Rocky Linux 10 GNOME dans `home/RedHat/Rocky/`, avec une chaîne reproductible, des contrôles automatisés et une classification d’écarts — pour **endiguer les échecs** et accélérer Fedora, Alma et les futurs clones RHEL. - -**Lire d’abord** : [branche-redhat-gnome.md](branche-redhat-gnome.md) (cartographie + doc officielle). - -**Couches complémentaires** (ne pas dupliquer ici) : - -| Couche | Document | -|--------|----------| -| Infra VM SSH/Wayland | [lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md) | -| Construction générique clone | [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) | -| Mesure parité JSON | [procedure-controle-distributions-reelles.md](procedure-controle-distributions-reelles.md) | -| Assets VM obligatoires | [convention-assets-depuis-vm.md](convention-assets-depuis-vm.md) | -| **Playbook Paramètres GNOME** | [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) (gates assets §0, gsettings, enquête §10) | -| **Scénarios pédagogiques apps** | [procedure-lab-linux-gnome-scenarios.md](procedure-lab-linux-gnome-scenarios.md) · [procedure-playbook-gnome-apps-overview.md](procedure-playbook-gnome-apps-overview.md) | - ---- - -## Vue d’ensemble - -```mermaid -flowchart TD - A[0_Prérequis_VM_SSH] --> B[1_Inventaire_JSON_MD] - B --> C[2_Snapshot_thème_gsettings] - C --> D[3_Pull_assets_VM] - D --> E[4_Implémentation_skin_Rocky] - E --> F[5_Clôture_embed_façades] - F --> G[6_Captures_VM_et_Capsule] - G --> H[7_Parité_panel_JSON] - H --> I[8_Rapport_P0_P1_P2] - I --> J[9_validate_all] - J --> K{OK?} - K -->|non| E - K -->|oui| L[10_Propagation_dérivés] -``` - -**Durée indicative** : 2–4 h pour une passe complète (première fois) ; 30–45 min pour une itération CSS/apps. - ---- - -## Phase 0 — Prérequis (bloquants) - -### 0.1 VM - -| Critère | Vérification | -|---------|--------------| -| Rocky Linux **10** Workstation installé | `cat /etc/os-release` | -| Session **graphique ouverte** (GDM) | pas SSH seul | -| Utilisateur lab (ex. `capsule`) | mot de passe connu | -| Réseau NAT libvirt | IP stable ou `virsh net-dhcp-leases default` | - -### 0.2 Paquets sonde (sur la VM) - -```bash -sudo dnf install -y openssh-server -sudo systemctl enable --now sshd -sudo /usr/bin/crb enable -sudo dnf install -y epel-release -sudo dnf install -y wmctrl -``` - -`xdotool` : **absent** des dépôts el10 → `bash root/tools/lab/install-xdotool-el.sh` (VM) ou `deploy-xdotool-via-host.sh` (hôte). - -### 0.3 Clé SSH (hôte Cursor) - -```bash -ssh-keygen -t ed25519 -f ~/.ssh/capsuleos-lab -N "" -ssh-copy-id -i ~/.ssh/capsuleos-lab.pub capsule@ -``` - -### 0.4 Test Wayland (obligatoire) - -```bash -ssh -i ~/.ssh/capsuleos-lab capsule@ \ - 'export DISPLAY=:0 XAUTHORITY=$(ls /run/user/$(id -u)/.mutter-Xwaylandauth.* 2>/dev/null | head -1); wmctrl -l; echo exit:$?' -``` - -Attendu : **`exit:0`**. Si échec → [lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md). - -### 0.5 Inventaire lab local - -```bash -cp etc/capsuleos/lab-inventory.example.json etc/capsuleos/lab-inventory.json -``` - -Renseigner `registryId: linux-rocky`, `ssh`, `sshIdentity`, `display: ":0"`, `sessionType: wayland-xwayland`, `capsuleUrl: http://127.0.0.1:5500/home/RedHat/Rocky/index.html`. - -### 0.6 Serveur HTTP CapsuleOS (hôte) - -```bash -cd /chemin/vers/CapsuleOS -python3 -m http.server 5500 -``` - -Vérifier : `curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:5500/home/RedHat/Rocky/index.html` → **200**. - -### 0.7 Échecs fréquents phase 0 - -| Symptôme | Cause | Action | -|----------|-------|--------| -| `Permission denied (publickey)` | Clé non copiée | `ssh-copy-id` | -| `Cannot open display` | Pas de session graphique | Se connecter au bureau GDM | -| `Authorization required` | `XAUTHORITY` manquant | Export Mutter (§0.4) | -| `exit:127` wmctrl | Paquet absent | `sudo dnf install wmctrl` | -| HTTP 404 Capsule | Mauvais port/cwd serveur | Servir à la **racine du dépôt** | -| `Connection reset` / `Permission denied` SSH en rafale | `sshd` VM saturé (MaxStartups) | Espacer les `scp`/`lab-ssh` (2–3 s) ; préférer `ssh -i …` direct si `lab-ssh` échoue | - ---- - -## Phase 1 — Inventaire ground truth - -> **Audit interactif complet** (clics, menus contextuels, bureaux virtuels, animations, raccourcis) : [procedure-audit-vm-profonde.md](procedure-audit-vm-profonde.md). -> Static automatisé : `node usr/lib/capsuleos/tools/lab/collect-vm-deep-audit.mjs --id linux-rocky --phase static --write-doc` - -### 1.1 Bootstrap sonde GNOME - -```bash -bash root/tools/lab/bootstrap-vm.sh linux-rocky -``` - -Déploie `~/capsuleos-lab/os-probe-gnome.sh` sur la VM. - -### 1.2 État JSON (hôte) - -```bash -node usr/lib/capsuleos/tools/lab/lab-ssh.mjs --id linux-rocky --cmd '$HOME/capsuleos-lab/os-probe-gnome.sh state' -``` - -Ouvrir **Firefox, Nautilus, Ptyxis** sur la VM avant la sonde pour `running: true`. - -### 1.3 Inventaire structuré - -Mettre à jour [`inventaires/linux-rocky-vm.json`](inventaires/linux-rocky-vm.json) et le résumé [`inventaires/linux-rocky-vm.md`](inventaires/linux-rocky-vm.md). - -Checklist minimale à documenter : - -- [ ] Version GNOME Shell (`gnome-shell --version`) -- [ ] Liste favoris dash (`gsettings get org.gnome.shell favorite-apps`) -- [ ] `color-scheme`, `accent-color` -- [ ] URI fond d’écran -- [ ] Apps `.desktop` critiques (Nautilus, Ptyxis, Firefox, …) - -### 1.4 Rapport de parité initial - -Copier le template vers [`inventaire-parite-rocky.md`](inventaire-parite-rocky.md) si nouvelle campagne. - ---- - -## Phase 2 — Snapshot thème VM - -```bash -bash root/tools/lab/vm-rocky-theme-snapshot.sh -``` - -Produit [`linux-rocky-vm-theme.json`](inventaires/linux-rocky-vm-theme.json). - -**Confrontation doc officielle** : vérifier que les remplacements RL10 (Ptyxis, GNOME Text Editor) sont cohérents avec [Rocky 10 Release Notes](https://docs.rockylinux.org/release_notes/10_0/) — voir [branche-redhat-gnome.md](branche-redhat-gnome.md) §3. - ---- - -## Phase 3 — Assets depuis la VM - -```bash -bash root/tools/lab/pull-vm-assets.sh --id linux-rocky -``` - -| Asset | Destination | -|-------|-------------| -| Icônes panel (Nautilus, Ptyxis, Firefox) | `usr/share/capsuleos/assets/images/vendors/rocky/panel/` | -| Fonds gemstone-skies | `vendors/rocky/wallpaper/` | -| Symboles Adwaita (si script couvre) | `icons/gnome/adwaita/` | - -Mettre à jour `vendors/rocky/SOURCE-VM.txt` (date, commande). - -**Ne pas** : copier des icônes depuis Fedora ou Mint. - ---- - -## Phase 4 — Implémentation skin Rocky - -### 4.1 Fichiers à éditer (seulement) - -``` -home/RedHat/Rocky/ -├── index.html # slots, scripts, overview HTML -├── rocky-overrides.css # wallpaper, accent -├── js/overview.js # catalogue recherche -├── style/ -│ ├── gnome-workstation.css -│ ├── gnome-shell/*.css -│ └── apps/*.skin.css # nautilus, terminal, firefox, … -``` - -**Interdit** : modifier `OS/linux/families/redhat/rocky/index.html` à la main. - -### 4.2 Ordre d’implémentation recommandé - -| Ordre | Couche | Fichiers | Critère visuel | -|-------|--------|----------|----------------| -| 1 | Fond + top bar | `rocky-overrides.css`, `tokens.css` | Capture bureau sombre | -| 2 | Dock / Aperçu | `gnome-workstation.css`, `overview.css` | Dash visible dans Aperçu | -| 3 | Nautilus | `nautilus.skin.css`, gabarit embed | Sidebar + headerbar claire | -| 4 | Terminal Ptyxis | `terminal.skin.css` | Prompt `capsule@rocky` | -| 5 | Firefox | `firefox.skin.css` | Barre onglets | -| 6 | Apps utilitaires | `text_editor`, `calculator`, `clocks`, `calendar` skins | Fenêtres secondaires | -| 7 | Overview liens | `index.html` `data-overview-link` | Grille + dash cliquables | - -### 4.3 Contrôles intermédiaires - -```bash -node usr/lib/capsuleos/tools/lab/smoke-rocky-gnome-ref.mjs -CAPSULE_HTTP_BASE=http://127.0.0.1:5500 node usr/lib/capsuleos/tools/lab/smoke-gnome-nautilus-routing.mjs -node root/tools/lab/audit-nautilus-rocky.mjs -``` - -### 4.4 Échecs fréquents phase 4 - -| Symptôme | Cause | Action | -|----------|-------|--------| -| Fond blanc | URL wallpaper relative incorrecte | `../../../../usr/share/...` depuis `style/` | -| Gabarit Nemo Cinnamon | Profil non appliqué | `CAPSULE_SKIN_PROFILE_ID` avant boot | -| 404 `nemo-gnome` | Embed non régénéré | Phase 5 | -| Dock visible à tort | `display:flex` sur `#tableau` | `display:none` Rocky (RHEL GNOME) | -| Icônes cassées | Assets non pullés | Phase 3 | - ---- - -## Phase 5 — Clôture technique (obligatoire) - -```bash -./root/tools/lab/update-rocky-nautilus.sh -``` - -Équivalent détaillé : - -```bash -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/linux/build-linux-embed.mjs -node root/tools/lab/audit-nautilus-rocky.mjs -``` - -Vérifie : façades pick-os = copie canonique + `` ; embed contient `nemo-gnome` / `nautilus-app`. - ---- - -## Phase 6 — Captures visuelles - -### 6.1 VM - -```bash -bash root/tools/lab/vm-rocky-capture-host.sh -``` - -Sortie : `usr/share/capsuleos/assets/images/vendors/rocky/inventory/rocky-vm/` - -Scènes minimales : bureau sombre/clair, Nautilus, Firefox, Ptyxis. - -### 6.2 CapsuleOS - -```bash -node root/tools/lab/capture-capsule-rocky.mjs -``` - -Sortie : `.../rocky-capsule/` - -### 6.3 Rapport comparatif - -```bash -node root/tools/lab/compare-rocky-visual-pass.mjs -``` - -Met à jour [`linux-rocky-comparaison-visuelle.md`](inventaires/linux-rocky-comparaison-visuelle.md). - ---- - -## Phase 7 — Parité panel (JSON) - -```bash -node usr/lib/capsuleos/tools/lab/run-panel-checklist.mjs --id linux-rocky -node usr/lib/capsuleos/tools/lab/compare-os-parity.mjs --id linux-rocky -``` - -**Interprétation Rocky (juin 2026)** : - -- **Capsule 6/6** = référence pour la pédagogie sandbox. -- **VM `active:false`** sous Wayland = **P1** (limitation `wmctrl`, pas régression Capsule). -- Labels checklist : « Fichiers (Nautilus · slot nemo) » — voir `panel-checklist-labels.mjs`. - ---- - -## Phase 8 — Classification des écarts - -Renseigner [`inventaire-parite-rocky.md`](inventaire-parite-rocky.md) : - -| Tag | Exemple Rocky | -|-----|---------------| -| **P0** | Gabarit Nemo au lieu de Nautilus ; profil skin absent | -| **P1** | Dash 6 vs 8 favoris VM ; `active` Wayland ; lien accueil CapsuleOS | -| **P2** | Apps décoratives overview ; Loupe/Snapshot non émulés | -| **CapsuleOnly** | Missions `checklist` | - -Ne pas masquer un P0 en P1. - ---- - -## Phase 9 — Validation finale - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -Checklist humaine : - -- [ ] `home/RedHat/Rocky/index.html` ≡ façade générée (hors ``) -- [ ] Ctrl+F5 sur pick-os et skin canonique -- [ ] Nautilus : titre « Fichiers », classe `nautilus-app` -- [ ] Thème clair/sombre bascule via Quick Settings -- [ ] Rapport parité à jour - ---- - -## Phase 10 — Propagation dérivés (si changement noyau/coque) - -```bash -node usr/lib/capsuleos/tools/linux/sync-gnome-nautilus-skin.mjs -node usr/lib/capsuleos/tools/linux/sync-gnome-workstation-skin.mjs -node usr/lib/capsuleos/tools/linux/sync-gnome-utility-app-skins.mjs -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -Alma nouveau : `node usr/lib/capsuleos/tools/linux/bootstrap-alma-from-rocky.mjs` puis personnalisation vendor. - ---- - -## Checklist express (itération rapide) - -Pour une modification CSS/apps **sans** nouvelle campagne VM : - -1. Éditer `home/RedHat/Rocky/` -2. `./root/tools/lab/update-rocky-nautilus.sh` -3. `node usr/lib/capsuleos/tools/validate-all.mjs` -4. Ctrl+F5 navigateur -5. Si changement structurel → sync scripts dérivés - ---- - -## Skills agent à charger - -1. `onboarding` -2. `os-clone-from-vm` -3. `os-linux` + `capsuleos-distro-linux-rocky` + `capsuleos-vendor-rocky` -4. Lire [branche-redhat-gnome.md](branche-redhat-gnome.md) avant toute passe fidélité - -Brief : `node usr/lib/capsuleos/tools/print-agent-brief.mjs linux-rocky` - ---- - -## Historique des passes - -| Date | Passe | Résultat | -|------|-------|----------| -| 2026-06-04 | Bootstrap VM + sonde GNOME | SSH OK, probe running OK | -| 2026-06-04 | Captures VM/Capsule | 7 PNG par campagne | -| 2026-06-05 | Fidélité Nautilus + dock | Tokens Adwaita, dock affiché dans Aperçu | -| 2026-06 | Doc branche RHEL + procédure lab | Ce document | -| 2026-06-06 | **Passe lab complète** | VM 10.2 / Shell 49.4 · assets pull OK · Capsule 6/6 · captures 8 VM + 7 Capsule · `validate-all` OK | diff --git a/root/docs/procedure-lab-linux-ubuntu-gnome.md b/root/docs/procedure-lab-linux-ubuntu-gnome.md deleted file mode 100644 index 4aeff15a..00000000 --- a/root/docs/procedure-lab-linux-ubuntu-gnome.md +++ /dev/null @@ -1,226 +0,0 @@ -# Procédure lab — Ubuntu GNOME (VM → CapsuleOS) - -> **Objectif** : **refabriquer** le skin `linux-ubuntu` depuis une VM ground truth (pas un fork aveugle de Rocky), en réutilisant le **noyau GNOME** validé sur Rocky tout en préservant les **singularités Ubuntu** : dock latéral, thème Yaru, `apt`, centre de logiciels. - -**Lire d’abord** : [convention-reproduction-os.md](convention-reproduction-os.md) · [linux-gnome-capsule-slots.md](inventaires/linux-gnome-capsule-slots.md) · [inventaire-parite-fedora.md](inventaire-parite-fedora.md) (cloisonnement dock). - -| Couche | Document | -|--------|----------| -| Construction générique | [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) | -| Coque GNOME partagée | [branche-redhat-gnome.md](branche-redhat-gnome.md) (noyau Rocky → dérivés) | -| Wayland / Xwayland | [lab-vm-rhel-wayland.md](lab-vm-rhel-wayland.md) (Mutter — même mécanisme) | -| Terminal | [convention-shell-global.md](convention-shell-global.md) · profil `debian` (`apt`) | -| Assets VM | [convention-assets-depuis-vm.md](convention-assets-depuis-vm.md) | - ---- - -## Différences Rocky ↔ Ubuntu (à inventorier, pas supposer) - -| Aspect | Rocky / RHEL GNOME | Ubuntu 25.10 GNOME | -|--------|-------------------|---------------------| -| Dock permanent | **Absent** (dash Aperçu) | **Présent** (gauche) | -| Inset fenêtres | `--fedora-dock-width: 0` | `--ubuntu-dock-width` mesuré | -| Icônes | Adwaita (VM) | **Yaru** (VM) | -| Paquets sonde | `dnf` + EPEL | `apt` | -| Terminal VM | Ptyxis | Ptyxis ou GNOME Terminal — **à noter dans Ti** | -| Mises à jour | `dnf` / Logiciels | `apt` / **Logiciels** (`update_manager_gnome.html`, GS50) | -| Skin Capsule | `home/RedHat/Rocky/` | `home/Debian/Ubuntu/` · `body#ubuntu` | - -**Règle anti-porosité** : toute règle dock / fond / token Ubuntu sous `body#ubuntu` ; gate `validate-skin-vendor-isolation.mjs`. - ---- - -## Vue d’ensemble - -```mermaid -flowchart TD - A[0_SSH_sonde_VM] --> B[1_Inventaire_I] - B --> C[2_Audit_profond_I+] - C --> D[3_pull_vm_assets] - D --> E[4_Skin_ubuntu_ciblé] - E --> F[5_Terminal_Ti_TΣ] - F --> G[6_sync_facades] - G --> H[7_Parité_captures] - H --> I[8_validate_all] -``` - ---- - -## Phase 0 — Prérequis (bloquants) - -### 0.1 VM détectée (virt-manager) - -```bash -virsh -c qemu:///system list --all -virsh -c qemu:///system domifaddr ubuntu25.10 -virsh -c qemu:///system net-dhcp-leases default -``` - -Exemple juin 2026 : VM **`ubuntu25.10`** → `` (hôte `capsule-KVM`). - -### 0.2 Bootstrap SSH (dans la VM — console virt-manager si port 22 fermé) - -```bash -# Copier-coller dans un terminal de la VM Ubuntu : -sudo apt-get update -sudo apt-get install -y openssh-server wmctrl xdotool python3 -sudo systemctl enable --now ssh -``` - -Ou depuis le dépôt (après premier SSH) : - -```bash -ssh 'bash -s' < root/tools/lab/vm-ubuntu-lab-bootstrap.sh -``` - -### 0.3 Clé SSH (hôte) - -```bash -ssh-copy-id -i ~/.ssh/capsuleos-lab.pub -node usr/lib/capsuleos/tools/lab/lab-ssh.mjs --id linux-ubuntu -``` - -### 0.4 Session captures (R-PWD1 — mot de passe hôte unique) - -Les passes **Vp** / **VΣ** enchaînent des dizaines de `virsh screenshot` ; sans session dédiée, polkit/sudo ouvre une boîte de dialogue à **chaque** capture. - -```bash -bash root/tools/lab/lab-capture-session.sh -- \ - node usr/lib/capsuleos/tools/lab/run-ui-state-effects-pass.mjs --id linux-ubuntu -``` - -Alternative : `source root/tools/lab/lab-capture-session.sh` puis plusieurs scripts dans le même terminal. - -### 0.4 Test Wayland - -```bash -ssh -i ~/.ssh/capsuleos-lab \ - 'export DISPLAY=:0 XAUTHORITY=$(ls /run/user/$(id -u)/.mutter-Xwaylandauth.* 2>/dev/null | head -1); wmctrl -l; echo exit:$?' -``` - -Attendu : **`exit:0`**. - -### 0.4bis Aperçu VM (GNOME ≥ 41 / Wayland) - -Sur Ubuntu 25.10+, `org.gnome.Shell.Eval` et `xdotool` sont **bloqués** pour ouvrir l’Aperçu. Les scripts lab (`vm-gnome-lab-input.sh`, playbooks) utilisent en priorité : - -```bash -gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell \ - --method org.freedesktop.DBus.Properties.Set org.gnome.Shell OverviewActive "" -``` - -Vérification : `gdbus … Properties.Get org.gnome.Shell OverviewActive` → `(,)`. - -### 0.5 Inventaire lab local - -Entrée `linux-ubuntu` dans `etc/capsuleos/lab-inventory.json` (gitignoré) — voir [lab-inventory.example.json](../../etc/capsuleos/lab-inventory.example.json). - -### 0.6 HTTP CapsuleOS - -```bash -python3 -m http.server 8765 --bind 127.0.0.1 -curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8765/OS/linux/families/debian/ubuntu/index.html -``` - -### 0.7 Baseline gates - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -node usr/lib/capsuleos/tools/print-agent-brief.mjs linux-ubuntu -``` - ---- - -## Phase 1 — Inventaire ground truth (**I**) - -```bash -node usr/lib/capsuleos/tools/lab/collect-gnome-vm-inventory.mjs \ - --id linux-ubuntu --write --write-doc - -node usr/lib/capsuleos/tools/lab/collect-vm-deep-audit.mjs \ - --id linux-ubuntu --phase static --write-doc -``` - -Sorties : - -- `root/docs/inventaires/linux-ubuntu-vm.json` -- `root/docs/inventaires/linux-ubuntu-vm.md` -- `root/docs/inventaires/linux-ubuntu-deep-audit.json` - -Inventaire terminal (**Ti**) : - -```bash -# Après collecte SSH interactive — voir procedure-terminal-commandes.md -# Sortie : root/docs/inventaires/linux-ubuntu-terminal-vm.json -``` - ---- - -## Phase 2 — Assets VM (**A** / **S**) - -```bash -node usr/lib/capsuleos/tools/lab/run-vendor-assets-pipeline.mjs --id linux-ubuntu -``` - -Cibles : `vendors/ubuntu/` (fonds + `thumbnails/`, panel, Yaru MIME/places/emblems/symbolic), `icons/gnome/yaru/`, captures `inventory/*-optimized.webp`. - -Équivalent manuel : `pull-vm-assets.sh` puis `PREPARE_WEB_MEDIA=1` (voir [asset-pipeline/SKILL.md](../../skills/asset-pipeline/SKILL.md)). - ---- - -## Phase 3 — Implémentation skin (`home/Debian/Ubuntu/`) - -Ordre recommandé (P0) : - -| # | Zone | Fichiers | Gate | -|---|------|----------|------| -| 1 | Dock + inset | `style/gnome-shell/ubuntu-dock.css`, `ubuntu-tokens.css`, `gnome-workstation.css` | `validate-skin-vendor-isolation` | -| 2 | Top bar + Aperçu | `style/gnome-shell/overview.css`, `js/overview.js` | smoke visuel | -| 3 | Nautilus | `style/apps/nautilus.skin.css` | `sync-gnome-nautilus-skin.mjs` si partagé | -| 4 | Terminal Ptyxis | `style/apps/terminal.skin.css` + tokens | `validate-terminal-skin-lock` (après migration tokens) | -| 5 | Profil | `skin.profile.json`, `etc/capsuleos/profiles/linux-ubuntu.json` | `CAPSULE_LOCALE`, `CAPSULE_TERMINAL_PROFILE: debian` | - -**Interdit** : copier les fonds Rocky/Fedora ; réactiver `display:flex` sur `#tableau.fedora-dock` hors `body#ubuntu`. - ---- - -## Phase 4 — Clôture PbΣ / H6 Paramètres GNOME - -Prérequis : enquête visuelle P0 documentée (`linux-ubuntu-gnome-settings-visual-investigation.json`). - -```bash -# Chaîne parité Paramètres GNOME (matrice ↔ HTML ↔ baseline VM) -node usr/lib/capsuleos/tools/lab/verify-gnome-settings-parity-chain.mjs --id linux-ubuntu --strict - -# Gate pré-H6 (h6Ready + pbSigma) -node usr/lib/capsuleos/tools/lab/smoke-h6-gnome-settings-ready.mjs --id linux-ubuntu - -# Clôture H6 — écrit h6-closure.json (predicates.PbΣ: true) -CAPSULE_HTTP_BASE=http://127.0.0.1:8765 node usr/lib/capsuleos/tools/lab/close-h6-gnome-settings.mjs --id linux-ubuntu - -# Gate formalisation PbΣ (intégrée validate-capsule) -node usr/lib/capsuleos/tools/validate-gnome-settings-pbsigma.mjs -``` - -Clôture skin + terminal : - -```bash -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -CAPSULE_HTTP_BASE=http://127.0.0.1:8765 node usr/lib/capsuleos/tools/lab/smoke-terminal-ptyxis-chrome.mjs --profile=linux-ubuntu -``` - -Livrables formels : `linux-ubuntu-gnome-settings-h6-ready.json`, `linux-ubuntu-gnome-settings-h6-closure.json` — références dans `linux-ubuntu-vm.json` § `gnomeSettings`. - -Rapport d’écarts : `root/docs/inventaire-parite-ubuntu.md` (à créer en fin de passe). - ---- - -## Échecs fréquents - -| Symptôme | Action | -|----------|--------| -| `Connection refused` SSH | Phase 0.2 dans la VM | -| Dock Unity sur Fedora/Rocky | `validate-skin-vendor-isolation.mjs` | -| Fenêtres sous le dock | `windowContainer.js` lit inset par `body.id` | -| Terminal profil `dnf` sur Ubuntu | `CAPSULE_TERMINAL_PROFILE: debian` | diff --git a/root/docs/procedure-manifest-playbook.md b/root/docs/procedure-manifest-playbook.md deleted file mode 100644 index 264390de..00000000 --- a/root/docs/procedure-manifest-playbook.md +++ /dev/null @@ -1,118 +0,0 @@ -# Procédure — playbook de réplication généré depuis le manifeste - -> **Principe** : le manifeste VM est la **source de vérité** ; le playbook est un **plan d'exécution dérivé** qui ne décrit que les **écarts** entre la VM et le clone CapsuleOS. - -Complète [convention-manifest-vm.md](convention-manifest-vm.md) et s'intègre dans la couche **PbU** du [playbook général](procedure-playbook-general.md). - ---- - -## 1. Boucle en quatre temps - -```mermaid -sequenceDiagram - participant H as Hôte CapsuleOS - participant VM as VM lab - participant P as proc/ + inventaires - participant S as Skin home/ - - H->>VM: ① Script investigateur (manifest.py) - VM-->>H: Manifeste JSON (apps, médias, chemins) - H->>P: Analyse + diff vs dépôt existant - H->>P: ② Playbook généré (*-manifest-playbook.json) - Note over H: Smoke + approbation agentique (ManA) - H->>VM: ③ Script staging (playbook → dossier centralisé) - VM-->>VM: ~/capsuleos-lab/staging// - H->>P: ④ rsync/scp lot → assets + intégration skin - H->>S: Références alignées (100 % VM) -``` - -| Phase | Symbole | Livrable | -|-------|---------|----------| -| **Découverte** | **ManV** | `proc//distribution-manifest.json` | -| **Diff + plan** | **PbM** | `proc//-manifest-playbook.json` | -| **Staging VM** | **ManSt** | `~/capsuleos-lab/staging//` + `staging-manifest.json` | -| **Import + intégration** | **ManI** | Assets dans `usr/share/capsuleos/assets/` + refs skin | - ---- - -## 2. Discrimination des écarts (fidélité 100 %) - -Le générateur de playbook classe chaque entrée du manifeste : - -| Statut | Signification | Action playbook | -|--------|---------------|-----------------| -| `skip` | Fichier CapsuleOS déjà présent et référencé skin | Aucun pull | -| `pull` | Absent du dépôt ou non référencé | Copier VM → staging → import | -| `drift` | Présent mais chemin skin ≠ cible manifeste | `rewrite-ref` dans `index.html` / CSS | -| `capsule-only` | Entrée Missions / À propos | Ignorer côté VM | -| `on-vm-false` | Simulé (contrat `onVm: false`) | Ignorer pull, garder slot | - -**Règle** : on ne pull que ce que le diff marque `pull` ou `drift` — pas de thème icône entier, pas de pack générique d'un autre vendor. - ---- - -## 3. Scripts VM (deux rôles distincts) - -### 3.1 Investigateur (déjà en place) - -- `root/tools/lab/vm-distribution-manifest.py` -- Sortie : manifeste complet (lecture seule, pas de copie massive) - -### 3.2 Staging (généré depuis le playbook) - -- `root/tools/lab/vm-manifest-staging-collect.sh` (gabarit) -- Entrée : playbook approuvé (JSON minimal envoyé via SSH stdin) -- Sortie : arborescence plate sur la VM : - -``` -~/capsuleos-lab/staging// - apps/. - wallpaper/ - panel/ - staging-manifest.json # fichiers réellement copiés + checksums -``` - ---- - -## 4. Chaîne hôte (ordre recommandé) - -```bash -# ① Découverte -node usr/lib/capsuleos/tools/lab/collect-vm-distribution-manifest.mjs --id linux-ubuntu --write --ssh - -# ② Playbook personnalisé (diff) -node usr/lib/capsuleos/tools/lab/generate-manifest-replication-playbook.mjs --id linux-ubuntu --write -node usr/lib/capsuleos/tools/lab/smoke-manifest-replication-playbook.mjs --id linux-ubuntu - -# Gate agentique (comme ManA) -node usr/lib/capsuleos/tools/lab/approve-vm-distribution-manifest.mjs --id linux-ubuntu --write - -# ③ Staging sur VM -node usr/lib/capsuleos/tools/lab/run-manifest-staging-on-vm.mjs --id linux-ubuntu --write - -# ④ Import lot -node usr/lib/capsuleos/tools/lab/import-manifest-staging.mjs --id linux-ubuntu --write -node usr/lib/capsuleos/tools/prepare-web-media.mjs --vendor ubuntu --rewrite-refs -``` - ---- - -## 5. Relation avec le playbook général (G-PB) - -| Couche G-PB | Lien manifest-playbook | -|-------------|------------------------| -| **PbU** (universel) | ManV + PbM + ManSt + ManI remplacent le pull SCP ad hoc | -| **PbT** (toolkit) | Inchangé — Paramètres GNOME, parité Vp, etc. | -| **Pbτ** (bout de chaîne) | Le playbook manifest **est** la partie τ matérialisée pour assets/apps | - -Le playbook manifest ne remplace pas `gnome-settings-playbook` : il couvre **apps + médias statiques** ; le toolkit couvre **comportement UI runtime**. - ---- - -## 6. Prédicats étendus - -Voir `etc/capsuleos/contracts/vm-distribution-manifest.json` : - -- **PbM** — playbook généré et smoke OK -- **ManSt** — staging VM terminé (`staging-manifest.json` présent) -- **ManΣ′** — ManV ∧ PbM ∧ ManA ∧ ManSt ∧ ManI diff --git a/root/docs/procedure-playbook-general.md b/root/docs/procedure-playbook-general.md deleted file mode 100644 index cf71f67f..00000000 --- a/root/docs/procedure-playbook-general.md +++ /dev/null @@ -1,173 +0,0 @@ -# Procédure — playbook général multiplateforme (G-PB) - -> **Statut** : contrat validé (`etc/capsuleos/contracts/playbook-general.json`). -> **Objectif** : une **procédure unique** pour tous vendors, branches, versions et distributions, enchaînant des **playbooks universels**, des **playbooks toolkit** réutilisables, puis un **playbook de bout de chaîne (τ)** pour les spécificités d’un environnement. - -**Références** : [logique-formelle.md](logique-formelle.md) · [procedure-replication-formelle.md](procedure-replication-formelle.md) · [convention-reproduction-os.md](convention-reproduction-os.md) - ---- - -## 1. Architecture en trois couches - -```mermaid -flowchart TD - subgraph U [Couche U — Universel] - H2[H2 validate-all] - I[I inventaire VM] - AT[A + T assets] - S[S sources VM] - end - subgraph K [Couche K — Toolkit] - GN[gnome-settings-playbook] - KDE[kde — stub] - CIN[cinnamon — stub] - end - subgraph TAU [Couche τ — Bout de chaîne] - DOC[Doc officielle] - VM[Interactions VM lab] - GAP[Écarts P0/P1] - H5[nextH5 ciblé] - end - U --> K - K --> TAU - TAU --> H6[H6 clôture] -``` - -| Couche | Symbole | Périmètre | Exemple | -|--------|---------|-----------|---------| -| **Universel** | **PbU** | Tout `registryId` | Inventaire VM, assets, traçabilité | -| **Toolkit** | **PbT** | `os-registry.toolkit.id` | GNOME Paramètres (Fedora, Rocky, Alma, Ubuntu…) | -| **Bout de chaîne** | **Pbτ** | Un `registryId` | RL10 + Nautilus 47 + doc Rocky + gaps VM | -| **Sigma** | **PbΣ** | PbU ∧ PbT ∧ Pbτ | Prêt patch skin ciblé (**H5**) | - ---- - -## 2. Playbooks spécifiques inclus - -### 2.1 Universels (couche U) - -| ID | Script / action | Prédicat | -|----|-----------------|----------| -| `u-validate-all` | `validate-all.mjs` | **H₂** | -| `u-vm-inventory` | `inventaires/-vm.json` | **I** | -| `u-verify-assets` | `verify-playbook-assets --strict` | **A** | -| `u-collect-assets` | `collect-vm-gnome-settings-assets.mjs` | **S** | -| Traçabilité | `pull-vm-assets.sh` → `SOURCE-VM.txt` | **T** | - -Procédure clone : [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md). - -### 2.2 Toolkit GNOME (couche K — réutilisable) - -Spécialisation complète : [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md). - -Orchestrateur : `run-replication-chain.mjs --auto` — prédicats **V → G → Vc → Vp**. - -| Niveau | Playbook | Livrable | -|--------|----------|----------| -| 1 | Tour panneaux | `*-gnome-settings-playbook.json` | -| 2 | Interactions | `*-gnome-settings-interaction.json` | -| 3 | Enquête visuelle | `*-visual-investigation.json` | -| 4 | Gsettings profond | `gsettingsDeepPass` | -| 5 | Parité Capsule | `visualMatch` classé | - -**PbT** = domaine `gnome-settings-playbook` complet (Vp ∧ V ∧ G ∧ Vc). - -### 2.3 Autres toolkits (stubs) - -| Toolkit | Statut | Extension future | -|---------|--------|------------------| -| `kde` | stub | Plasma System Settings + Dolphin | -| `cinnamon` | stub | Nemo + ccsm | -| `cosmic` | stub | COSMIC settings | - -Règle **R-PB2** : si stub → documenter dans `playbook-general-state.json` ; ne pas inventer baseline. - -### 2.4 Bout de chaîne τ (spécificités environnement) - -Après **PbT**, collecter : - -```bash -node usr/lib/capsuleos/tools/lab/collect-playbook-tail.mjs --id -``` - -Livrables : - -- `root/docs/inventaires/-playbook-tail.json` -- `root/docs/inventaires/-playbook-tail.md` - -Contenu τ : - -1. **Documentation officielle** — vendor (Rocky release notes), toolkit (GNOME Help, HIG), à confronter (`matchesObservation`, `delta`). -2. **VM lab** — sonde SSH, écarts issus inventaire / enquête visuelle. -3. **Interactions agents** — notes pour la passe **H5** minimale (`nextH5[]`) ; vérifier **Rv** (rafraîchissement vues) sur chaque action documentée — [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md). -4. **Règle** : VM prime sur doc ; écarts P0 bloquants avant merge skin. - -Modèle : [`_template-playbook-tail.json`](inventaires/_template-playbook-tail.json). - ---- - -## 3. Orchestration et mode auto - -Contrat : `etc/capsuleos/contracts/playbook-general.json` - -```bash -# État et prochaine couche -node usr/lib/capsuleos/tools/lab/run-playbook-general.mjs --id linux-rocky --dry-run - -# Mode auto (R-PB-AUTO) — une étape par invocation ; enchaîner avec --auto -node usr/lib/capsuleos/tools/lab/run-playbook-general.mjs --id linux-rocky --auto - -# Résolution action unique (agent) -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id linux-rocky --scope general -``` - -**Activation auto** : `autoExecution.enabled: true` dans le contrat **après** : - -```bash -node usr/lib/capsuleos/tools/lab/smoke-playbook-general.mjs -``` - -Hooks Cursor + [capsuleos-autonomous-execution.mdc](../.cursor/rules/capsuleos-autonomous-execution.mdc) : les commandes `run-playbook-general` et sous-orchestrateurs sont **auto-allow**. - ---- - -## 4. Règles d’inférence (ajout logique formelle) - -``` -R-PB1 ¬PbU → couche universal -R-PB2 PbU ∧ ¬PbT → run-replication-chain --auto (si toolkit actif) -R-PB3 PbT ∧ ¬Pbτ → collect-playbook-tail -R-PB4 PbΣ → H5 patch minimal (nextH5) puis H6 -R-PB-AUTO validated ∧ ∃! step → run-playbook-general --auto -``` - ---- - -## 5. Ajouter une nouvelle distribution - -1. Entrée `os-registry.json` (`vendor`, `branchId`, `toolkit`, `referencePaths`). -2. VM lab + `lab-inventory.json`. -3. `run-playbook-general.mjs --id --auto` jusqu’à blocage (stub toolkit ou inventaire). -4. Si toolkit = `gnome` : hériter **toute** la chaîne Paramètres sans duplication. -5. τ spécifique : enrichir `playbook-tail` (doc vendor + gaps VM). - ---- - -## 6. Rocky Linux — référence - -| Couche | État attendu juin 2026 | -|--------|------------------------| -| PbU | I + T + S (VM inventoriée, assets alignés) | -| PbT | V, G, Vc, Vp (P0 Paramètres) | -| Pbτ | `linux-rocky-playbook-tail.json` après collect | -| Suite | P1 enquête visuelle · polish skin backlog | - ---- - -## 7. Liens - -| Document | Rôle | -|----------|------| -| [procedure-replication-formelle.md](procedure-replication-formelle.md) | Chaîne V…Vp (sous-ensemble K/gnome) | -| [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) | Détail 4 niveaux GNOME | -| [agent-action-aliases.json](../../etc/capsuleos/contracts/agent-action-aliases.json) | Alias R-AUTO | diff --git a/root/docs/procedure-playbook-gnome-apps-overview.md b/root/docs/procedure-playbook-gnome-apps-overview.md deleted file mode 100644 index be79dc03..00000000 --- a/root/docs/procedure-playbook-gnome-apps-overview.md +++ /dev/null @@ -1,211 +0,0 @@ -# Playbook — overview GNOME → slot → scénarios - -> **Objectif** : chaîne reproductible pour tout skin **toolkit GNOME** (Rocky, Fedora, Alma, Ubuntu) : inventaire overview → slot CapsuleOS → contrat scénarios → gates. - -**Documents liés** : - -| Document | Rôle | -|----------|------| -| [procedure-scenarios-pedagogiques-gnome.md](procedure-scenarios-pedagogiques-gnome.md) | Pattern contrat → validateur → smoke → capture | -| [procedure-lab-linux-gnome-scenarios.md](procedure-lab-linux-gnome-scenarios.md) | Procédure lab générique (tous vendors GNOME) | -| [procedure-apps-catalog.md](procedure-apps-catalog.md) | Catalogue VM → slots | -| [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) | Playbook Paramètres (domaine séparé) | -| `etc/capsuleos/contracts/gnome-user-scenarios-index.json` | **Manifeste** des contrats scénarios | - ---- - -## 1. Prédicats overview - -| Symbole | Signification | -|---------|---------------| -| **Ov** | Grille overview + dash + dock alignés sur `apps-catalog.json` | -| **OvΣ** | `generate-overview-apps-grid.mjs` + smoke routing overview | -| **ScΣ** | Contrat scénarios slot valide (≥ 4 P0) | -| **ScAll** | Tous contrats index manifeste verts | - -**Priorité** : P0 visible sans scroll (dock + dash) → P1 reste overview → P2 apps secondaires / décoratives. - ---- - -## 2. Chaîne overview → scénarios - -```mermaid -flowchart TD - VM[Inventaire VM apps] --> CAT[apps-catalog.json] - CAT --> GRID[generate-overview-apps-grid] - GRID --> SKIN[index.html data-overview-link] - SKIN --> AUDIT[audit-gnome-overview-scenarios] - AUDIT --> GAP{Gap P0 ?} - GAP -->|oui| INV[slot-vm-inventory.json] - INV --> CONTRACT[slot-user-scenarios.json] - CONTRACT --> VAL[validate-slot-user-scenarios] - VAL --> SMOKE[smoke-gnome-slot-scenarios] - SMOKE --> CAP[capture-capsule-slot-views] - CAP --> PI[parity-index scenarios] - PI --> ALL[validate-gnome-user-scenarios-all] -``` - ---- - -## 3. Sources de vérité overview - -| Couche | Fichier / zone | Agent doit | -|--------|----------------|------------| -| Catalogue apps | `etc/capsuleos/contracts/apps-catalog.json` | `placement.overview`, `priorite`, `slot` | -| Grille générée | `home///index.html` | Marqueurs `CAPSULE-OVERVIEW-APPS-GRID` | -| Liens cliquables | `data-overview-link=""` | Slot = `windowElement[data-link]` | -| Dash overview | `fedora-overview__dash-item` | Favoris gsettings VM | -| Dock | `fedora-dock` `data-link` | Lanceurs panel | -| Recherche | `overview.js` `searchCatalog` | Apps hors grille visible | -| Parité JSON | `linux--parity-index.json` | Champ `scenarios` par slot | - -Génération grille depuis manifeste VM : - -```bash -node usr/lib/capsuleos/tools/lab/generate-overview-apps-grid.mjs --id linux-alma --write -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -``` - ---- - -## 4. Audit gaps overview - -```bash -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id linux-alma -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id linux-rocky --json -``` - -Sortie : tableau zone × slot × priorité × scénarios (oui/non) + liste **gaps P0**. - ---- - -## 5. Manifeste contrats scénarios - -Index machine : `etc/capsuleos/contracts/gnome-user-scenarios-index.json` - -| Champ | Usage | -|-------|-------| -| `contracts[]` | Contrats livrés (17 slots juin 2026, clôture overview C30) | -| `backlog[]` | Slots P0 sans scénarios (vide après C30) | -| `predicateChecks.ScAll` | Gate agrégée | - -Gate agrégée : - -```bash -node usr/lib/capsuleos/tools/validate-gnome-user-scenarios-all.mjs -``` - -Intégrée dans `validate-quality-all.mjs` et donc `validate-all.mjs`. - ---- - -## 6. Alma — tableau overview (juin 2026) - -État **après C25** — audit `audit-gnome-overview-scenarios.mjs --id linux-alma` : - -### Slots câblés avec scénarios P0 (12) - -| Zone | Slot | Label | Contrat | Cycle | -|------|------|-------|---------|-------| -| dash | `update_manager` | Logiciels | `software-user-scenarios.json` | C15 | -| dash | `text_editor` | Éditeur | `text-editor-user-scenarios.json` | C16 | -| dash | `calendar` | Calendrier | `calendar-user-scenarios.json` | C20 | -| overviewGrid | `themes` | Paramètres | `themes-user-scenarios.json` | C18 | -| overviewGrid | `clocks` | Horloges | `clocks-user-scenarios.json` | C19 | -| overviewGrid | `baobab` | Disques | `baobab-user-scenarios.json` | C24 | -| overviewGrid | `tour` | Visite guidée | `tour-user-scenarios.json` | C24 | -| overviewGrid | `snapshot` | Caméra | `snapshot-user-scenarios.json` | C25 | -| overviewGrid | `characters` | Caractères | `characters-user-scenarios.json` | C25 | -| overviewGrid | `system_monitor` | Moniteur | `system-monitor-user-scenarios.json` | C25 | - -*(+ `calculator` via recherche overview ; `screenshot` via quick settings)* - -### Slots câblés C26 (Nautilus) - -| Zone | Slot | Label | Contrat | Cycle | -|------|------|-------|---------|-------| -| dash | `nemo` | Fichiers (Nautilus) | `nautilus-user-scenarios.json` | **C26** | - -> Slot technique `nemo` ; application VM **Nautilus** (`org.gnome.Nautilus`) ; gabarit **`nemo-gnome`**. Ne pas confondre avec **Nemo Cinnamon** (`linux-mint`). - -### Slots câblés C27 (Firefox) - -| Zone | Slot | Label | Contrat | Cycle | -|------|------|-------|---------|-------| -| dash | `firefox` | Firefox | `firefox-user-scenarios.json` | **C27** | - -> Firefox 140 ESR Alma · chrome Proton GNOME · scénarios F1–F4 (accueil, barre adresse, onglets, favori La Capsule). - -### Slots câblés C28 (Terminal Ptyxis) - -| Zone | Slot | Label | Contrat | Cycle | -|------|------|-------|---------|-------| -| dash | `terminal` | Terminal | `terminal-user-scenarios.json` | **C28** | - -> Ptyxis 47.13 Alma · chrome header onglets · scénarios Te1–Te4 (invite, pwd/ls, onglet, whoami/help). - -### Slots câblés C29 (LibreOffice Writer) - -| Zone | Slot | Label | Contrat | Cycle | -|------|------|-------|---------|-------| -| grid + dock | `librewriter` | LibreOffice Writer | `librewriter-user-scenarios.json` | **C29** | - -> LibreOffice 24.x FR simulé (absent VM el10) · scénarios Lw1–Lw4 (document vide, saisie, gras, enregistrer/nouveau) · cohérent Software S1 (`libreoffice-writer` → `librewriter`) · ≠ slot `text_editor`. - -### Slots câblés C30 (Missions CapsuleOS) — clôture overview 15/15 - -| Zone | Slot | Label | Contrat | Cycle | -|------|------|-------|---------|-------| -| dock | `checklist` | Missions | `checklist-user-scenarios.json` | **C30** | - -> Module pédagogique Capsule-only (pas d'app GNOME VM) · scénarios Ck1–Ck4 (ouvrir liste, consulter mission, cocher, progression/persistance) · chrome libadwaita GNOME Alma · pont `capsule:task` vers slots GNOME. - -### Clôture overview Alma (C26–C30) - -Campagne **C26–C30** : Nautilus → Firefox → Terminal → LibreOffice Writer → **Missions checklist**. Audit `audit-gnome-overview-scenarios.mjs --id linux-alma` : **15/15** slots overview câblés, **0 gap P0**. - -### Apps overview décoratives (sans slot — P2/P3) - -Contacts, Météo, Cartes, LibreOffice Calc/Impress, Numériseur, Machines, Lecteur vidéos, Fedora Media Writer, Aide — icônes grille VM sans `data-overview-link` ; statut `decorative` dans `apps-catalog.json`. - ---- - -## 7. Réplication vers autres skins GNOME - -| Étape | Rocky / Fedora / Ubuntu | -|-------|-------------------------| -| 1 | Vérifier `registryOverrides` dans `apps-catalog.json` | -| 2 | `audit-gnome-overview-scenarios.mjs --id ` | -| 3 | Réutiliser **contrats toolkit** (`registryIds` dans chaque JSON) | -| 4 | Smokes `--id linux-rocky` (paramétrable) | -| 5 | Captures vendor `images/vendors//inventory/` | -| 6 | `parity-index` du distro — champ `scenarios` | - -**Ne pas forker** les contrats par vendor : un contrat = un slot toolkit ; overrides skin via CSS vendor uniquement. - ---- - -## 8. Gates clôture - -```bash -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id -node usr/lib/capsuleos/tools/validate-gnome-user-scenarios-all.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs # si skin touché -``` - -Smoke scénarios (exemple) : - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 \ - node usr/lib/capsuleos/tools/lab/smoke-gnome-software-scenarios.mjs --id linux-alma -``` - ---- - -## 9. Anti-patterns - -1. Bouton overview sans `data-overview-link` alors que le slot existe (**Ov** cassé). -2. Contrat scénarios vendor-specific (fork Alma-only) au lieu du toolkit partagé. -3. Grille overview éditée à la main sans `generate-overview-apps-grid.mjs`. -4. Oublier d'enregistrer le contrat dans `gnome-user-scenarios-index.json`. diff --git a/root/docs/procedure-replication-formelle.md b/root/docs/procedure-replication-formelle.md deleted file mode 100644 index b689d869..00000000 --- a/root/docs/procedure-replication-formelle.md +++ /dev/null @@ -1,177 +0,0 @@ -# Procédure — réplication formelle VM → CapsuleOS (tous vendors) - -> **Statut** : spécialisation opérationnelle de [logique-formelle.md](logique-formelle.md). -> **Référence Rocky** : [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md) · [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) - -**Objectif** : permettre à **n’importe quelle entrée** `etc/capsuleos/os-registry.json` (vendor, toolkit, tier) d’être répliquée selon la **même chaîne de prédicats**, sans réinventer la méthode distro par distro. - ---- - -## 1. Chaîne universelle - -Notation alignée sur la logique formelle (§2.7). - -| Étape | Prédicat | Signification | Gate / livrable | -|-------|----------|---------------|-----------------| -| 0 | **H₂** | Dépôt sain | `validate-all.mjs` | -| 1 | **M** | VM lab joignable | `etc/capsuleos/lab-inventory.json` | -| 2 | **I** | Inventaire VM | `inventaires/-vm.json` | -| 3 | **A ∧ T** | Assets présents + traçabilité | `verify-playbook-assets --strict`, `SOURCE-VM.txt` | -| 4 | **S** | Sources VM alignées | `*-gnome-settings-assets.json`, SHA256 | -| 5 | **L** | Lab domaine vert | `run-gnome-settings-lab.mjs` | -| 6 | **V** | Enquête visuelle VM (lot P0) | `*-gnome-settings-visual-investigation.json` | -| 7 | **G** | Passe gsettings approfondie | `gsettingsDeepPass` dans inventaire | -| 8 | **Vc** | Captures Capsule miroir | `capsuleCaptures[]` P0 | -| 9 | **Vp** | Parité visuelle classée | `capsuleParity.visualMatch` ≠ `unknown` | -| 9b | **Φ** | Fidélité visuelle mesurée (diff pixel VM ↔ clone + computed vs inventaire) | `-visual-fidelity.json` · scènes P0 `match` | -| 10 | **H₆** | Clôture release Paramètres | `*-gnome-settings-h6-closure.json` — exige **Φ** sur les slots à scènes P0 déclarées | -| 11 | **AppV** | Inventaire apps VM | `*-vm-apps-installed.json` | -| 12 | **AppC** | Catalogue strict apps | `*-apps-catalog.json` | -| 13 | **AppΣ** | Apps P0 OK | `smoke-apps-catalog.mjs` | -| 14 | **H₆′** | Clôture globale (shell + apps) | `validate-all.mjs` | - -```mermaid -flowchart LR - H2[H2] --> I[I inventaire] - I --> AT[A + T assets] - AT --> S[S sources VM] - S --> L[L lab] - L --> V[V enquête VM] - V --> G[G gsettings profond] - G --> Vc[Vc captures Capsule] - Vc --> Vp[Vp classement] - Vp --> H6[H6] -``` - -**Règles d’inférence** (ajout au document canonique) : - -``` -R-PRI2 V ∧ ¬G → enrich-visual-investigation-gsettings-pass.mjs -R-PRI2b G ∧ ¬Vc → collect-capsule-visual-investigation.mjs -R-PRI2c Vc ∧ ¬Vp → enrich-visual-investigation-capsule-parity.mjs -R-PHI1 scènes P0 déclarées ∧ ¬ΦC → capture-scene-pair.mjs --id --slot -R-PHI2 ΦC ∧ ¬ΦM → compare-visual-fidelity.mjs --id -R-PHI3 computedChecks ∧ ¬ΦI → assert-computed-vs-inventory.mjs --id --slot -R-PRI3 Vp ∧ lot P1 ouvert → collect enquête --filter P1 -``` - -**Φ vs Vp** : Vp (classement déclaratif) ne suffit plus pour la clôture visuelle — voir `logique-formelle.md` §2.4b. Contrat scènes : `etc/capsuleos/contracts/visual-scenes.json`. - ---- - -## 2. Paramétrage par registryId - -Tout outil lab accepte **`--id `** ou **`--registry `** (ex. `linux-rocky`, `linux-fedora`, `linux-mint`). - -| Fichier contrat | Rôle | -|-----------------|------| -| `etc/capsuleos/contracts/replication-chain.json` | Ordre des étapes, scènes Capsule par `controlId` | -| `etc/capsuleos/os-registry.json` | `vendor`, `referencePaths.skin`, `toolkit` | -| `root/docs/inventaires/-replication-state.json` | État des prédicats (généré) | - -**Chemins inventaire** (vendor-agnostiques) : - -``` -root/docs/inventaires/-gnome-settings-visual-investigation.json -root/docs/inventaires/captures//gnome-settings-visual/ # VM -root/docs/inventaires/captures//gnome-settings-visual-capsule/ # Capsule -usr/share/capsuleos/assets/images/vendors//inventory/-capsule/ -``` - ---- - -## 3. Orchestrateur - -```bash -# État + prochaine étape (sans exécuter) -node usr/lib/capsuleos/tools/lab/run-replication-chain.mjs --id linux-rocky --dry-run - -# Exécuter la prochaine étape admissible (R-AUTO) -node usr/lib/capsuleos/tools/lab/run-replication-chain.mjs --id linux-rocky -``` - -Domaine par défaut : `gnome-settings-playbook` (Paramètres GNOME). Le clone bureau complet reste sous [convention-reproduction-os.md](convention-reproduction-os.md). - ---- - -## 4. Séquence manuelle (référence) - -Remplacer `` par le `registryId` (ex. `linux-rocky`). - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs - -node usr/lib/capsuleos/tools/lab/verify-playbook-assets.mjs --registry --strict -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-assets.mjs --id - -node usr/lib/capsuleos/tools/lab/run-gnome-settings-lab.mjs - -node usr/lib/capsuleos/tools/lab/collect-vm-gnome-settings-visual-investigation.mjs --id --filter P0 -node usr/lib/capsuleos/tools/lab/enrich-visual-investigation-gsettings-pass.mjs --id - -node usr/lib/capsuleos/tools/lab/collect-capsule-visual-investigation.mjs --id -node usr/lib/capsuleos/tools/lab/enrich-visual-investigation-capsule-parity.mjs --id - -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -**Captures Capsule** : si l’inventaire vendor existe déjà (`capture-capsule-.mjs`), `collect-capsule-visual-investigation` **réutilise** les PNG ; sinon serveur HTTP + `CAPSULE_HTTP_BASE`. - ---- - -## 5. Ajouter une nouvelle distribution - -1. Entrée **R** dans `os-registry.json` + profil skin (`ajouter-os-scalable.md`). -2. VM **M** + inventaire **I** (`procedure-clonage-os-depuis-vm.md`). -3. Hôte lab : `etc/capsuleos/lab-inventory.example.json` → `lab-inventory.json` (gitignoré). -4. Matrice visuelle : étendre `gnome-settings-visual-investigation-matrix.json` si toolkit GNOME. -5. Lancer `run-replication-chain.mjs --id ` jusqu’à **Vp** ; documenter écarts P0/P1 dans l’inventaire. -6. Spécialisation vendor optionnelle : `root/skills/distributions//SKILL.md` — **renvoie** toujours à ce document. - -**Interdit** : logique de réplication parallèle dans un skill distro sans prédicats §2.7. - ---- - -## 6. Modèle d’état - -Copier [`_template-replication-state.json`](inventaires/_template-replication-state.json) vers `inventaires/-replication-state.json` (généré automatiquement par `run-replication-chain.mjs`). - ---- - -## 6. Exécution autonome Cursor (alias) - -Objectif : **décision logique par passage** sans validation humaine pour les gates admissibles ; **regrouper** les invites mot de passe. - -| Composant | Rôle | -|-----------|------| -| `etc/capsuleos/contracts/agent-action-aliases.json` | Alias prédicat → commande, `autoAllow`, `passwordBundles` | -| `resolve-agent-action.mjs` | Prochaine action JSON (R-AUTO) | -| `run-replication-chain.mjs --auto` | Enchaîne les étapes admissibles | -| `.cursor/rules/capsuleos-autonomous-execution.mdc` | Consigne agent | -| `.cursor/hooks/approve-formal-lab.sh` | Auto-allow shell aligné ; R-ASK1 pour commit/sudo ad hoc | - -```bash -# Prochaine action (raisonnement logique) -node usr/lib/capsuleos/tools/lab/resolve-agent-action.mjs --id linux-rocky - -# Enchaînement auto jusqu'à blocage -node usr/lib/capsuleos/tools/lab/run-replication-chain.mjs --id linux-rocky --auto -``` - -**R-PWD1** — bundles : - -- `bash root/tools/lab/vm-rocky-lab-bootstrap.sh` — paquets VM (un sudo) -- `bash root/tools/lab/setup-lab-ssh-key.sh user@ip` — clé SSH lab (une invite) - -Activer les hooks : Cursor → Settings → Hooks (recharger après modif `hooks.json`). - ---- - -## 7. Liens - -| Document | Rôle | -|----------|------| -| [logique-formelle.md](logique-formelle.md) | Prédicats et règles canoniques | -| [convention-reproduction-os.md](convention-reproduction-os.md) | Clone skin complet | -| [procedure-creation-playbook-gnome-settings.md](procedure-creation-playbook-gnome-settings.md) | Détail enquête §10 | -| [convention-assets-depuis-vm.md](convention-assets-depuis-vm.md) | Gates **A**, **S**, **T** | diff --git a/root/docs/procedure-scenarios-pedagogiques-gnome.md b/root/docs/procedure-scenarios-pedagogiques-gnome.md deleted file mode 100644 index 8ad8a7a3..00000000 --- a/root/docs/procedure-scenarios-pedagogiques-gnome.md +++ /dev/null @@ -1,222 +0,0 @@ -# Playbook scénarios pédagogiques GNOME - -> **Objectif** : documenter le pattern **contrat → validateur → smoke → capture** applicable à tout slot GNOME (Rocky, Fedora, Alma, Ubuntu). - -**Documents liés** : - -| Document | Rôle | -|----------|------| -| [procedure-playbook-gnome-apps-overview.md](procedure-playbook-gnome-apps-overview.md) | Overview → slot → contrat → gates | -| [procedure-lab-linux-gnome-scenarios.md](procedure-lab-linux-gnome-scenarios.md) | Procédure lab générique (tous vendors) | -| [procedure-lab-linux-alma-gnome.md](procedure-lab-linux-alma-gnome.md) | Campagne référence Alma C15–C25 | -| `etc/capsuleos/contracts/gnome-user-scenarios-index.json` | Manifeste des 12 contrats + backlog C26+ | -| [campagne-credibilite-pedagogique.md](campagne-credibilite-pedagogique.md) | Campagne crédibilité post-Π | - ---- - -## 1. Prédicats - -| Symbole | Signification | -|---------|---------------| -| **ScΣ** | Contrat JSON valide + kernel implémente les sélecteurs `data-*` | -| **Sc1…ScN** | Scénario utilisateur P0 exécutable (smoke vert) | -| **Vc** | Captures Capsule par scénario | -| **AppΣ** | Slot apps catalogué avec smoke structurel | - -**Règle** : ne pas ouvrir la campagne scénarios avant **AppΣ** et Π slot ≥ 85 (structurel). - ---- - -## 2. Chaîne en 5 étapes - -```mermaid -flowchart TD - A[1_Inventaire_VM_JSON] --> B[2_Contrat_scenarios_JSON] - B --> C[3_Validateur_contrat] - C --> D[4_Smoke_Playwright] - D --> E[5_Captures_Capsule] - E --> F[6_Parity_index] - F --> G[validate-quality-all] -``` - -### Étape 1 — Inventaire VM - -Fichier : `root/docs/inventaires/linux---vm-inventory.json` - -Contenu minimal : `gsettings`, labels `fr_FR`, version RPM, blockers capture, alignement capsule (`template`, `kernel`, `scenariosContract`). - -Sonde SSH (ex. Alma) : - -```bash -ssh -i ~/.ssh/capsuleos-lab \ - 'gsettings get org.gnome.desktop.interface accent-color' -``` - -### Étape 2 — Contrat scénarios - -Emplacement : `etc/capsuleos/contracts/-user-scenarios.json` - -Schéma : - -```json -{ - "version": 1, - "slot": "update_manager", - "template": "update_manager_gnome.html", - "kernel": "usr/lib/capsuleos/shells/linux/update-manager.js", - "registryIds": ["linux-alma", "linux-rocky", "linux-fedora", "linux-ubuntu"], - "predicates": { "ScΣ": "…", "Sc1": "…" }, - "scenarios": [ - { - "id": "S1", - "priority": "P0", - "title": "…", - "steps": [ - { "id": "open", "action": "openWindowByDataLink", "target": "update_manager" }, - { "id": "click", "selector": "[data-um-gnome-action=\"install\"]" } - ], - "proofs": { - "smoke": "smoke-gnome-software-scenarios.mjs --scenario S1", - "capture": "rocky-capsule-dark-software-install-open.png" - } - } - ], - "predicateChecks": { - "ScΣ": { "script": "usr/lib/capsuleos/tools/validate-software-user-scenarios.mjs" } - } -} -``` - -**Conventions sélecteurs** : - -| Slot | Préfixe `data-*` | Exemple | -|------|------------------|---------| -| Logiciels | `data-um-gnome-*` | `[data-um-gnome-nav="updates"]` | -| Éditeur | `data-te-gnome-*` | `[data-te-gnome-action="save-as"]` | -| Calculatrice | `data-calc-*`, `data-calc-gnome-*` | `[data-calc="equals"]` | -| Paramètres | `data-theme-option`, `data-accent-chip`, `data-gnome-settings-panel` | `[data-accent-chip="blue"]` | -| Horloges | `data-clocks-*`, `data-clocks-gnome-*` | `[data-clocks-view="stopwatch"]` | -| Agenda | `data-cal-gnome-*` | `[data-cal-gnome-view="week"]` | -| Baobab | `data-baobab-gnome-*` | `[data-baobab-gnome-volume="home"]` | -| Visite guidée | `data-tour-gnome-*` | `[data-tour-gnome-action="next"]` | - -### Étape 3 — Validateur contrat - -Fichier : `usr/lib/capsuleos/tools/validate--user-scenarios.mjs` - -Vérifie : - -- JSON contrat (≥ 4 scénarios P0, proofs.smoke) -- Présence handlers dans le **kernel** JS (pas le skin vendor) -- Attributs `data-*` dans le **gabarit** HTML partagé -- Existence du script smoke - -Enregistrer dans `validate-quality-all.mjs`. - -### Étape 4 — Smoke Playwright - -Fichier : `usr/lib/capsuleos/tools/lab/smoke-gnome--scenarios.mjs` - -Pattern : - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 \ - node usr/lib/capsuleos/tools/lab/smoke-gnome--scenarios.mjs --id linux-alma - -# Un scénario : -... --scenario S1 -``` - -Structure smoke : - -1. `resolveCapsuleHttpBase(id)` + `resolveCapsuleOsUrl(id, base)` -2. Ouvrir skin via `openWindowByDataLink(slot)` -3. Attendre init kernel (`dataset.*Init === 'true'` si applicable) -4. Exécuter steps ; accumuler `errors[]` -5. Exit 1 si erreurs - -Lib partagée : `apps-replication-lib.mjs`, `lab-recipe-resolver.mjs`. - -### Étape 5 — Captures Capsule - -Fichier : `usr/lib/capsuleos/tools/lab/capture-capsule--views.mjs` - -Sortie : `usr/share/capsuleos/assets/images/vendors//inventory/-capsule/` - -Nommage : `rocky-capsule-dark--.png` (répertoire vendor partagé toolkit gnome). - -### Étape 6 — Parity index - -Mettre à jour `root/docs/inventaires/linux--parity-index.json` : - -```json -"scenarios": { - "contract": "etc/capsuleos/contracts/-user-scenarios.json", - "p0": ["S1", "S2", "S3", "S4"], - "smoke": "smoke-gnome--scenarios.mjs" -} -``` - ---- - -## 3. Manifeste & réplication multi-vendor - -Index machine : `etc/capsuleos/contracts/gnome-user-scenarios-index.json` - -Chaque contrat déclare `registryIds: ["linux-alma", "linux-rocky", "linux-fedora", "linux-ubuntu"]` — le **kernel toolkit** est partagé ; seuls CSS vendor et captures diffèrent. - -Audit overview (gaps P0) : - -```bash -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id linux-alma -node usr/lib/capsuleos/tools/lab/audit-gnome-overview-scenarios.mjs --id linux-rocky -``` - -Pour Rocky/Fedora/Ubuntu : réutiliser les mêmes smokes avec `--id ` après vérification `parity-index`. - ---- - -## 4. Slots livrés — état juin 2026 (12 contrats) - -| Slot | IDs P0 | Cycle | Gate | -|------|--------|-------|------| -| `update_manager` | S1–S4 | C15 | `validate-software-user-scenarios.mjs` | -| `text_editor` | T1–T4 | C16 | `validate-text-editor-user-scenarios.mjs` | -| `calculator` | C1–C4 | C17 | `validate-calculator-user-scenarios.mjs` | -| `themes` | Th1–Th4 | C18 | `validate-themes-user-scenarios.mjs` | -| `clocks` | H1–H4 | C19 | `validate-clocks-user-scenarios.mjs` | -| `calendar` | Cal1–Cal4 | C20 | `validate-calendar-user-scenarios.mjs` | -| `baobab` | B1–B4 | C24 | `validate-baobab-user-scenarios.mjs` | -| `tour` | T1–T4 | C24 | `validate-tour-user-scenarios.mjs` | -| `snapshot` | Sn1–Sn4 | C25 | `validate-snapshot-user-scenarios.mjs` | -| `characters` | Ch1–Ch4 | C25 | `validate-characters-user-scenarios.mjs` | -| `system_monitor` | Sm1–Sm4 | C25 | `validate-system-monitor-user-scenarios.mjs` | -| `screenshot` | Sc1–Sc4 | C25 | `validate-screenshot-user-scenarios.mjs` | - -**Backlog P0 overview** (C26+) : `nemo`, `firefox`, `terminal`, `librewriter`, `checklist` — voir [procedure-playbook-gnome-apps-overview.md §6](procedure-playbook-gnome-apps-overview.md#6-alma--tableau-overview-juin-2026). - ---- - -## 5. Gates - -```bash -# Un slot -node usr/lib/capsuleos/tools/validate--user-scenarios.mjs - -# Agrégée (12 contrats — validate-quality-all) -node usr/lib/capsuleos/tools/validate-gnome-user-scenarios-all.mjs - -node usr/lib/capsuleos/tools/validate-quality-all.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -Skin Linux touché → `sync-linux-skin-closure.mjs` avant push. - ---- - -## 6. Anti-patterns - -1. Scénario sans ground truth VM inventorié (**R-INV1**). -2. Sélecteurs inventés non présents dans le gabarit HTML. -3. Smoke qui ne passe que sur un vendor (toujours `--id` paramétrable). -4. Captures VM obligatoires quand D-Bus bloqué — préférer captures Capsule documentées. diff --git a/root/docs/procedure-store-replication-formelle.md b/root/docs/procedure-store-replication-formelle.md deleted file mode 100644 index 6415b890..00000000 --- a/root/docs/procedure-store-replication-formelle.md +++ /dev/null @@ -1,117 +0,0 @@ -# Procédure — réplication formelle magasin GNOME Software - -> **Contrat** : `etc/capsuleos/contracts/store-replication-chain.json` -> **Cohérence** : `etc/capsuleos/contracts/os-reproduction-coherence.json` -> **Convention** : [convention-reproduction-parfaite.md](convention-reproduction-parfaite.md) - -**Principe** : le ground truth **Fedora** (GS50) sert de référence slot `update_manager` pour tout le triplet GNOME ; les autres registres héritent via `byRegistry` et overlays pack — sans fallback silencieux (P11). - ---- - -## 1. Prédicats store - -| Symbole | Signification | Vérification | -|---------|---------------|--------------| -| **StoreG** | Ground magasin branché | `gnome-software-ground.js` + `gnome-software-store-content.json` + slots-manifest | -| **StoreΣ** | Catalogue structurel | `validate-store-installable-apps.mjs` | -| **StoreVc** | Captures Capsule multi-vues | `summary.softwareViewsCapsule ≥ 4` | -| **StoreVp** | Parité store classée | `capsuleParity.visualMatch` slot update_manager | - -**StoreΣ** (structure) ≠ **StoreVp** (parité parfaite). La poursuite du travail store n'est admissible que si **StoreG** ∧ grille argumentation documentée (C6). - -```mermaid -flowchart LR - H2[H2 socle] --> StoreG[StoreG ground] - StoreG --> StoreSigma[StoreΣ catalogue] - StoreG --> StoreVc[StoreVc captures] - StoreVc --> StoreVp[StoreVp parité] -``` - ---- - -## 2. Grille d'argumentation (slot update_manager) - -Appliquer les cinq dimensions du contrat cohérence sur chaque écart P0 : - -```bash -node usr/lib/capsuleos/tools/lab/enrich-apps-visual-investigation-parity.mjs --id linux-fedora -``` - -Renseigner `contentGaps[]` avec `dimension` ∈ {chrome, content, catalog, interaction, detail}. - ---- - -## 3. Chaîne opérationnelle - -### Orchestrateur (R-AUTO) - -```bash -node usr/lib/capsuleos/tools/lab/run-store-replication-chain.mjs --id linux-fedora --auto -# ou via pipeline unifié : -node usr/lib/capsuleos/tools/lab/run-capsule-pipeline.mjs --id linux-fedora --auto -``` - -Phases filtrées par `storeCampaign.campaignPhases` dans `lab-recipe-profiles.json`. - -### Ground Fedora (référence) - -```bash -node usr/lib/capsuleos/tools/validate-all.mjs -node usr/lib/capsuleos/tools/lab/collect-vm-apps-visual-investigation.mjs --id linux-fedora --filter P0 --write --ssh -node usr/lib/capsuleos/tools/generate-store-catalog.mjs -node usr/lib/capsuleos/tools/linux/sync-gnome-toolkit-pack.mjs -``` - -### Captures Capsule - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:8765 \ - node usr/lib/capsuleos/tools/lab/capture-capsule-software-views.mjs --id linux-fedora -``` - -### Clôture parité - -```bash -node usr/lib/capsuleos/tools/lab/enrich-apps-visual-investigation-parity.mjs --id linux-fedora -``` - -### Triplet (Alma / Rocky / AnduinOS) - -- Contenu : `gnome-software-store-content.json` → `byRegistry[registryId]` -- Chrome : `update_manager_gnome.base.css` (GS50) + profil `gs50-tabs` dans `gnome-software-store-content.json` -- **Profils GNOME actifs** (Fedora, Rocky, Alma, Ubuntu, AnduinOS) : chrome GS50 unifié - ---- - -## 4. Règles formelles (extrait) - -| Règle | Antécédents | Action | -|-------|-------------|--------| -| **R-STORE-G** | H₂ ∧ ¬StoreG | Brancher ground + sync pack | -| **R-STORE-VC** | StoreG ∧ ¬StoreVc | `capture-capsule-software-views` | -| **R-STORE-VP** | StoreVc ∧ ¬StoreVp | Enrichir parité + fermer gaps P0 | -| **R-STORE-CONTINUE** | StoreG ∧ StoreΣ ∧ grille documentée | Poursuite implémentation store | - ---- - -## 5. Gates - -```bash -node usr/lib/capsuleos/tools/validate-os-reproduction-coherence.mjs -node usr/lib/capsuleos/tools/validate-store-installable-apps.mjs -node usr/lib/capsuleos/tools/validate-software-user-scenarios.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - ---- - -## 6. État actuel (juin 2026) - -| Élément | Profils GNOME (Fedora, Rocky, Alma, Ubuntu, AnduinOS) | -|---------|--------------------------------------------------------| -| StoreG | ✅ branché (`gnome-software-ground.js` + contenu GS50) | -| StoreΣ | ✅ 11 apps (catalogue généré) | -| StoreVc | ✅ captures Fedora · partiel triplet | -| StoreVp | partial — parité VM store dédiée en cours | - -**Prochaine étape store** (après ce cadre) : inventaire VM Fedora store dédié, fermeture gaps chrome/content, assets icônes manquantes, `visual-parity-close`. diff --git a/root/docs/procedure-terminal-commandes.md b/root/docs/procedure-terminal-commandes.md deleted file mode 100644 index e9fdc530..00000000 --- a/root/docs/procedure-terminal-commandes.md +++ /dev/null @@ -1,181 +0,0 @@ -# Procédure — construction des commandes terminal - -> **Socle** : [convention-shell-global.md](convention-shell-global.md) (processus **I → C → R**, prédicats **Ti–TΣ**) -> **Contrats** : `etc/capsuleos/contracts/terminal-commands.json`, `terminal-replication-chain.json` -> **Gate** : `node usr/lib/capsuleos/tools/validate-terminal-commands.mjs` - -Objectif : expérience shell au plus près du réel — **noyau agnostique** dans `usr/lib/capsuleos/`, **extensions par famille de paquets**, **singularités par vendor**. Cette procédure couvre la phase **Conversion** ; l’**Investigation** et la **Réplication** sont dans la convention shell global. - ---- - -## 1. Architecture en trois couches - -```mermaid -flowchart TB - subgraph core [Noyau — Tc] - C[command-core.js] - R[command-registry.js] - E[executeCommand.js] - end - subgraph family [Famille — Tf] - D[debian.js] - RH[redhat.js] - S[suse.js] - A[arch.js] - end - subgraph vendor [Vendor — Tv] - V[terminal-vendor-extensions.js] - end - B[terminal-profile-builder.js] --> D - B --> RH - B --> S - B --> A - C --> B - D --> P[terminal-profile.js] - V --> P - P --> ACT[CAPSULE_TERMINAL_ACTIVE_COMMANDS] -``` - -| Couche | Fichier | Rôle | -|--------|---------|------| -| **Noyau** | `config/command-core.js` | Commandes exécutables sur la majorité des OS (POSIX, FS, réseau simulé, éditeurs) | -| **Famille** | `config/profiles/linux/{debian,redhat,suse,arch}.js` | Gestionnaires de paquets et outils propres à la famille | -| **Vendor** | `config/terminal-vendor-extensions.js` | Exceptions (ex. `cinnamon` sur Mint uniquement) | -| **Résolution** | `terminal-profile.js` | `CAPSULE_TERMINAL_PROFILE` (vendor) → famille + extensions vendor | - -Prédicats formels (couche conversion) : **Tc** (noyau), **Tf** (famille), **Tv** (vendor), **Te** (registre ↔ exécuteur). Clôture : **TΣ** = **Ti ∧ Tc ∧ Tf ∧ Te ∧ Ts ∧ Tr** — voir [convention-shell-global.md](convention-shell-global.md). - ---- - -## 2. Noyau (68 commandes curriculum) - -Défini dans le contrat `layers.core.commands` et `command-core.js` — voir aussi la matrice [`inventaires/terminal-command-coverage-matrix.json`](inventaires/terminal-command-coverage-matrix.json). - -**Règle** : toute commande ajoutée au noyau doit être pertinente sur **≥ 2 familles** Linux actives. Sinon → couche famille ou vendor. - -### Modules spécialisés (délégation depuis `executeCommand.js`) - -| Module | Rôle | -|--------|------| -| `terminal-listing.js` | Format/rendu `ls` multi-colonnes | -| `terminal-fs-ops.js` | `cp -r`, `rm -r`/`rm -rf` récursifs | -| `terminal-links.js` | `ln` / `ln -s` | -| `terminal-text-compare.js` | `diff`, `cmp` | -| `terminal-archives.js` | `zip`, `unzip`, `tar` | -| `terminal-processes.js` | `ps`, `top`, `kill`, `pgrep`, `killall`, `nice` (+ Moniteur système) | -| `terminal-network.js` | `wget`, `ip`, `netstat`, `ping`, `ssh`, `dig`, etc. (CapsuleOnly) | -| `terminal-users.js` | `chmod`, `chown`, `chgrp`, `adduser`, `passwd`, `chattr`, `lsattr` | -| `terminal-system-info.js` | `mount`, `umount`, `lscpu`, `lshw`, `shutdown`, `reboot` | -| `terminal-command-options.js` | Index Tab : flags et sous-commandes réellement implémentés | -| `terminal-package-managers.js` | `apt`, `dnf`, `yum`, `zypper`, `pacman`, `rpm`, `dpkg` | - -Complétion Tab : `common/terminal-completion.js` consomme `terminal-command-options.js` (phases commande → option/sous-commande → chemin). - ---- - -## 3. Extensions famille - -| Famille | Profil résolu | Commandes spécifiques | -|---------|---------------|------------------------| -| `debian` | Ubuntu, Mint, Pop!_OS… | `apt`, `apt-get`, `aptitude`, `apturl`, `dpkg` | -| `redhat` | Rocky, Alma, Fedora | `dnf`, `yum`, `rpm` | -| `suse` | openSUSE | `zypper`, `rpm` | -| `arch` | (futur skin Arch) | `pacman` | - -Normalisation vendor → famille : `terminal-profile.js` (`rocky`/`alma`/`fedora` → `redhat`, etc.). - ---- - -## 4. Singularités vendor - -Déclarées dans `terminal-vendor-extensions.js` et le contrat `layers.vendorExtensions` : - -| Vendor | Commandes | -|--------|-----------| -| `mint` | `cinnamon` | - -Résolues à l'exécution via `CAPSULE_TERMINAL_PROFILE` (hint skin), **sans** étendre toute la famille Debian. - ---- - -## 5. Gestionnaires de paquets (profondeur pédagogique) - -Module : `terminal-package-managers.js` (chargé avant `executeCommand.js`). - -État session : `state.packageState.installed` (Set) — **non persisté** à la fermeture fenêtre. - -| Famille | Commandes | Sous-commandes simulées | -|---------|-----------|-------------------------| -| Debian | `apt`, `apt-get`, `aptitude`, `apturl`, `dpkg` | `update`, `upgrade`, `install`, `remove`, `search`, `show` ; `dpkg -l`, `dpkg -i` | -| Red Hat | `dnf`, `rpm` | `check-update`, `install`, `remove`, `search`, `info` ; `rpm -qa`, `rpm -qi` | -| SUSE | `zypper`, `rpm` | `refresh`, `update`, `install`, `remove`, `search` | -| Arch | `pacman` | `-Syu`, `-S`, `-Ss`, `-Q` | - -Exemples Rocky : `dnf check-update` · `dnf install vim-enhanced` · `rpm -qa` - ---- - -## 6. Redirections et pipelines - -Module : `terminal-shell-parse.js` (avant `executeCommand.js`). - -| Syntaxe | Comportement | -|---------|--------------| -| `cmd > fichier` | Écrit la sortie dans le fichier (écrase) + sync Nautilus (`touch`) | -| `cmd >> fichier` | Ajoute la sortie au fichier | -| `cmd1 \| cmd2` | Transmet les lignes de sortie en entrée (`stdin`) à `grep`, `cat`, `head`, `tail`, `sort`, `wc` | - -Exemples : `echo Bonjour > notes.txt` · `ls \| grep txt` · `cat log.txt \| sort` - ---- - -## 7. Ajouter une commande - -| Étape | Action | -|-------|--------| -| 1 | Choisir la couche : **core** / **family** / **vendor** | -| 2 | `command-registry.js` — `{ help, examples }` | -| 3 | `executeCommand.js` — `case 'cmd':` (+ `CapsuleUserFs.syncFromTerminal` si mutation FS) | -| 4 | Mettre à jour le contrat JSON (`terminal-commands.json`) | -| 5 | Mettre à jour la couche JS (`command-core.js`, profil famille, ou `terminal-vendor-extensions.js`) | -| 6 | `node usr/lib/capsuleos/tools/validate-terminal-commands.mjs` | -| 7 | Si mutation FS : scénario dans `fs-sync-playbook.json` | - ---- - -## 8. Ordre de chargement (index.html) - -```html - - - - - - - - - - - - - - - - - - - - - -``` - ---- - -## 9. Références - -- [convention-shell-global.md](convention-shell-global.md) — socle I → C → R, agnosticité noyau, checklist nouvel OS -- [convention-terminal-rendu-sortie.md](convention-terminal-rendu-sortie.md) — **To**, **Tb**, indentation / couleurs / bashrc -- [convention-rafraichissement-vues.md](convention-rafraichissement-vues.md) — sync FS terminal ↔ Nautilus -- [inventaires/terminal-command-coverage-matrix.json](inventaires/terminal-command-coverage-matrix.json) — matrice curriculum ↔ statut implémentation -- [fs-sync-playbook.json](inventaires/fs-sync-playbook.json) -- `usr/lib/capsuleos/shells/shared/terminal/README.md` diff --git a/root/docs/processus-branchement-noyau.md b/root/docs/processus-branchement-noyau.md deleted file mode 100644 index 6fa4640a..00000000 --- a/root/docs/processus-branchement-noyau.md +++ /dev/null @@ -1,186 +0,0 @@ -# Processus de branchement noyau ↔ skin - -> **Date** : 2026-06-08 · **Contexte** : passe intégrale clone Mint + validation moteur de clonage -> Complète [raccordement-noyau-os.md](raccordement-noyau-os.md) · [paradigme-toolkit-de.md](paradigme-toolkit-de.md) · [window-chrome-contexts.md](window-chrome-contexts.md) - -Le noyau CapsuleOS (`usr/lib/capsuleos/`) expose des **comportements partagés** ; chaque skin **branche** via profil (`skin.profile.json`), hooks DOM (`body#mint`), et modules skin (`content/mint-tray.js`). - -**Règle** : un comportement ne doit être forké dans `home/` que pour le **token visuel** ou la **structure chrome** propre au vendor. La logique WM, panel, menus contextuels explorateur reste dans le noyau avec garde toolkit. - ---- - -## Table principale — comportement → noyau → hook skin - -| Comportement | Module noyau | Hook skin / profil | Exemple Mint | Anti-pattern | -|--------------|--------------|-------------------|--------------|--------------| -| **Chargement apps (embed)** | `contentLoader.js` | `CAPSULE_FORCE_APP_EMBED`, `CAPSULE_EMBED_SKIN_KEY`, `CAPSULE_STATIC_SKIN_SLOTS` | `mint` : skip `mainMenu.base.css`, embed forcé | Fork `contentLoader` par distro | -| **Menu principal** | `mainMenu.js` + données toolkit | `mainMenu-data-cinnamon.js` (Cinnamon) · `overview.js` (GNOME) | Grille 600×480 · `mainMenu.skin.css` | `mainMenu-data.js` GNOME sur Mint | -| **Panel / lanceurs** | `taskbar-launcher-state.js`, `taskbar-window-list.js` | CSS `mint-panel.css` · HTML `mint-panel__*` | Menu + grouped-window-list + tray | Dupliquer logique running-link dans `home/` | -| **Zone tray** | `volume.js`, `calendar-popover.js` (partagés) | `content/mint-tray.js`, `mint-tray-popovers.css` | 10 applets VM ordonnés | Importer `mint-tray.js` dans Rocky | -| **WM — drag / resize** | `common/capsule-window.js`, `window-drag.js` | `CAPSULE_WINDOW_CONTEXT` dans profil | `requireHeader: true`, `edgeTiling: true` | Copier `resizeWindow.js` dans skin | -| **WM — Muffin** | `cinnamon-window-behaviors.js` | Chargé si `body#mint` | Super+↑/↓, dblclick maximise | `gnome-window-behaviors.js` sur `#mint` | -| **WM — GNOME** | `gnome-window-behaviors.js` | Chargé Rocky/Ubuntu uniquement | — | Charger sur Mint | -| **Alt+Tab** | `cinnamon-alt-tab.js` (Cinnamon) · overview GNOME (autre chemin) | `alt-tab.css` skin | Vignettes + icônes lanceurs Mint | Alt+Tab GNOME sur Cinnamon | -| **Chrome fenêtre** | `contracts/window-chrome-contexts.json` | `cinnamon-window-chrome.css` · `data-window-chrome-toolkit` | Muffin 3 boutons droite | Cluster `toolkit-gnome` sur apps Mint | -| **Explorateur — gabarit** | `contentLoader` → `CAPSULE_EXPLORER_TEMPLATE` | `nemo` (Mint) · `nemo-gnome` (Rocky) · `dolphin` (KDE) | Slot `data-link="nemo"` | `nautilus` slot séparé | -| **Explorateur — icônes** | `explorer-icon-base.js` | Remap par `isNautilusGnomeTemplate()` / toolkit | `cinnamon/elements/nemo` | `gnome/elements/nemo` sur Mint | -| **Clic droit explorateur** | `fileExplorerContextMenu.js` | Dispatch runtime | Nemo dynamique (Mint) | Menu Nemo unique sans garde Nautilus | -| **Clic droit bureau** | `desktop-context-menu.js` | DOM `#desktop-context-menu` dans skin | `isMintDesktop()` → menu Cinnamon | Menu bureau GNOME sur Mint | -| **Terminal CLI** | `shells/linux/terminal/` (agnostique) | `CAPSULE_TERMINAL_PROFILE: debian` | gnome-terminal chrome CSS | Fork moteur Ptyxis dans skin | -| **Assets** | `capsule-resource.js`, manifest | `assetsBase`, `toolkitPack`, `vendorPack` | `./assets/images/toolkits/cinnamon/` | Chemins `../../../usr/` en runtime JS | -| **Paramètres** | `cinnamon-settings.js` (Cinnamon) · `themes_gnome` (GNOME) | Slot `themes` | 30 panneaux cinnamon-settings 6.6 | `themes_gnome.html` sur Mint | - ---- - -## Branchement détaillé — clic droit explorateur - -### Nemo (Mint / Cinnamon) - -| Étape | Détail | -|-------|--------| -| Profil | `CAPSULE_EXPLORER_TEMPLATE: "nemo"` | -| Gabarit | `usr/share/capsuleos/linux/explorers/nemo.html` | -| Détection | `!isNautilusGnomeTemplate()` | -| Menu | `bindNemoContextMenu` — menu **dynamique** `.nemo-app__context-menu` (7 entrées VM) · overlay `position: fixed` hors flux fenêtre | -| Skin | `style/apps/nemo.skin.css` — tokens `--nemo-*` | - -### Nautilus (Rocky / Ubuntu / Fedora — GNOME) - -| Étape | Détail | -|-------|--------| -| Profil | `CAPSULE_EXPLORER_TEMPLATE: "nemo-gnome"` | -| Gabarit | `shell-gnome.html` + `#nemo-context-menu` statique | -| Détection | `isNautilusGnomeTemplate()` — classe `.nautilus-app` | -| Menu | `bindNautilusGnomeContextMenu` — profils `item` / `background` / `trash` | -| Skin | `style/apps/nautilus.skin.css` — tokens Nautilus VM | -| Extensions | `fileExplorerNautilus*.js` chargés si GNOME | - -**Anti-pattern** : remplacer `bindNautilusGnomeContextMenu` par le menu Nemo Mint sans test Rocky — régression P0 observée (commit `00816fb`). - -### Dispatch renforcé (pallier post-9, commit `74ba268` — réordonné 2026-06-10) - -| Garde | Rôle | -|-------|------| -| `isNemoCinnamonScope` **en premier** | Mint bindé avant toute tentative Nautilus — évite le flag partagé `nemoContextMenuInit` | -| Exclusion `.dolphin-app` dans `isNemoCinnamonScope` | Dolphin partage `.nemo-app` sans `.nautilus-app` — ne pas router vers le menu dynamique Nemo | -| Exclusion `.nemo-app` dans `isNautilusGnomeScope` | Évite bind Nautilus sur gabarit Nemo pur | -| Repli `CapsuleExplorerRegistry.isNemoFamily()` | Scope Nemo même si gabarit pas encore injecté | -| Délégation sur slot + reset `nemoContextMenuInit` | Course `contentLoader` / fenêtres secondaires (`capsule:slot-injected`) | - -**Anti-régression** : ne pas réintroduire le fall-through Nautilus→Nemo (commit `00816fb`) ni inverser l’ordre sans garde Dolphin. - -### KDE Dolphin - -| Étape | Détail | -|-------|--------| -| Profil | `CAPSULE_EXPLORER_TEMPLATE: "dolphin"` | -| Gabarit | `dolphin/shell.html` + `#nemo-context-menu.dolphin-context-menu` | -| Détection | `isDolphinScope()` — classe `.dolphin-app` | -| Menu | `bindNautilusGnomeContextMenu` (profils item-folder / item-file / background / trash) | -| Extensions | `fileExplorerDolphin.js` · `ensureExplorerAdvancedChrome` si fragment manquant | - -**Gate obligatoire** après patch : `run-cross-regression-gates.mjs` — voir [moteur-clonage-experience.md](moteur-clonage-experience.md). - ---- - -## Branchement — menu, panel, tray - -### Menu Démarrer - -```text -Cinnamon (Mint) - mainMenu-data-cinnamon.js → données 97 apps - mainMenu.js (noyau) → logique ouverture / recherche - mainMenu.skin.css (skin) → layout 20/25/55 %, tokens Mint-Y - -GNOME (Rocky/Ubuntu) - overview.js + dash → pas de popup menu Cinnamon - gnome-shell/*.css → dock / overview -``` - -Hook Mint : `CAPSULE_STATIC_SKIN_SLOTS: ["mainMenu"]` — CSS injecté statiquement, pas de `mainMenu.base.css`. - -### Panel - -```text -Noyau partagé - taskbar-launcher-state.js → running-link / active-link / minimize - taskbar-window-list.js → grouped-window-list DOM - -Hook Mint - mint-panel.css → hauteur 40px, régions sémantiques - index.html → structure mint-panel__menu-btn | __window-list | __tray -``` - -### Tray - -```text -Noyau partagé - volume.js, calendar-popover.js → logique volume / horloge - -Hook Mint - content/mint-tray.js → popovers XApp, notifications, réseau… - mint-tray-popovers.css → position bottom: calc(var(--taskbar-height) + offset) -``` - -Token : `--taskbar-height` réassigné à `--mint-panel-height` dans `mint-y-dark-aqua-tokens.css` (évite bleed portal 1.25×head). - -### Carte panel Mint — applet → noyau → skin (Cinnamon) - -| Applet panel | Module noyau | Hook skin Mint | Test smoke | -|--------------|--------------|----------------|------------| -| Menu principal | `mainMenu.js` · `openWindowByDataLink('mainMenu')` | `a.mint-panel__menu-btn[data-link="mainMenu"]` · `mainMenu.skin.css` | `run-ui-state-effects-pass --shell mainMenu` | -| Lanceurs épinglés (nemo, mintinstall, terminal) | `capsule-window-shell.js` · `taskbar-launcher-state.js` | `content/mint-panel-pinned.js` (fallback) · `mint-panel.css` | `run-capsule-panel-browser` 6/6 | -| grouped-window-list | `taskbar-window-list.js` (slots ≠ épinglés) | CSS `mint-panel.css` uniquement | `run-ui-state-effects-pass --shell panel` (firefox) | -| Bouclier mises à jour | `update-manager.js` · `[data-update-manager-tray]` | `mint-tray.js` ferme popovers tray | `smoke-mint-tray` · `smoke-mint-update-manager` | -| Clavier (fr/en) | — (stub Cinnamon) | `mint-tray.js` · `#mint-tray-popover-keyboard` | `smoke-mint-tray` | -| Réseau | pattern `volume.js` (popover) | `mint-tray.js` · `#mint-tray-popover-network` | `smoke-mint-tray` · `run-ui-state-effects-pass --shell tray` | -| Volume | `volume.js` · `#tray-sound-btn` | `volume-popover.css` | `smoke-mint-tray` | -| Horloge / calendrier | `calendar-popover.js` · `date.js` | `calendar-popover.css` | `run-ui-state-effects-pass --shell clock` | -| Verrou / déconnexion / arrêt (menu) | `mainMenu.js` · `#menu-btn-lock/logout/power` | gabarit `mainMenu.html` footer | menu footer clic → `CapsulePickReturn` | - -Applets VM masquées sur clone (`mint-tray--vm-collapsed` + `hidden`) : XApp, notifications, imprimantes, amovibles, alimentation tray, cornerbar — popovers présents mais non testés tant que masqués. - ---- - -## Branchement — WM et Alt+Tab - -| Toolkit | Module WM | Garde | Raccourcis | -|---------|-----------|-------|------------| -| Cinnamon | `cinnamon-window-behaviors.js` | `body#mint` \|\| `CAPSULE_EMBED_SKIN_KEY==='mint'` | Super+↑↓, dblclick titre | -| Cinnamon | `cinnamon-window-effects.js` | idem | Fade open/close | -| Cinnamon | `cinnamon-alt-tab.js` | idem | Alt+Tab vignettes | -| GNOME | `gnome-window-behaviors.js` | pas sur Mint | Mutter / overview | -| Tous SSD | `edge-tiling.js` | profil `edgeTiling: true` | Snap bords | - -Provider chrome : `etc/capsuleos/contracts/window-chrome-contexts.json` → `cinnamon` : `cinnamon-window-behaviors.js`, drag `unified-titlebar`. - ---- - -## Flux de décision agent - -```mermaid -flowchart TD - A[Comportement à cloner depuis VM] --> B{Déjà dans noyau partagé ?} - B -->|oui| C{Spécifique toolkit ?} - B -->|non| D[Ajouter noyau + garde isToolkit] - C -->|oui| E[Hook skin : CSS / DOM / content/*.js] - C -->|non| F[Token CSS skin uniquement] - E --> G[validate-toolkit-paradigm --id] - F --> G - D --> G - G --> H[compare-os-parity / smoke slot] -``` - ---- - -## Gates branchement - -```bash -node usr/lib/capsuleos/tools/validate-toolkit-paradigm.mjs --all -node usr/lib/capsuleos/tools/validate-window-chrome-contexts.mjs -node usr/lib/capsuleos/tools/validate-interactions-contract.mjs -node usr/lib/capsuleos/tools/lab/compare-os-parity.mjs --id linux-mint --scenario panel-checklist -``` - -Voir aussi : [recette-clone-mint-integral.md](recette-clone-mint-integral.md) · [inventaires/toolkit-cloisonnement-audit.md](inventaires/toolkit-cloisonnement-audit.md). diff --git a/root/docs/raccordement-noyau-os.md b/root/docs/raccordement-noyau-os.md deleted file mode 100755 index 635d95e4..00000000 --- a/root/docs/raccordement-noyau-os.md +++ /dev/null @@ -1,32 +0,0 @@ -# Raccordement des OS au noyau CapsuleOS - -## Vue d’ensemble - -| Famille | Entrée HTML | JS noyau | Thèmes / tokens CSS | Assets images | -|---------|-------------|----------|---------------------|---------------| -| **Linux** (8 skins) | `home/…/index.html` ou façade `OS/linux/families/…` + `` → skin | `usr/lib/capsuleos/shells/linux/*`, `common/capsule-window.js` | `home/…/style/imports.css` → `usr/share/capsuleos/themes/linux/` + apps `Dossier personnel.base.css` | `./assets/…` + `capsule-resource.js` | -| **Windows** (11 versions) | `OS/windows/versions//index.html` | `OS/windows/kernel/js/*`, `common/capsule-window.js` | `versions//style/imports.css` → `themes/global` + `kernel/style/` | chemins physiques `usr/share/capsuleos/assets/…` | -| **Android** | `OS/android/index.html` | `OS/android/js/*` | `OS/android/style/` (local) | physiques | -| **iOS** | `OS/ios/15/index.html` | `OS/ios/15/js/*` | `OS/ios/15/style/` | physiques | -| **macOS Sonoma** | `OS/macos/sonoma/index.html` | scripts locaux + fenêtres | `OS/macos/sonoma/style/` | physiques | - -Registre canonique : `etc/capsuleos/os-registry.json` · génération portail : `build-pick-os.mjs`. - -## Linux — double URL (façade + skin) - -- Le portail ouvre la **façade** (`OS/linux/families/…/index.html`). -- `` réécrit les liens vers le **skin** sous `home/`. -- Scripts noyau : `../../../usr/lib/capsuleos/shells/linux/…` (résolus via la base → racine du dépôt). -- Boot assets : `capsule-assets-manifest.js` → `capsule-resource.js` → `capsule-skin-boot.js`. - -## Windows — noyau `OS/windows/kernel/` - -- Pas de `` : chemins relatifs depuis `versions//`. -- `@import` dans `style/imports.css` : **5×** `../` jusqu’à la racine, puis `usr/share/capsuleos/themes/…` (profondeur `versions//style/`). -- Kernel chrome : `../../../kernel/style/` → `OS/windows/kernel/style/`. - -## Piège corrigé (juin 2026) - -Les `@import` vers `usr/share/capsuleos/themes/` utilisaient souvent **4×** `../` alors que le fichier CSS est à **5 ou 6 niveaux** de profondeur → `reset.css` / `variables-linux.css` introuvables, page sans mise en forme. - -Gate : `node usr/lib/capsuleos/tools/fix-theme-import-depths.mjs` puis `validate-css-asset-urls.mjs`. diff --git a/root/docs/recette-clone-mint-integral.md b/root/docs/recette-clone-mint-integral.md deleted file mode 100644 index bf545908..00000000 --- a/root/docs/recette-clone-mint-integral.md +++ /dev/null @@ -1,155 +0,0 @@ -# Recette clone Mint — passe intégrale (moteur de clonage) - -> **Date** : 2026-06-08 · **registryId** : `linux-mint` · **VM** : `` -> **Objectif** : valider de bout en bout le moteur de clonage Cinnamon et documenter le cloisonnement toolkit. -> **Coordination** : passe Rocky parallèle (`91a017bf`) — périmètre Mint uniquement. -> **Dernière exécution recette** : 2026-06-08T14:15Z — pallier **8** · rapport [`linux-mint-clone-conformity-report.md`](inventaires/linux-mint-clone-conformity-report.md) - -**Lecture obligatoire** : [convention-reproduction-os.md](convention-reproduction-os.md) · [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) · [agent-validation-discipline.md](agent-validation-discipline.md) · [paradigme-toolkit-cinnamon.md](paradigme-toolkit-cinnamon.md) - ---- - -## Checklist recette - -### Phase 0 — Baseline - -| Étape | Commande | Résultat | -|-------|----------|----------| -| Brief registre | `print-agent-brief.mjs linux-mint` | ✅ | -| H₂ baseline | `validate-all.mjs` | ✅ exit 0 (189 avert. JSON vanilla — hors zone Mint) | -| Paradigme toolkit | `validate-toolkit-paradigm.mjs --id linux-mint` | ✅ | -| Assets clone | `validate-clone-assets.mjs --id linux-mint` | ✅ (zones, profils, 112 icônes cinnamon/apps) | -| Inventaire VM | `collect-mint-inventory.mjs --write-doc` | ✅ JSON `2026-06-08T14:07:17Z` + MD + catalogue 101 apps | - -### Phase 1 — Shell (panel / menu / bureau) - -| Étape | Commande | Résultat | -|-------|----------|----------| -| Géométrie shell | `measure-mint-shell-geometry.mjs` | ✅ maxΔ **0,7 px** (≤1) · menu 600×480 gap 2 px | -| Panel browser | `run-capsule-panel-browser.mjs` sur `:5501` | ✅ **6/6** | -| Parité VM | `compare-os-parity.mjs --scenario panel-checklist --capsule-json /tmp/capsule-panel.json` | ✅ **6/6** VM + Capsule | -| UI state effects | `run-ui-state-effects-pass.mjs --shell … --write` | ✅ **8/8** (altTab + windowChrome Π=100) · + `smoke-mint-menu-cs-routing` | -| Captures baseline | `root/docs/inventaires/captures/linux-mint/clone-baseline/` | ✅ `metrics.json` à jour | - -### Phase 2 — Parité index - -| Étape | Commande | Résultat | -|-------|----------|----------| -| Apps prioritaires | `run-app-parity-pass.mjs --id linux-mint --priority` | ✅ 8/8 slots (nemo, firefox, text_editor, calculator, file_roller, update_manager, mintinstall, themes) | -| Π_global | `linux-mint-parity-index.json` | ✅ **98** (`status_global: ok`) | -| layoutMetrics shell | panel Π=100 · menu Π=92 · tray Π=100 | ✅ voir indice § `shell` | - -### Phase 3 — Cloisonnement audit - -| Critère | État | Doc | -|---------|------|-----| -| contentLoader embed Cinnamon | ✅ `CINNAMON_PANEL_MENU_SKINS` + `CAPSULE_FORCE_APP_EMBED` | [processus-branchement-noyau.md](processus-branchement-noyau.md) | -| Chemins toolkit cinnamon | ✅ `toolkits/cinnamon/` menu + panel | [paradigme-toolkit-cinnamon.md](paradigme-toolkit-cinnamon.md) | -| `mint-panel.css` unique | ✅ pas de `footer.css` / `panel-windows.css` legacy | clone-status § panel v3 | -| `mainMenu-data-cinnamon.js` | ✅ 97 icônes cinnamon/apps · **52/52** entrées `themes` + `csPanel` (TIER-C-THEMES) | audit cinnamon-vs-gnome · [`ground-truth-cinnamon.md`](inventaires/ground-truth-cinnamon.md) | -| `fileExplorerContextMenu` scopé | ✅ branche Nemo vs Nautilus restaurée | [toolkit-cloisonnement-audit.md](toolkit-cloisonnement-audit.md) | -| CapsuleResource `./assets/` | ✅ profil + boot manifest | skin.profile.json | -| Cross-check Rocky/Ubuntu | ✅ aucune import Mint | grep `home/Debian/Mint` → 0 | - -**Score cloisonnement** : **94/100** — 2 écarts P2 documentés (voir § Non-conformes résiduels). - -### Phase 4 — Branching process doc - -| Livrable | Fichier | -|----------|---------| -| Table comportement → noyau → hook skin | [processus-branchement-noyau.md](processus-branchement-noyau.md) | -| Matrice DE multi-toolkit | [paradigme-toolkit-de.md](paradigme-toolkit-de.md) | - -### Phase 5 — Gaps & fixes - -| Gap | Sévérité | Action passe | -|-----|----------|--------------| -| Régression menu clic droit Nautilus (00816fb) | **P0 Rocky** | ✅ `bindFileExplorerContextMenu` dispatch Nautilus/Nemo | -| Bureau Mint — `#desktop { pointer-events: none }` | **P0 Mint** | ✅ `style.css` + repli `body#mint` dans `desktop-context-menu.js` | -| Nemo corbeille — profils trash/sidebar absents | **P1 Mint** | ✅ `bindNemoContextMenu` profils trash + smoke dédié | -| Fuites `toolkits/gnome/apps` dans Mint | P0 Mint | ✅ corrigé b5e39bc + gate paradigm | -| `--taskbar-height` portal hérité | P1 | ✅ alias `--mint-panel-height: 40px` dans tokens | -| Chemins physiques `../../../../usr/` en CSS | P2 | Documenté — migration `./assets/` différée | -| Slots CapsuleOnly (`librewriter`, `checklist`) | CapsuleOnly | Documenté P1 — hors clôture VM | - -### Phase 6 — Clôture - -| Étape | Commande | Résultat | -|-------|----------|----------| -| Sync vues | `sync-all-views.mjs` | ✅ (à relancer avant push) | -| Gate zone Mint | `validate-all.mjs` + `validate-toolkit-paradigm.mjs --all` | ✅ | -| **Clic droit P0/P1/P2 bureau** | `smoke-mint-context-menus.mjs` sur `:5501` | ✅ matrice [`context-menus.json`](inventaires/interactions/linux-mint/context-menus.json) incl. `desktop.icon` | -| **Nemo menu étape 2** | `bindNemoContextMenu` + `fileExplorerNemoOps.js` | ✅ fond liste (document, terminal, tout sélectionner) ; fichier (ouvrir avec…, renommer, corbeille) ; sous-menus flyout + smoke `nemo.list.*.submenu` ; checklist `print-mint-context-menu-checklist.mjs` | -| **P4 batch #33** | `smoke-mint-p4-batch33.mjs` | ✅ baobab · Pix · moniteur système (menu Cinnamon) | -| **Bureau étape 3** | `mint-desktop-icons.js` + `#desktop-icon-context-menu` | ✅ Dossier personnel + Corbeille visibles ; menu Ouvrir/Couper/Copier/Renommer/Supprimer/Propriétés | -| **Barre titre étape 4** | `cinnamon-window-behaviors.js` + `#muffin-window-context-menu` | ✅ Réduire/Agrandir/Fermer/Toujours au premier plan ; smoke `window.title` ; **R-CIN-CTX4** | -| **Panel étape 5** | `mint-panel-context-menu.js` + `#mint-panel-context-menu` | ✅ Ajouter des applets / Configurer le panel → cinnamon-settings ; smoke `panel.background` ; **R-CIN-CTX5** | -| **Menu étape 7 — TIER-C-THEMES** | `smoke-mint-menu-cs-routing.mjs` + [`menu-cs-routing.json`](inventaires/interactions/linux-mint/menu-cs-routing.json) | ✅ **52/52** entrées `themes` → `csPanel` · **R-CIN-TIER-C** | -| État réplication | `linux-mint-replication-state.json` | ✅ pallier **8** · Π_global 98 · non-conformités listées | -| Rapport conformité | `linux-mint-clone-conformity-report.md` | ✅ matrice VM↔clone | - ---- - -## Conformes (Mint) - -- **Embed** : `contentLoader.js` — skip `mainMenu.base.css`, embed forcé, branche `mint` panel menu. -- **Toolkit paths** : `toolkits/cinnamon/header|elements|apps`, `icons/cinnamon`, `vendors/mint/panel`. -- **Panel** : `mint-panel.css` — régions `mint-panel__*` (menu, window-list, tray, favoris). -- **Menu** : `mainMenu-data-cinnamon.js` + `mainMenu.skin.css` statique (`CAPSULE_STATIC_SKIN_SLOTS`). -- **Nemo context menu** : `bindNemoContextMenu` — menu dynamique `.nemo-app__context-menu`, pas `#nemo-context-menu` GNOME. Cycle VM → matrice → impl → `smoke-mint-context-menus.mjs` → gap map `--write`. -- **WM** : `cinnamon-window-behaviors.js`, `cinnamon-alt-tab.js`, `cinnamon-window-effects.js` — garde `isMintDesktop()`. -- **Assets runtime** : `capsule-resource.js` → `./assets/...` (profil `assetsBase`). - -## Non-conformes résiduels (documentés, non bloquants) - -| Anti-pattern | Fichier(s) | Niveau | Justification | -|--------------|------------|--------|---------------| -| Classes DOM `gnome-*` sur apps GTK partagées | `terminal.skin.css`, `calculator.skin.css`, `screenshot.skin.css` | Exception | Apps upstream GNOME sur Mint — voir paradigme § exceptions | -| Slots `librewriter`, `checklist` | `index.html` | CapsuleOnly | Pédagogie — absents VM panel | -| `ctx` menu Π=50 | `linux-mint-parity-index.json` | P2 | Menu contextuel apps secondaires — hors P0 shell | - ---- - -## Checkpoint pré-push Nemo (obligatoire avant commit/push remote) - -Point d'étape auto-critique — **NO-GO** si un smoke pré-campagne régresse ou **P0 > 0**. - -| # | Étape | Commande | -|---|--------|----------| -| 1 | Gate globale | `node usr/lib/capsuleos/tools/validate-all.mjs` | -| 2 | Smokes Nemo (tous exit 0) | `CAPSULE_MINT_URL=http://127.0.0.1:5501/OS/linux/families/debian/mint/index.html node usr/lib/capsuleos/tools/lab/smoke-mint-context-menus.mjs` · `smoke-mint-nemo.mjs` | -| 3 | Campagne recette | `run-mint-nemo-context-campaign.mjs` | -| 4 | Comparateur VM | `compare-mint-nemo-context-campaign.mjs --write` | -| 5 | Rapport checkpoint | Rédiger [`nemo-fidelity-checkpoint.md`](inventaires/interactions/linux-mint/nemo-fidelity-checkpoint.md) (date, écarts avant/après, risques, verdict GO/NO-GO) | -| 6 | Clôture skin (si `home/` touché) | `node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs linux-mint` | - -Dernier checkpoint : **GO** — 2026-06-09 · 0 P0 · 0 P1 campagne + cross-diff VM. - ---- - -## Checkpoint pré-push App P1 (modèle généralisé — pilote `file_roller`) - -Même logique **RecF → RecA** que Nemo : matrice scénarios → campagne Playwright → **Rv** sur actions documentées → verdict GO/NO-GO. - -| # | Étape | Commande | -|---|--------|----------| -| 1 | H₂ | `node usr/lib/capsuleos/tools/validate-all.mjs` | -| 2 | Checklist matrice | `node usr/lib/capsuleos/tools/lab/print-mint-app-p1-checklist.mjs file_roller` | -| 3 | Campagne App P1 | `CAPSULE_MINT_URL=http://127.0.0.1:5501/OS/linux/families/debian/mint/index.html node usr/lib/capsuleos/tools/lab/smoke-mint-file-roller-fidelity.mjs` | -| 4 | Non-régression Nemo | `smoke-mint-context-menus.mjs` · `smoke-mint-nemo.mjs` | -| 5 | Checkpoint | [`file-roller-fidelity-checkpoint.md`](inventaires/interactions/linux-mint/file-roller-fidelity-checkpoint.md) | -| 6 | Clôture skin (si `home/` touché) | `sync-linux-skin-closure.mjs linux-mint` | - -**Règle formelle** : **AppP1_FR ∧ Rv₁** pour le slot · gate **R-CIN-APP-P1-FR** dans `cinnamon-ground-truth-chain.json`. - -Prochaines apps P1 : dupliquer `{slot}-scenarios.json` + adapter campagne (librecalc, visionneurs…). - ---- - -## Références - -- Statut clone : [inventaires/linux-mint-clone-status.md](inventaires/linux-mint-clone-status.md) -- État réplication : [inventaires/linux-mint-replication-state.json](inventaires/linux-mint-replication-state.json) -- Indice parité : [inventaires/linux-mint-parity-index.json](inventaires/linux-mint-parity-index.json) -- Audit GNOME vs Cinnamon : [inventaires/linux-mint-cinnamon-vs-gnome-audit.md](inventaires/linux-mint-cinnamon-vs-gnome-audit.md) -- Cloisonnement : [toolkit-cloisonnement-audit.md](toolkit-cloisonnement-audit.md) diff --git a/root/docs/recette-clone-rocky-regression.md b/root/docs/recette-clone-rocky-regression.md deleted file mode 100644 index 54b1aed6..00000000 --- a/root/docs/recette-clone-rocky-regression.md +++ /dev/null @@ -1,113 +0,0 @@ -# Recette régression — Rocky Linux (GNOME) - -> **Registry** : `linux-rocky` · **Skin** : `home/RedHat/Rocky/` · **Toolkit** : GNOME / Nautilus -> **Paradigme** : [paradigme-toolkit-de.md](paradigme-toolkit-de.md) · **Audit** : [inventaires/toolkit-cloisonnement-audit.md](inventaires/toolkit-cloisonnement-audit.md) - ---- - -## Prérequis - -```bash -python3 -m http.server 5501 --bind 127.0.0.1 -``` - -URLs de test : - -| Surface | URL | -|---------|-----| -| Skin (vérité) | `http://127.0.0.1:5501/home/RedHat/Rocky/index.html` | -| Façade pick-os | `http://127.0.0.1:5501/OS/linux/families/redhat/rocky/index.html` | - ---- - -## Checklist gates (obligatoire) - -- [ ] `node usr/lib/capsuleos/tools/validate-all.mjs` → exit 0 -- [ ] `node usr/lib/capsuleos/tools/validate-toolkit-paradigm.mjs --id linux-rocky` -- [ ] `node usr/lib/capsuleos/tools/validate-clone-assets.mjs --id linux-rocky` -- [ ] `node usr/lib/capsuleos/tools/validate-toolkit-chrome-isolation.mjs` -- [ ] `node usr/lib/capsuleos/tools/validate-skin-vendor-isolation.mjs` -- [ ] Spot-check multi-DE : `node usr/lib/capsuleos/tools/validate-toolkit-paradigm.mjs --all` - ---- - -## Checklist smokes Playwright - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node usr/lib/capsuleos/tools/lab/smoke-gnome-nautilus-interactions.mjs --profile=linux-rocky -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node usr/lib/capsuleos/tools/lab/smoke-gnome-nautilus-routing.mjs --profile=linux-rocky -``` - -Vérifications couvertes par `smoke-gnome-nautilus-interactions` : - -- [ ] Ouverture slot `nemo` (gabarit `nemo-gnome`, classe `.nautilus-app--n47`) -- [ ] Sidebar : Récent, Corbeille, Bureau, Favoris (`data-link`) -- [ ] Menu contextuel `#nemo-context-menu` initialisé (`nemoContextMenuInit`) -- [ ] Headerbar : fil d'Ariane, recherche -- [ ] Nouveau dossier, raccourcis clavier, navigation sidebar - ---- - -## Checklist fonctionnelle manuelle - -### Nautilus (slot `nemo`) - -- [ ] Clic droit grille → menu contextuel GNOME (pas menu Nemo Cinnamon) -- [ ] Clic droit corbeille sidebar → profil `trash` -- [ ] Recherche headerbar -- [ ] Chrome fenêtre Adwaita (headerbar, pas Muffin) - -### Shell GNOME - -- [ ] Top bar + horloge → calendrier ancré sous barre (`--fedora-top-bar-height`) -- [ ] Bouton Aperçu → overview + dash -- [ ] Tray : paramètres rapides / volume - -### Apps - -- [ ] Terminal (Ptyxis chrome) -- [ ] Firefox (variante GNOME) -- [ ] Calculatrice GNOME si slot présent - -### Cloisonnement - -- [ ] Aucune réf. `toolkits/cinnamon`, `mint-panel`, `mainMenu-data-cinnamon` dans skin Rocky -- [ ] Icônes Adwaita (`icons/gnome/adwaita`) — pas de fuite Cinnamon -- [ ] `--taskbar-height` redéfini localement (`tokens.css`) — pas d'héritage portail Mint - ---- - -## Captures checkpoint (optionnel P1) - -```bash -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node usr/lib/capsuleos/tools/lab/capture-clone-surfaces.mjs --id linux-rocky --compare -# Rafraîchir baseline après changement visuel validé : -CAPSULE_HTTP_BASE=http://127.0.0.1:5501 node usr/lib/capsuleos/tools/lab/capture-clone-surfaces.mjs --id linux-rocky --write-baseline -``` - -Surfaces : `01-desktop-shell`, `02-overview`, `03-nemo`, `04-firefox`, `05-terminal`. - ---- - -## Clôture après modifs skin - -```bash -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/sync-all-views.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - ---- - -## Dernière passe (2026-06-08) - -| Gate / smoke | Résultat | -|--------------|----------| -| `validate-all` | OK | -| `validate-toolkit-paradigm --id linux-rocky` | OK | -| `validate-toolkit-paradigm --all` | OK (mint, rocky, ubuntu, debian-kde) | -| `validate-clone-assets --id linux-rocky` | OK | -| `smoke-gnome-nautilus-interactions` | OK | -| `smoke-gnome-nautilus-routing` | OK | -| Fix `--taskbar-height` portail → `--fedora-top-bar-height` | Appliqué `tokens.css` | -| Score cloisonnement | **96/100** (P2 Mint CSS chemins physiques inchangés — pas d'import partagé Rocky) | diff --git a/root/docs/recette-clone-windows-11.md b/root/docs/recette-clone-windows-11.md deleted file mode 100644 index 2adc0c01..00000000 --- a/root/docs/recette-clone-windows-11.md +++ /dev/null @@ -1,75 +0,0 @@ -# Recette clone Windows 11 — protocole lab direct - -> **registryId** : `windows-11` · **VM** : `` · **virsh** : `win11_483ec3b2` -> **Protocole** : identique à Mint — hôte lab → SSH direct vers la VM. **Aucun relais** via linux-mint ou autre VM. - -**Lecture** : [procedure-clonage-os-depuis-vm.md](procedure-clonage-os-depuis-vm.md) §4.4 · [windows-11-vm.json](inventaires/windows-11-vm.json) - ---- - -## Prérequis réseau (obligatoire) - -La VM **ne doit pas** utiliser macvtap/direct sur la même NIC que l'hôte hyperviseur (isolation L2 : ping/SSH « No route to host » depuis ``). - -Dans **virt-manager** → `win11_483ec3b2` → Détails → Réseau : - -1. Supprimer l'interface **macvtap** (mode direct / `enp1s0`) -2. Ajouter un **bridge** sur le LAN (`/24`), comme la VM Mint -3. Redémarrer la VM si nécessaire ; vérifier `ipconfig` → IP toujours `` (ou DHCP réservé) - -Test depuis l'hôte lab : - -```bash -ping -c 2 -ssh -i ~/.ssh/capsuleos-lab hostname -``` - ---- - -## Prérequis auth SSH - -Sur la VM (PowerShell utilisateur **Quickemu**) : - -```powershell -mkdir $env:USERPROFILE\.ssh -Force -# Coller la clé publique ~/.ssh/capsuleos-lab.pub de l'hôte lab -Add-Content $env:USERPROFILE\.ssh\authorized_keys "" -icacls $env:USERPROFILE\.ssh\authorized_keys /inheritance:r /grant "$env:USERNAME:(F)" /grant "SYSTEM:(F)" -``` - ---- - -## Inventaire lab (`etc/capsuleos/lab-inventory.json`) - -```json -{ - "registryId": "windows-11", - "ssh": "", - "sshIdentity": "~/.ssh/capsuleos-lab", - "virshName": "win11_483ec3b2" -} -``` - -**Interdit** : champ `sshJumpHost` — pas de passage par Mint. - ---- - -## Chaîne collecte P0 - -```bash -node usr/lib/capsuleos/tools/lab/lab-ssh.mjs --id windows-11 --cmd hostname -node usr/lib/capsuleos/tools/lab/collect-windows-inventory.mjs --id windows-11 --write -node usr/lib/capsuleos/tools/lab/run-manifest-replication-chain.mjs --id windows-11 --auto --write -``` - ---- - -## État actuel (juin 2026) - -| Étape | Statut | -|-------|--------| -| IP confirmée (``) | OK | -| Ping/SSH direct hôte `` | Bloqué (macvtap) | -| OpenSSH sur VM | Actif (port 22 joignable via LAN) | -| Clé `capsuleos-lab` autorisée | À confirmer | -| Collecte PowerShell | En attente direct + auth | diff --git a/root/docs/reference-gnome-expert.md b/root/docs/reference-gnome-expert.md deleted file mode 100644 index 35b39fca..00000000 --- a/root/docs/reference-gnome-expert.md +++ /dev/null @@ -1,445 +0,0 @@ -# Référence GNOME — expertise CapsuleOS - -> Document de synthèse pour maîtriser l’écosystème GNOME tel qu’il apparaît sur **Rocky Linux 10** et le reproduire fidèlement dans CapsuleOS. -> Complète [branche-redhat-gnome.md](branche-redhat-gnome.md), [inventaire-chromes-par-toolkit.md](inventaire-chromes-par-toolkit.md) et [window-chrome-contexts.md](window-chrome-contexts.md). - -**Dernière mise à jour** : juin 2026 -**Effort lecture** : ~90 min (synthèse) + sources détaillées en annexe - ---- - -## 1. Objectif - -Ce document regroupe les sources officielles GNOME, SUSE et Rocky pour : - -1. Comprendre la **pile technique** (Mutter → GNOME Shell → apps GTK4/libadwaita). -2. Maîtriser l’**UX utilisateur** (Aperçu, dash, recherche, Paramètres, sessions). -3. Savoir **personnaliser** le bureau (Tweaks, Extensions, dconf). -4. Cartographier l’**écosystème applicatif** (apps Core, Circle, outils dev). -5. Relier chaque concept aux **slots et chromes CapsuleOS** (`linux-rocky`, toolkit `gnome`). - ---- - -## 2. Pile technique GNOME - -### 2.1 Vue d’ensemble - -```mermaid -flowchart TB - subgraph apps [Applications GTK4 / libadwaita] - NAUT[Nautilus · Fichiers] - CALC[Calculatrice] - SET[Paramètres] - SW[GNOME Software] - end - subgraph shell [GNOME Shell — GJS] - OV[Aperçu / Activities] - PANEL[Barre supérieure] - QS[Quick Settings] - EXT[Extensions Shell] - end - subgraph wm [Mutter — compositeur] - WAY[Wayland] - WIN[Gestion fenêtres] - MON[Configuration écrans] - end - subgraph low [Couches basses] - CLUT[Clutter / St — acteurs UI shell] - COGL[Cogl — rendu OpenGL] - GDK[GDK / GTK 4] - GLIB[GLib / GIO] - end - apps --> GDK - shell --> CLUT - shell --> META[Meta — API Mutter] - META --> wm - CLUT --> COGL - GDK --> GLIB -``` - -### 2.2 Mutter — compositeur et gestionnaire de fenêtres - -Source : [mutter.gnome.org](https://mutter.gnome.org/) - -| Rôle | Détail | -|------|--------| -| **Nature** | Bibliothèque compositeur Wayland ; implémente le côté serveur du protocole Wayland | -| **Fonctions** | Gestion fenêtres, composition, focus, workspaces, raccourcis clavier, configuration moniteurs | -| **Xwayland** | Exécution des applications X11 héritées | -| **Utilisateurs** | GNOME Shell (interface principale), Gala (elementary), debug standalone via `mutter` | -| **API Meta** | Displays, workspaces, fenêtres, presse-papiers — exposée aux extensions via import `Meta` | - -**CapsuleOS** : le runtime simule Mutter via `CapsuleWindowBounds`, `CapsuleWindowPositioning`, providers chrome (`nemo-gnome`, `libadwaita-gnome`) et ancrage `object#desktop`. Le cluster `toolkit-gnome/chrome.css` ne doit pas hériter du pilote Cinnamon/Muffin. - -### 2.3 Clutter, St et GNOME Shell - -Source : [Architecture extensions GJS](https://gjs.guide/extensions/overview/architecture.html) - -| Couche | Description | -|--------|-------------| -| **Clutter** | Toolkit bas niveau du shell — widgets = **Actors**, scène graphique, animations | -| **St** | Widgets riches (boutons, icônes, champs texte) + **CSS** pour le style shell | -| **Mutter (`Meta`)** | Affichages, workspaces, fenêtres, clipboard | -| **Shell** | Utilitaires GNOME Shell (`global`, PopupMenu, Dialog, PanelMenu, Quick Settings, Search Provider) | -| **GJS** | Bindings JavaScript via GObject-Introspection — le shell et les extensions sont en JS | - -Les **extensions Shell** modifient le comportement du shell (ex. Dash to Dock) ; elles ne font pas partie du processus de design GNOME officiel mais peuvent inspirer des features futures. - -### 2.4 GTK 4 et libadwaita - -| Composant | Rôle | Doc | -|-----------|------|-----| -| **GTK 4** | Toolkit multi-plateforme — widgets, rendu, événements | [developer.gnome.org/components](https://developer.gnome.org/components/) | -| **libadwaita** | Blocs adaptatifs GNOME : `HeaderBar`, `ApplicationWindow`, `ActionRow`, `StyleManager`, thèmes | [docs.rs/libadwaita](https://docs.rs/libadwaita/latest/libadwaita/) | -| **Adwaita** | Thème + polices + icônes standard | `adwaita-icon-theme`, Adwaita Fonts | - -**HIG** impose GTK 4 + libadwaita pour les apps GNOME modernes : [developer.gnome.org/hig](https://developer.gnome.org/hig/). - -**CapsuleOS** : provider `libadwaita-gnome` + `gnome-app-csd.base.css` pour les apps CSD (Calculatrice, Text Editor, Paramètres, Software, etc.). - ---- - -## 3. UX bureau — modèle utilisateur - -### 3.1 Guide SUSE « Getting Started » - -Source : [GNOME Getting Started (PDF SUSE)](https://documentation.suse.com/smart/desktop/pdf/GNOME-getting-started_en.pdf) · [HTML](https://documentation.suse.com/smart/desktop/html/GNOME-getting-started/index.html) - -#### Sessions SUSE (4 variantes) - -| Session | Description | -|---------|-------------| -| **GNOME** (défaut) | GNOME 4 upstream, Wayland, barre unique en haut | -| **GNOME Classic** / **Classic on Xorg** | Expérience plus traditionnelle, technologie GNOME 4 | -| **IceWM** | Fallback léger, peu de ressources | - -**Wayland vs Xorg** : Wayland = architecture plus simple ; Xorg = compatibilité plus large. Rocky 10 utilise Wayland par défaut. - -#### Aperçu des activités - -| Élément | Comportement officiel | -|---------|----------------------| -| **Ouverture** | Bouton Activités, hot corner haut-gauche, touche **Meta** (Super) | -| **Recherche** | Frappe immédiate sans cliquer ; apps, paramètres, fichiers `~/` | -| **Dash** | Favoris + apps en cours ; point sous l’icône = running ; clic droit → favoris | -| **Fenêtres** | Prévisualisation des fenêtres ouvertes | - -#### Barre supérieure - -- **Gauche** : Activités -- **Centre** : horloge + calendrier (rendez-vous Evolution/Calendar) -- **Droite** : menu système (verrouillage, extinction, quick settings) - -#### Fichiers et médias - -- Explorateur : **Fichiers** (`org.gnome.Nautilus`) — lancement via recherche « files » -- Médias amovibles : icône bureau + sidebar ; **éjecter** avant retrait physique - -### 3.2 Human Interface Guidelines (HIG) - -Source : [developer.gnome.org/hig](https://developer.gnome.org/hig/) · catalogue CapsuleOS : [gnome-hig-ressources.md](gnome-hig-ressources.md) · inventaire JSON : [gnome-hig-resources.json](inventaires/gnome-hig-resources.json) - -| Section | Contenu clé pour CapsuleOS | -|---------|---------------------------| -| **Design Principles** | Simplicité, focus utilisateur, cohérence | -| **Guidelines** | Nommage apps, icônes, pointeur/touch, clavier, style UI, typo, accessibilité | -| **Patterns → Containers** | **Windows**, **Header Bars**, Popovers, Utility Panes | -| **Patterns → Navigation** | Browsing, View Switchers, **Tabs**, Sidebars, **Search** | -| **Patterns → Controls** | Buttons, Menus, Switches, Text Fields… | -| **Patterns → Feedback** | Notifications, Toasts, Dialogs, Progress Bars | - -Règles chrome CSD GNOME (HIG Windows / Header Bars) : - -- Les apps GTK4 utilisent une **headerbar** intégrée (pas de barre titre SSD séparée du WM). -- Les contrôles fenêtre (min/max/close) sont à droite de la headerbar. -- Le **cadre** fenêtre (bordure, ombre, resize) reste géré par le compositeur. - -### 3.3 Rocky vs Ubuntu vs SUSE - -| Aspect | Rocky / RHEL / SUSE GNOME | Ubuntu | -|--------|---------------------------|--------| -| Dock permanent | **Absent** (dash dans Aperçu) | Souvent présent (dock Ubuntu) | -| Modèle lancement | Aperçu + dash | Aperçu + dock latéral | -| Terminal EL10 | **Ptyxis** | gnome-terminal / Ptyxis selon version | - -CapsuleOS Rocky masque `#tableau` (dock latéral) — conforme RHEL, pas Ubuntu. - ---- - -## 4. Personnalisation Rocky - -### 4.1 GNOME Tweaks - -Source : [docs.rockylinux.org — GNOME Tweaks](https://docs.rockylinux.org/10/desktop/gnome/gnome-tweaks/) - -```bash -sudo dnf install gnome-tweaks -``` - -Lancement : Aperçu → rechercher « tweaks ». - -| Section Tweaks | Usage | -|----------------|-------| -| **General** | Animations, suspension, sur-amplification | -| **Appearance** | Thèmes, fond d’écran, écran verrouillé | -| **Fonts** | Polices et tailles par défaut | -| **Keyboard & Mouse** | Comportement clavier/souris | -| **Startup Applications** | Apps au démarrage du shell | -| **Top Bar** | Horloge, calendrier, batterie | -| **Window Titlebars** | Comportement barres de titre | -| **Windows** | Comportement fenêtres | -| **Workspaces** | Dynamiques vs statiques, affichage | - -Réinitialisation : menu trois barres → reset defaults. - -**CapsuleOS** : le slot `themes` simule **Paramètres → Apparence** (schéma couleurs, accent Adwaita) — pas l’intégralité de Tweaks. - -### 4.2 GNOME Shell Extensions - -Source : [docs.rockylinux.org — GNOME Extensions](https://docs.rockylinux.org/10/desktop/gnome/gnome-extensions/) - -```bash -sudo dnf install gnome-shell -sudo dnf install chrome-gnome-shell # intégration navigateur -gnome-shell --version # version shell pour compatibilité extensions -``` - -| Concept | Détail | -|---------|--------| -| **Site** | [extensions.gnome.org](https://extensions.gnome.org) | -| **Gestion locale** | [extensions.gnome.org/local](https://extensions.gnome.org/local/) | -| **Exemple** | Dash to Dock — extension tierce, **non** le modèle RHEL natif | -| **Support** | Extensions maintenues par leurs auteurs, pas la communauté GNOME core | - -**CapsuleOS** : ne pas confondre extensions tierces (dock permanent) avec le dash Aperçu RHEL. Le modèle Rocky est **sans** Dash to Dock. - -### 4.3 dconf et schémas GSettings - -Composants liés (voir §5) : - -- **dconf** — base de configuration clé/valeur -- **GSettings Desktop Schemas** — schémas partagés desktop -- **gnome-settings-daemon** — applique les réglages (thème, clavier, alimentation…) - -Outils : Paramètres (utilisateur), `dconf-editor` (avancé), YaST/dconf (admin SUSE/RHEL). - ---- - -## 5. Écosystème applications - -### 5.1 Catalogue officiel - -Source : [apps.gnome.org/fr](https://apps.gnome.org/fr/) - -#### Applications de base (préinstallées typiques) - -| App GNOME | Slot CapsuleOS Rocky | Chrome provider | -|-----------|---------------------|-----------------| -| Fichiers (Nautilus) | `nemo` | `nemo-gnome` | -| Firefox / Web | `firefox` | `firefox-gnome` | -| Console (Ptyxis) | `terminal` | `terminal-gnome` | -| Logiciels | `update_manager` | `libadwaita-gnome` | -| Éditeur de texte | `text_editor` | `libadwaita-gnome` | -| Calculatrice | `calculator` | `libadwaita-gnome` | -| Calendrier | `calendar` | `libadwaita-gnome` | -| Horloges | `clocks` | `libadwaita-gnome` | -| Paramètres | `themes` | `libadwaita-gnome` | -| Visionneurs / lecteur | `visionneur_*`, `lecteur_multimedia` | `libadwaita-gnome` | -| LibreOffice Writer | `librewriter` | `libadwaita-gnome` | -| Profile / checklist | `profile`, `checklist` | `libadwaita-gnome` | - -#### Critères apps.gnome.org - -- Simples, cohérentes, soignées (philosophie GNOME) -- Libre logiciel, communauté accueillante -- Intégration native au bureau GNOME -- Icône 📱 = version mobile supportée - -### 5.2 Composants plateforme (Core) - -Source : [developer.gnome.org/components](https://developer.gnome.org/components/) - -Composants **essentiels** pour comprendre CapsuleOS : - -| Composant | Rôle | -|-----------|------| -| **mutter** | Compositeur — parent de GNOME Shell | -| **GNOME Shell** | Shell utilisateur (Aperçu, panel, extensions) | -| **gjs** | Bindings JS — code du shell | -| **gtk** | Toolkit applications | -| **libadwaita** | Widgets et fenêtres adaptatifs GNOME | -| **adwaita-icon-theme** | Icônes standard (dépendance de toutes les apps Core) | -| **dconf** + **GSettings Desktop Schemas** | Configuration | -| **gnome-settings-daemon** | Daemon réglages système | -| **gdm** | Écran de connexion | -| **gvfs** + **LocalSearch** | Fichiers virtuels + indexation recherche Aperçu | -| **libsoup** | HTTP (Software, météo, etc.) | -| **librsvg** | Rendu SVG (icônes, symboles panel) | -| **Terminal widget (VTE)** | Moteur terminal Ptyxis/Console | -| **at-spi2-core** + **orca** | Accessibilité | -| **xdg-desktop-portal-gnome** | Portails desktop (fichiers, screenshots) | - ---- - -## 6. libadwaita — API applications modernes - -Source : [docs.rs/libadwaita](https://docs.rs/libadwaita/latest/libadwaita/) - -### Types clés pour le chrome CSD CapsuleOS - -| Type libadwaita | Usage CapsuleOS | -|-----------------|-----------------| -| `ApplicationWindow` | Fenêtre racine app | -| `HeaderBar` | Barre titre + contrôles CSD | -| `ToolbarView` | Layout header + contenu | -| `StyleManager` | Schéma clair/sombre, accent | -| `Window` / `WindowTitle` | Variantes dialog | - -### Initialisation - -```c -adw_init(); // ou adw::Application sous Rust -``` - -### Widgets récurrents dans nos templates - -| App | Ancre HTML CapsuleOS | -|-----|---------------------| -| Calculatrice | `.gnome-calc__header` | -| Text Editor | `.xed-app__menubar` | -| Calendar | `.gnome-calendar-app__header` | -| Clocks | `.gnome-clocks__header` | -| GNOME Software | `.gnome-software__headerbar` | -| Paramètres | `.gnome-settings__headerbar` | -| Visionneurs | `.viewer-app__toolbar` | - -Provider runtime : `libadwaita-gnome` dans `chrome.js` + `gnome-app-csd.base.css`. - ---- - -## 7. Extensions GNOME Shell — architecture développeur - -Source : [gjs.guide — Architecture](https://gjs.guide/extensions/overview/architecture.html) - -### Modules Shell réutilisables - -| Module | Usage | -|--------|-------| -| `PopupMenu` | Menus contextuels shell | -| `Dialog` / `ModalDialog` | Boîtes de dialogue système | -| `PanelMenu` | Indicateurs barre (Wi-Fi, Bluetooth, alimentation) | -| Search Provider | Intégration recherche Aperçu | - -### Ce qu’une extension peut faire - -- Contrôler displays/workspaces/fenêtres via `Meta` -- Créer des UI avec Clutter/St -- Accéder et modifier du code interne GNOME Shell - -**CapsuleOS** : la recherche Aperçu (`overview.js` + `CapsuleAppSearch`) simule le Search Provider sans extension Shell réelle. - ---- - -## 8. Accessibilité (a11y) - -Sources : SUSE Getting Started §3.9, HIG Accessibility, `at-spi2-core`, `orca`. - -| Domaine | Options GNOME | -|---------|---------------| -| **Vue** | Contraste élevé, grand texte, zoom, taille curseur, lecteur d’écran | -| **Ouïe** | Alertes visuelles | -| **Saisie** | Clavier à l’écran, Sticky/Slow/Bounce keys, Mouse Keys | -| **Pointeur** | Clic secondaire simulé, clic par survol | - -CapsuleOS : `a11y-fedora.css`, tokens contrastes — couverture partielle (P2). - ---- - -## 9. Cartographie CapsuleOS Rocky - -### 9.1 Fichiers projet par couche - -| Couche GNOME | Fichiers CapsuleOS | -|--------------|-------------------| -| Shell / Aperçu | `home/RedHat/Rocky/js/overview.js`, `gnome-workstation.css`, `fedora-overview*` | -| Top bar | `fedora-top-bar`, `taskbar-tray`, `calendar-popover`, `volume-popover` | -| Chrome WM | `clusters/toolkit-gnome/chrome.css`, `chrome.js`, `header-context.js` | -| Apps CSD | `gnome-app-csd.base.css`, `style/apps/*.skin.css` | -| Contrat | `window-chrome-contexts.json`, profil `linux-rocky.json` | -| Boot | `toolkit-boot.json`, `capsule-skin-boot.js` | - -### 9.2 Validateurs liés - -```bash -node usr/lib/capsuleos/tools/validate-toolkit-chrome-isolation.mjs -node usr/lib/capsuleos/tools/validate-gnome-chrome-apps.mjs -node usr/lib/capsuleos/tools/validate-gnome-overview-search-icons.mjs -node usr/lib/capsuleos/tools/validate-window-chrome-contexts.mjs -node usr/lib/capsuleos/tools/lab/smoke-rocky-gnome-ref.mjs -``` - -### 9.3 Écarts parité connus (P1/P2) - -Voir [inventaire-parite-rocky.md](inventaire-parite-rocky.md) : - -- Quick Settings incomplets -- Multi-écrans Join/Mirror -- Bluetooth UI -- Accessibilité complète -- Extensions Shell tierces (hors scope RHEL) - ---- - -## 10. Bibliographie - -### Guides utilisateur et distro - -| Source | URL | -|--------|-----| -| SUSE — Getting Started GNOME (PDF) | https://documentation.suse.com/smart/desktop/pdf/GNOME-getting-started_en.pdf | -| SUSE — Getting Started GNOME (HTML) | https://documentation.suse.com/smart/desktop/html/GNOME-getting-started/index.html | -| Rocky — GNOME Tweaks | https://docs.rockylinux.org/10/desktop/gnome/gnome-tweaks/ | -| Rocky — GNOME Shell Extensions | https://docs.rockylinux.org/10/desktop/gnome/gnome-extensions/ | -| GNOME Help (utilisateur) | https://help.gnome.org/users/gnome-help/stable/ | - -### Architecture et développement - -| Source | URL | -|--------|-----| -| Mutter | https://mutter.gnome.org/ | -| GJS — Architecture extensions | https://gjs.guide/extensions/overview/architecture.html | -| GNOME Components | https://developer.gnome.org/components/ | -| GNOME HIG | https://developer.gnome.org/hig/ | -| libadwaita (Rust docs) | https://docs.rs/libadwaita/latest/libadwaita/ | - -### Applications et communauté - -| Source | URL | -|--------|-----| -| Applications pour GNOME (FR) | https://apps.gnome.org/fr/ | -| Extensions GNOME | https://extensions.gnome.org | -| GNOME Circle | https://circle.gnome.org | - -### CapsuleOS (interne) - -| Document | Rôle | -|----------|------| -| [branche-redhat-gnome.md](branche-redhat-gnome.md) | Branche RHEL, dérivation Fedora/Alma/Ubuntu | -| [inventaire-chromes-par-toolkit.md](inventaire-chromes-par-toolkit.md) | Providers chrome par app | -| [window-chrome-contexts.md](window-chrome-contexts.md) | Contrat runtime chrome | -| [procedure-lab-linux-rocky-gnome.md](procedure-lab-linux-rocky-gnome.md) | Procédure lab VM | - ---- - -## 11. Principes directeurs pour CapsuleOS - -1. **Le shell n’est pas une app** — Aperçu, barre, quick settings = GNOME Shell (GJS/Mutter), pas des fenêtres `windowElement` classiques. -2. **Les apps sont CSD libadwaita** — headerbar intégrée, provider `libadwaita-gnome`, pas de rail Mint `#windowHeader` visible. -3. **Pas de dock permanent sur Rocky** — dash dans Aperçu uniquement ; pas Dash to Dock / dock Ubuntu. -4. **Recherche = frappe immédiate** — icônes via `CapsuleResource.resolve()`, catalogue `overview.js`. -5. **Wayland first** — positionnement `object#desktop`, bornes `main.fedora-desktop-area`. -6. **Isolation toolkit** — `clusters/toolkit-gnome/chrome.css` obligatoire ; jamais `window-chrome.base.css` (Cinnamon). - ---- - -*Synthèse produite pour le projet CapsuleOS — référence vivante à enrichir au fil des passes lab Rocky.* diff --git a/root/docs/reference-kde-expert.md b/root/docs/reference-kde-expert.md deleted file mode 100644 index b8c3d27b..00000000 --- a/root/docs/reference-kde-expert.md +++ /dev/null @@ -1,159 +0,0 @@ -# Référence KDE / Plasma — expertise CapsuleOS - -> Synthèse pour maîtriser l’écosystème KDE tel qu’il apparaît sur **KDE neon User Edition** et le reproduire dans CapsuleOS. -> Complète [branche-plasma-kde.md](branche-plasma-kde.md), [kde-hig-ressources.md](kde-hig-ressources.md) et [inventaire-chromes-par-toolkit.md](inventaire-chromes-par-toolkit.md). - -**Dernière mise à jour** : juin 2026 -**Effort lecture** : ~45 min (synthèse) + HIG détaillé en annexe - ---- - -## 1. Objectif - -Ce document regroupe les sources officielles KDE pour : - -1. Comprendre la **pile Plasma** (KWin → Plasma Shell → apps Qt/Kirigami). -2. Maîtriser **Breeze** (icônes symbolic vs color, thème clair/sombre). -3. Cartographier les **slots CapsuleOS** toolkit `kde` (`linux-kde-neon`, `linux-opensuse`, …). -4. Relier concepts HIG aux fichiers skin et noyau existants. - ---- - -## 2. Pile technique Plasma - -```mermaid -flowchart TB - subgraph apps [Applications Qt / Kirigami] - DOL[Dolphin] - DISC[Discover] - KON[Konsole] - FF[Firefox] - end - subgraph shell [Plasma Shell — QML] - PANEL[Panel] - KICK[Kickoff / menu] - TRAY[System tray] - end - subgraph wm [KWin — compositeur Wayland] - WIN[Gestion fenêtres CSD] - DESK[Bureau / widgets] - end - subgraph fw [Frameworks KDE] - BREEZE[Breeze theme + icons] - KIR[Kirigami UI] - KIO[KIO / places] - end - apps --> KIR - apps --> fw - shell --> wm - shell --> BREEZE - wm --> DESK -``` - -| Couche | Rôle | CapsuleOS | -|--------|------|-----------| -| **KWin** | Compositeur Wayland, CSD, tiling | Simulé via chrome fenêtre + `CapsuleWindowBounds` | -| **Plasma Shell** | Panel, Kickoff, widgets, horloge | `plasma-panel-dock.css`, `mainMenu-plasma.js`, `tray-popover-kde.js` | -| **Breeze** | Widget style + icon theme | Tokens CSS `--opensuse-*` / `--kde-neon-*`, assets `toolkits/kde/` | -| **Kirigami** | Framework apps adaptatives (Discover 6) | Gabarit `update_manager_kde_neon.html`, sidebar onglets | -| **Dolphin** | Explorateur fichiers KDE | Slot `nemo`, template `dolphin` | - ---- - -## 3. Human Interface Guidelines (HIG) - -Source : [develop.kde.org/hig](https://develop.kde.org/hig/) - -| Aspect | Détail | -|--------|--------| -| **Portée** | Philosophie design, patterns UX, conventions icônes — surtout **apps KDE** | -| **Limites** | Peu de détails d’implémentation composant ; compléter par docs Kirigami/Qt et code apps existantes | -| **Catalogue CapsuleOS** | [kde-hig-ressources.md](kde-hig-ressources.md) — 22 pages crawlées | -| **Skill agent** | [kde-hig-replication](../skills/kde-hig-replication/SKILL.md) | - -**Règle de priorité** : VM prime pour le **shell** (panel, Kickoff, tray) ; HIG prime pour les **apps** (Discover, Dolphin). - ---- - -## 4. Breeze et icônes - -| Taille | Style | Usage CapsuleOS | -|--------|-------|-----------------| -| 16 px (`small`) | Symbolic monochrome | Tray panel, actions toolbar | -| 22 px (`smallMedium`) | Symbolic (listes denses) | Kickoff catégories actions/22 | -| 32 px+ (`medium`) | Full-color | Apps Kickoff, Discover, pins panel | - -Assets versionnés : - -- Panel / tray : `usr/share/capsuleos/assets/images/toolkits/kde/panel/` -- Vendor Neon : `usr/share/capsuleos/assets/images/vendors/neon/` - -Pull depuis VM lab : ``, chemins Breeze `/usr/share/icons/breeze/`. - ---- - -## 5. Slots CapsuleOS — toolkit KDE - -| Slot | App VM | Template / skin | Registre type | -|------|--------|-----------------|---------------| -| `nemo` | Dolphin | `dolphin` | Toutes distros KDE | -| `update_manager` | Discover | `update_manager_kde_neon.html` (Neon) | `linux-kde-neon` | -| `firefox` | Firefox | gabarit partagé | — | -| `terminal` | Konsole | profil Debian/SUSE selon skin | — | - -Noyau partagé Plasma : - -- `usr/lib/capsuleos/shells/linux/plasma-panel-mode.js` -- `home/Debian/KDE-Neon/js/calendar-popover-kde.js` -- `home/Debian/KDE-Neon/js/tray-popover-kde.js` - -Doc explorateur : `usr/share/capsuleos/linux/explorers/README.md`. - ---- - -## 6. Ground truth — KDE neon (juin 2026) - -| Composant | VM | CapsuleOS | -|-----------|-----|-----------| -| Distribution | KDE neon User Edition 24.04 noble | `linux-kde-neon` | -| Session | Plasma **Wayland** | `body#kde-neon` | -| Discover | plasma-discover 6.6.5 | Clôturé — voir [`linux-kde-neon-discover-closure.md`](inventaires/linux-kde-neon-discover-closure.md) | -| Panel + tray | Ordre VM observé | Clôturé — voir [`linux-kde-neon-panel-tray-closure.md`](inventaires/linux-kde-neon-panel-tray-closure.md) | -| Kickoff | Breeze + apps XDG | Clôturé — voir [`linux-kde-neon-kickoff-closure.md`](inventaires/linux-kde-neon-kickoff-closure.md) | -| Dolphin | P0 backlog | Slot `nemo` — parité vues en cours | - -Inventaire machine : [`linux-kde-neon-vm.json`](inventaires/linux-kde-neon-vm.json). - ---- - -## 7. Distros toolkit KDE actives - -| registryId | Skin | Tier | Notes | -|------------|------|------|-------| -| `linux-kde-neon` | `home/Debian/KDE-Neon/` | P2 | **Référence opérationnelle** — skin le plus avancé | -| `linux-opensuse` | `home/SUSE/openSUSE/` | P1 | Plasma mature, smoke `smoke-plasma-opensuse.mjs` | -| `linux-mx-kde` | `home/Debian/MX-KDE/` | P1 | Dérivé debian-kde | -| `linux-debian-kde` | `home/Debian/Debian-KDE/` | P2 | `upstreamId: null` registre | - ---- - -## 8. Sources officielles (table rapide) - -| Source | URL | -|--------|-----| -| KDE HIG | https://develop.kde.org/hig/ | -| Kirigami | https://develop.kde.org/docs/plasma/kirigami/ | -| Plasma docs | https://develop.kde.org/docs/plasma/ | -| HIG sources GitLab | https://invent.kde.org/documentation/develop-kde-org | -| API KDE Frameworks | https://api.kde.org/ | -| FreeDesktop icon naming | https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html | - ---- - -## 9. Gates CapsuleOS - -```bash -node usr/lib/capsuleos/tools/linux/sync-linux-skin-closure.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -node root/tools/lab/capture-capsule-kde-neon.mjs # si CAPSULE_HTTP_BASE actif -``` diff --git a/root/docs/referentiel-assets-vm-officiels.md b/root/docs/referentiel-assets-vm-officiels.md deleted file mode 100644 index b5976423..00000000 --- a/root/docs/referentiel-assets-vm-officiels.md +++ /dev/null @@ -1,233 +0,0 @@ -# Référentiel — assets distribution sur VM (sources officielles) - -> **Objectif** : ne manquer **aucun asset nécessaire** à la parité CapsuleOS lors de la collecte **ManV** (`vm-distribution-manifest.py`). -> Complète [`convention-manifest-vm.md`](convention-manifest-vm.md) · [`convention-assets-depuis-vm.md`](convention-assets-depuis-vm.md). - -**Contrats machine** : - -- Catalogue attendu par vendor/toolkit : [`etc/capsuleos/contracts/vm-manifest-media-catalog.json`](../../etc/capsuleos/contracts/vm-manifest-media-catalog.json) -- Checklist découverte : [`etc/capsuleos/contracts/vm-asset-discovery-reference.json`](../../etc/capsuleos/contracts/vm-asset-discovery-reference.json) -- Sections manifeste : [`etc/capsuleos/contracts/vm-distribution-manifest.json`](../../etc/capsuleos/contracts/vm-distribution-manifest.json) → `mediaSections` - -**Destination CapsuleOS** (unique) : `usr/share/capsuleos/assets/` + `home/public/Images/` — voir [`politique-assets.md`](politique-assets.md). - ---- - -## 1. Normes et documentation officielles - -| Domaine | Spécification / doc | URL | -|---------|---------------------|-----| -| **Thèmes d’icônes** (arborescence `apps/`, `mimetypes/`, `places/`, `symbolic/`) | Freedesktop Icon Theme Specification | https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html | -| **Bases de données d’icônes** (`$XDG_DATA_DIRS/icons`) | XDG Base Directory Specification | https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html | -| **Entrées de menu / champ `Icon=`** | Desktop Entry Specification | https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html | -| **Types MIME → icônes** | Shared MIME-Info Specification | https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html | -| **Polices système** | fontconfig (`fc-list`, `/etc/fonts/`) | https://www.freedesktop.org/wiki/Software/fontconfig/ | -| **GNOME — interface & fonds** | GSettings / dconf (`org.gnome.desktop.*`) | https://help.gnome.org/admin/system-admin-guide/stable/dconf.html | -| **GNOME HIG (contexte visuel)** | GNOME Human Interface Guidelines | https://developer.gnome.org/hig/ | -| **Cinnamon** | Projet Linux Mint / Cinnamon (thèmes, Nemo) | https://projects.linuxmint.com/cinnamon/ · https://github.com/linuxmint/Cinnamon | -| **Linux Mint (branding, fonds)** | Dépôt `linuxmint-artwork`, paquets `mint-*` | https://github.com/linuxmint/linuxmint-artwork | -| **KDE Plasma — icônes** | KDE Human Interface Guidelines / Breeze | https://develop.kde.org/hig/ | -| **KDE — configuration** | `kdeglobals`, `lookandfeel` | https://userbase.kde.org/Plasma/Configuration | -| **Ubuntu Yaru** | Canonical design / Yaru theme | https://github.com/CanonicalLtd/yaru | -| **Fedora / RHEL logos** | `fedora-logos`, `redhat-*-fonts` (paquets RPM) | https://src.fedoraproject.org/rpms/fedora-logos | - ---- - -## 2. Matrice assets × découverte × chemins VM - -Légende **Capsule** : préfixe logique sous `usr/share/capsuleos/assets/` (résolu `./assets/…`). - -| Section ManV | Obligatoire parité | Découverte VM (ordre) | Chemins VM typiques | Clé catalogue | Destination Capsule | -|--------------|-------------------|------------------------|---------------------|---------------|---------------------| -| **appIcons** | Oui (grille menu + lanceurs) | `.desktop` → `Icon=` puis résolution thème | Voir §3 · snap `/snap/*/…/meta/gui/` · flatpak `~/.local/share/flatpak/…` | — (dérivé apps) | `images/toolkits/{gnome\|cinnamon}/apps/` | -| **panel** | Oui (dock / panel P0) | `vm-manifest-media-catalog.json` → `panel[]` + `icon-theme` actif | `/usr/share/icons//{scalable,48x48}/apps/` · `hicolor` | `panel[]` | `images/vendors/{vendor}/panel/` | -| **places** | Oui (explorateur) | Liste catalogue + thème actif | `…/scalable/places/*.svg` | `places[]` | `icons/{toolkit}//places/` | -| **mimetypes** | Oui (explorateur) | Liste catalogue + thème | `…/scalable/mimetypes/*.svg` | `mimetypes[]` | `icons/…/mimetypes/` | -| **symbolic** | Oui (barre Nemo/Nautilus) | `actions/`, `places/`, `status/` sous `symbolic/` | Adwaita/Yaru/Mint-Y : `symbolic//` | `symbolic.*` | `icons/…/symbolic/{actions,places,status}/` | -| **emblems** | Si vendor (Ubuntu Yaru) | Catalogue vendor | `…/scalable/emblems/` | `emblems[]` | `icons/gnome/yaru/emblems/` | -| **wallpapers** | Oui (bureau + sélecteur) | 1) gsettings `picture-uri` 2) `wallpaperCandidates` 3) `find /usr/share/backgrounds` | §4 | `wallpaperCandidates[]` | `images/vendors/{vendor}/wallpaper/` | -| **fonts** | Oui (typographie UI) | 1) `vmCandidates` catalogue 2) gsettings `font-name` 3) `fc-list` | `/usr/share/fonts/**` | `fonts[].vmCandidates` | `fonts/vendors/{vendor}/` | -| **branding** | Oui (logo, watermark, À propos) | `branding.vmCandidates` | §5 | `branding` | `images/vendors/{vendor}/` ou `watermark/` | -| **applications** | Oui (menu, AppV) | Scan `.desktop` (contrat `desktopSearchPaths`) | §6 | — | `proc//` (JSON, pas binaire) | - -**Hors manifeste ManV** (ne pas oublier en clone complet, mais pas des fichiers raster importés en masse) : - -| Besoin | Source VM | Note | -|--------|-----------|------| -| Thème GTK/CSS (chrome fenêtres) | `/usr/share/themes//` | Tokens CSS CapsuleOS, pas copie intégrale | -| Curseurs | `/usr/share/icons//cursors/` | Rarement importé ; CSS simulé | -| Sons événements | `/usr/share/sounds/` | Optionnel P2 | -| Fichiers Glade/UI Mint | `/usr/share/linuxmint/`, `/usr/share/cinnamon/` | Comportement, pas assets navigateur | - ---- - -## 3. Résolution des icônes (algorithme officiel) - -Aligné sur **Icon Theme Spec** + implémentation `vm-distribution-manifest.py` : - -1. **Bases** : `$HOME/.icons`, `$XDG_DATA_DIRS/icons` (souvent `/usr/share/icons`), `/usr/share/pixmaps` -2. **Thème actif** : voir §7 (gsettings / kreadconfig6) -3. **Contextes** : `apps`, `mimetypes`, `places`, `emblems`, `categories`, `devices`, `status`, `symbolic//` -4. **Tailles** (ordre de préférence) : `scalable` → `512x512` → `256x256` → `48x48` → … -5. **Fallbacks** : variantes `-dark`/`-light` du thème, puis `hicolor`, puis thèmes du catalogue `iconThemeFallbacks` -6. **Chemins absolus** dans `.desktop` (snap/flatpak) : conserver tels quels - -Commande de vérification manuelle : - -```bash -# Thème actif + fichier résolu (exemple Firefox) -ICON_THEME=$(gsettings get org.cinnamon.desktop.interface icon-theme | tr -d "'") -gtk4-icon-browser # si installé — visualisation GTK4 -find /usr/share/icons/"$ICON_THEME" -name 'firefox.*' 2>/dev/null | head -``` - -Référence : [Icon Theme Specification — Directory layout](https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html#directory_layout). - ---- - -## 4. Fonds d’écran (wallpapers) - -| Toolkit | Clé gsettings (fond actif) | Répertoires système à scanner | -|---------|---------------------------|------------------------------| -| **GNOME** | `org.gnome.desktop.background` → `picture-uri` | `/usr/share/backgrounds/gnome/`, `/usr/share/backgrounds//` | -| **Cinnamon / Mint** | `org.cinnamon.desktop.background` → `picture-uri` | `/usr/share/backgrounds/linuxmint/`, `/usr/share/backgrounds/` | -| **KDE** | `lookandfeel` / fichier plasma | `/usr/share/wallpapers/`, `/usr/share/backgrounds/` | - -Collecte automatique : `discover_wallpapers()` dans `vm-distribution-manifest.py` (find + candidats catalogue). - -**Mint 22.x** (ground truth lab) : - -```text -/usr/share/backgrounds/linuxmint/*.jpg -/usr/share/backgrounds/linuxmint/*.png -gsettings get org.cinnamon.desktop.background picture-uri -``` - -Enrichir **`wallpaperCandidates`** dans `vm-manifest-media-catalog.json` → vendor `mint` avant chaque nouvelle VM Mint. - ---- - -## 5. Branding & logos vendor - -| Vendor | Candidats VM (paquets) | Doc / source | -|--------|------------------------|--------------| -| **mint** | `/usr/share/icons/hicolor/scalable/apps/mint-logo.svg`, `/usr/share/linuxmint/logo.png` | [linuxmint-artwork](https://github.com/linuxmint/linuxmint-artwork) | -| **ubuntu** | `/usr/share/icons/hicolor/scalable/apps/ubuntu-logo-icon.svg` | [Yaru](https://github.com/CanonicalLtd/yaru) | -| **rocky / alma / fedora** | `/usr/share/*-logos/*.svg` | Paquets `rocky-logos`, `fedora-logos`, `almalinux-logos` | -| **opensuse** | `YaST-icon.svg` sous hicolor | openSUSE branding guidelines | -| **popos** | `/usr/share/pop-desktop-icons/pop-os-logo.svg` | System76 / Pop branding | - ---- - -## 6. Applications (`.desktop`) - -Chemins de recherche (contrat `vm-distribution-manifest.json`) : - -```text -/usr/share/applications/ -/usr/local/share/applications/ -/var/lib/snapd/desktop/applications/ -/var/lib/flatpak/exports/share/applications/ -~/.local/share/flatpak/exports/share/applications/ -~/.local/share/applications/ -/usr/share/applications/kde4|kde5/ # KDE -``` - -Spécification champ `Icon` : [Desktop Entry Spec — Recognized keys](https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys). - -Chaque entrée `gridVisible` génère un **appIcon** avec `vmPaths[]` résolus. - ---- - -## 7. gsettings / configuration par toolkit - -### 7.1 Cinnamon (Linux Mint) - -| Donnée | Commande | -|--------|----------| -| Thème Cinnamon | `gsettings get org.cinnamon.theme name` | -| GTK | `gsettings get org.cinnamon.desktop.interface gtk-theme` | -| Icônes | `gsettings get org.cinnamon.desktop.interface icon-theme` | -| Fond | `gsettings get org.cinnamon.desktop.background picture-uri` | -| Police UI | `gsettings get org.cinnamon.desktop.interface font-name` | -| Police mono | `gsettings get org.cinnamon.desktop.interface monospace-font-name` | -| Favoris panel | `gsettings get org.cinnamon favorite-apps` | -| Applets | `gsettings get org.cinnamon enabled-applets` | - -Référence interne : [`procedure-clonage-os-depuis-vm.md`](procedure-clonage-os-depuis-vm.md) annexe B.1. - -### 7.2 GNOME (Ubuntu, Rocky, Fedora, …) - -| Donnée | Schéma gsettings | -|--------|------------------| -| GTK / icônes / curseur | `org.gnome.desktop.interface` | -| Fond | `org.gnome.desktop.background` | -| Favoris dock | `org.gnome.shell favorite-apps` | -| Accent (GNOME 45+) | `org.gnome.desktop.interface accent-color` | - -### 7.3 KDE Plasma - -| Donnée | Commande | -|--------|----------| -| Thème icônes | `kreadconfig6 --file kdeglobals --group Icons --key Theme` | -| Fond | configuration `lookandfeel` / `~/.config/plasma-org.kde.plasma.desktop-appletsrc` | - ---- - -## 8. Checklist agent avant collecte ManV - -```bash -# 1. Vendor présent dans le catalogue médias -node usr/lib/capsuleos/tools/lab/ensure-vm-manifest-vendor.mjs --id linux- --write - -# 2. Affiner vm-manifest-media-catalog.json (panel, fonts, wallpaperCandidates, branding) - -# 3. VM joignable + session graphique -node usr/lib/capsuleos/tools/lab/run-manifest-replication-chain.mjs --id linux- --dry-run - -# 4. Collecte -node usr/lib/capsuleos/tools/lab/collect-vm-distribution-manifest.mjs --id linux- --write --ssh - -# 5. Vérifier sections media dans proc//distribution-manifest.json -# entryCount > 0 pour : mimetypes, places, symbolic, panel, wallpapers, appIcons, fonts - -# 6. Smoke + playbook -node usr/lib/capsuleos/tools/lab/smoke-vm-distribution-manifest.mjs --id linux- -``` - -**Seuils Mint (référence lab 22.3)** : - -| Section | Attendu | -|---------|---------| -| `applications.gridVisibleCount` | ~90+ | -| `media.wallpapers` | ~40 (find `linuxmint/`) | -| `media.appIcons` | = gridVisible | -| `media.panel.entryCount` | ≥ 2 (nemo, firefox) | -| `media.places.entryCount` | 8 (Mint-Y) | -| `media.symbolic` | ≥ 7 actions/places | - ---- - -## 9. Enrichir le catalogue pour un nouveau vendor - -1. Copier le bloc toolkit (`gnome` | `cinnamon` | `kde`) via `extends` -2. Renseigner **obligatoirement** : - - `iconPack`, `iconThemeFallbacks` - - `panel[]` (lanceurs P0 du panel/dock VM) - - `fonts[].vmCandidates` (polices RPM/DEB du vendor) - - `branding.vmCandidates` - - `wallpaperCandidates` (au moins le fond par défaut) - - extensions vendor : `emblems`, `mimetypes` supplémentaires (ex. Yaru) -3. Lancer une collecte à blanc, comparer `playbook` (`pull` vs `drift` vs `skip`) -4. Documenter les écarts dans `proc//` puis **ManA** - ---- - -## 10. Liens projet - -| Document | Rôle | -|----------|------| -| [`convention-manifest-vm.md`](convention-manifest-vm.md) | Chaîne ManΣ | -| [`politique-assets.md`](politique-assets.md) | Zones autorisées | -| [`procedure-replication-formelle.md`](procedure-replication-formelle.md) | Parité post-import | -| Skill `vm-distribution-manifest` | Routage agent | diff --git a/root/docs/repertoire-os.md b/root/docs/repertoire-os.md deleted file mode 100755 index 7193cddf..00000000 --- a/root/docs/repertoire-os.md +++ /dev/null @@ -1,208 +0,0 @@ -# Répertoire des systèmes d'exploitation CapsuleOS - -Catalogue **exhaustif et évolutif** des OS simulés — humain + machine. -Source JSON : [`etc/capsuleos/os-registry.json`](../../etc/capsuleos/os-registry.json) (régénérer via `build-os-registry.mjs`). -Sourcing design & licences : [`etc/capsuleos/os-sourcing.json`](../../etc/capsuleos/os-sourcing.json). - -**Documents liés** : [manifeste-noyau.md](manifeste-noyau.md) · [scalabilite-noyau.md](scalabilite-noyau.md) · [equipe-agentique.md](equipe-agentique.md) · [familles-os.md](familles-os.md) - ---- - -## Statistiques (juin 2026 — waves 1–5) - -| Métrique | Valeur | -|----------|--------| -| Entrées totales | 57 | -| Actives (pick-os) | **12** | -| Planifiées | 38 | -| Stubs / recherche | 11 | -| Kernels | 15 | -| Branches Linux | 12 | - -### Catalogue pick-os (waves 1–5) - -| ID | Famille | Wave | -|----|---------|------| -| `linux-mint` | Linux | 1 | -| `linux-ubuntu` | Linux | 1 | -| `linux-opensuse` | Linux | 1 | -| `windows-11` | Windows | 1 | -| `windows-10` | Windows | 1 | -| `macos-sonoma` | macOS | 1 | -| `ios-15` | iOS | 1 | -| `linux-fedora` | Linux | 2 | -| `linux-rocky` | Linux | 3 (référence GNOME) | -| `linux-alma` | Linux | 4 (dérivé Rocky) | -| `linux-anduinos` | Linux | 5 | -| `linux-popos` | Linux | 5 (COSMIC) | - -> Skins archivés : `?devSkin=`. Réactivation d’une entrée : `reactivate-os.mjs`. Voir [manifeste-kernels.md](manifeste-kernels.md). - ---- - -## Niveaux de priorité (tiers) - -| Tier | Signification | Exemples | -|------|---------------|----------| -| **P0** | Référence pédagogique — régression interdite | Linux Mint | -| **P1** | Production — checklist missions | Ubuntu, Rocky GNOME, MX-KDE, Windows 11, Android | -| **P2** | Prochaine vague — forte demande terrain | Arch, elementary, ChromeOS, macOS Sequoia | -| **P3** | Extension catalogue | Zorin, iOS 17, FreeBSD | -| **P4** | Recherche — faisabilité sans engagement UX | NixOS, Haiku, HarmonyOS, ReactOS | - ---- - -## Linux — actifs - -| ID | Nom | Toolkit | Shell | Explorateur | Maturité | Façade | -|----|-----|---------|-------|-------------|----------|--------| -| `linux-mint` | Linux Mint | Cinnamon | cinnamon | Nemo | 95 % | `OS/linux/families/debian/mint/` | -| `linux-ubuntu` | Ubuntu 25.10 | GNOME | gnome-shell | Fichiers | 75 % | `.../ubuntu/` | -| `linux-rocky` | Rocky Linux | GNOME | gnome-shell | Nautilus | 80 % | `.../rocky/` | -| `linux-fedora` | Fedora | GNOME | gnome-shell | Fichiers | 65 % | `.../fedora/` | -| `linux-mx-kde` | MX Linux KDE | KDE | Plasma | Dolphin | 85 % | `.../mx-kde/` | -| `linux-debian-kde` | Debian KDE | KDE | Plasma | Dolphin | 70 % | `.../debian-kde/` | -| `linux-opensuse` | openSUSE | KDE | Plasma | Dolphin | 85 % | `.../opensuse/` | -| `linux-popos` | Pop!_OS | COSMIC | cosmic | Fichiers COSMIC | 55 % | `.../popos/` | -| `linux-anduinos` | AnduinOS | GNOME-like | anduin-shell | Fichiers | 50 % | `.../anduinos/` | - -## Linux — planifiés (extrait) - -| ID | Nom | Toolkit | Tier | Sources design | -|----|-----|---------|------|----------------| -| `linux-arch` | Arch Linux | configurable | P2 | [Arch Wiki](https://wiki.archlinux.org/) | -| `linux-elementary` | elementary OS | Pantheon | P2 | [elementary HIG](https://docs.elementary.io/hig/) | -| `linux-manjaro-kde` | Manjaro KDE | KDE | P2 | Plasma / Breeze | -| `linux-steamos` | SteamOS | KDE + Gamescope | P3 | Steam Deck UI | -| `linux-slackware` | Slackware | Xfce | P4 | Xfce docs | -| `linux-nixos` | NixOS (concept) | — | P4 | NixOS manual | - ---- - -## Windows — actifs (11 versions) - -| ID | Version | Shell simulé | Tier | Façade | -|----|---------|--------------|------|--------| -| `windows-95` … `windows-me` | 9x / NT4 era | classique | P2 | `OS/windows/versions/{95,98,me,2000}/` | -| `windows-xp` | XP | Luna / Royale | P1 | `.../xp/` | -| `windows-vista` … `windows-8.1` | Aero / Metro | P2 | `.../vista/` … `8.1/` | -| `windows-10` | 10 | Fluent | P1 | `.../10/` | -| `windows-11` | 11 | Win11 | P1 | `.../11/` | - -**Source design** : [Microsoft Windows app design](https://learn.microsoft.com/windows/apps/design/) -**Noyau partagé** : `OS/windows/kernel/js/`, `CapsuleWindow`, `windowManager.js` - ---- - -## macOS & iOS - -| ID | Nom | Statut | Tier | Sources | -|----|-----|--------|------|---------| -| `macos-sonoma` | macOS Sonoma | actif | P1 | [Apple HIG](https://developer.apple.com/design/human-interface-guidelines/) | -| `macos-sequoia` | macOS Sequoia | planifié | P2 | idem | -| `macos-ventura` | macOS Ventura | planifié | P2 | idem | -| `macos-monterey` | macOS Monterey | planifié | P3 | idem | -| `ios-15` | iOS 15 | actif (minimal) | P2 | Apple HIG / iOS patterns | -| `ios-17` / `ios-18` | iOS récents | planifié | P3 | idem | - ---- - -## Mobile & autres - -| ID | Famille | Statut | Toolkit | Sources | -|----|---------|--------|---------|---------| -| `android-vanilla` | Android | actif | Material You | [Material Design 3](https://m3.material.io/) | -| `android-lineage` | Android | planifié | AOSP | AOSP / Lineage | -| `chromeos` | ChromeOS | planifié | Chrome shell | [Chromium OS](https://www.chromium.org/chromium-os/) | -| `freebsd` … `ghostbsd` | BSD | planifié | variable | FreeBSD Handbook | -| `harmonyos` | HarmonyOS | stub | — | docs Huawei (usage restreint) | -| `haiku` / `reactos` | Rétro | stub | — | communautés respectives | - ---- - -## Toolkits transverses - -Un **toolkit** = contrat visuel + pack assets + gabarits apps réutilisables. - -| Toolkit ID | DE / shell réel | Templates explorateur | Pack assets | -|------------|-----------------|----------------------|-------------| -| `cinnamon` | Cinnamon | `nemo` | `toolkits/cinnamon` | -| `gnome` | GNOME 46+ | `nemo-gnome`, `nemo` | `toolkits/gnome` | -| `kde` | Plasma 6 / Breeze | `dolphin` | `toolkits/kde` + `icons/kde` | -| `cosmic` | Pop!_OS COSMIC | `nemo-cosmic` | `toolkits/cosmic` | -| `pantheon` | elementary | `nemo-gnome` | `toolkits/pantheon` | -| `xfce` | Xfce | `nemo` (Thunar-like) | `toolkits/xfce` | -| `windows-shell` | Win32 / WinUI | — | `toolkits/windows` | -| `macos-aqua` | Aqua | — | `toolkits/macos-aqua` | -| `android-material` | Material You | — | `toolkits/android-material` | - -**Règle de scalabilité** : ajouter une distro = choisir un toolkit existant + surcouche `vendors/` — pas un fork noyau. - ---- - -## Contrat par entrée (champs JSON) - -Chaque entrée du registre expose : - -```json -{ - "id": "linux-mx-kde", - "family": "linux", - "displayName": "MX Linux KDE", - "tier": "P1", - "status": "active", - "maturity": 0.85, - "facade": "OS/linux/families/debian/mx-kde/index.html", - "skin": "home/Debian/MX-KDE/index.html", - "toolkit": "kde", - "shell": "plasma", - "fileManager": "Dolphin", - "explorerTemplate": "dolphin", - "embedKey": "mxkde", - "bodyId": "mx-kde", - "skills": ["os-linux"], - "sources": [{ "type": "hig", "label": "…", "url": "…" }] -} -``` - -Profil skin complet (évolution) : [`etc/capsuleos/examples/mint.skin.profile.json`](../../etc/capsuleos/examples/mint.skin.profile.json) - ---- - -## Workflow ajout d'un OS - -1. **Enregistrer** l'entrée dans `build-os-registry.mjs` → régénérer JSON. -2. **Choisir** toolkit + packs assets (`assets/manifest.json`). -3. **Créer** façade `OS//…/index.html` + miroir `home/` si Linux. -4. **Déclarer** `skin.profile.json` (ou variables `CAPSULE_*` dans index). -5. **Staffer** agents : skill `os-` + rôle (integrator / designer / developer). -6. **Valider** : `node usr/lib/capsuleos/tools/validate-all.mjs` ; offline `file://`, embed ; [ajouter-os-scalable.md](ajouter-os-scalable.md). -7. **Documenter** sources design + licence icônes. - ---- - -## Commandes - -```bash -# Régénérer le répertoire OS -node usr/lib/capsuleos/tools/build-os-registry.mjs - -# Lister les entrées actives (jq) -jq '.entries[] | select(.status=="active") | .id' etc/capsuleos/os-registry.json -``` - ---- - -## Sourcing & licences assets - -| Type | Source recommandée | Licence | -|------|-------------------|---------| -| Icônes KDE | Breeze, Papirus | LGPL / CC-BY-SA | -| Icônes GNOME | Adwaita, Symbolic | LGPL / CC-BY-SA | -| Material Android | Material Symbols | Apache 2.0 | -| Windows / macOS | **Recreation stylisée** CapsuleOS | Original — pas de pixels Apple/Microsoft | -| Logos distro | Branding officiel (usage éducatif) | Vérifier charte marque | - -> CapsuleOS enseigne les **gestes** et la **structure** — pas la copie pixel-par-pixel de marques déposées. - -*Révision : après chaque nouvelle entrée `status: active`.* diff --git a/root/docs/roadmap.md b/root/docs/roadmap.md deleted file mode 100755 index e7e81c97..00000000 --- a/root/docs/roadmap.md +++ /dev/null @@ -1,316 +0,0 @@ -# Roadmap CapsuleOS — vision pédagogique - -> **⚠ Ne pas utiliser ce document pour prioriser le travail agent ou lab.** -> **Exécution unique** : [plan-maitre-reproduction-os.md](plan-maitre-reproduction-os.md) · [plan-phase-1-gnome-triplet.md](plan-phase-1-gnome-triplet.md) · [README.md](README.md) -> **Décision** : `run-capsule-pipeline.mjs --id ` - -Plan de livraison **pédagogique** (maturité estimée, vision terrain). -Les pourcentages et priorités ci-dessous sont indicatifs — le **backlog §16** du plan maître fait foi. - -**Références :** - -- [Applications Linux par distro](apps-linux-par-distro.md) — inventaire apps + mappings `data-link` -- [Familles d’OS](familles-os.md) — cartographie dépôt -- [Arborescence](arborescence.md) — flux noyau / skins / embeds -- [Manifeste noyau](manifeste-noyau.md) — hydratation, routage assets -- [Scalabilité noyau](scalabilite-noyau.md) — jalons S2–S6 -- [Politique assets](politique-assets.md) — zones autorisées, scripts migration -- [contrib.md § Checklist contrat](../../contrib.md#checklist-contrat-avant-merge-ou-release) — critères release -- Skill agents : [kernel-supervisor](../skills/kernel-supervisor/SKILL.md), [asset-pipeline](../skills/asset-pipeline/SKILL.md) - ---- - -## Vision et critères de succès - -CapsuleOS est une **sandbox web** (HTML/CSS/JS, hors ligne) pour s’approprier les interfaces de bureau, s’entraîner aux usages courants et gagner en autonomie face aux démarches en ligne — par l’expérimentation et la gamification. - -Un jalon est **réussi** lorsque : - -1. Un conseiller numérique peut guider un public illectronique sur **au moins un bureau complet** sans serveur HTTP (double-clic / offline SW). -2. Les **applications par défaut** du système cible sont reconnaissables (noms, icônes, emplacement shell). -3. Le parcours **checklist / missions** est adapté au vocabulaire local (Nemo vs Dolphin vs Fichiers). -4. La [checklist contrat](../../contrib.md#checklist-contrat-avant-merge-ou-release) est validée pour les skins livrés. - ---- - -## État des lieux (juin 2026) - -### Socle technique — solide - -| Composant | État | -|---|---| -| Portail `index.html` + `pick-os.js` | ✅ 8 Linux + Windows + macOS + Android listés | -| Noyau Linux `usr/lib/capsuleos/shells/linux/` | ✅ fenêtres, explorateurs, embed offline | -| FS simulé `home/public/` + manifestes | ✅ partagé inter-OS | -| Pipeline embed | ✅ `build-linux-embed.mjs` — 30 templates, 11 skins | -| **Catalogue apps canonique** | ✅ `slots-manifest` + `presentation-bindings` + `generate-store-catalog.mjs` — [architecture-catalogue-apps.md](architecture-catalogue-apps.md) | -| Validateurs UI | ✅ `validate-all` — chrome toolkits, GNOME apps, overview icons, resize bounds, **StoreΣ** | -| Doc agents `root/` | ✅ skills, AGENTS.md | -| Mappings apps erronés (Fedora, Pop!_OS, Debian-KDE) | ✅ corrigés juin 2026 | -| App `text_editor` | ✅ créée ; skins et épinglages partiels | -| Branche GNOME RHEL | ✅ `linux-rocky` référence — propagation Fedora / Alma / Ubuntu / AnduinOS | - -### Linux — maturité par skin - -| Distribution | Bureau | Maturité estimée | Priorité roadmap | -|---|---|---|---| -| **Linux Mint** | Cinnamon | ~95 % — référence P0 | P0 — figer | -| **Rocky Linux 10** | GNOME | ~85 % — référence GNOME RHEL | P1 — polish + réplication scénarios Alma | -| **AlmaLinux 10** | GNOME | ~90 % — **17 contrats** · overview **15/15** | P1 — Vc VM · réplication siblings | -| **KDE neon** | Plasma | **~93 %** — réf. Plasma P1, v4 P0–P1 ✅ | **P1** — [roadmap v4](inventaires/linux-kde-neon-roadmap-v4.md) | -| **MX Linux KDE** | Plasma | ~85 % | P1 | -| **openSUSE** | Plasma | ~85 % | P1 | -| **Ubuntu 25.10** | GNOME | ~75 % | P1 | -| **Fedora** | GNOME | ~70 % (hérite Rocky) | P1 | -| **Debian KDE** | Plasma | ~70 % | P2 | -| **Pop!_OS** | COSMIC | ~55 % | P2 | -| **AnduinOS** | GNOME Win11-like | ~50 % | P3 | - -Détail Rocky : [inventaire-parite-rocky.md](inventaire-parite-rocky.md) · référence branche : [branche-redhat-gnome.md](branche-redhat-gnome.md). - -### Autres familles — amorcées - -| Famille | Entrées | État indicatif | -|---|---|---| -| Windows | 11 versions sous `OS/windows/versions/` | Coquilles / styles variés — noyau `kernel/` | -| macOS | Sonoma | Façade + Finder | -| Android | Vanilla Ice Cream | Apps messages, contacts, appels | -| iOS | 15 | Entrée minimale | -| Arch / Slackware Linux | — | Prévus, non démarrés | - -### Dépôt - -- Historique Git actif (`main` sur GitHub). -- `.gitignore` `.cursor/` en place. -- **Juin 2026** : répertoire OS scalable — `etc/capsuleos/os-registry.json` (**57 entrées**), docs [manifeste-noyau](docs/manifeste-noyau.md), [repertoire-os](docs/repertoire-os.md), [scalabilite-noyau](docs/scalabilite-noyau.md), [equipe-agentique](docs/equipe-agentique.md), arborescence `usr/share/capsuleos/assets/`. - ---- - -## Définition du « skin abouti » (DoD) - -Checklist applicable à **chaque** bureau Linux avant badge « complet » sur le hub : - -- [ ] Façade `OS/linux/families/...` et skin `home/...` synchronisées (ou `` documenté) -- [ ] Variables `CAPSULE_*` conformes ([contrib.md § Linux](../../contrib.md#linux-capsuleos--oslinux)) -- [ ] Shell navigable : menu / dock / panel, horloge, tray, retour accueil -- [ ] Explorateur branché sur `home/public/` avec le bon template (`nemo`, `dolphin`, `nemo-gnome`, `nemo-cosmic`) -- [ ] Apps par défaut épinglées selon [apps-linux-par-distro.md](apps-linux-par-distro.md) -- [ ] `*.skin.css` pour chaque app ouverte depuis le shell (14 cibles max.) -- [ ] `content/strings.json` — titres fenêtre et textes checklist spécifiques -- [ ] Embed régénéré ; test `file://` + coupure réseau (SW) -- [ ] Revue manuelle checklist contrat cochée - ---- - -## Phases - -```mermaid -flowchart LR - P0[Phase 0\nFondations] --> P05[Phase 0.5\nAssets noyau] - P05 --> P1[Phase 1\nParité apps Linux] - P1 --> P2[Phase 2\nShells UX] - P2 --> P3[Phase 3\nPédagogie] - P3 --> P4[Phase 4\nExtension] -``` - ---- - -### Phase 0 — Fondations (priorité immédiate) - -**Objectif :** base de travail reproductible et testable. - -| # | Livrable | Détail | -|---|---|---| -| 0.1 | **Premier commit Git** | Code applicatif + `.gitignore` + doc `root/` | -| 0.2 | **Matrice de smoke tests** | 22 OS actifs + hubs (`index.html`, `home/Debian/`, `OS/windows/`) : logo, navigation, 1 app ; gate `validate-link-integrity.mjs` | -| 0.3 | **Script ou checklist release** | `validate-assets-all.mjs` + `validate-capsule.mjs` + `audit-data-links.mjs` ; `build-linux-embed.mjs` si skins touchés | -| 0.4 | **Hub Linux** | Badges « complet / beta » sur `home/Debian/index.html` selon DoD | - -**Critère de sortie :** un contributeur peut cloner, servir en local, ouvrir Mint + un skin beta sans blocage. - ---- - -### Phase 0.5 — Consolidation assets noyau (bloquante) - -**Objectif :** terminer la migration des images vers `usr/share/capsuleos/assets/`, centraliser le routage (`CapsuleResource`, `assets/manifest.json`) et garantir une hydratation cohérente file/http. - -**Supervision agents :** skill [`kernel-supervisor`](../skills/kernel-supervisor/SKILL.md) — délègue à [`asset-pipeline`](../skills/asset-pipeline/SKILL.md) (fichiers) et [`kernel-guardian`](../skills/kernel-guardian/SKILL.md) (JS noyau + embeds). - -**État actuel (juin 2026) :** Phase 0.5 **complète** — assets centralisés, profils sans `CAPSULE_*_BASE` redondants, boot `resource` → `skin-boot`, `CapsuleResource.resolve()` comme voie unique. - -| # | Livrable | Détail | -|---|---|---| -| 0.5.1 | **Gate CI locale** | `node usr/lib/capsuleos/tools/validate-asset-zones.mjs` → exit 0 | -| 0.5.2 | **Vague Linux** | `OS/linux/families/*/assets/`, `home/*/assets/`, `./assets/images/toolkits/gnome/apps/` → `./assets/images/vendors/` et `toolkits/` | -| 0.5.3 | **Vague mobile** | `OS/android/assets/`, `OS/ios/15/assets/` → packs `android-material`, `ios` | -| 0.5.4 | **Réécriture sources** | `rewrite-asset-paths.mjs` ; plus de références `OS/*/assets/` dans HTML/CSS/JS | -| 0.5.5 | **Manifest + pick-os** | `build-assets-manifest.mjs`, `build-pick-os.mjs` | -| 0.5.6 | **Profils skin** | `skin.profile.json` : `CAPSULE_MEDIA_BASE` → chemins logiques `./assets/...` où pertinent | -| 0.5.7 | **Jalon S5 (partiel)** | Réduire les `CAPSULE_*_BASE` ad hoc ; privilégier `CapsuleResource.resolve()` | -| 0.5.8 | **Embed + smoke** | `build-linux-embed.mjs` ; Mint P0 HTTP + `file://` | -| 0.5.9 | **Intégrité liens** | `validate-link-integrity.mjs` ; façades Linux + chemins physiques Windows/mobile/macOS | - -**Ordre recommandé :** 0.5.2 → 0.5.4 → 0.5.5 → 0.5.6 → 0.5.8 → 0.5.3 (Android/iOS) → 0.5.1 final. - -**Critère de sortie :** validateur vert ; jalons [scalabilite-noyau](scalabilite-noyau.md) S2 confirmé, S5 amorcé ; aucun agent skin ne crée d’images sous `OS/` ou `home/*/assets/`. - -**Blocage :** la Phase 1 ne démarre pas sur une famille tant que ses chemins legacy figurent encore dans le rapport `validate-asset-zones`. - ---- - -### Phase 1 — Parité applications Linux - -**Objectif :** chaque skin atteint le catalogue apps de son OS réel (voir [apps-linux-par-distro.md](apps-linux-par-distro.md)). - -#### 1.A — Compléter les gabarits manquants - -| App CapsuleOS | Skins à couvrir | Notes | -|---|---|---| -| `text_editor` | Mint, Ubuntu, Fedora, Pop!_OS, KDE, AnduinOS | Skins GNOME / KDE / COSMIC / xed | -| `update_manager` | Fedora (GNOME Software), MX-KDE | Overrides `_ubuntu` / `_kde` | -| Skins CSS manquants | Fedora, Pop!_OS, AnduinOS | 14 × `*.skin.css` cible | - -#### 1.B — Épingler et brancher le shell - -| Skin | Actions | -|---|---| -| **Mint** | Panel : Celluloid, visionneurs ; menu : Logithèque → `update_manager`, xed → `text_editor` | -| **Ubuntu** | Overview : lier apps GNOME ; dock : missions optionnelles | -| **Fedora** | Dock : `update_manager` ; overview : Showtime → `lecteur_multimedia` | -| **Pop!_OS** | Skin Nautilus Cosmic ; compléter 9 skins restants | -| **MX-KDE** | Discover panel + menu → `update_manager_kde` | -| **openSUSE** | Kate → `text_editor` ; Discover panel cliquable | -| **AnduinOS** | 12 favoris menu restants (coquilles GNOME) ; raccourci bureau « À propos » | - -#### 1.C — Ordre de traitement recommandé - -1. **Mint** — figer la référence (polish uniquement) -2. **Ubuntu + Fedora** — duo GNOME présentable -3. **MX-KDE + openSUSE** — duo KDE (assets déjà riches) -4. **Debian-KDE** — alignement sur MX/openSUSE -5. **Pop!_OS** — COSMIC (dépend du socle GNOME stable) -6. **AnduinOS** — différenciateur Win11-like - -**Critère de sortie :** les 8 Linux passent le DoD apps (colonnes ✅ sur au moins panel + menu dans apps-linux-par-distro). - ---- - -### Phase 2 — Fidélité UX des shells - -**Objectif :** l’enveloppe du bureau (pas seulement les apps) ressemble à l’original. - -Regroupement par **famille de bureau** pour mutualiser le JS : - -| Famille | Skins | Travaux | -|---|---|---| -| **Cinnamon** | Mint | Menu contextuel bureau ; liste fenêtres panel | -| **GNOME** | **Rocky** (réf.), Ubuntu, Fedora, Alma, AnduinOS | ✅ Rocky : Aperçu, QS, menu bureau, **Paramètres** (13 panneaux SUSE), chrome CSD adaptatif · reste : polish visuel P1, recherche Aperçu, Bluetooth QS | -| **COSMIC** | Pop!_OS | Workspaces, catalogue Applications, menu alimentation | -| **KDE Plasma** | MX-KDE, Debian-KDE, openSUSE | Discover, popovers volume/calendrier, icônes panel | - -#### Chantier Rocky GNOME (juin 2026) - -| Jalon | État | Notes | -|---|---|---| -| Chrome fenêtre adaptatif clair/sombre | ✅ | `window-chrome.gnome.base.css`, tokens `--capsule-chrome-*` | -| Isolation chrome par toolkit | ✅ | `toolkit-*/chrome.css` + validateurs dédiés | -| Slot `themes` (Paramètres) | ✅ | Sidebar GCC, panneaux doc [SUSE SLED 15 SP7](https://documentation.suse.com/sled/15-SP7/html/SLED-all/cha-gnome-settings.html), Apparence fonctionnelle | -| Ouverture contextuelle Paramètres | ✅ | Aperçu → Wi-Fi · QS → Apparence · bureau → Écrans | -| Captures lab 15 scènes | ✅ | Aperçu, QS, Loupe, Papers, Paramètres (Apparence/Écrans) — VM Paramètres à collecter | -| Scénarios overview GNOME (Alma) | ✅ | **17 contrats** C15–C30 · audit **15/15** · backlog vide | -| Polish P1 (Nautilus, Firefox, top bar) | 🟡 | Tokens vs captures VM · Rocky Loupe/Papers sans scénarios | -| Apps P2 (Baobab, System Monitor) | ⬜ | Grille Aperçu OK, slots CSD manquants | - -#### Coquilles utilitaires (P1 → P2) - -| App | Usage | -|---|---| -| `calculator` | GNOME, Mint, AnduinOS | -| `clocks` / `calendar` | Fedora dash, Ubuntu overview, AnduinOS menu | -| `photos` | AnduinOS — variante enrichie de `visionneur_images` | - -**Critère de sortie :** retours terrain « je reconnais mon bureau » sur 4 distros minimum (Mint, **Rocky**, Ubuntu, une KDE). - ---- - -### Phase 3 — Pédagogie et contenu - -**Objectif :** la gamification sert les démarches en ligne, pas seulement la découverte UI. - -| # | Livrable | Détail | -|---|---|---| -| 3.1 | **Checklist par distro** | Missions et libellés dans `content/strings.json` (ex. « Lance Dolphin ») | -| 3.2 | **Scénarios `home/public/`** | Documents, Téléchargements, démarches simulées | -| 3.3 | **Parcours multi-OS** | Comparer Cinnamon vs GNOME vs KDE en 3 sessions | -| 3.4 | **Tests terrain** | Conseillers numériques ; itérations ciblées | -| 3.5 | **Accessibilité** | Contraste, clavier, lecteurs d’écran sur portail + 2 skins | - -**Critère de sortie :** au moins un parcours complet validé en situation réelle (MFN / France Services). - ---- - -### Phase 4 — Extension et consolidation - -**Objectif :** élargir le catalogue et industrialiser la maintenance. - -#### Jalon — Wave store extension (juin 2026) - -| # | Livrable | Détail | -|---|---|---| -| 4.0 | **Analyse magasins cross-OS** | [analyse-magasins-apps-cross-os.md](analyse-magasins-apps-cross-os.md) · contrat draft [`store-installable-apps.json`](../etc/capsuleos/contracts/store-installable-apps.json) | -| 4.0b | **Scénarios magasin S1+** | Extension `software-user-scenarios` · install simulée · sessionStorage · top 10 apps Mint → GNOME | -| 4.0c | **Gate StoreΣ** | `validate-store-installable-catalog.mjs` · smoke install depuis Logiciels / Logithèque | - -Principe : ground truth VM par défaut ; l'utilisateur ajoute des apps via le magasin natif de sa distro (apt / rpm / flatpak / snap). - -| # | Livrable | Détail | -|---|---|---| -| 4.1 | **Linux Arch + Slackware** | Pattern `os-stub`, façades `OS/linux/families/` | -| 4.2 | **Windows** | Prioriser 95, XP, 7, 10, 11 ; DoD adapté explorateur | -| 4.3 | **macOS / Android** | Aligner sur DoD Linux simplifié | -| 4.4 | **CI légère** | Régénération embed + smoke HTTP sur entrées `pick-os.js` | -| 4.5 | **Perf offline** | Poids embed, lazy load gabarits lourds (LibreWriter) | -| 4.6 | **iOS / BSD / ChromeOS** | Stubs ou report explicite | - ---- - -## Calendrier indicatif - -Estimation **effort relatif**, pas des dates figées — ajuster selon disponibilité équipe. - -| Phase | Durée indicative | Dépendances | -|---|---|---| -| Phase 0 | 1 semaine | — | -| Phase 0.5 | 1–2 semaines | Phase 0 (bloquante avant Phase 1 Linux) | -| Phase 1 | 3–4 semaines | Phase 0 + 0.5 (validateur assets vert) | -| Phase 2 | 3–4 semaines | Phase 1 (partiel OK par famille) | -| Phase 3 | 2 semaines | Phase 1 sur Mint + 1 GNOME + 1 KDE | -| Phase 4 | continu | Phases 1–3 | - ---- - -## Risques et mitigations - -| Risque | Mitigation | -|---|---| -| Duplication home / façades `OS/` | DoD : toute mod shell → vérifier les deux entrées (`pick-os.js` vs hub `home/`) | -| Embed stale après merge | Hook ou checklist release obligatoire | -| Scope creep (trop d’apps) | Coquilles UI statiques OK ; pas de logique métier complète | -| Poids repo (assets KDE) | Mutualiser icônes ; pas de duplication inutile | -| Migration assets interrompue | Phase 0.5 + `kernel-supervisor` ; gate `validate-asset-zones` avant merge | -| Confusion checklist / apps OS | `checklist` = pédagogie CapsuleOS uniquement ; jamais mapper sur Calendrier / Discover | - ---- - -## Suivi des jalons - -Cocher ici ou dans les PR associées : - -- [x] Phase 0 — fondations (gel + réactivation wave 1, juin 2026) -- [x] Phase 0.5 — consolidation assets noyau (juin 2026) -- [ ] Phase 1 — parité apps (3/8 Linux DoD complet — Mint, Ubuntu, openSUSE ; Rocky ~85 % apps cœur) -- [~] Phase 2 — shells UX (**Rocky GNOME** ~85 % · **Alma** ~90 % scénarios ; Mint ~95 % ; 2/4 bureaux « reconnus ») -- [~] Phase 3 — pédagogie validée terrain (checklist Rocky à rédiger · Alma **17 contrats** OK) -- [ ] Phase 4 — Arch + CI + 1 jalon Windows - -**Dernière mise à jour :** 10 juin 2026 — campagne Alma **C26–C30** (17 contrats scénarios, overview 15/15) · analyse [magasins cross-OS](analyse-magasins-apps-cross-os.md) · audit [point-etape-2026-06.md](point-etape-2026-06.md). diff --git a/root/docs/routage-donnees-medias.md b/root/docs/routage-donnees-medias.md deleted file mode 100755 index ac0d4468..00000000 --- a/root/docs/routage-donnees-medias.md +++ /dev/null @@ -1,156 +0,0 @@ -# Routage des données et médias - -Référence pour des liens **robustes** en `file://` et en **HTTP** — HTML statique, CSS, JSON, fetch et `CapsuleResource`. - -**Skill agent** : [`../skills/link-routing/SKILL.md`](../skills/link-routing/SKILL.md) - ---- - -## Deux couches de résolution - -| Couche | Moment | Mécanisme | Exemple | -|--------|--------|-----------|---------| -| **Statique HTML** | Parse DOM (immédiat) | `src` / `href` relatifs au document ou `` | `` | -| **Dynamique JS** | Après boot scripts | `resolveCapsuleResourceUrl()` / `CapsuleResource.resolve()` | `mainMenu.js`, `contentLoader` | -| **CSS** | Feuille chargée | `url()` relatifs au fichier CSS | `background-image` | -| **Données** | fetch / embed | `CAPSULE_CONTENT_ROOT`, manifest, embed | `strings.json`, apps | - -**Piège** : `./assets/…` dans le **HTML du body** avant les scripts de fin de page **n’est pas** résolu par `CapsuleResource` — le navigateur charge l’URL telle quelle (souvent `home/…/assets/` inexistant → 404 en `file://`). - ---- - -## Chemins logiques vs physiques - -| Style | Usage | `file://` | -|-------|--------|-----------| -| **Logique** `./assets/`, `./icons/` | JS runtime, templates injectés après boot | OK si `resolveCapsuleResourceUrl` | -| **Physique** `../../../usr/share/capsuleos/assets/…` | `src` / `href` / `favicon` dans HTML statique | OK | -| **Portail** `./usr/share/capsuleos/assets/…` | `index.html` racine (sans ``) | OK | - -Règle projet : packs sous `usr/share/capsuleos/assets/` uniquement ([politique-assets.md](politique-assets.md)). - ---- - -## Boot Linux (façade + skin) - -Ordre minimal pour la couche **dynamique** : - -``` -user-home.js -→ capsule-assets-manifest.js -→ capsule-skin-profiles.js -→ capsule-resource.js -→ capsule-skin-boot.js -→ (scripts shell, contentLoader, …) -``` - -Profil : `assets.assetsBase` + `toolkitPack` + `iconPacks` — pas de `CAPSULE_MEDIA_BASE` dans `capsuleGlobals`. - -Façade : `` — les scripts `usr/lib/` restent en chemins depuis la racine du dépôt (voir [raccordement-noyau-os.md](raccordement-noyau-os.md)). - ---- - -## Préfixes logiques (`CapsuleResource`) - -| Préfixe | Résolu vers | -|---------|-------------| -| `./assets/` | `CAPSULE_ASSETS_BASE` / profil | -| `./icons/kde/` | pack `icons/kde` | -| `./icons/cinnamon/` | pack `icons/cinnamon` | -| `./media/` | `CAPSULE_TOOLKIT_ASSETS_BASE` (legacy → toolkits) | - -Manifeste : `usr/share/capsuleos/assets/manifest.json` · embed : `var/lib/capsuleos/generated/capsule-assets-manifest.js`. - ---- - -## Données utilisateur simulées - -| Ressource | Chemin physique | API | -|-----------|-----------------|-----| -| Home public | `home/public/` | `CapsuleUserHome.fromRepoDepth(n)` | -| Manifeste Nemo | `home/public/.capsule-manifest.json` | `CapsuleUserHome.manifestPath()` | -| Strings skin | `./content/strings.json` | fetch ou embed | -| Apps Linux | `usr/share/capsuleos/linux/apps/` | `contentLoader` + embed | - -`file://` : embed obligatoire pour apps ; HTTP : fetch direct possible. - ---- - -## Mode `file://` vs HTTP - -| Aspect | `file://` | HTTP local | -|--------|-----------|------------| -| fetch JSON/apps | Bloqué ou restreint | OK | -| Apps bureau Linux | `capsule-app-embed.js` | fetch ou embed (`CAPSULE_FORCE_APP_EMBED`) | -| Assets statiques HTML | Chemins **physiques** recommandés | Idem + même chemins | -| CSS `@import` profondeur | Compter `../` depuis le fichier CSS | Idem — `fix-theme-import-depths.mjs` | - -Smoke : tester **les deux** sur Mint P0 après toute passe liens. - ---- - -## Passe générale (agents) - -### 1. Diagnostiquer - -```bash -node usr/lib/capsuleos/tools/validate-links-all.mjs -node usr/lib/capsuleos/tools/validate-static-html-assets.mjs -``` - -### 2. Corriger motifs legacy - -```bash -node usr/lib/capsuleos/tools/audit-asset-paths.mjs -node usr/lib/capsuleos/tools/rewrite-asset-paths.mjs # si media/img, branding -node usr/lib/capsuleos/tools/fix-static-html-asset-urls.mjs -node usr/lib/capsuleos/tools/rewrite-physical-asset-paths.mjs # Windows, Android, iOS, macOS -node usr/lib/capsuleos/tools/fix-theme-import-depths.mjs -node usr/lib/capsuleos/tools/rewrite-css-asset-urls.mjs -``` - -### 3. Valider - -```bash -node usr/lib/capsuleos/tools/validate-links-all.mjs -node usr/lib/capsuleos/tools/validate-all.mjs -``` - -### 4. Regen si données / apps - -```bash -node usr/lib/capsuleos/tools/generate-public-manifest.mjs -node usr/lib/capsuleos/tools/linux/build-linux-embed.mjs -``` - ---- - -## Gates - -| Script | Rôle | -|--------|------| -| `validate-links-all.mjs` | Orchestrateur liens + médias | -| `validate-static-html-assets.mjs` | `src`/`href` ./assets résolvables sur disque | -| `validate-link-integrity.mjs` | Façades actives, hubs, pick-os | -| `validate-css-asset-urls.mjs` | `url()` CSS | -| `audit-data-links.mjs` | `data-link` ↔ embed | -| `audit-asset-paths.mjs` | Motifs legacy dans sources | - ---- - -## Anti-patterns - -1. `./assets/` dans `` sans fichier physique ni boot head. -2. Hub portail avec `./assets/` au lieu de `./usr/share/capsuleos/assets/`. -3. `../.././assets/` ou `././assets/` (profondeur cassée). -4. `fetch('./content/…')` en `file://` sans embed ni serveur. -5. Oublier `` sur façade Linux (chemins skin faux). - ---- - -## Liens - -- [raccordement-noyau-os.md](raccordement-noyau-os.md) -- [smoke-integrite-liens.md](smoke-integrite-liens.md) -- [politique-assets.md](politique-assets.md) -- [contrib.md](../contrib.md) diff --git a/root/docs/scalabilite-noyau.md b/root/docs/scalabilite-noyau.md deleted file mode 100755 index e9f531b6..00000000 --- a/root/docs/scalabilite-noyau.md +++ /dev/null @@ -1,195 +0,0 @@ -# Scalabilité du noyau CapsuleOS - -Stratégie pour émuler **des dizaines puis des centaines** de bureaux sans explosion de dette technique — en restant **100 % statique**. - -**Prérequis** : [manifeste-noyau.md](manifeste-noyau.md) · [repertoire-os.md](repertoire-os.md) - ---- - -## Objectif - -Passer de ~22 OS actifs à un catalogue ouvert (50+ planifiés aujourd'hui, extensible) tout en conservant : - -- zéro bundler obligatoire ; -- parité `file://` / HTTP ; -- un seul noyau JS par famille (`CapsuleWindow`, `contentLoader`, …) ; -- temps d'ajout d'un skin « dérivé » < 1 journée agent. - ---- - -## Axes de scalabilité - -### 1. Horizontal — plus de skins, même noyau - -``` - ┌─────────────────┐ - │ CapsuleWindow │ - │ contentLoader │ - └────────┬────────┘ - ┌───────────────────┼───────────────────┐ - ▼ ▼ ▼ - toolkit: kde toolkit: gnome toolkit: cinnamon - │ │ │ - mx-kde, opensuse ubuntu, fedora mint - debian-kde anduinos, zorin* -``` - -**Levier** : `skin.profile.json` + tokens CSS — pas de fork JS. - -### 2. Vertical — fidélité croissante - -| Niveau | Description | Coût | -|--------|-------------|------| -| L1 | Shell navigable, icônes approximatives | 1–3 j | -| L2 | Apps par défaut reconnaissables | 1–2 sem | -| L3 | Parcours checklist complet | 2–4 sem | -| L4 | Fidélité pixel (animations, sons) | optionnel | - -Prioriser **L2 pour P1**, **L3 pour P0**. - -### 3. Assets — déduplication - -| Problème actuel | Solution scalable | -|-----------------|-------------------| -| Icônes KDE dispersées | `assets/icons/kde/` + manifest | -| `./media/` par skin | `CAPSULE_MEDIA_BASE` héritage (Ubuntu → Mint) | -| CSS dupliqué entre KDE skins | `window-chrome.base.css` + `dolphin.base.css` | -| Embeds monolithiques | **Embeds partitionnés** (ci-dessous) | - -### 4. Embeds partitionnés (roadmap) - -Aujourd'hui : un `capsule-app-embed.js` (~tous templates × 8 skins). - -**Cible** : - -``` -var/lib/capsuleos/generated/ -├── capsule-app-embed-linux.js # templates linux -├── capsule-app-embed-windows.js -├── capsule-android-embed.js # existant -└── capsule-embed-index.json # manifeste des chunks -``` - -Chaque `index.html` ne charge que son chunk → **taille SW cache maîtrisée**, build incrémental. - -### 5. Hydratation lazy - -| Composant | Aujourd'hui | Cible | -|-----------|-------------|-------| -| Slots apps | Tous au `DOMContentLoaded` | Slots visibles + au premier `openWindow` | -| Icônes | Toutes résolues à l'inject | `loading="lazy"` + prefetch au hover dock | -| CSS skin app | Injecté par slot | Cache `