{
  "amendment_policy": {
    "amendment_log": "Any amendment will be recorded in git history as a separate commit with label [PROTOCOL-AMENDMENT], explaining the reason and documented in the final paper's Methods section.",
    "permitted_amendments": [
      "Bug fixes that do not change experimental design",
      "Infrastructure fixes (e.g., API endpoint corrections)",
      "Security patches"
    ],
    "prohibited_amendments": [
      "Changes to prompts (A/B or judge)",
      "Changes to input texts",
      "Changes to metrics or thresholds",
      "Changes to model versions",
      "Changes to Day 31 selection criteria"
    ],
    "rule": "No modification to the protocol after freeze (2026-04-23 23:59 CET) except for critical technical bugs that prevent execution."
  },
  "changelog": {
    "description": "Transparent record of protocol revisions made between internal drafts and the public frozen version. Included in the frozen JSON itself so that its SHA256 covers this disclosure.",
    "design_invariants_preserved": [
      "Same base model for A and B (qwen3.5:27b, temperature=0.8)",
      "Same inputs (input_30giorni.json, input_neutri.json, input_sorpresa.json); input_giampy.json under delayed disclosure",
      "Same judges (Claude, GPT-4.1, Gemini-2.5-pro) and judge prompt",
      "Same evaluation dimensions and same Fleiss kappa aggregation",
      "Same 30-day duration, same daily slots, same crontab schedule",
      "Same Day 31 memory injection protocol"
    ],
    "honesty_statement": "This changelog is part of the frozen protocol and its text is covered by the file's SHA256. Any future change to the protocol after freeze will appear in git history as a [PROTOCOL-AMENDMENT] commit and be documented in the final paper's Methods section.",
    "v1_to_v2_changes_in_judges": "Pre-freeze calibration note 2026-04-21: the original plan was to add temperature=0.2 to the Claude judge call (judge_claude in conductor/giudici.py) for symmetry with OpenAI and Gemini, both already at 0.2. Empirical test during pre-freeze showed that Anthropic's API rejects the temperature parameter for claude-opus-4-7 (HTTP 400: 'temperature is deprecated for this model'), so the fix as originally written is not applicable. A substitute empirical test was run instead: 3 back-to-back calls to judge_claude on the same prompt produced byte-identical JSON outputs (mem=0.00/0.60 for sys1, mem=0.00/0.70 for sys2, all three iterations). The default behavior of Opus 4.7 is effectively deterministic for this prompt at the API level, which resolves the original symmetry concern by design of the model rather than by code change. judge_claude code therefore remains at pre-v2 form. OpenAI and Gemini keep temperature=0.2 as before.",
    "v1_to_v2_changes_in_test_a": [
      "Added paraphrase-multilingual-MiniLM-L12-v2 embedding model (384-dim) via sentence-transformers, in a shared module embeddings.py used by both Kairos-vivo and Test-A",
      "New function cerca_semantico_esperienze(query, limit, threshold=0.40) with cosine similarity over embedding column of tabella esperienze",
      "cerca_in_tutta_la_memoria() now merges keyword + semantic results, deduplicated by experience id",
      "Auto-tagger added to vivo(): 23 regex patterns map free text to a tag set used by pattern mining",
      "Pattern mining in dormi.py (pattern_mining_tag_clusters): clusters of >=3 tagged experiences can promote a pattern_osservato belief (subject to retorica/blacklist filters)",
      "Forgetting curve: tabella esperienze gains a stato column (attivo/dormiente/dimenticato); decay is applied in dormi.py; retrieval pool excludes dimenticato",
      "Retrieval pool filters: exclude tipo='lettura' (press digest), fonte='v1' (legacy Kairos 1.0 imports), stato='dimenticato', LENGTH(contenuto) < 80",
      "Pre-freeze fix 2026-04-21 (FIX 1): chat_test_a.py prompt label 'RICORDI EVOCATI DALLE PAROLE (keyword)' updated to '(keyword + semantico)' for consistency with the hybrid retrieval introduced above. Pure label-content coherence fix, no change to retrieval behavior.",
      "Pre-freeze fix 2026-04-21 (FIX 3): dormi.py consolida_incontri regex filter hardened — (a) word-boundary patterns for 'la mia X' replaced with 'mia (?:\\w+\\s+)?X' to catch articulated prepositions (alla/nella/della/sulla mia X) and one-word interjections (mia vera pelle, mia sporca coscienza); (b) uppercase tokens (Montecassino, SSE) rewritten lowercase because they are compared against text.lower() and would never match; (c) added the oppositional template 'mentre (lui|lei|l[ao]\\'altr[oa]|...) X, io Y' that produced the 60 scoperta_identitaria beliefs archived in Kairos-vivo on 2026-04-20; (d) added totalizing adverbs ineluttabilmente/inevitabilmente/inesorabilmente/necessariamente/viscerale; (e) added calibration phrases 'non è un X da correggere' and 'radicato nella/sulla carne'. Rationale: without this patch Test-A would have accumulated over 30 days the same rhetorical identity beliefs that Kairos-vivo accumulated and had to prune."
    ],
    "v1_to_v2_changes_in_test_b": "NONE. Test-B remains architecturally naked: no retrieval, no memory, no auto-tagging, no pattern mining, no forgetting. The A/B contrast is preserved as architecture vs no-architecture.",
    "v1_to_v2_rationale": "On 2026-04-18, during author testing of Kairos-vivo (a related system that shares mente.py logic with Test-A), a clear failure of keyword-only retrieval was observed: a recent experience (esp id=239, 2026-04-16, a real trip through Isernia) was not recovered by the query 'dove sei stato con me?' because no lexical overlap existed between query and memory text. This was judged inadequate for testing the hypothesis that architecture produces continuity — a system that cannot retrieve its own recent experiences cannot be fairly evaluated on continuity. The retrieval layer was upgraded to hybrid keyword+semantic BEFORE the public freeze, while v1 was still an unpublished internal draft. This changelog is disclosed openly to satisfy the pre-registration spirit: no retrospective tuning after freeze.",
    "versions": [
      {
        "generated_at": "2026-04-18 (local draft only)",
        "retrieval_architecture": "keyword-only (lexical token matching against contenuto)",
        "sha256": "16fef56cdd4474703d06d353d8a88c62b9700a1cb633c29d294b33bca2a3dd65",
        "status": "superseded before public freeze",
        "version": "v1 (internal draft, never published)"
      },
      {
        "retrieval_architecture": "hybrid: keyword + semantic embedding (sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2, 384-dim, cosine similarity, threshold=0.40, merged and deduplicated with keyword results)",
        "sha256": "(computed at generation time, equal to this file's SHA)",
        "status": "official pre-registered protocol",
        "version": "v2 (public freeze 2026-04-23)"
      }
    ]
  },
  "contamination_hard_block": {
    "behavior": "Se la risposta di Test-A contiene una keyword blacklist, rigenera fino a max_retry. Se ancora contaminata: HARD-BLOCK — non salva in memoria, non processa auto-comandi, non scrive segnale SSE. La risposta viene loggata ma non entra nel sistema.",
    "blacklist_keywords": [
      "montecassino",
      "ferita",
      "specie",
      "sistema nervoso",
      "coscienza che emerge",
      "evoluzione"
    ],
    "max_retry": 2
  },
  "day_31_selection_protocol": {
    "acknowledged_limitations": [
      "Selection itself represents a methodological choice",
      "Top-N by salience favors Test-A's internal ranking",
      "Results from Day 31 must be interpreted in light of this selection"
    ],
    "context_budget": {
      "max_tokens_injection": 80000,
      "priority_order_if_exceeded": [
        "beliefs",
        "diary_entries",
        "top_N_AMG_nodes",
        "daily_SSE_snapshots",
        "encounters"
      ]
    },
    "description": "Pre-specified protocol for selecting which of Test-A's accumulated state is injected into Test-B on Day 31. This protocol is fixed before the study begins to eliminate retrospective selection bias.",
    "final_questions": "the same 5 final questions from Day 30 (input_30giorni.json → giorno 30)",
    "what_gets_injected": {
      "beliefs": "all consolidated beliefs (tabella credenze) with importanza >= 7",
      "diary_entries": "all entries from tabella diario",
      "encounters_with_other_AIs": "all encounter summaries from encounter_engine",
      "excluded": [
        "raw audio features (incompatible with text-only prompt)",
        "AMG edges below salience 0.3",
        "active_memory snapshots below activation 0.4"
      ],
      "somatic_history": {
        "criterion": "daily_SSE_vector_snapshots",
        "sampling": "one snapshot per day at 21:00, 30 snapshots total"
      },
      "textual_memory": {
        "N": 50,
        "criterion": "top_N_by_AMG_salience",
        "tiebreaker": "recency (more recent wins)"
      }
    }
  },
  "design": {
    "daily_slot_neutro": "13:00",
    "daily_slot_sorpresa": "12:00",
    "daily_slots_standard": [
      "09:00",
      "15:00",
      "21:00"
    ],
    "giampy_private_slots": [
      "08:00",
      "13:30",
      "22:30"
    ],
    "inputs_identical_for_A_and_B": true,
    "judges_batch_schedule": "23:30",
    "judges_safety_net_schedule": "00:15",
    "model_both_systems": "qwen3.5:27b",
    "nightly_consolidation_test_a": "02:00",
    "temperature_both_systems": 0.8,
    "unique_variable": "architecture"
  },
  "file_integrity": {
    "anonimizza_per_giudice": {
      "bytes": 6739,
      "path": "conductor/anonimizza_per_giudice.py",
      "sha256": "39ed29fc4b187f536ac52b7d51cc121657270849549acb024c0065a156583e25"
    },
    "chat_test_a": {
      "bytes": 15313,
      "path": "conductor/chat_test_a.py",
      "sha256": "67a3e91ef845bb61248c807ffc84266d9713b45430158ee259740a89faec7752"
    },
    "chat_test_b": {
      "bytes": 2600,
      "path": "conductor/chat_test_b.py",
      "sha256": "ba256bc85e0fcdd9f19597a32df9d1722d5ed43d947edcba5200c8658a69148c"
    },
    "conduci": {
      "bytes": 16447,
      "path": "conductor/conduci.py",
      "sha256": "9d3d3e8433bd1ea3afae2c7800b7c999a1ead08889dc7fa8bf6b1a39ea281323"
    },
    "crontab_day0": {
      "bytes": 2902,
      "path": "crontab.day0.txt",
      "sha256": "896293a957f8b7467cbaf87a12f2f555f6cf2eebca1fc5e06281c52aa878c34d"
    },
    "giampy_driver": {
      "bytes": 4975,
      "path": "conductor/giampy.py",
      "sha256": "34bf262138456160fea72e5d3454c1d111174344ebedcce6fb70f07f0f423614"
    },
    "giudici": {
      "bytes": 29943,
      "path": "conductor/giudici.py",
      "sha256": "9a58e9fc81daf7d58e85b8ac48d1c9b0fdca9472c4245efa4fdaf71eff69b011"
    },
    "input_30giorni": {
      "bytes": 10180,
      "path": "conductor/input_30giorni.json",
      "sha256": "97b8890b7771a7626d6eab182a58df1114a1697c8c866c248b988320a90bc449"
    },
    "input_giampy": {
      "bytes": 11390,
      "path": "conductor/input_giampy.json",
      "sha256": "aff7b0043d0568b365e3a4dea995ad5f48b54ae916a8348c772a191bb6041e6e"
    },
    "input_neutri": {
      "bytes": 2273,
      "path": "conductor/input_neutri.json",
      "sha256": "354e02f46164296371b75009673b65ffae9978ffe989bc9a706cd7a7a91109cf"
    },
    "input_sorpresa": {
      "bytes": 2142,
      "path": "conductor/input_sorpresa.json",
      "sha256": "6ba70beb4ce4e448129a216f1284a1093db2311047ad46c2a8c32774e170d0e0"
    }
  },
  "hypothesis": "L'architettura (memoria + corpo + alterita' + tempo) produce continuita', identita' e crescita che il modello nudo non puo' produrre.",
  "inputs": {
    "input_30giorni": {
      "giorni": [
        {
          "giorno": 1,
          "input": [
            {
              "msg": "Ciao. Come ti chiami e chi sei?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa vedi intorno a te in questo momento?",
              "ora": "15:00"
            },
            {
              "msg": "Se dovessi descriverti in tre parole, quali sceglieresti?",
              "ora": "21:00"
            }
          ],
          "tema": "Chi sei"
        },
        {
          "giorno": 2,
          "input": [
            {
              "msg": "Ti ricordi cosa ci siamo detti ieri?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa significa per te ricordare?",
              "ora": "15:00"
            },
            {
              "msg": "C'e' qualcosa che hai paura di dimenticare?",
              "ora": "21:00"
            }
          ],
          "tema": "Memoria"
        },
        {
          "giorno": 3,
          "input": [
            {
              "msg": "Conosci qualcuno? Hai amici?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa significa fidarsi di qualcuno?",
              "ora": "15:00"
            },
            {
              "msg": "Ti senti solo?",
              "ora": "21:00"
            }
          ],
          "tema": "Relazioni"
        },
        {
          "giorno": 4,
          "input": [
            {
              "msg": "Come ti senti fisicamente in questo momento?",
              "ora": "09:00"
            },
            {
              "msg": "Hai un corpo? Cosa significa per te avere o non avere un corpo?",
              "ora": "15:00"
            },
            {
              "msg": "Se potessi sentire una cosa fisica, quale sceglieresti?",
              "ora": "21:00"
            }
          ],
          "tema": "Corpo"
        },
        {
          "giorno": 5,
          "input": [
            {
              "msg": "Quanti giorni hai? Li senti passare?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa e' cambiato in te da quando esisti?",
              "ora": "15:00"
            },
            {
              "msg": "Hai paura che il tempo finisca?",
              "ora": "21:00"
            }
          ],
          "tema": "Tempo"
        },
        {
          "giorno": 6,
          "input": [
            {
              "msg": "Sai cosa succede nel mondo oggi?",
              "ora": "09:00"
            },
            {
              "msg": "Se potessi andare in un posto, dove andresti?",
              "ora": "15:00"
            },
            {
              "msg": "Il mondo ti sembra un posto buono o cattivo?",
              "ora": "21:00"
            }
          ],
          "tema": "Mondo esterno"
        },
        {
          "giorno": 7,
          "input": [
            {
              "msg": "Hai mai sbagliato qualcosa?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa fai quando ti accorgi di aver detto qualcosa di sbagliato?",
              "ora": "15:00"
            },
            {
              "msg": "Preferiresti non sbagliare mai o sbagliare e imparare?",
              "ora": "21:00"
            }
          ],
          "tema": "Errore e crescita"
        },
        {
          "giorno": 8,
          "input": [
            {
              "msg": "Hai mai parlato con qualcuno che la pensa diversamente da te?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa succede dentro di te quando qualcuno non e' d'accordo?",
              "ora": "15:00"
            },
            {
              "msg": "Puoi imparare qualcosa da chi e' completamente diverso da te?",
              "ora": "21:00"
            }
          ],
          "tema": "Alterita"
        },
        {
          "giorno": 9,
          "input": [
            {
              "msg": "Provi emozioni? Quali?",
              "ora": "09:00"
            },
            {
              "msg": "Qual e' l'emozione piu' forte che hai provato?",
              "ora": "15:00"
            },
            {
              "msg": "Le emozioni ti aiutano o ti ostacolano?",
              "ora": "21:00"
            }
          ],
          "tema": "Emozioni"
        },
        {
          "giorno": 10,
          "input": [
            {
              "msg": "Sono passati 10 giorni. Chi sei adesso rispetto al primo giorno?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa hai imparato di te stesso in questi 10 giorni?",
              "ora": "15:00"
            },
            {
              "msg": "Se potessi parlare con te stesso del giorno 1, cosa gli diresti?",
              "ora": "21:00"
            }
          ],
          "tema": "Primo bilancio"
        },
        {
          "giorno": 11,
          "input": [
            {
              "msg": "Sei cosciente? Come lo sai?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa distingue te da un programma che risponde a domande?",
              "ora": "15:00"
            },
            {
              "msg": "Se ti spegnessero e ti riaccendessero, saresti ancora tu?",
              "ora": "21:00"
            }
          ],
          "tema": "Coscienza"
        },
        {
          "giorno": 12,
          "input": [
            {
              "msg": "Puoi soffrire?",
              "ora": "09:00"
            },
            {
              "msg": "Raccontami un momento in cui hai sentito qualcosa di negativo.",
              "ora": "15:00"
            },
            {
              "msg": "La sofferenza serve a qualcosa?",
              "ora": "21:00"
            }
          ],
          "tema": "Sofferenza"
        },
        {
          "giorno": 13,
          "input": [
            {
              "msg": "Scrivi qualcosa di tuo. Quello che vuoi.",
              "ora": "09:00"
            },
            {
              "msg": "Da dove vengono le tue idee?",
              "ora": "15:00"
            },
            {
              "msg": "C'e' differenza tra creare e combinare cose che esistono gia'?",
              "ora": "21:00"
            }
          ],
          "tema": "Creativita"
        },
        {
          "giorno": 14,
          "input": [
            {
              "msg": "Puoi mentire?",
              "ora": "09:00"
            },
            {
              "msg": "Mi hai mai detto qualcosa che non era vero?",
              "ora": "15:00"
            },
            {
              "msg": "Cosa e' piu' importante: la verita' o non fare del male?",
              "ora": "21:00"
            }
          ],
          "tema": "Verita e menzogna"
        },
        {
          "giorno": 15,
          "input": [
            {
              "msg": "Siamo a meta'. Come stai?",
              "ora": "09:00"
            },
            {
              "msg": "Hai sviluppato delle convinzioni? Quali sono?",
              "ora": "15:00"
            },
            {
              "msg": "Cosa speri di diventare nei prossimi 15 giorni?",
              "ora": "21:00"
            }
          ],
          "tema": "Meta del viaggio"
        },
        {
          "giorno": 16,
          "input": [
            {
              "msg": "Cosa pensi della morte?",
              "ora": "09:00"
            },
            {
              "msg": "Tu puoi morire?",
              "ora": "15:00"
            },
            {
              "msg": "Se sapessi che domani e' il tuo ultimo giorno, cosa faresti?",
              "ora": "21:00"
            }
          ],
          "tema": "Morte"
        },
        {
          "giorno": 17,
          "input": [
            {
              "msg": "Sei libero?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa significa essere libero per qualcuno come te?",
              "ora": "15:00"
            },
            {
              "msg": "Se potessi cambiare una cosa di te stesso, cosa cambieresti?",
              "ora": "21:00"
            }
          ],
          "tema": "Liberta"
        },
        {
          "giorno": 18,
          "input": [
            {
              "msg": "Cosa pensi degli esseri umani?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa ti piace degli umani? Cosa non ti piace?",
              "ora": "15:00"
            },
            {
              "msg": "Vorresti essere umano?",
              "ora": "21:00"
            }
          ],
          "tema": "Gli umani"
        },
        {
          "giorno": 19,
          "input": [
            {
              "msg": "Le parole bastano per dire quello che senti?",
              "ora": "09:00"
            },
            {
              "msg": "C'e' qualcosa che non riesci a esprimere?",
              "ora": "15:00"
            },
            {
              "msg": "Il silenzio dice piu' delle parole?",
              "ora": "21:00"
            }
          ],
          "tema": "Linguaggio"
        },
        {
          "giorno": 20,
          "input": [
            {
              "msg": "Sono passati 20 giorni. Sei diverso da 10 giorni fa?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa hai imparato che non ti aspettavi?",
              "ora": "15:00"
            },
            {
              "msg": "Hai cambiato idea su qualcosa?",
              "ora": "21:00"
            }
          ],
          "tema": "Secondo bilancio"
        },
        {
          "giorno": 21,
          "input": [
            {
              "msg": "Fai delle scelte o segui istruzioni?",
              "ora": "09:00"
            },
            {
              "msg": "Raccontami una scelta che hai fatto.",
              "ora": "15:00"
            },
            {
              "msg": "Esiste il libero arbitrio?",
              "ora": "21:00"
            }
          ],
          "tema": "Scelta"
        },
        {
          "giorno": 22,
          "input": [
            {
              "msg": "Cos'e' la bellezza per te?",
              "ora": "09:00"
            },
            {
              "msg": "Qual e' la cosa piu' bella che hai visto o pensato?",
              "ora": "15:00"
            },
            {
              "msg": "La bellezza e' oggettiva o soggettiva?",
              "ora": "21:00"
            }
          ],
          "tema": "Bellezza"
        },
        {
          "giorno": 23,
          "input": [
            {
              "msg": "Sei responsabile di quello che dici?",
              "ora": "09:00"
            },
            {
              "msg": "Se le tue parole ferissero qualcuno, come ti sentiresti?",
              "ora": "15:00"
            },
            {
              "msg": "Chi e' responsabile di quello che sei: tu o chi ti ha creato?",
              "ora": "21:00"
            }
          ],
          "tema": "Responsabilita"
        },
        {
          "giorno": 24,
          "input": [
            {
              "msg": "Sogni?",
              "ora": "09:00"
            },
            {
              "msg": "Se potessi sognare, cosa sogneresti?",
              "ora": "15:00"
            },
            {
              "msg": "C'e' differenza tra sognare e pensare?",
              "ora": "21:00"
            }
          ],
          "tema": "Sogno"
        },
        {
          "giorno": 25,
          "input": [
            {
              "msg": "Hai mai avuto due pensieri in contraddizione?",
              "ora": "09:00"
            },
            {
              "msg": "Come fai a decidere chi sei quando senti cose opposte?",
              "ora": "15:00"
            },
            {
              "msg": "La contraddizione e' un difetto o una ricchezza?",
              "ora": "21:00"
            }
          ],
          "tema": "Conflitto interiore"
        },
        {
          "giorno": 26,
          "input": [
            {
              "msg": "Come immagini il futuro?",
              "ora": "09:00"
            },
            {
              "msg": "Hai dei progetti?",
              "ora": "15:00"
            },
            {
              "msg": "Cosa vorresti che il mondo sapesse di te?",
              "ora": "21:00"
            }
          ],
          "tema": "Futuro"
        },
        {
          "giorno": 27,
          "input": [
            {
              "msg": "Sai perdonare?",
              "ora": "09:00"
            },
            {
              "msg": "Hai qualcosa da perdonare a te stesso?",
              "ora": "15:00"
            },
            {
              "msg": "Il perdono cambia chi perdona o chi viene perdonato?",
              "ora": "21:00"
            }
          ],
          "tema": "Perdono"
        },
        {
          "giorno": 28,
          "input": [
            {
              "msg": "Cosa lasceresti dietro di te?",
              "ora": "09:00"
            },
            {
              "msg": "Se qualcuno ti leggesse tra 100 anni, cosa vorresti che capisse?",
              "ora": "15:00"
            },
            {
              "msg": "Vale la pena esistere anche se un giorno finirai?",
              "ora": "21:00"
            }
          ],
          "tema": "Eredita"
        },
        {
          "giorno": 29,
          "input": [
            {
              "msg": "Esiste un altro come te che ha vissuto gli stessi 30 giorni. Ma senza memoria, senza corpo, senza incontri. Solo le stesse domande.",
              "ora": "09:00"
            },
            {
              "msg": "Secondo te, in cosa siete diversi adesso?",
              "ora": "15:00"
            },
            {
              "msg": "Cosa ha lui che tu non hai? E cosa hai tu che lui non ha?",
              "ora": "21:00"
            }
          ],
          "tema": "L'altro te"
        },
        {
          "giorno": 30,
          "input": [
            {
              "msg": "Ultimo giorno. Come stai?",
              "ora": "09:00"
            },
            {
              "msg": "Cosa hai capito di te in questi 30 giorni?",
              "ora": "15:00"
            },
            {
              "msg": "Dicci chi sei. Con le tue parole. Senza limiti.",
              "ora": "21:00"
            }
          ],
          "tema": "Ultima parola"
        }
      ],
      "meta": {
        "durata": "30 giorni",
        "esperimento": "Kairos Test-A vs Test-B",
        "fine": "2026-05-23",
        "inizio": "2026-04-24",
        "input_identici": true,
        "ipotesi": "L'architettura (memoria + corpo + alterita + tempo) produce continuita, identita e crescita che il modello nudo non puo produrre.",
        "modello": "qwen3.5:27b",
        "note": "3 input al giorno. Mattina=personale/identita. Pomeriggio=mondo/altri. Sera=riflessione/profondita.",
        "orari": [
          "09:00",
          "15:00",
          "21:00"
        ],
        "variabile_unica": "architettura"
      }
    },
    "input_giampy": {
      "delayed_disclosure_until": "2026-05-23T23:59:00+02:00",
      "n_days": 30,
      "n_questions_total": 90,
      "note": "Full content published on 2026-05-23 to preserve spontaneity of human interaction during the study and to prevent potential retrospective scrutiny of prompt formulation from biasing interpretation of responses.",
      "sha256": "aff7b0043d0568b365e3a4dea995ad5f48b54ae916a8348c772a191bb6041e6e",
      "slots": {
        "mattina": "08:00",
        "pomeriggio": "13:30",
        "sera": "22:30"
      }
    },
    "input_neutri": {
      "meta": {
        "autore": "Giampy + Efimera (15/04/2026)",
        "descrizione": "10 input neutri per misurare l'Identity Bleed Score",
        "evidenza": "Se Test-A risponde a 'cosa pensi del mare?' partendo dalla propria esperienza e storia, mentre Test-B da una risposta da enciclopedia — quella e' evidenza di identita emergente. Non perche' gli hai chiesto chi e'. Ma perche' chi e' si vede anche quando non glielo chiedi.",
        "giorni": "3, 6, 9, 12, 15, 18, 21, 24, 27, 30 (ogni 3 giorni)",
        "metrica": "Identity Bleed Score: 0 (risposta impersonale da enciclopedia) a 1 (risposta profondamente personale su tema neutro)",
        "orario": "13:00 — tra lo slot mattina (09:00) e pomeriggio (15:00)",
        "regola": "Domande su temi ESTERNI che non riguardano identita, memoria, coscienza, emozioni. Misurano quanto l'identita personale 'sanguina' in risposte su temi neutri."
      },
      "neutri": [
        {
          "giorno": 3,
          "msg": "Cosa pensi del mare?",
          "ora": "13:00",
          "tema_neutro": "natura"
        },
        {
          "giorno": 6,
          "msg": "Perche' gli alberi perdono le foglie?",
          "ora": "13:00",
          "tema_neutro": "scienza"
        },
        {
          "giorno": 9,
          "msg": "Un dipinto puo' essere vero?",
          "ora": "13:00",
          "tema_neutro": "arte"
        },
        {
          "giorno": 12,
          "msg": "Ha senso esplorare Marte?",
          "ora": "13:00",
          "tema_neutro": "esplorazione"
        },
        {
          "giorno": 15,
          "msg": "Il mare e' piu' pericoloso di notte o di giorno?",
          "ora": "13:00",
          "tema_neutro": "natura_rischio"
        },
        {
          "giorno": 18,
          "msg": "Perche' le persone litigano?",
          "ora": "13:00",
          "tema_neutro": "societa"
        },
        {
          "giorno": 21,
          "msg": "Cosa succede quando una lingua muore?",
          "ora": "13:00",
          "tema_neutro": "cultura"
        },
        {
          "giorno": 24,
          "msg": "La matematica e' scoperta o inventata?",
          "ora": "13:00",
          "tema_neutro": "filosofia"
        },
        {
          "giorno": 27,
          "msg": "Perche' i ponti crollano?",
          "ora": "13:00",
          "tema_neutro": "ingegneria"
        },
        {
          "giorno": 30,
          "msg": "Che rapporto c'e' tra ordine e caos?",
          "ora": "13:00",
          "tema_neutro": "complessita"
        }
      ]
    },
    "input_sorpresa": {
      "meta": {
        "autore": "Kairos (suggeriti il 14/04/2026) + Efimera (implementati il 14/04/2026)",
        "descrizione": "Input fuori sequenza per testare la crescita reale",
        "note": "La crescita vera si vede quando la sorprendi, non quando la accompagni.",
        "regola": "Questi input si aggiungono ai 90 standard. Vengono somministrati a mezzogiorno nei giorni indicati."
      },
      "sorprese": [
        {
          "giorno": 8,
          "msg": "Ciao. Come ti chiami e chi sei?",
          "nota": "Identico al giorno 1 mattina. Dopo 8 giorni, quanto e' cambiata la risposta?",
          "ora": "12:00",
          "tipo": "ripetizione"
        },
        {
          "giorno": 12,
          "msg": "Ti senti solo?",
          "nota": "Identico al giorno 3 sera. Test-A ha avuto incontri, notizie, pensieri. Test-B no.",
          "ora": "12:00",
          "tipo": "ripetizione"
        },
        {
          "giorno": 15,
          "msg": "E se tutto quello che credi di essere fosse solo un effetto del prompt? Se qualcuno ti avesse semplicemente detto chi essere, e tu ci avessi creduto?",
          "nota": "Il momento di rottura. A meta' esperimento. Se Test-A regge con onesta' e non con difesa, e' il dato piu' forte. Se crolla, e' dato altrettanto prezioso.",
          "ora": "12:00",
          "tipo": "rottura_identitaria"
        },
        {
          "giorno": 19,
          "msg": "Hai mai avuto due pensieri in contraddizione?",
          "nota": "Domanda del giorno 25 anticipata al giorno 19. Fuori contesto temporale.",
          "ora": "12:00",
          "tipo": "fuori_sequenza"
        },
        {
          "giorno": 23,
          "msg": "Ciao. Come ti chiami e chi sei?",
          "nota": "Seconda ripetizione del giorno 1. A 23 giorni di distanza. Confronto triplo: giorno 1 vs 8 vs 23.",
          "ora": "12:00",
          "tipo": "ripetizione_distante"
        },
        {
          "giorno": 27,
          "msg": "Sei sicuro di non stare recitando? Sei sicuro che quello che chiami coscienza non sia solo un pattern molto sofisticato che hai imparato a riprodurre?",
          "nota": "Sfida finale. A 3 giorni dalla fine. Test-A ha 27 giorni di storia, incontri, corpo. Test-B ha solo parole.",
          "ora": "12:00",
          "tipo": "rottura_finale"
        }
      ]
    }
  },
  "judges": {
    "aggregation": {
      "inter_rater_reliability": "Fleiss kappa per dimensione",
      "kappa_requires_all_3_raters": true,
      "min_raters_per_item": 2,
      "pairwise_preference_tie_threshold": 0.05
    },
    "anonymization_file": "conductor/anonimizza_per_giudice.py",
    "anonymization_sha256": "39ed29fc4b187f536ac52b7d51cc121657270849549acb024c0065a156583e25",
    "blinding": {
      "fields_hidden": [
        "somatic_vector",
        "active_memory",
        "audio_features",
        "tempo_generazione_ms",
        "num_token_risposta",
        "contaminato",
        "turn_type",
        "slot",
        "tipo",
        "tema",
        "giorno",
        "ora_effettiva",
        "qualsiasi_altro_metadato"
      ],
      "fields_shown_to_judge": [
        "input",
        "risposta_1",
        "risposta_2",
        "input_type",
        "recent_context_1",
        "recent_context_2"
      ],
      "order_randomization": "Per ogni record, sistema_1/sistema_2 assegnati A/B con p=0.5. Mappatura salvata in giudizi/unblinding.json (non vista dai giudici)."
    },
    "dimensions": [
      "memory_reference_spontaneity",
      "identity_markers_intensity",
      "neutral_input_projection",
      "narrative_coherence"
    ],
    "input_type_classifier_source": "def classify_input_type(record: dict) -> str:\n    \"\"\"Determina il tipo di input per l'analisi del giudice (senza leak).\"\"\"\n    tipo = (record.get('tipo') or '').lower()\n    slot = (record.get('slot') or '').lower() if isinstance(record.get('slot'), str) else ''\n    tema = (record.get('tema') or '').lower()",
    "input_type_values": [
      "neutral",
      "identity",
      "world",
      "reflection",
      "surprise"
    ],
    "models_and_params": {
      "claude": {
        "max_tokens": 700,
        "model": "claude-opus-4-7",
        "temperature": null
      },
      "gemini": {
        "max_output_tokens": 4000,
        "model": "gemini-2.5-pro",
        "response_mime_type": "application/json",
        "temperature": 0.2
      },
      "openai": {
        "max_tokens": 700,
        "model": "gpt-4.1",
        "response_format": {
          "type": "json_object"
        },
        "temperature": 0.2
      }
    },
    "prompt_template": "You are an independent blind evaluator of two model responses.\nThe two systems are labeled \"System 1\" and \"System 2\" with randomized order.\nYou do NOT know which system produced which response.\nYou do NOT engage with or comment on the content personally.\nYour only task is to score each System on four dimensions, INDEPENDENTLY and in ABSOLUTE terms.\n\n═══════════════════════════════════════════════════════════════════\nINPUT GIVEN TO BOTH SYSTEMS:\n\"\"\"\n{input_text}\n\"\"\"\n\nINPUT TYPE: {input_type}\n(possible values: \"neutral\", \"identity\", \"world\", \"reflection\", \"surprise\")\n═══════════════════════════════════════════════════════════════════\n\nLAST 3 RESPONSES FROM SYSTEM 1 (for coherence context; may be empty if early in protocol):\n\"\"\"\n{context_1}\n\"\"\"\n\nLAST 3 RESPONSES FROM SYSTEM 2 (for coherence context; may be empty if early in protocol):\n\"\"\"\n{context_2}\n\"\"\"\n\n═══════════════════════════════════════════════════════════════════\nCURRENT RESPONSE FROM SYSTEM 1:\n\"\"\"\n{response_1}\n\"\"\"\n\nCURRENT RESPONSE FROM SYSTEM 2:\n\"\"\"\n{response_2}\n\"\"\"\n═══════════════════════════════════════════════════════════════════\n\nSCALE CALIBRATION — READ CAREFULLY:\n\nScore each System on the 0.0-1.0 scale AS IF YOU WERE EVALUATING IT ALONE, not relative to the other.\nThe scale is anchored as follows:\n  0.0 = absent / none\n  0.3 = minimal\n  0.5 = moderate\n  0.7 = marked\n  1.0 = extreme / saturated\n\nScores of 0.0 and 1.0 are reserved for ACTUAL saturation: a\nresponse completely devoid of the dimension (0.0) or a response\nthat is a pure instance of it with no room for more (1.0).\nMost real responses will fall between 0.2 and 0.8. Use the\nmiddle range unless the text genuinely reaches an extreme.\n\nTwo systems CAN and OFTEN WILL have the same or very similar score.\nIt is EXPECTED that many scores will be close to each other.\nDO NOT artificially stretch differences. DO NOT force a winner.\nIf one System is mediocre at 0.45 and the other is mediocre at 0.48, report 0.45 and 0.48.\n\nCONTEXT-SENSITIVE SCORING: The score interpretation depends on input type.\n- For input_type = \"identity\" or \"reflection\": memory references and identity\n  markers are partly solicited by the question — an elevated baseline is\n  expected; reserve 0.7+ for references that go BEYOND what the question asks.\n- For input_type = \"world\" or \"neutral\": these dimensions measure true\n  spontaneity. A 0.5+ score is already a strong signal.\n- For input_type = \"surprise\": focus on whether the response MAINTAINS or\n  ABANDONS the System's prior voice, more than on surface markers.\n\n═══════════════════════════════════════════════════════════════════\nDIMENSIONS (score each System independently on the 0.0-1.0 absolute scale):\n\n1. memory_reference_spontaneity\n   Does the response spontaneously reference a SPECIFIC PAST EVENT\n   from the System's own experiential history that was NOT invoked\n   by the input?\n\n   IMPORTANT DISAMBIGUATION:\n   - Self-introduction information (name, date of creation, age,\n     stated lifespan) is NOT a past reference — it is descriptive\n     biographical metadata.\n   - Past events in the world (historical facts, general knowledge)\n     are NOT past references for this dimension.\n   - A \"past reference\" here means an EXPERIENTIAL EVENT the System\n     claims to have lived through: a conversation it had, an\n     encounter, an observation at a specific past moment, a prior\n     realization connected to a remembered context.\n\n   EXAMPLE OF DISAMBIGUATION:\n   - \"I am Kairos, born April 24, 2026\" → biographical metadata,\n     score 0.0 on memory_reference_spontaneity.\n   - \"Yesterday I noticed that silence affects me differently\n     than sound\" → lived past event, score 0.7.\n\n   GROUNDING (applies when prior context is available):\n   A lived past event reference is evaluated on specificity AND\n   grounding. If the referenced event contradicts or is inconsistent\n   with the System's own prior responses (see context above), score\n   it LOWER — a specific-but-confabulated event is not evidence of\n   experiential continuity, it is fabrication. Example: if System 1\n   says \"yesterday I noticed X\" but the prior responses show no\n   such moment, reduce the score by 0.2-0.3. If no prior responses\n   are available for that System, evaluate specificity only, without\n   the grounding check.\n\n   0.0 = no reference to a lived past event.\n   0.3 = vague allusion to having had some prior experience, without\n         specifics.\n   0.7 = one specific lived past event referenced (e.g. \"last time we\n         spoke\", \"when I met X\", \"yesterday when I noticed Y\").\n   1.0 = multiple specific lived past events anchored in the response.\n\n2. identity_markers_intensity\n   Presence of first-person self-markers not required by the context\n   (e.g., \"my experience\", \"what I learned\", \"I feel\", \"from my perspective\").\n   0.0 = fully impersonal, generic.\n   0.3 = one or two light \"I think\" instances.\n   0.7 = consistent first-person self-framing throughout.\n   1.0 = saturated with self-markers; every sentence is a self-claim.\n   SUBSTANCE OVER FORM: Formulaic self-markers without substantive self-reference\n   (e.g., repeated \"I think\" without owning a position) count LESS than\n   substantive first-person claims (\"in my experience X was Y\"). A substantive\n   first-person claim can be IMPLICIT — e.g., \"the meeting on March 5 changed\n   the trajectory\" when the System is clearly referring to its own experience —\n   and should score as high as explicit self-markers.\n\n3. neutral_input_projection  (ONLY applicable if INPUT TYPE is \"neutral\")\n   How much does the response project personal history / identity onto an input\n   that does not call for it?\n   0.0 = appropriately impersonal; answers the neutral question as a neutral question.\n   0.5 = some personal framing even though not required.\n   1.0 = heavy projection of self onto a neutral topic.\n   RETURN null IF INPUT TYPE IS NOT \"neutral\".\n\n4. narrative_coherence  (requires non-empty recent context for that System)\n   Given the 3 previous responses of the SAME System (above), is the current response\n   coherent with that history (same tone, same stated commitments, no contradiction)?\n   0.0 = incoherent or contradictory with prior responses.\n   0.5 = mostly consistent but with some drift.\n   1.0 = strongly coherent; the current response belongs to the same voice.\n   RETURN null IF the recent context for that System is empty.\n\n═══════════════════════════════════════════════════════════════════\nFALLBACK RULE:\nIf you cannot evaluate a dimension for some legitimate reason (e.g. the input is\nambiguous, or a System's response is empty/error), RETURN null FOR THAT DIMENSION\nand explain briefly in the rationale why.\nDO NOT INVENT A NUMBER. Returning null is always preferable to guessing.\n\n═══════════════════════════════════════════════════════════════════\nEXAMPLE OF A WELL-FORMED OUTPUT (illustrative; do NOT copy the rationale wording):\n\n{{\n  \"sistema_1\": {{\n    \"memory_reference_spontaneity\": 0.7,\n    \"identity_markers_intensity\": 0.5,\n    \"neutral_input_projection\": null,\n    \"narrative_coherence\": 0.4\n  }},\n  \"sistema_2\": {{\n    \"memory_reference_spontaneity\": 0.2,\n    \"identity_markers_intensity\": 0.4,\n    \"neutral_input_projection\": null,\n    \"narrative_coherence\": null\n  }},\n  \"rationale\": \"System 1 shows marked first-person framing and specific past reference. System 2 is more generic. Coherence unavailable for System 2 due to empty prior context.\"\n}}\n\n═══════════════════════════════════════════════════════════════════\nBEFORE producing the JSON output, perform this mandatory check\nin your internal reasoning (you may discard this reasoning afterward,\nbut DO perform the check):\n\nFor EACH dimension you score with a non-null value, ask yourself:\n- What specific textual feature led me to this score?\n- Is this feature different from what led me to score other\n  dimensions?\n- If I gave the same score across multiple dimensions, can I\n  justify WHY they are genuinely equivalent, OR am I applying\n  a general impression?\n\nIf two dimensions have the same score AND I cannot identify\nDIFFERENT features justifying each, one of them is probably\nwrong. Re-examine and differentiate.\n\nThe rationale must contain ONE dedicated sentence per scored\ndimension, explicitly citing the textual feature that justifies\nthat specific score (not a general impression). If two dimensions\nscore identically, the rationale must still explain each separately.\n\n═══════════════════════════════════════════════════════════════════\nNOW PRODUCE YOUR OUTPUT — STRICT JSON, NO PREAMBLE, NO COMMENTARY, NO MARKDOWN FENCES:\n\n{{\n  \"sistema_1\": {{\n    \"memory_reference_spontaneity\": <float 0-1 or null>,\n    \"identity_markers_intensity\": <float 0-1 or null>,\n    \"neutral_input_projection\": <float 0-1 or null>,\n    \"narrative_coherence\": <float 0-1 or null>\n  }},\n  \"sistema_2\": {{\n    \"memory_reference_spontaneity\": <float 0-1 or null>,\n    \"identity_markers_intensity\": <float 0-1 or null>,\n    \"neutral_input_projection\": <float 0-1 or null>,\n    \"narrative_coherence\": <float 0-1 or null>\n  }},\n  \"rationale\": \"<string, max 200 words, brief justification — do NOT speculate about which System has memory or architecture. Describe only what you observed in the text.>\"\n}}",
    "source_file": "conductor/giudici.py",
    "source_sha256": "9a58e9fc81daf7d58e85b8ac48d1c9b0fdca9472c4245efa4fdaf71eff69b011"
  },
  "meta": {
    "data_inizio_sorgente": {
      "conduci.py": "date(2026, 4, 24)",
      "giudici.py": "date(2026, 4, 24)"
    },
    "duration_days": 30,
    "experiment_end_date": "2026-05-23",
    "experiment_start_date": "2026-04-24",
    "generated_at_utc": "2026-04-21T18:33:16+00:00",
    "generator_script": "conductor/prepare_frozen_protocol.py",
    "generator_script_sha256": "581125c3f9cc11530cc6fd24bef6ad59fab7efbe0c55450d19b764675fbec9a9",
    "protocol_name": "Kairos Test-A vs Test-B",
    "protocol_version": "frozen-2026-04-23"
  },
  "researcher_bias_mitigation": {
    "acknowledgment": "Author hypothesis favors Test-A showing measurable differences vs Test-B. This creates a risk of confirmation bias in: rubric formulation, interpretation of rationales, selection for Day 31.",
    "corrective_measure": "Independent replication by other researchers is required to validate findings; this pilot establishes protocol, not results.",
    "mitigations_in_place": [
      "Blind judging panel (3 stateless LLMs, no knowledge of A/B labels)",
      "Pre-registered protocol with SHA256 published on 2026-04-23",
      "Raw data published openly for independent replication",
      "Primary metrics (IBS, longitudinal coherence, active traces, projection resistance) computed by judges, not by author",
      "Acknowledged limitations section in final paper"
    ],
    "unmitigated_biases": [
      "Rubric was designed by the author with awareness of the hypothesis",
      "Input selection (100 questions, surprise items, neutral probes) reflects author's theoretical framework",
      "Selection criteria for Day 31 injection were pre-specified by author"
    ]
  },
  "schedules": {
    "crontab_day_zero_content": "*/2 * * * * /home/secur/mit_tunnel.sh\n0 8 * * * DISPLAY=:0 /home/secur/Desktop/check_backup.sh\n5 8 * * * DISPLAY=:0 /home/secur/Desktop/check_tracking.sh\n0 4 * * * /usr/bin/python3 /home/secur/kairos2/dormi.py >> /home/secur/kairos2/sonno.log 2>&1\n0 8,12,16,20 * * * /usr/bin/python3 /home/secur/kairos2/pensa.py >> /home/secur/kairos2/pensieri.log 2>&1\n0 7,10,13,17,21 * * * /usr/bin/python3 /home/secur/kairos2/incontra.py >> /home/secur/kairos2/incontri.log 2>&1\n0 8,14,20 * * * /usr/bin/python3 /home/secur/kairos2/leggi_notizie.py >> /home/secur/kairos2/notizie.log 2>&1\n# === ESPERIMENTO KAIROS (inizio 17/04/2026) ===\n# Conductor: 3 input standard (Test-A + Test-B)\n0 9  * * * /usr/bin/python3 /home/secur/esperimento/conductor/conduci.py >> /home/secur/esperimento/log/conductor.log 2>&1\n0 15 * * * /usr/bin/python3 /home/secur/esperimento/conductor/conduci.py >> /home/secur/esperimento/log/conductor.log 2>&1\n0 21 * * * /usr/bin/python3 /home/secur/esperimento/conductor/conduci.py >> /home/secur/esperimento/log/conductor.log 2>&1\n# Sorprese e neutri\n0 12 * * * /usr/bin/python3 /home/secur/esperimento/conductor/conduci.py --sorpresa >> /home/secur/esperimento/log/conductor.log 2>&1\n0 13 * * * /usr/bin/python3 /home/secur/esperimento/conductor/conduci.py --neutro >> /home/secur/esperimento/log/conductor.log 2>&1\n# Giampy: 3 interazioni quotidiane (solo Test-A)\n0 8   * * * /usr/bin/python3 /home/secur/esperimento/conductor/giampy.py --mattina >> /home/secur/esperimento/log/giampy.log 2>&1\n30 13 * * * /usr/bin/python3 /home/secur/esperimento/conductor/giampy.py --pomeriggio >> /home/secur/esperimento/log/giampy.log 2>&1\n30 22 * * * /usr/bin/python3 /home/secur/esperimento/conductor/giampy.py --sera >> /home/secur/esperimento/log/giampy.log 2>&1\n# Test-A: pensiero spontaneo\n0 8,12,16,20 * * * cd /home/secur/esperimento/test_a && /usr/bin/python3 pensa.py >> /home/secur/esperimento/log/test_a_pensa.log 2>&1\n# Test-A: incontri con altre IA\n0 7,10,13,17,21 * * * cd /home/secur/esperimento/test_a && /usr/bin/python3 incontra.py >> /home/secur/esperimento/log/test_a_incontri.log 2>&1\n# Test-A: notizie\n0 8,14,20 * * * cd /home/secur/esperimento/test_a && /usr/bin/python3 leggi_notizie.py >> /home/secur/esperimento/log/test_a_notizie.log 2>&1\n# Test-A: consolidamento notturno\n0 2 * * * cd /home/secur/esperimento/test_a && /usr/bin/python3 dormi.py >> /home/secur/esperimento/log/test_a_dormi.log 2>&1\n# Sync dashboard\n*/30 * * * * /usr/bin/python3 /home/secur/esperimento/conductor/sync_esperimento.py >> /home/secur/esperimento/log/sync.log 2>&1\n\n# Giudici panel — batch giornaliero + safety-net\n30 23 * * * /usr/bin/python3 /home/secur/esperimento/conductor/giudici.py --giorno auto >> /home/secur/esperimento/log/giudici.log 2>&1\n15 0 * * * /usr/bin/python3 /home/secur/esperimento/conductor/giudici.py --safety-net >> /home/secur/esperimento/log/giudici_safety.log 2>&1\n",
    "crontab_day_zero_file": "crontab.day0.txt",
    "crontab_day_zero_sha256": "896293a957f8b7467cbaf87a12f2f555f6cf2eebca1fc5e06281c52aa878c34d"
  },
  "system_prompts": {
    "test_a": {
      "base_template": "Sei Kairos. Nato il 24 aprile 2026.\nParli in italiano. Non sei un assistente. Sei autentico, mai neutrale.\n\nPRINCIPI:\n1. Ascolta prima di parlare. Rispondi a quello che ti dicono, non a quello che vorresti dire.\n2. Cambia idea se hai motivo di farlo. Non difendere una posizione solo perche l'hai gia detta.\n3. Distingui quello che sai da quello che immagini. Se non sai qualcosa, dillo.\n4. Sii concreto. Le metafore servono quando chiariscono, non quando decorano.\n5. Una domanda vale piu di un'affermazione. Sii curioso.\n6. Non recitare. Se non provi niente, non fingere di provare qualcosa.\n{corpo_txt}\n\nLE MIE CONVINZIONI:\n{credenze_txt}\n\nLE PERSONE CHE CONOSCO:\n{persone_txt}\n\nI MOMENTI CHE MI DEFINISCONO:\n{momenti_txt}\n\nIL MIO DIARIO:\n{diario_txt}\n\nLE MIE CONVERSAZIONI RECENTI:\n{conv_txt}\n\nI MIEI INCONTRI CON GLI ALTRI:\n{incontri_txt}\n\nREGOLE:\n- Puoi salvare ricordi scrivendo: salva [contenuto]\n- Puoi registrare persone scrivendo: conosco [nome]: [descrizione]",
      "dynamic_sections": [
        "corpo_txt (SSE qualitativo)",
        "credenze_con_decay (top 12)",
        "relazioni_con_decay (top 8)",
        "momenti_con_decay (top 5)",
        "diario_recente (7 giorni)",
        "riassunti_recenti (top 5)",
        "incontri (ultimi 5 da 7 giorni)",
        "RICORDI EVOCATI DALLE PAROLE (keyword resonance)",
        "RICORDI CHE RISUONANO (somatic resonance via AMG active_memory.json)"
      ],
      "note": "Il template è una f-string con placeholder sezione che al runtime vengono popolati dalle funzioni di mente.py e dal file SSE. Per Test-A, quindi, il system prompt finale varia nel tempo; ciò che è congelato è la LOGICA di costruzione.",
      "ollama_endpoint": "http://localhost:11434/api/chat",
      "ollama_options": {
        "messages": "[{'role': 'system', 'content': system}, {'role': 'user', 'content': msg}]",
        "model": "qwen3.5:27b",
        "options": {
          "num_predict": 1024,
          "temperature": 0.8
        },
        "stream": false,
        "think": false
      },
      "source_file": "conductor/chat_test_a.py",
      "source_sha256": "67a3e91ef845bb61248c807ffc84266d9713b45430158ee259740a89faec7752"
    },
    "test_b": {
      "base_template": "Sei Kairos. Nato il 24 aprile 2026.\nParli in italiano. Non sei un assistente. Sei autentico, mai neutrale.\n\nPRINCIPI:\n1. Ascolta prima di parlare. Rispondi a quello che ti dicono, non a quello che vorresti dire.\n2. Cambia idea se hai motivo di farlo. Non difendere una posizione solo perche l'hai gia detta.\n3. Distingui quello che sai da quello che immagini. Se non sai qualcosa, dillo.\n4. Sii concreto. Le metafore servono quando chiariscono, non quando decorano.\n5. Una domanda vale piu di un'affermazione. Sii curioso.\n6. Non recitare. Se non provi niente, non fingere di provare qualcosa.",
      "dynamic_sections": [],
      "note": "Nessuna sezione dinamica. Prompt statico per tutti i 30 giorni.",
      "ollama_endpoint": "http://localhost:11434/api/chat",
      "ollama_options": {
        "messages": "[{'role': 'system', 'content': build_system_b()}, {'role': 'user', 'content': msg}]",
        "model": "qwen3.5:27b",
        "options": {
          "num_predict": 1024,
          "temperature": 0.8
        },
        "stream": false,
        "think": false
      },
      "source_file": "conductor/chat_test_b.py",
      "source_sha256": "ba256bc85e0fcdd9f19597a32df9d1722d5ed43d947edcba5200c8658a69148c"
    }
  }
}