# Pipeline end-to-end — generació d'una resposta d'Arkadium

**Estat**: v1.1 · 2026-05-14 (afegit *Conversation gate* a la fase 3.5)
**Audiència**: desenvolupadors i integradors de l'API
**Punt d'entrada**: `POST https://api.arkadium.ai/?call=ask`
**Codi font**: `subdomains/api/httpdocs/api.php` case `'ask'` (línies 1294+)

Aquest document descriu el flux complet d'una interacció amb l'agent `arkadium` — des de la recepció de la pregunta fins a l'output JSON final — fase per fase. Per a detall de cada subsistema, vegeu els links creuats.

## Mapatge al Mètode d'Aplicació

El cicle complet d'inferència segueix el patró ANA→SIN→AMO→EXP del **Cicle del Mètode** (vegeu [agent.md](agent.md) §"El Mètode d'Aplicació"). Les 23 fases del pipeline es distribueixen així:

| Operació del Mètode | Fases | Què hi passa |
|---|---|---|
| **ANA** (anàlisi, descomposició) | 1–9 | Auth, retrieval contextual, descomposició estructural |
| **SIN** (síntesi, model) | 10–15 | Classificació de la pregunta, construcció del system prompt |
| **AMO** (pla, proposta) | 16–20 | Generació del draft, compensació harmònica, poliment savi |
| **EXP** (implementació, balanç) | 21–23 | Probe pedagògic, persistència, output |

A baix, cada fase indica també a quina **operació** del Cicle del Mètode pertany.

---

## A) PRE-LLM — construcció del system prompt (fases 1–15)

### Fase 1 · Auth + parsing — [ANA]

Verifica el bearer token (PAT `ark_pat_<48 hex>`) o la cookie de sessió. Parseja el body JSON i extreu els camps:

- `prompt` (string, la pregunta de l'usuari)
- `agent` (string, default `'arkadium'`)
- `escope` (int ∈ {-1, 0, +1} o `'auto'`)
- `userLanguage` (`'catala'` | `'english'`)
- `messages` (history de la conversa)

Si l'auth falla → HTTP 401. Si el cos és malformat → HTTP 400.

### Fase 2 · Prompt version toggle — [ANA]

Tria el system prompt base segons `?prompt_version=`:
- `v1` → `data/meta_globalium_system_prompt.txt` (54K, exhaustiu, ~365 línies)
- `v2` → `data/meta_globalium_system_prompt_v2.txt` (18K, postura mestre savi, default)
- `short` → `data/meta_globalium_system_prompt_short.txt` (8K, versió condensada)

Default: `$conf['default_prompt_version'] = 'v2'`. Configurable per A/B test.

### Fase 3 · Escope parameter — [ANA]

`escope ∈ {-1, 0, +1}` (general / balanced / focal) controla el registre de la resposta:

- **-1 general**: registre savi sense bastida visible (codis cardinals oculs, headings absents)
- **0 balanced**: comportament default (codis visibles, estructura dialèctica explícita)
- **+1 focal**: concret, citacions verificables, densitat factual alta

Afecta `max_tokens` (2048/2048/3072), modifiers que s'apendran (fase 12) i si s'aplica two-pass polish (fase 20). Mode `'auto'` deixa el sistema decidir.

→ Veure [escope-parameter-design.md](escope-parameter-design.md).

### Fase 3.5 · Conversation gate (explore vs converse) — [ANA]

🚦 **Master switch** afegit el 2026-05-14 (Jordi). Decideix si la pregunta requereix desplegar el pipeline complet Meta-Globàlium o si es pot respondre amb conversa funcional directa.

Dues capes encadenades:

**Capa A — Fast-path regex** (gratis, helper compartit `arkadium_is_smalltalk_fastpath()`).
Llista de patrons obvis sobre el principi del missatge, < 40 chars després de strip puntuació:
- salutacions: `hola|bon dia|bones|hey|hi|hello`
- agraïments: `gracies|gràcies|thanks|thx`
- comiats: `adeu|bye|goodbye`
- afirmacions curtes: `ok|d'acord|entes|perfecte|got it`

La llista es manté **deliberadament curta** — el regex no és el detector principal, només un short-circuit per a salutacions òbvies que estalvien la crida Haiku. Si match → smalltalk = true.

**Capa B — Classificador Haiku** (~300-500ms, ~$0.0001 per missatge, helper `arkadium_classify_mode_haiku()`).
Per a tot el que no captura el regex, una crida ràpida a `claude-haiku-4-5-20251001` amb prompt mini retorna `{"mode":"explore"}` o `{"mode":"converse"}`. Haiku discrimina matisos que el regex no pot:

| Input | Mode (Haiku) | Per què |
|---|---|---|
| *"Que saps de mi?"* | converse | meta-pregunta sobre la memòria de l'agent |
| *"Recorda que m'agrada el te verd"* | converse | gestió de memòria |
| *"Estic cansat"* | converse | autoexpressió sense pregunta exploratòria |
| *"Per què estic tan cansat darrerament?"* | explore | autoreflexió convertida en pregunta |
| *"Què és la consciència?"* | explore | fenomen conceptual |

Si Haiku diu `converse` → smalltalk = true.

**Capa C (a `/ask` només) — Pre-pass Sonnet** (~600-900ms, ~$0.003, helper `arkadium_structural_prepass()`).
Si encara és `explore` després de A i B, el pre-pass Sonnet a `/ask` afegeix una tercera validació via el camp `mode` del JSON estructural. La discrepància entre Haiku i Sonnet (Haiku diu explore, Sonnet diu converse) és rara però possible — Sonnet té l'última paraula per a la decisió final del pipeline.

⚡ **Aplicació a `/preview_rag`** (Jordi 2026-05-14): la conversation gate corre allà ABANS del RAG embed lookup i del frame detector. Si match (capa A o B) → retorna immediatament `{ok:true, smalltalk:true, categories:[], active_frame:null}`. El frontend, en veure `smalltalk:true`, **NO carrega el metamodel**, atura la pulsació que s'havia preengegat amb un postMessage `thinking_end` a l'iframe, i deixa un loading mínim. Resultat: temps de resposta per a converse passa de ~3-4s amb animació visible a ~1.5-2s pràcticament instantani sense moviment al 3D.

⚙️ **Defensa addicional al frontend** (Jordi 2026-05-14): a la recepció de la resposta `/ask`, sempre s'envia `thinking_end` a l'iframe — fins i tot quan la resposta ve sense `categories_touched` (cas converse). Sinó l'animació es quedava enquistada quan la capa C (Sonnet) reclassificava com a converse i el `highlight` mai arribava.

**Capa B — Classificador semàntic (pre-pass Sonnet)**.
Si la capa A no marca smalltalk, es crida `arkadium_structural_prepass()` que retorna un JSON amb camp `mode`:

```json
{
  "mode": "explore" | "converse",
  "categories": [ ... ],
  "voltes_active": [ ... ]
}
```

Sonnet decideix amb context complet, distingint matisos que el regex no pot captar:

| Input | mode | Per què |
|---|---|---|
| *"Estic cansat"* | converse | autoexpressió sense pregunta exploratòria |
| *"Per què estic tan cansat darrerament?"* | explore | demana articular un fenomen |
| *"Recorda que m'agrada el te verd"* | converse | gestió de memòria, no exploració |
| *"Fes-me un resum"* | converse | comanda operativa |
| *"Per què em costa tant decidir?"* | explore | autoreflexió convertida en pregunta |

Si `mode === "converse"` → `$is_smalltalk = true`.

**Conseqüències quan `$is_smalltalk` és true (gate per qualsevol de les dues capes):**
- Saltades les fases **4** (RAG KB-A), **5** (KB-B memòria), **6** (active frame), **13** (structural backbone)
- Saltades les fases **17** (verifier), **18** (re-prompt loop), **19** (silent self-review), **20** (two-pass polish), **21** (wisdom probe)
- Injectada la clàusula `=== MODE CONVERSA ===` al system prompt: *"Respon en 1-3 frases naturals, càlides. NO mencionis Meta-Globàlium, categories, cicles, autors. NO afegeixis [PATH:...] ni ## Referències."*
- L'`$output` no porta `structural`, `path`, `harmonic_score`, `voltes_suggested`, etc. — el frontend, en absència d'aquests camps, no renderitza xips ni ressaltats al metamodel.

**Cost**: capa A gratis; capa B = una crida Sonnet 4.6 amb ~3K tokens d'input + ~500 tokens de sortida (~$0.003 per missatge), latency ~600-900ms.

**Decisió de disseny**: el classificador AI substitueix l'intent inicial de detectar smalltalk només amb regex llargs. Una frase com *"M'estic plantejant deixar la feina"* no és captura per regex (no comença amb cap pattern) i tampoc és smalltalk, però és **converse** (autoexpressió funcional, no pregunta exploratòria). Sonnet ho discriminà bé; el regex no.

→ Veure `subdomains/api/httpdocs/structural_prepass.php` i `data/structural_prepass_instruction.txt`.

---

### Fase 4 · RAG retrieval (KB-A) — [ANA]

Embedding de la pregunta (`text-embedding-3-small`, 1536-dim) → cosine similarity contra `data/rag_index.json` (90 entrades canòniques del Meta-Globàlium) → top-K hits (default 5).

Els hits s'injecten al system prompt com a bloc `[ONTOLOGIA]` amb codi, nom i descripció breu. Aquesta és l'**ancoratge a la KB-A** (canònica compartida).

### Fase 5 · KB-B memòria d'usuari — [ANA]

Cerca semàntica sobre `data/user_memory/<uid>.json` (memòries privades de l'usuari). Hits injectats com `[MEMÒRIA]`.

És el **KB-B** (privada per usuari). Veure `project_two_kbs.md` al repo intern. Pipeline GDPR-compliant: export i erase via `/memory/export` i `/memory/erase`.

### Fase 6 · Active frame N2 — [ANA]

Si l'usuari té un frame tematitzat actiu (Subject Model, DPR, ...) seleccionat via `/active_frame`, s'injecta el **lèxic d'aquest frame N2** al prompt. Així l'agent pot articular respostes des d'una expressió tematitzada concreta del Meta-Globàlium fractal.

### Fase 7 · Structural pre-pass — [ANA]

🔑 **Mateixa crida que la fase 3.5** — el pre-pass és simultàniament *(a)* el classificador `explore`/`converse` del Conversation gate i *(b)* la font de l'esquelet estructural. Una sola crida a Claude Sonnet 4.6 amb `data/structural_prepass_instruction.txt`. Retorna:

```json
{
  "mode": "explore",
  "categories": [
    {"code": "STM", "role": "tema", "interpretation": "..."},
    {"code": "PSI", "role": "causa", "interpretation": "..."},
    {"code": "STT", "role": "resolució", "interpretation": "..."}
  ],
  "voltes_active": [
    {"name": "revelació", "stations": [...], "rationale": "...", "walk": "...", "fractal": false}
  ]
}
```

Quan `mode === "explore"`, genera els **xips TEMA/CAUSA/RESOLUCIÓ** que es mostren al frontend i el bloc `=== ESTRUCTURA CANONICA DE LA RESPOSTA ===` que s'injecta al prompt principal (fase 13).

Quan `mode === "converse"`, el sanitize força `categories: []` i `voltes_active: []` i la fase 3.5 marca `$is_smalltalk = true` — aquesta fase queda buida i la 13 no injecta res.

→ Veure [structural-chips-design.md](structural-chips-design.md).

### Fase 8 · Identity tier (TELOS) — [ANA]

Si l'usuari té TELOS / identity tier declarat (PAI Fase 2 D-PAI-3), s'injecta com a context d'autoconeixement.

### Fase 9 · Vital state — [ANA]

Estat vital actual de l'usuari (sentiment, energia, focus) — D-PAI-1. Injectat per contextualitzar la resposta al moment present.

### Fase 10 · Question classification (regex 4-vies) — [SIN]

Heurística sobre la pregunta per detectar el tipus:

| Tipus | Regex (català/anglès) | Acció |
|---|---|---|
| **Epistemològica** | "com es coneix", "com sabem", "què mètodes", "how do we know" | Suggereix `[PATH: ART, MTP, MTF, CIE]` — Cicle del Coneixement |
| **Ontològica** | "què és", "qui és", "what is", "define" | **NO** força cap PATH — articulació dialèctica dels 4 eixos del fenomen |
| **Procedural** | "com fer", "com s'aplica", "how to" | `[PATH: ANA, SIN, AMO, EXP]` — Cicle de l'Aplicació |
| **Orientativa** | "què sento", "què vull", "where am I" | `[PATH: STM, STT, SGT, SGE]` — Cicle de l'Orientació |
| **Normativa** | "bé", "mal", "ètic", "moral" | Default Cicle de l'Aplicació |

Prioritat: orientational > epistemological > procedural > normative. Crítica important (Ryle category mistake): l'ontològica NO és epistemològica — preguntar "què és X" no és "com sabem X".

Injecta el bloc `=== INSTRUCCIONS ESPECÍFIQUES PER A AQUESTA PREGUNTA ===` amb PATH suggerit + invariants obligatoris.

### Fase 11 · Living-dynamic detection — [SIN]

Regex per detectar fenòmens vius / evolutius / dinàmics:

```
vida|viu|evolu|despleg|repleg|batec|cicl|organism|néixer|créixer|morir|
naturalesa|biolog|metabol|life|alive|growth|...
```

Si match → injecta `=== INSTRUCCIONS PER A FENÒMENS VIUS / EVOLUTIUS / DINÀMICS ===` que demana al LLM posar el batec PLA↔MON (tempeternitat D4) com a **estructura primària** de la resposta, citant referents canònics (Bohm, Bergson, Whitehead, Maturana-Varela, Schopenhauer).

### Fase 12 · Escope modifier — [SIN]

Segons escope:
- `-1` → append `data/escope_modifier_general.txt` (registre savi sense bastida)
- `+1` → append `data/escope_modifier_focal.txt` (concret, citacions verificables)
- `0` → no append (prompt base es queda intacte)

→ Veure [escope-parameter-design.md](escope-parameter-design.md) §"Modulació en 4 capes".

### Fase 13 · Structural backbone injection — [SIN]

Converteix l'output del pre-pass (fase 7) en un bloc de prompt:

```
=== ESTRUCTURA CANONICA DE LA RESPOSTA ===
TEMA: STM (drive vital...) · PSI (experiència psíquica...)
CAUSA: TEC (mediació tècnica...) · ECN (pressió econòmica...)
RESOLUCIO: STT (seny...) · ACC (acció petita...)

CICLES OPERATIUS:
- revelació: STM -> STT -> SGT -> SGE -> PRA (el dolor → seny → sentit → signe → acció)

Si camines un cicle a la resposta, fes-ho com a cicle viu: cada estacio transforma l'anterior, el tancament difereix de l'obertura.
```

És **l'última cosa que llegeix l'LLM** abans de generar. Funciona com a esquelet estructural que la prosa ha d'articular.

### Fase 14 · Cycle state injection (coach mode) — [SIN]

Si `coachingMode ∈ {'active', 'proactive'}` i l'usuari té projectes registrats a `arkadium_cycle_state`, injecta:

```
=== ESTAT ACTUAL DE L'USUARI (Cicle del Mètode) ===
L'usuari té els següents projectes/objectius actius amb la seva fase corresponent:
- **Tesi doctoral**: fase ANA (Observa), iteració 2, 5 dies en aquesta fase.
- **Salut**: fase SIN (Sintetitza), iteració 1, 12 dies en aquesta fase.

Quan la pregunta toqui un projecte amb estat de cicle, pots fer servir aquesta informació per situar la conversa. NO ho narris explícitament cada vegada (això sona robot); usa-ho com a context — només referencia-ho quan ajudi pedagògicament.
```

### Fase 15 · Coaching mode append — [SIN]

- **active** (3 regles tutoria): retorna context longitudinal · presenta plans sense executar · respecta scope analitza/revisa vs fes/aplica
- **proactive** (+2 regles iniciativa): iniciativa quan el context ho justifica (màx 1/dia, degradació automàtica si es desestima 3 cops) · detecció de patrons recurrents

---

## B) LLM GENERATION (fase 16)

### Fase 16 · LLM call — [AMO]

Crida a l'API segons `providerKey`:
- **Claude** (default): `callClaudeAPI($model, $systemPrompt, $messages, $max_tokens)` — model `claude-sonnet-4-6`
- **OpenAI**: `callOpenAIAPI($model, $systemPrompt, $messages, $max_tokens)` — model `gpt-4o-2024-08-06` o similar

`max_tokens` depèn d'escope (vegeu fase 3). Retorna el **draft** complet de la resposta.

---

## C) POST-LLM — verificació + refinament (fases 17–22)

### Fase 17 · Verificador estructural — [AMO]

`verifier.php` → `verifyResponse($answerText)`. Mesura sobre el text generat:

| Mètrica | Què mesura | Llindar de qualitat |
|---|---|---|
| `cited_categories` | Regex 80 codis canònics presents al text | — |
| `category_relevance` | Pes 0..1 per cada cat (freqüència + èmfasi: headings, negretes) | — |
| `cited_tipus_map` | PLA/NEU/MON per cat | — |
| `harmonic_score` 𝓗 | Cobertura quadrants + entropia Shannon | ≥0.75 |
| `voltes_suggested` | Cicles detectats (dual-match `Cicle\|Volta` + inferència per 3+ estacions) | — |
| `voltes_coverage` | % cobertura per cicle | — |
| `path` | Extret de `[PATH: ...]` | — |
| `causal_coverage` | 7 causes Aristòtil (material/formal/final/eficient/exemplar/contextual/essencial) | — |
| `epistemic_coverage` | 4 tipus inferència (deducció/inducció/abducció-selectiva/abducció-creativa) | — |
| `solve_coagula_balance` | Equilibri ANA+CIE vs SIN+MTP | — |
| `tempeternal_coverage` | D4 PLA:NEU:MON | — |
| `wisdom_score` 𝓦 v2 | 5 components: axis_explicit · subord_synthesis · dialectical_pair · tension_density · synthesis_anchor | ≥0.65 |
| `factual_density` | Citacions verificables / 100 tokens | ≥0.4 (escope=+1) |
| `needs_reprompt` | `true` si `n_quadrants < 3` | — |

→ Veure [agent.md](agent.md) §"Verificador" i [wisdom-score-design.md](wisdom-score-design.md) per 𝓦.

### Fase 18 · Re-prompt loop multi-iteració — [AMO]

Si **qualsevol** llindar de qualitat falla i `reprompt_enabled`:

```
while (iterations < max_iterations=2) {
  generate structural feedback per component dèficient
  preserve components ≥0.5 del draft anterior
  re-call LLM amb prompt de compensació harmònica
  re-verify
  if (𝓗 ≥ floor && 𝓦 ≥ floor && 𝓕 ≥ floor) break
}
```

Llindars modulats per escope:
- general (-1): wisdom_floor 0.60, factual_floor 0.30
- balanced/focal (0/+1): wisdom_floor 0.65, factual_floor 0.40/0.55

→ Veure [agent.md](agent.md) §"Compensació harmònica en runtime".

### Fase 19 · Silent self-review — [AMO]

Per preguntes definicionals / normatives amb `harmonic < 0.85`, l'agent fa un pass intern de revisió de la seva pròpia resposta abans de retornar. Sense narrar-ho a l'usuari.

### Fase 20 · Two-pass wisdom polish — [AMO]

Només si `two_pass_enabled` i `escope ∈ {-1, 0}`:

Pren el draft i el poleix amb `data/wisdom_polish_instruction.txt` → **elimina la bastida estructural** (headings explícits, codis cardinals visibles, llistes seccions) **preservant la feina dialèctica**.

⚠️ **Important**: el polish purga els codis que 𝓦 v2 mesura → re-verificar el polished baixaria 𝓦 a ~0. Per això la mètrica primària es queda amb el **draft**, no el polished. El polished s'exposa a `meta.two_pass_first_draft` per anàlisi.

→ Veure [escope-parameter-design.md](escope-parameter-design.md) §12.

### Fase 21 · SD-WISE wisdom probe — [EXP]

(opcional, `wisdom_probe_enabled`) LLM-as-judge sobre 7 dimensions Jeste (SD-WISE):

- diverse_perspectives
- decisiveness
- emotional_regulation
- pro_social
- self_reflection
- social_advising
- spirituality

Retorna `{scores: {dim: 0..3}, total: 0..21, max: 21, passed: bool, weakest_dim: string, reasoning_brief: string, threshold_used: 14}`.

→ Veure `feature-wisdom-aware-arkadium.md` al repo intern.

### Fase 22 · Auto-save + coverage history — [EXP]

INSERT a la taula `messages`:
- user message (role=user, content)
- assistant message (role=assistant, content + categories_touched + harmonic_score + wisdom_score + w_axis_explicit + w_subord_synthesis + w_dialectical_pair + w_tension_density + w_synthesis_anchor + factual_density + metrics_json + escope + two_pass_applied)

INSERT a `coverage_history`:
- (user_id, thread_id, quadrants_touched, n_quadrants, harmonic_score, voltes_suggested, created_at)

Si és la primera resposta del thread, lazy-create thread amb auto-title.

### Fase 23 · Output JSON — [EXP]

```json
{
  "response": "...text final (polished si escope ∈ {-1,0})...",
  "categories_touched": ["FEN", "ANA", "TEO", "SIN"],
  "category_relevance": {"FEN": 0.92, "ANA": 0.78, ...},
  "cited_tipus_map": {"FEN": "neu", "ANA": "neu", ...},
  "harmonic_score": 0.834,
  "wisdom_score": 0.712,
  "w_axis_explicit": 0.80,
  "w_subord_synthesis": 0.65,
  "w_dialectical_pair": 0.75,
  "w_tension_density": 0.70,
  "w_synthesis_anchor": 0.60,
  "voltes_suggested": ["Mètode"],
  "voltes_coverage": {"Mètode": {"coverage": 0.875, "hits": 7, "total": 8, "stations_touched": [...]}},
  "path": ["ANA", "SIN", "AMO", "EXP"],
  "causal_coverage": 0.571,
  "epistemic_coverage": 0.50,
  "solve_coagula_balance": 0.82,
  "tempeternal_coverage": 1.0,
  "tempeternal_balance": 0.91,
  "factual_density": 0.42,
  "retrieved": [{code, name, similarity, ...}],
  "memory_hits": [{snippet, similarity, ...}],
  "structural": {
    "mode": "explore",
    "categories": [{code, role, interpretation}, ...],
    "voltes_active": [...]
  },
  "meta": {
    "escope": 0,
    "two_pass_applied": true,
    "two_pass_first_draft": "...draft pre-polish...",
    "polished_wisdom_score": 0.40,
    "polished_harmonic_score": 0.85,
    "reprompt_iterations": 1,
    "reprompt_history": [...],
    "reprompt_reason": "low_wisdom_axis",
    "wisdom": {"scores": {...}, "total": 18, "passed": true, "weakest_dim": "pro_social"},
    "thread_id": 1234,
    "message_id": 5678
  }
}
```

---

## D) FRONTEND — renderització (no part del backend pipeline)

`dashboard.js` rep el JSON i renderitza:

1. **Resposta textual** (typewriter effect)
2. **Xips estructurals per rol** (TEMA/CAUSA/RESOLUCIÓ) des de `data.structural.categories` — **només respostes fresques, NO es persisteix a DB**
3. **Fila de Cicles operatius** des de `data.structural.voltes_active` (clicable → highlight 3D)
4. **Xips de categories citades** amb pes + tipus (PLA/NEU/MON) des de `categories_touched` + `category_relevance`
5. **Fila de Cicles detectats** des de `voltes_suggested` (verifier)
6. **Xips de mètriques canòniques**: harmonic, wisdom 𝓦, tempeternal, solve-coagula, causal, epistèmic, factual
7. **Badge re-prompt** si `reprompt_iterations > 0` amb motiu + diff iteracions
8. **Toggle "veure el procés"** → mostra draft + scores comparatius (draft vs polished)
9. **Highlight 3D** al Metamodeler (postMessage iframe) per cada xip clicat

---

## Resum visual

```
USER QUESTION
     │
     ▼
┌──────────────────────────────────────────────────────────────┐
│ Conversation gate (fase 3.5)                                 │
│   Fast-path regex  →  smalltalk obvi (Hola/Gràcies/Bye)      │
│   Pre-pass Sonnet  →  mode = explore | converse              │
│   Si converse → salta fases 4-6, 13, 17-21 i va directe al   │
│                 LLM amb clàusula `=== MODE CONVERSA ===`     │
└──────────────────────────────────────────────────────────────┘
     │
     ▼ (només si mode = explore)
┌──────────────────────────────────────────────────────────────┐
│ ANA — descomposició estructural (fases 1–9)                  │
│  Auth · Prompt version · Escope · RAG-KB-A · KB-B memory ·   │
│  Active frame · Structural pre-pass · Identity · Vital state │
└──────────────────────────────────────────────────────────────┘
     │
     ▼
┌──────────────────────────────────────────────────────────────┐
│ SIN — construcció del system prompt (fases 10–15)            │
│  Question type · Living-dynamic · Escope modifier ·          │
│  Structural backbone · Cycle state · Coaching append         │
└──────────────────────────────────────────────────────────────┘
     │
     ▼
┌──────────────────────────────────────────────────────────────┐
│ AMO — generació + refinament (fases 16–20)                   │
│  LLM call → Verifier → Re-prompt loop → Self-review →        │
│  Two-pass polish                                             │
└──────────────────────────────────────────────────────────────┘
     │
     ▼
┌──────────────────────────────────────────────────────────────┐
│ EXP — balanç + output (fases 21–23)                          │
│  SD-WISE probe → Auto-save + coverage history → JSON output  │
└──────────────────────────────────────────────────────────────┘
     │
     ▼
FRONTEND RENDER
```

---

## Documentació detallada per subsistema

| Subsistema | Document |
|---|---|
| Visió general agent + verificador + 𝓗 + Solve-Coagula | [agent.md](agent.md) |
| Wisdom Score 𝓦 v2 (5 components) | [wisdom-score-design.md](wisdom-score-design.md) |
| Escope + two-pass polish | [escope-parameter-design.md](escope-parameter-design.md) |
| Structural pre-pass + chips per rol | [structural-chips-design.md](structural-chips-design.md) |
| API schema (OpenAPI 1.2.0) | (privat al repo `subdomains/api/httpdocs/openapi.json`) |
| Manifest filosòfic | [/manifest/](../manifest/) |
| Paper acadèmic | [/papers/arkadium/ca/](../papers/arkadium/ca/) · [/papers/arkadium/en/](../papers/arkadium/en/) |

---

## Llegenda terminològica

- **Cicle** (anteriorment "Volta"): cicle canònic de 8 estacions del Mètode d'Aplicació. Hi ha 6 cicles canònics (Mètode, Coneixement, Relació, Universal, Revelació, Consistència).
- **𝓗 (harmonic_score)**: cobertura formal — quants quadrants del Meta-Globàlium toca la resposta i quina entropia tenen les citacions.
- **𝓦 (wisdom_score)**: cobertura dialèctica — si la resposta fa feina relacional entre les categories citades, o només les enumera.
- **escope**: paràmetre user-facing del registre (general/balanced/focal), alineat amb l'eix radial PLA-MON del Meta-Globàlium.
- **KB-A**: ontologia canònica compartida del Meta-Globàlium (90 entrades, 80 categories distintes).
- **KB-B**: memòria privada per usuari (multi-tenant, GDPR-compliant).
- **Frame N2**: expressió tematitzada del Meta-Globàlium (arquitectura fractal). El Subject Model és el primer N2 desplegat.

---

**Versió del document**: 1.0 (2026-05-14). Cobertura: tot el pipeline a producció a 2026-05-14, incloent rename Volta→Cicle (Fase A desplegada).
