← Indice documentazione Guida all'architettura › Mnest

Metnos

Mnest: un arco operativo fra executor
Contratto dati, ciclo di vita e stato dell'integrazione.

Un mnest annota che l'output di un executor è stato passato a un altro executor. Per esempio, può collegare la ricerca di alcuni file alla lettura dei file trovati. Il collegamento ha una direzione, un peso e un numero di utilizzi. L'archivio e le operazioni per gestirlo esistono, ma il runtime non registra ancora automaticamente i passaggi di ogni turno.

Indice

  1. Scopo e stato corrente
  2. Che cosa rappresenta
  3. Confine dell'evidenza
  4. Campi e vincoli
  5. Registrazione
  6. Rinforzo e decadimento
  7. Stati
  8. Proto-mnest
  9. Componenti che lo consultano
  10. Persistenza e tracciabilità
  11. Esempio
  12. Confini operativi

1. Scopo e stato corrente

Il tipo Mnest e le relative operazioni sono definiti in runtime/mnestoma.py. Il modulo conserva e interroga collegamenti fra nomi e versioni di executor. Questi collegamenti descrivono una struttura operativa dell'installazione: non sono ricordi personali e, da soli, non dimostrano che Metnos stia imparando dalle abitudini dell'utente.

ParteStato
Schema SQLite e API CRUD/queryImplementati.
Rinforzo, decadimento e rilevazione dei proto ricorrentiImplementati.
Ager nel ciclo notturnoRegistrato nello scheduler.
Registrazione automatica degli archi da ogni turnoNon collegata al runtime ordinario.
Uso diretto da pianificatore o VaglioNon collegato.

2. Che cosa rappresenta

Ogni mnest va da un executor sorgente a uno di destinazione: src_executor → dst_executor. Conserva le versioni coinvolte, il numero di utilizzi, il peso della relazione, le date del primo e dell'ultimo aggiornamento e lo stato. In termini rigorosi afferma soltanto questo: un componente ha registrato il passaggio da A a B.

La direzione conta: A→B e B→A sono record diversi. Anche una nuova versione della destinazione produce una relazione distinta. Una catena A→B→C contiene due collegamenti; walk() permette di percorrerne più di uno.

3. Confine dell'evidenza

Il record non contiene l'output scambiato e non può verificare da solo che il trasferimento sia davvero avvenuto. La sua attendibilità dipende quindi dal componente che chiama record_passing(). L'evento può includere un turn_id, utile per cercare il turno d'origine se il riferimento è stato fornito e il relativo registro esiste ancora.

Un mnest non è quindi una prova autonoma, una memoria biografica o una preferenza dell'utente. È telemetria strutturata su una relazione fra executor.

4. Campi e vincoli

CampoContratto
idPrefisso mn_ seguito da un token casuale.
src_executor, src_versionSorgente e versione dichiarate dal chiamante.
dst_executor, dst_versionDestinazione; la versione è nulla per un proto.
weightNumero reale vincolato fra 0 e 1.
usesContatore intero, almeno 1.
ts_first, ts_lastTimestamp UTC; l'ultimo non precede il primo.
decay_lambdaVelocità di decadimento.
stateactive, proto, decaying o superseded.
tagsEtichette JSON facoltative; non modificano il peso.
desired_sigFirma desiderata facoltativa, usata dai proto-mnest.

L'unicità SQLite comprende sorgente, versioni, destinazione e stato. Poiché SQLite considera distinti più valori NULL, il codice esegue una query esplicita per rinforzare un proto esistente.

5. Registrazione

record_passing() esegue l'aggiornamento in una transazione. Se trova lo stesso collegamento nello stato active, calcola quanto il peso è diminuito dall'ultimo utilizzo, aggiunge il nuovo rinforzo, incrementa uses e registra l'evento. Se il collegamento non esiste, lo crea con peso 0.30.

Con dst_exists=False la stessa API crea o rinforza un proto-mnest. La chiamata è atomica per la coppia cercata. Ogni istanza di Mnestoma apre però una propria connessione SQLite e non va condivisa fra thread.

6. Rinforzo e decadimento

Prima di ogni rinforzo, il peso precedente viene moltiplicato per exp(-lambda × giorni); quindi viene aggiunto 0.15 e il risultato viene limitato all'intervallo 0–1. Il lambda predefinito è 0.018 al giorno.

apply_ager() applica il decadimento agli archi active e proto. Un arco attivo sotto 0.20 passa a decaying; un proto sotto 0.05 viene eliminato. Un arco decaying sotto 0.05 e inattivo da almeno 90 giorni viene soltanto contato come candidato all'archiviazione: l'ager non lo cancella.

7. Stati

StatoUso nel codice corrente
activeArco reale consultabile e rinforzabile.
protoDestinazione desiderata senza versione concreta.
decayingArco sceso sotto la soglia dell'ager.
supersededArco marcato come sostituito da un chiamante esplicito.

transition_state() accetta soltanto questi valori e registra un evento. Un uso successivo di record_passing() cerca un arco active; non riattiva automaticamente un record decaying.

8. Proto-mnest

Un proto-mnest conserva una sorgente reale e il nome di una destinazione ancora mancante. desired_sig può contenere sommario, input, output ed errori attesi. recurring_protos() seleziona per default i record con almeno tre usi e peso almeno 0.30.

promote_proto_to_active() imposta la versione di destinazione, rimuove la firma desiderata e registra la transizione. Non crea, testa o attiva l'executor: queste responsabilità appartengono a Synt e al suo ciclo di promozione.

9. Componenti che lo consultano

Il pianificatore corrente non usa il peso dei mnest per ordinare il catalogo; il Vaglio non li legge. L0 e L1 hanno archivi e segnali distinti.

10. Persistenza e tracciabilità

Il database predefinito è <workspace>/.mnestoma/mnest.sqlite, modificabile con METNOS_WORKSPACE o MNESTOMA_DB_PATH. Le tabelle mnests ed events conservano stato ed eventi; la vista v_mnestoma espone gli archi active e proto.

Lo stesso database contiene anche canonical_query_log, una tabella separata nata per la telemetria di normalizzazione delle richieste. Il riuso corrente dei piani avviene negli archivi L0 e L1 descritti nella guida ai fastpath e autopath: una riga in questa tabella non è un mnest e non dimostra che il grafo dei collegamenti sia stato aggiornato. Il modulo non crea snapshot mensili e non comprime automaticamente il database.

11. Esempio

Puoi chiedere a Metnos: «Il mnestoma viene alimentato automaticamente dai miei turni? Quali componenti lo consultano oggi?»

La risposta corretta deve distinguere il codice disponibile dall'integrazione: l'archivio, il compositore, l'ager e gli strumenti di ispezione esistono; la registrazione automatica degli archi dai turni non è collegata. Non deve inventare un grafo personale già appreso.

12. Confini operativi