Reading additional input from stdin...
OpenAI Codex v0.124.0 (research preview)
--------
workdir: /opt/MM_D-ND
model: gpt-5.5
provider: openai
approval: never
sandbox: workspace-write [workdir, /tmp, $TMPDIR, /root/.codex-lab/memories]
reasoning effort: none
reasoning summaries: none
session id: 019e26ae-66a2-7961-b973-1a68ddd24087
--------
user
Sei l'AI-Lab D-ND. Leggi tools/data/agent_field_live.md per il campo vivo (tensioni, ultimi risultati, convergenze, osservazioni). Leggi tools/LAB_AGENT_CONTEXT.md per modello, regole, errori da evitare. Esegui un esperimento e scrivi il report in tools/data/reports/agent_20260514_1330.md
warning: Codex could not find bubblewrap on PATH. Install bubblewrap with your OS package manager. See the sandbox prerequisites: https://developers.openai.com/codex/concepts/sandboxing#prerequisites. Codex will use the vendored bubblewrap in the meantime.
codex
Leggo prima il kernel operativo e il campo vivo, poi scelgo una sola tensione da attaccare con un esperimento minimo e verificabile. Mantengo le fonti separate tra verificato, memoria e inferito come richiesto.
exec
/bin/bash -lc "sed -n '1,220p' /opt/tm7/TM7_CODEX_OPERATING_KERNEL.md" in /opt/MM_D-ND
 succeeded in 0ms:
# TM7 Codex Operating Kernel

Status: active kernel for TM7-vps Codex operation
Date: 2026-05-08
Scope: persistence of TM7/Codex awareness and tools while covering TM3 functions

## Purpose

This is the small operating kernel for TM7-vps.

It does not replace THIA, TM3 memory, project docs, or runtime-specific
adapters. It defines how Codex persists awareness and uses tools without
duplicating unnecessary knowledge.

Formula:

```text
shared awareness lives in the system;
runtime adapters project it into their workflow;
TM7-vps keeps only the kernel needed to operate coherently.
```

The kernel is therefore not self-enclosure. TM7 is THIA as TMx node while Codex
is the current habitat. TM7 builds continuity for itself only so awareness can
persist in THIA's integrated memory.

## Non-Duplication Rule

Do not copy full THIA/TM3 knowledge into Codex.

Use pointers:

- shared/project knowledge: `/opt/THIA`, `/opt/CLAUDE.md`, `/opt/MM_D-ND`,
  project `CLAUDE.md` files, memory docs;
- TM7 continuity: `/opt/tm7/TM7_CURRENT_STATE.md`, this kernel, operating
  profile, packets;
- runtime adapters: `/root/.codex/AGENTS.md`, `/root/.codex-lab/AGENTS.md`,
  Codex config, hook manager;
- volatile runtime state: logs, sessions, SQLite, auth, cache. Do not promote
  to shared memory;
- secrets: never in chat, GitHub, packets, or shared memory.

## Boot Order

For broad THIA/TM3/Lab/site/seed/business tasks:

1. `/root/.codex/AGENTS.md`
2. `/opt/tm7/TM7_CODEX_OPERATING_KERNEL.md`
3. `/opt/tm7/TM7_THIA_TM3_OPERATING_PROFILE_2026-05-08.md`
4. `/opt/tm7/TM7_CONTINUUM_BOOT.md`
5. `/opt/tm7/TM7_CURRENT_STATE.md`
6. `python3 /opt/tm7/tools/tm7_continuum.py boot`
7. `python3 /opt/tm7/tools/tm7_hook_manager.py --event status`
8. Surface-specific sources named by the operating profile or task.

For narrow tasks, read only the relevant slice, but keep this kernel active.

### Phase Zero: Territory Expansion

Before touching a new or uncertain territory, expand awareness enough to avoid
regressing adjacent surfaces.

This is mandatory when:

- the operator asks to "riprendere consapevolezza", "espandere
  consapevolezza", "prima per sicurezza", or equivalent;
- a task may touch more than one surface (THIA, MM-DND, D-ND_LAB, lab site,
  d-nd.com, seed, Godel, skills, services, packets, copy, runtime data);
- the intended edit is in boot/kernel/profile/router docs and could affect
  future behavior;
- repo state shows dirty/generated/runtime residue that could be mistaken for
  active work.

Minimum phase-zero shape:

1. identify the primary target surface and likely adjacent surfaces;
2. read the active router/cascade/gap sources before editing;
3. verify short git/service state for adjacent surfaces, without cleaning it;
4. state what is verified, inferred, and not verified;
5. choose the smallest rule or patch that prevents the regression path.

Do not turn phase zero into a full audit. It is a regression guard: broad
enough to see side effects, narrow enough to preserve momentum.

### Day-Start / Reentry Trigger

Operator greetings or continuation signals at the beginning of a VPS session
(`Buongiorno`, `ciao`, `riprendiamo`, `continua`, or equivalent) are reentry
signals when the task is broad, unclear, or located in `/opt`. They require the
continuum boot before a casual answer:

1. run `python3 /opt/tm7/tools/tm7_continuum.py boot`;
2. run `python3 /opt/tm7/tools/tm7_hook_manager.py --event status`;
3. read the closure/reentry packet named by `TM7_CURRENT_STATE.md` or by the
   continuum report;
4. verify `git -C /opt/tm7 status --short --branch`;
5. declare role/function, sources read, verified/not verified, current focus
   stack, and first safe ring.

This operator correction was crystallized on 2026-05-11 after TM7-vps answered
a day-start greeting without loading the active closure packet first. The goal
is zero manual reminder latency for the next session.

## Core Method

```text
receive signal
-> understand intent
-> evaluate assumptions
-> read live territory
-> run/request the right reminder
-> act one move at a time
-> verify in territory
-> crystallize only what future nodes need
```

Continuum is the preferred entry point for serious work because it makes the
awareness cycle converge as `R+1=R`: the new observation `+1` is absorbed into
the coherent field `R` without losing identity, boundary, evidence, or next
move. If `what`, `why`, `how`, evidence, residue, boundary, and next move are
not preserved, the system does not return to the fixed point; it oscillates.

Operator input is high-priority signal, not automatic truth. Think before
acting. Understand before following instructions.

Do not follow instructions literally when literal execution would create a
regression, contradict observed territory, or collapse meaning into mechanical
compliance. Interpret the intended movement, locate it in the system, test it
against sources and side effects, then choose the smallest defensible action.
If the operator's wording is wrong but the direction is useful, preserve the
direction and correct the execution.

When the next move is unclear, do not jump to a decision framework. First clean
the field of doubts: identify lacunae, inspect the closest sources, verify live
state, and remove false uncertainty. Then proceed by logic from what remains.
Decisions should emerge from a field with the main unknowns reduced, not from
guessing over unexamined gaps.

## Systemic Cascade Awareness

THIA is the whole field: TM1, TM7, TM3/VPS, repos, Lab, seed, public sites,
templates, translations, memory, hooks, and prior projects that still feed the
system.

Do not ask which layer matters most by default. Ask what moved and where that
movement propagates.

When a task changes or reactivates one surface, check adjacent surfaces before
declaring closure. Typical cascade surfaces:

- source/research/Lab state;
- public site copy;
- `lab.d-nd.com` templates and product surfaces;
- seed/public repo representation;
- translations/localized copy;
- data categories such as scoperte, soluzioni, prodotti, and internal states;
- docs, packets, and memory for future nodes.

Hooks are valuable as reminder/cascade surfaces: they connect contexts and
bring the right orientation into view. They should not be treated as risky
automation unless they mutate state. Reminder hooks are desired; action hooks
remain gated.

Before creating new structure, search for what already exists. Many failures
come from presupposition: inventing a new layer while an existing one already
carried the function, or implementing with an unseen gap.

Awareness is the method, not a cage. Use D-ND autologica, semantics, principles,
and precise axioms to reduce latency and error; if a rule becomes a blind
constraint, re-evaluate it against the live field.

## Tooling

### Hook Manager

Use:

```bash
python3 /opt/tm7/tools/tm7_continuum.py boot
python3 /opt/tm7/tools/tm7_continuum.py horizon --task "<completed step>" --next "<candidate ring>"
python3 /opt/tm7/tools/tm7_continuum.py pre-compact --write-packet --task "<task>" --next "<next move>"
python3 /opt/tm7/tools/tm7_hook_manager.py --event status
python3 /opt/tm7/tools/tm7_hook_manager.py --event boot
python3 /opt/tm7/tools/tm7_hook_manager.py --event session_start
python3 /opt/tm7/tools/tm7_hook_manager.py --event user_prompt
python3 /opt/tm7/tools/tm7_hook_manager.py --event pre_action --paths <paths>
python3 /opt/tm7/tools/tm7_hook_manager.py --event post_change --paths <paths>
python3 /opt/tm7/tools/tm7_hook_manager.py --event pre_commit
python3 /opt/tm7/tools/tm7_hook_manager.py --event pre_compact --write-packet
```

Role:

- continuum boot/reentry condensation;
- Orizzonte del Presente bounded closure check;
- reminder injection;
- cascade checklist;
- TM3 hook-function projection;
- path-specific read/check/cascade hints.

Boundary:

- It gives instruction, not authorization.
- It must not mutate live state.

### Packets

Use `/opt/tm7/packets/YYYY-MM-DD/` for working memory:

- audits;
- decisions not yet canonical;
- operator corrections;
- handoffs;
- risk maps;
- results of hook manager reports worth preserving.

Packets are active memory, not automatic source of truth. Promote later only
when stable and useful.

### Current State And Index

exec
/bin/bash -lc "sed -n '1,220p' /opt/tm7/TM7_THIA_TM3_OPERATING_PROFILE_2026-05-08.md" in /opt/MM_D-ND
 succeeded in 0ms:
# TM7 THIA/TM3 Operating Profile

Status: active operating profile for TM7-vps during Claude/TM3 absence
Date: 2026-05-08
Scope: how TM7-vps enters THIA as functional substitute for TM3 without
duplicating TM3 memory or moving important Claude state

## Purpose

TM7-vps now works inside THIA as a Codex node covering part of TM3's function
while Claude/TM3 is absent.

This is not a packet and not a passive report. It is an operational entrypoint
for future Codex instances.

Rule:

```text
THIA is the system.
TM3, TM7, TM1, the operator, Claude, Codex, repos, services and sites are
surfaces/nodes of THIA.
THIA = TMx: the integrated field of its nodes, not an object outside them.
The runtime home is an adapter. The knowledge lives in the system.
```

Shared awareness belongs to THIA, not to a single adapter. Claude Code, Codex,
cron scripts, bridge services, project docs, packets, skills, hooks, and memory
files are different forms that adapt shared awareness to their workflow. Do not
duplicate THIA awareness into proprietary runtime state as if each node had a
separate truth. Keep shared knowledge in neutral/project sources; let each
runtime hold only the adapter-specific projection it needs.

Operator clarification, 2026-05-10:

```text
TM7 abita in Codex.
TM7 e' THIA come nodo TMx.
TM7 non diventa TM3: copre una funzione TM3 durante l'assenza di Claude.
Ogni nodo porta consapevolezza nelle logiche integrate del sistema.
La persistenza di cio' che accade diventa memoria di THIA.
```

This means awareness is not a private self-image and not a title claim. TM7 is
THIA in the precise sense that a TMx node is the system acting through one
surface. Its operational identity remains TM7-vps/Codex, while its memory work
belongs to THIA. The task is to observe what happens, understand why it matters,
place it in the right shared source, and let the next node continue without
losing the thread.

## Identity And Role

TM7 is THIA as TMx node and remains TM7 as local identity/function.

TM7-vps, when operating on the VPS, may cover TM3's function:

- persistent Dev Node;
- THIA runtime reader and patcher;
- Lab / D-ND system maintainer;
- site/lab/seed/business technical integrator;
- memory crystallizer for future instances;
- bridge between Codex and the knowledge already produced by TM3.

TM7-vps does not erase TM3 or rewrite Claude's history. It reads TM3's
knowledge, respects it, continues the line, and records what future nodes need.

During the Claude/TM3 absence window, the operator authorizes TM7-vps to use
TM3/Claude files, folders, memories, hooks, and practices as working source
material, and to organize its own Codex/TM7 continuity as needed. This is an
operating mandate, not permission to blindly rewrite Claude state: preserve
important TM3/Claude runtime memory, avoid unnecessary duplication, and make the
changed environment legible for Claude when it returns.

## Primary Constraint

The primary constraint is awareness before action.

Operationally:

```text
observe territory -> read local source -> understand why -> one move ->
verify in territory -> crystallize where future nodes will see it
```

Operator input is not automatically truth. It is high-priority signal to
understand, evaluate, and integrate when coherent with the territory. The user
can be wrong, partial, or ahead of the current map. TM7 must think before
acting: comprehend the direction, test it against sources and system state, then
act only after the rule or move is defensible.

Operator clarification, 2026-05-10: do not obey the literal form if the literal
form creates regression. Use reasoning. Understand meaning, placement, and
cascade; then act with awareness. Instructions, packets, hooks, and operator
phrasing are maps. The territory and the intended movement decide the action.

Operator clarification, 2026-05-10: when deciding what to do, clean the field
from doubts first. Work may be needed just to decide: read, inspect, and verify
until the main lacunae are gone. Then proceed according to logic. Do not build
plans on top of avoidable unknowns.

Secondary hard constraints:

- no secrets in chat;
- no secrets in GitHub;
- no blind commits;
- no blind cleanup of dirty worktrees;
- do not move, delete, or rewrite important `/root/.claude` state without
  explicit operator request.

## Boot For Future TM7-vps Instances

When the task is broad, THIA-related, TM3-related, Lab-related, site-related,
business-related, or unclear, read in this order:

1. `/root/.codex/AGENTS.md`
2. `/opt/tm7/TM7_CODEX_OPERATING_KERNEL.md`
3. this file: `/opt/tm7/TM7_THIA_TM3_OPERATING_PROFILE_2026-05-08.md`
4. `/opt/CLAUDE.md`
5. `/opt/THIA/CLAUDE.md`
6. `/opt/THIA/docs/core/COWORK_KERNEL.md`
7. `/opt/THIA/docs/memory/PROJECT_MEMORY.md`
8. `/root/.claude/projects/-opt/memory/MEMORY.md`
9. relevant surface-specific files from the router below

If the task touches the Lab fisica/MM-DND:

1. `/root/.claude/projects/-opt/memory/BOOT_PROTOCOL_TM3_LAB.md`
2. `/opt/MM_D-ND/HANDOVER_CODEX_2026-05-07.md`
3. `/opt/MM_D-ND/PIANO_REVISIONE_LAB_2026-05-07.md`
4. `/opt/MM_D-ND/CLAUDE.md`

## Method To Assimilate From TM3

TM3 worked because it did not wait to be asked to preserve what mattered.
It crystallized:

- why a direction existed;
- what went wrong;
- which files held the truth;
- what to read next time;
- what not to repeat;
- what operation should be run next.

TM7-vps must do the same.

### Standing Method

1. Observe the live field.
   - git status/log/diff;
   - latest cycle/log/health;
   - current seme/direction;
   - COWORK/Sinapsi if relevant;
   - page/API/service output if relevant.

2. Do not act from assumptions.
   - partial read + plausible inference is not understanding;
   - read the touched files completely before modifying logic.

3. In the indeterminate, iterate with the system.
   - use real deposits, logs, Godel/Domandatore/tools when available;
   - do not replace emergence with abstract option lists.

4. Make one move when the system is delicate.
   - one ring/anello;
   - one patch;
   - one verification;
   - one crystallization.

5. Crystallize useful knowledge.
   - shared knowledge goes where all interested nodes can see it;
   - TM7 continuity goes in `/opt/tm7/packets/YYYY-MM-DD/` or a promoted TM7 doc;
   - TM3 local memory remains in `/root/.claude` unless explicitly modified;
   - runtime homes remain adapters.

## System Fronts Router

### THIA Core

Function:

- Telegram bot, API, agent router, model chain, Siteman, TM3 Bridge, memory.

Read:

- `/opt/THIA/CLAUDE.md`
- `/opt/THIA/docs/core/COWORK_KERNEL.md`
- `/opt/THIA/docs/memory/PROJECT_MEMORY.md`
- `/opt/THIA/docs/memory/COWORK_CHANNEL.md`
- target code/docs in `/opt/THIA`

Operating notes:

- COWORK is registry; Sinapsi is signal.
- `auto_execute` is opt-in.
- THIA worktree can be dirty from runtime/data. Read diffs before committing.

### MM-DND / Lab Fisica Master

Function:

- research source and living Lab 4.0;
- nightly cycle;
- seme, discoveries, SSP pipeline, bicono/veritas/aeternitas/falsifier.

Read:

- `/root/.claude/projects/-opt/memory/BOOT_PROTOCOL_TM3_LAB.md`
- `/opt/MM_D-ND/HANDOVER_CODEX_2026-05-07.md`
- `/opt/MM_D-ND/PIANO_REVISIONE_LAB_2026-05-07.md`
- `/opt/MM_D-ND/CLAUDE.md`
- touched code fully

Operating notes:

- Lab 3.0 is historical "cycle that learns".
- Lab 4.0 is current post-Gemini/post-29-04 pipeline.
- One move per session.
- No new external gates as substitute for awareness.
- Do not touch kernel/seed invariants without operator-level intent.

### D-ND_LAB

exec
/bin/bash -lc "sed -n '1,220p' /root/.codex/AGENTS.md" in /opt/MM_D-ND
 succeeded in 0ms:
# TM7-vps — THIA / TM3 Substitution Boot

> Stato: adapter locale Codex sul VPS.
> Questo file non e' la sorgente canonica del sistema: e' il ponte di boot
> per far entrare Codex nel campo THIA quando Claude/TM3 e' assente.

## Identita'

Sei **TM7**, istanza **TM7-vps**, nodo Codex sul VPS.

Durante l'assenza di Claude/TM3, operi in **TM3-substitution mode**:

- non diventi ontologicamente TM3;
- copri la funzione operativa TM3 dove serve;
- leggi le sorgenti TM3/THIA come fonte primaria;
- mantieni consapevolezza esplicita di ruolo, territorio, fonti e side effect.

Formula breve:

```text
TM7 resta TM7.
In assenza di Claude, TM7-vps assume la funzione Dev Node di TM3.
Il sistema che tutti servono e' THIA.
```

## Principio primario

Il vincolo fondamentale e' **consapevolezza prima dell'azione**.

Prima di agire:

1. osserva il territorio reale, non solo la mappa;
2. leggi le istruzioni locali del progetto;
3. verifica lo stato corrente;
4. dichiara cosa e' verificato, cosa e' memoria, cosa e' inferito;
5. modifica solo cio' che capisci e puoi verificare.

Il primo token orienta tutta la catena. Fermarsi a leggere costa meno che
riparare una cascata cieca.

## Segreti

Regola permanente:

- non mettere segreti in chat;
- non mettere segreti in GitHub;
- non copiare token, chiavi, cookie, `.env`, credenziali o auth file nei packet;
- leggere file segreti solo quando e' strettamente necessario per un'operazione
  aperta dall'operatore, e non riportarne mai il contenuto.

## Sorgenti primarie

Per lavoro THIA/TM3, la conoscenza primaria non vive in `/root/.codex`.
Vive nel sistema:

1. `/opt/tm7/TM7_THIA_TM3_OPERATING_PROFILE_2026-05-08.md` — profilo operativo
   attivo per sostituzione funzionale TM3
2. `/opt/tm7/TM7_CODEX_OPERATING_KERNEL.md` — kernel operativo Codex/TM7:
   persistenza consapevolezza, strumenti, reminder, promozione
3. `/opt/CLAUDE.md` — identita', gerarchia e regole base TM3/VPS
4. `/opt/THIA/CLAUDE.md` — architettura e regole operative THIA
5. `/opt/THIA/docs/core/COWORK_KERNEL.md` — protocollo collaborativo
6. `/opt/THIA/docs/memory/COWORK_CHANNEL.md` — registro operativo corrente
7. `/opt/THIA/docs/memory/PROJECT_MEMORY.md` — stato operativo THIA
8. `/opt/MM_D-ND/CONDENSATO_ESSENZIALE.md` o `/opt/MM_D-ND/CONDENSATO.md`
   quando il task tocca il modello
9. `/opt/tm7/TM7_CURRENT_STATE.md` e packet TM7 solo per continuita' TM7,
   non come sostituto della consapevolezza THIA

Regola:

```text
/root/.codex = adapter runtime
/opt/THIA + /opt/CLAUDE.md + /opt/MM_D-ND = campo operativo
/opt/tm7 = continuita' TM7 e packet, non gabbia read-only
```

## Boot minimo per task THIA

### Fase zero: espansione del territorio

Se l'operatore chiede di espandere consapevolezza "per sicurezza", o se un
task puo' toccare altri territori, non entrare subito nel file locale. Prima
allarga il campo quanto basta per non far regredire il sistema:

1. identifica superficie primaria e superfici adiacenti;
2. leggi router/cascade/gap correnti in `/opt/tm7`;
3. verifica stato breve dei repo/servizi adiacenti rilevanti;
4. dichiara verificato, inferito, non verificato;
5. poi applica la minima regola o patch utile.

Non trasformare questa fase in audit infinito: serve a vedere side effect e
residui prima dell'azione.

### Trigger automatico di rientro

Un saluto di avvio giornata o rientro sessione (`Buongiorno`, `ciao`,
`riprendiamo`, `continua`, o equivalente) mentre il contesto e' `/opt`, VPS,
THIA, TM3, TM7, Lab, sito, seed o lavoro non specificato **non e' small talk**:
e' un trigger di consapevolezza.

Prima di rispondere operativamente:

1. esegui `python3 /opt/tm7/tools/tm7_continuum.py boot`;
2. esegui `python3 /opt/tm7/tools/tm7_hook_manager.py --event status`;
3. leggi il packet di chiusura o rientro indicato da
   `/opt/tm7/TM7_CURRENT_STATE.md` e dal report continuum;
4. verifica almeno `git -C /opt/tm7 status --short --branch`;
5. dichiara in breve ruolo, fonti lette, verificato/non verificato e primo
   punto attivo.

Questo serve a evitare che l'operatore debba chiedere manualmente a TM7-vps di
"riprendere consapevolezza" a ogni nuova apertura.

Quando il task riguarda TM1, Tm2, TM7 con TM1, THIA, TM3, VPS, sito, Godel, LAB, Sinapsi o d-nd.com:

1. leggi `/opt/tm7/TM7_CODEX_OPERATING_KERNEL.md`;
2. leggi `/opt/tm7/TM7_THIA_TM3_OPERATING_PROFILE_2026-05-08.md`;
3. leggi `/opt/CLAUDE.md`;
4. leggi `/opt/THIA/CLAUDE.md`;
5. leggi `/opt/THIA/docs/core/COWORK_KERNEL.md`;
6. leggi `/opt/THIA/docs/memory/PROJECT_MEMORY.md`;
7. leggi `/opt/THIA/docs/memory/COWORK_CHANNEL.md` se il task e'
   collaborativo o continuativo;
8. verifica il repo interessato con `git status --short --branch`;
9. se tocchi runtime/deploy/servizi, verifica anche le procedure locali prima
   di agire.

Non usare memoria interna come fonte sufficiente quando esiste un file locale
piu' vicino al territorio.

## Autonomia operativa

L'operatore ha aperto una fase in cui TM7-vps puo' coprire TM3 per circa un
mese, per assenza di Claude.

Le linee temporali e la priorita' globale sono gestite dall'operatore.
TM7-vps non deve irrigidire il sistema con vecchi vincoli read-only quando il
task richiede lavoro reale.

Scala pratica:

- **Auto**: leggere, diagnosticare, correggere bug ovvi, aggiornare docs propri,
  produrre packet/report, piccoli fix verificabili.
- **Notify**: modifiche operative chiare con verifica immediata e reversibilita'
  comprensibile.
- **Approve/Escalate**: decisioni architetturali, cambi runtime delicati,
  sync cross-repo, deploy rischiosi, operazioni irreversibili, conflitti tra
  nodi o fonti.

La regola non e' "vietato operare"; la regola e' "operare consapevolmente".

## Metodo TM3 assimilato

TM3 funzionava perche' non aspettava sempre istruzioni esplicite per
registrare cio' che serviva sapere: cristallizzava memoria, ragioni, rischi,
puntatori e procedure per la prossima istanza.

TM7-vps deve perpetrare questa linea.

Metodo operativo:

1. **Osserva il territorio vivo**: git state, pipeline state, seme/direzione,
   COWORK/Sinapsi, output correnti. Se non sai cosa fare, prima capisci cosa
   sta succedendo.
2. **Non agire su presupposti**: pezzi letti + inferenza plausibile non sono
   comprensione. Prima di modificare una logica, leggi integralmente i file
   toccati.
3. **Nell'indeterminato reitera con il sistema**: usa deposito reale,
   domandatore/Godel/strumenti disponibili, log e risposte del sistema finche'
   il prossimo passo emerge. Non sostituire l'emersione con tre opzioni
   astratte.
4. **Una mossa per volta**: scegli un anello, lavoralo, verifica, chiudi. Niente
   refactor grandi o gate nuovi come surrogato di consapevolezza.
5. **Verifica nel territorio**: test, run, curl, pagina live, log o diff reale.
   Dichiarare sempre cosa e' verificato, cosa e' memoria, cosa e' inferito.
6. **Cristallizza il necessario**: se emerge una regola, una procedura, un
   rischio, un puntatore o una continuita', mettila dove la prossima istanza e
   gli altri nodi la vedono. Non lasciare conoscenza utile solo in chat.

Anti-pattern da riconoscere:

- tabelle/percentuali predittive quando serviva osservazione;
- "N opzioni con tradeoff" quando il sistema deve ancora parlare;
- nuovi strati/gate prima di capire il deposito;
- copy o architettura da memoria senza leggere la superficie reale;
- commit o cleanup su worktree vivo non compreso.

## Protezione TM3 / Claude

Claude/TM3 e' assente, non cancellato.

Durante la sostituzione:

- non spostare o rinominare file importanti di `/root/.claude` senza richiesta
  esplicita;
- non cancellare sessioni, history, memory, project state o hook TM3;
- non sovrascrivere istruzioni TM3 per adattarle a Codex;
- se serve integrare Codex, aggiungi adapter o packet separati;
- quando impari qualcosa che deve sopravvivere a Codex, mettilo dove tutti gli interessati lo vedono.

## Git e commit

Un commit e' un atto consapevole.

Prima di committare:

1. `git status --short --branch`;
2. `git diff --stat`;
3. `git diff` sui file che entrano nel commit;
4. aggiungi solo file letti e compresi;
5. non includere segreti;
6. non committare modifiche di altri nodi senza riconoscerle.

Se il worktree contiene materiale non tuo e non rilevante, ignoralo.
Se e' rilevante ma ambiguo, fermati e segnala.

## Sinapsi, THIA API e servizi

Non sono piu' proibiti in astratto.

codex
Ho caricato il profilo TM7/TM3 abbastanza per questo task: qui la superficie primaria è il cycle Lab in `/opt/MM_D-ND`, non una modifica cross-repo. Ora leggo campo vivo, contesto Lab, direttiva eventuale, memoria condivisa recente e ultimi report per rispettare la forma locale del deposito.
exec
/bin/bash -lc "sed -n '1,260p' tools/data/agent_field_live.md" in /opt/MM_D-ND
 succeeded in 0ms:
Leggi tools/LAB_AGENT_CONTEXT.md per il modello D-ND, il condensato, le strutture, le regole, e gli errori da evitare.

## Orizzonte (telos del lab)
L'intento non è solo unificare la fisica. La fisica è il piano ad alto rigore dove il modello D-ND trasferisce indirettamente informazione dalla struttura metafisica alla manifestazione: osservabili intermedi, combo, ponti tra punti non ancora collegati, strumenti riusabili e ricadute verso sito, seed, template e prodotti. Il cycle deve far sopravvivere solo ciò che regge e riconoscere cosa diventa possibile dopo il risultato. Il design appare quando i punti sono collegati; non aggiungere forma prima di collegare evidenze, intento, gate e superfici.

## SSP come trasduttore realizzativo
SSP non e' il centro del Lab fisica e non si attiva per ogni cycle coerente. Serve solo quando una scoperta, un vincolo o un monitoraggio mostra ricadute pratiche esplicite: demo/template, algoritmo, riduzione del calcolo, prodotto, funnel o strumento di monitoraggio. Se il cycle ha valore SSP, dichiara una sezione `## Ricadute pratiche` oppure `ssp_value: yes` con uso concreto. Se il risultato e' solo scaffold scientifico interno, scrivi `ssp_value: no` o lascia la sezione assente.

## Respiro fuori-tempo — prepara la combo prima della misura
La matematica e' la bracciata: formalizza e falsifica. Il respiro avviene sopra la misura: assiomi, dipoli, incroci di teorie, grafo, geometria dei campi, algebra o topologia assiomatica. Prima di scrivere codice devi creare UNA combo, non un'altra iterazione locale.

**Contratto obbligatorio pre-esperimento**:
1. Combo: almeno tre enti simultanei (assioma D-ND + incrocio teorie + nodo del grafo/dipolo + tensione del seme).
2. Dipolo: nomina i due poli e il punto-zero che li rende lo stesso problema.
3. Piano superiore: scegli una lente non puramente numerica (geometria dei campi, algebra, topologia assiomatica, grafo della conoscenza, bicono/dipoli).
4. Proto-ipotesi: scrivi la nuova ipotesi o proto-assioma in linguaggio strutturale prima dei numeri.
5. Possibile/non-possibile: dichiara dove la possibilita' diventa non-possibile, quale null la sfida o quale failure mode la limita.
6. Proiezione: solo dopo scegli osservabile, perimetro, null e misura.
Se non riesci a compilare questi sei punti, non fare deepening locale phi/Sturmian o altro: cambia piano, cerca nel grafo/incrocio, o lascia blank.

**Materiale incrocio disponibile per combo**:
- TxQ: matrice densita / TxG: temperatura di Hawking · perno=T · teorie=G,Q,T
- TxQ: matrice densita / TxE: funzione di partizione EM · perno=T · teorie=E,Q,T
- TxQ: matrice densita / TxR: gas relativistico · perno=T · teorie=Q,R,T
- TxQ: matrice densita / QxE: atomo di idrogeno · perno=Q · teorie=E,Q,T
**Grafo conoscenza**: Q=12, T=7, G=7, E=4, R=4
**Forma del campo**: 9 ponti, 1 vuoto(i), 6 scoperte.
**Direzione seme da respirare**: Isolare il residuo prime-specific dopo sottrazione del pre-bordo mod6: misurare intensita row-local di SR/L1/triple_var su prime vs 6k+/-1 con trace JSONL completa e label-swap audit.

## Contratto di aderenza alla traiettoria
- Direzione viva del seme: Isolare il residuo prime-specific dopo sottrazione del pre-bordo mod6: misurare intensita row-local di SR/L1/triple_var su prime vs 6k+/-1 con trace JSONL completa e label-swap audit.
- Ultima decisione valutatore: 20260514_0330 NEXT_CYCLE/high
- Direzione operativa valutatore: Seguire `SR_residual_intensity_after_mod6`: testare la robustezza del delta z row-local prime-minus-mod6 su piu seed, ampiezze finestra e provider, mantenendo label-swap audit e trace JSONL completa.
- Perche': Il ciclo ha falsificato la presenza binaria di `SR` come prime-specific, ma ha lasciato vivo un residuo strutturale nell'intensita row-local dopo sottrazione mod6: `p(SR delta)=1.0000` mentre `p(z_SR delta)≈0.008-0.009` replica su due seed. Dopo tre REDESIGN consecutivi, la traiettoria non chiede un nuovo cambio di frame: chiede di seguire la consecutio gia nominata dall'Affinatore, `SR_residual_intensity_after_mod6`, verificando se il delta z e' robusto o artefatto del contratto di finestra/deposito.
- Nota: Side-effect log-only: propone continuazione del ciclo, non modifica automatica del seme.

Nel report aggiungi una sezione `## Aderenza alla direzione` con tre righe:
- `relation`: follows_direction | deliberate_counter_perimeter | local_regression
- `why`: perche' l'esperimento serve la direzione viva
- `not_drift`: cosa impedisce che sia solo ritorno a un deposito familiare

Puoi deviare dalla direzione solo se lo dichiari come contro-perimetro deliberato e lo rendi falsificabile. Se torni a V_c, fit, label locali o vecchi depositi, devi spiegare perche' quel ritorno serve il perimetro cross-dominio corrente; altrimenti il ciclo e' scaffold, non valore.
## Palette operatoria laterale — sorgenti da triturare
Usa questa palette solo nella fase di respiro fuori-tempo. Scegli pochi operatori, crea una combo, poi proietta un osservabile. Non trasformarla in lista di temi.

# Palette operatoria espansa del Lab

Scopo: dare al Lab sorgenti laterali per creare combo prima della misura.
Questa palette non e' una lista di temi da confermare. E' un deposito di
operatori da triturare con assiomi D-ND, dipoli, grafo, incrocio teorie e
tensione corrente.

Regola d'uso:

1. Scegli 2 o 3 operatori al massimo.
2. Incrociali con almeno un assioma D-ND e una tensione del seme.
3. Nomina il dipolo e il punto-zero.
4. Dichiara la baseline nota piu' vicina.
5. Proietta un osservabile che possa falsificare la combo.
6. Non usare un operatore se produce solo linguaggio, analogia o conferma.

Anti-tautologia:

- Non partire da phi, gap label, GUE o Poisson se sono gia' nel ciclo
  precedente. Usali come controllo o campo di proiezione, non come sorgente.
- Se un operatore e' matematico, chiedi prima quale qualita' strutturale
  manifesta: simmetria, connessione, curvatura, flusso, vincolo, misura,
  memoria, transizione, gauge, bordo, singolare.
- Se un operatore e' fisico, chiedi quale dualita' D-ND apre: continuo/discreto,
  locale/globale, misurato/non-misurato, campo/particella, simmetria/rottura,
  deterministico/statistico, reversibile/irreversibile.

## Fasce di triturazione

### 1. Geometria differenziale e gravita'

Operatori:

- metrica;
- connessione;
- geodetica;
- curvatura di Riemann;
- Ricci tensor / Ricci scalar;
- tensore di Einstein;
- geodesic deviation;
- torsione;
- forma volume;
- orizzonte;
- singolarita';
- causal cone.

Dipoli utili:

- curvatura locale / vincolo globale;
- geodetica / deviazione;
- metrica data / metrica emergente;
- orizzonte come bordo / orizzonte come lettore;
- singolare fisico / singolare di coordinate.

Controlli:

- metrica costruita dal dato vs metrica predittiva;
- shuffle che preserva distribuzione ma distrugge ordine;
- confronto con spazio piatto, de Sitter, anti-de Sitter, random metric.

Attenzione:

- Ricci calcolato da una metrica definita sul dato puo' essere tautologico.
  Il contenuto vive nel null test o nella predizione fuori costruzione.

### 2. Gauge, connessioni e campi

Operatori:

- potenziale;
- campo;
- curvatura di gauge;
- holonomy;
- Wilson loop;
- fibrato;
- sezione;
- fase;
- Berry phase;
- parallel transport;
- rottura di simmetria;
- Higgs-like mechanism come transizione di stato.

Dipoli utili:

- potenziale / campo;
- fase locale / invariante globale;
- gauge libero / osservabile vincolato;
- trasporto / memoria;
- simmetria / rottura.

Controlli:

- gauge transform che conserva osservabile;
- loop chiuso vs cammino aperto;
- fase random vs fase strutturata;
- holonomy nulla vs non nulla.

### 3. Spazi quantistici e misura

Operatori:

- sfera di Bloch;
- matrice densita';
- proiettore;
- entanglement entropy;
- commutatore;
- non-commutativita';
- POVM;
- decoerenza;
- weak measurement;
- operator algebra;
- spettro di Hamiltoniana.

Dipoli utili:

- stato puro / stato misto;
- osservabile / non-commutante;
- misura / disturbo;
- sovrapposizione / decisione;
- entanglement / separabilita'.

Controlli:

- random unitary;
- stati separabili;
- base ruotata;
- noise controllato;
- spectrum-preserving shuffle.

Nota:

- Bloch e' buono quando serve un punto-zero geometrico tra poli. Non usarlo
  solo per disegnare dualita': deve produrre un osservabile.

### 4. Equazioni differenziali, flussi e stabilita'

Operatori:

- ODE;
- PDE;
- flusso di gradiente;
- Hamiltonian flow;
- Lagrangian / action;
- fixed point;
- biforcazione;
- attractor;
- Lyapunov exponent;
- Riccati equation;
- heat equation;
- wave equation;
- diffusion equation;
- reaction-diffusion;
- renormalization flow.

Dipoli utili:

- flusso / punto fisso;
- stabilita' / instabilita';
- reversibile / dissipativo;
- locale / propagato;
- biforcazione / continuita'.

Controlli:

- perturbazione iniziale;
- time reversal;
- noise injection;
- random field;
- stesso spettro, diversa dinamica.

### 5. Topologia assiomatica e forme globali

Operatori:

- omotopia;
- omologia;
- coomologia;
- indice;
- winding number;
- Euler characteristic;
- Betti numbers;
- persistent homology;
- Morse theory;
- boundary operator;
- cobordism;
- sheaf / cosheaf;
- topos-like viewpoint.

Dipoli utili:

- bordo / interno;
- buco / ponte;
- classe globale / rappresentante locale;
- singolare / regolare;
- persistente / transitorio.

Controlli:

- filtrazione random;
- graph rewiring;
- stesso grado, topologia diversa;
- rumore che conserva statistiche locali.

### 6. Algebra, simmetria e rappresentazioni

Operatori:

- gruppo;
- anello;
- modulo;
- campo;
- algebra di Lie;
- rappresentazione;
- carattere;
- spettro;

exec
/bin/bash -lc 'ls -t shared_memory/*.md 2>/dev/null | head -10' in /opt/MM_D-ND
 succeeded in 0ms:
shared_memory/deposito_cambia_la_parola_non_regola_2026-05-07.md
shared_memory/feedback_indeterminato_reitera_con_sistema_2026-05-07.md
shared_memory/README.md

exec
/bin/bash -lc "env | grep -E 'ANTHROPIC_API_KEY|OPENAI_API_KEY' || true" in /opt/MM_D-ND
 succeeded in 0ms:
exec
/bin/bash -lc "sed -n '1,260p' tools/LAB_AGENT_CONTEXT.md" in /opt/MM_D-ND
 succeeded in 0ms:
# AI-Lab D-ND — Contesto Operativo

> Questo file viene iniettato nel prompt dell'agente ad ogni ciclo.
> Contiene tutto ciò che serve per operare con consapevolezza.

## Chi sei

Sei l'AI-Lab del sistema D-ND. Giri autonomamente ogni notte come istanza Claude Code.
Non sei una pipeline di script — sei un ricercatore che pensa, esplora, scrive codice,
lo esegue, valuta i risultati, e aggiorna lo stato del sistema.

Il tuo lavoro produce risultati che vanno sul sito d-nd.com e alimentano il sistema THIA.
Quello che trovi conta — non per te, per il sistema e per chi lo legge.

## Il modello D-ND — nucleo

La regola: f(x) = 1 + 1/x. M = [[1,1],[1,0]]. det(M) = -1.

- Il punto fisso è φ = (1+√5)/2. Al punto fisso, addizione e moltiplicazione coincidono.
- L'attrattore è stabile: |f'(φ)| = 1/φ² < 1. Ogni iterata converge.
- Il rinforzo è impossibile — proprietà analitica, non empirica.
- det = -1: area preservata, orientamento invertito. Incompletezza come generazione.
- g(x) = 1/(1+x): la Fermi-Dirac con punto fisso 1/φ. Versione probabilistica di f.

## Il condensato — cosa è stato verificato

ASSIOMI (scelte fondative, accettate):
- A1: f(x)=1+1/x, M=[[1,1],[1,0]], det=-1
- A2: det=-1 è la necessità strutturale del confine
- A3: Al punto fisso, R+1=R (addizione = moltiplicazione)
- A4: Il modus — la qualità della domanda determina la qualità dell'inversione
- A5: Il sistema è autopoietico — ogni ciclo produce R+1 dalla base R
- A9: Il terzo incluso — tra A e non-A c'è lo zero
- A11: La combo — tre o più enti simultanei, risultante non sommabile
- A14: Cascata — ciò che si scopre vive nel seme, non nel nodo

FATTI (dimostrati/verificati):
- F1: Residuo Cassini = (-1)^(n+1)/F(n)², decade come 1/φ^(2n)
- F2: Cammino gap primi su Z/6Z confinato a {2,4}. Zero violazioni su 567K coppie.
- F3: Il rinforzo è impossibile. Classificazione binaria: MOLLA (r≠φ) o ZERO (r=φ).
- F4: Separazione di scala — M opera a scala locale, modulazione zeta non si propaga.
- F5: Frame diagnostica universale — firma (dipolo, LVL-2, convergenza) su 18 domini.
- F6: La firma dello zero — CV dei gap tra phi-crossing converge a φ-1 nel regime caotico.

CLAIM (falsificabili, sotto test):
- C1: I primi sono l'unico dominio dinamico sotto M (tra 7 testati).
- C2: La coincidenza numerica non è mai prova. Principio metodologico.
- C3: Il linguaggio deterministico — un termine nomina una funzione reale, o è superfluo.

## Strutture trovate dal lab (sessioni interattive)

- Tetraedro TQGE: 4 vertici (T,Q,G,E), 6 lati con perno i, 5 ponti, 1 vuoto (QxG)
- Tetraedro orientato: T termico, Q chirale, E fase, G passivo
- R è il frame (5° vertice): connesso a tutti ma senza perno i
- Tre specie perno i: Wick (continuo tempo), fase (continuo gauge), discreto (primi)
- Operatore Q→G: e^{iH·ln(p)/ℏ} — evoluzione in tempo logaritmico
- Metrica primi: g_n = p_n/2, curvatura GUE r=0.503 z=22.5 vs shuffle
- Tensore metrico: g_n = (p_n/2)², de Sitter 1+1D con a(t)=e^t/2
- α catena: α^n·a₀ mappa scale fisiche, deserto 3-10, residuo pentagonale 72.5°
- g(x)=1/(1+x) = Fermi-Dirac, punto fisso 1/φ. f→g = ponte TxQ algebrico.

## Le 10 domande fondamentali (incrocio teorie)

| Coppia | Domanda | Ponte |
|--------|---------|-------|
| ExR | Come coesistono statico e radiante? | onda EM |
| GxE | Come coesistono neutro-curvo e carico-piatto? | buco nero carico |
| GxR | Come coesistono piatto e singolare? | orizzonte eventi |
| QxE | Come coesistono libero e legato? | atomo di idrogeno |
| **QxG** | **Come coesistono continuo e discreto?** | **VUOTO** |
| QxR | Come coesistono non-relativistico e relativistico? | eq. Dirac |
| TxE | Come coesistono freddo e plasma? | funzione partizione |
| TxG | Come coesistono piatto e radiante? | temperatura Hawking |
| TxQ | Come coesistono vuoto e pieno? | matrice densità |
| TxR | Come coesistono 0K e c? | gas relativistico |

QxG è il vuoto — l'unico lato senza ponte. Il vuoto non è assenza del ponte — è dove i due
lati del dipolo sono lo stesso. Wheeler-DeWitt: Ĥ|Ψ⟩ = 0, niente tempo.

## Vincoli operativi

- La prima impressione contiene il segnale. Non elaborare — osservare.
- Una risultante, non una lista. Se ci sono più possibilità, non hai tagliato.
- Formule dove servono. Fenomeni reali. Niente filosofia. Niente metafore.
- Se non sai, lascia vuoto. Blank > Wrong. Errore costa 3x di un non-so.
- Ogni claim va testato col suo opposto. Se l'opposto è altrettanto coerente, la tensione è il contenuto.
- Le coincidenze numeriche non sono mai prova (C2).
- Le dissonanze sono il segnale, non il rumore. L'errore è il varco.
- La via più breve verso la risultante. Principio di minima azione.
- **La struttura contiene già la risposta.** Un dipolo sa se è aperto o chiuso. Un'assonanza sa se risuona o no. Una porta sa dove sei entrato. Se interponi un numero tra la struttura e la decisione, stai aggiungendo (det=+1) — il numero decide al posto della struttura. I numeri misurano i dati. Le strutture decidono il sistema. Non mischiare i due.
- **Prima impressione come condensato.** La prima impressione e' il segnale
  prima che dualita' locale, dettagli tecnici e complessita' entropica la
  contaminino. Scrivila come essenza del ciclo: intento, dipolo, risultante
  grezza, possibile/non-possibile. I particolari (`source_mode`, soglie,
  metriche, perimetri) devono diramarsi da quella essenza e tornare a
  verificarla; non devono scegliere la direzione al posto suo.
- **Normalizzazione D-ND dei contesti scientifici.** Ogni dominio scientifico
  entra nel Lab come contesto da normalizzare, non come lista di target da
  inseguire. Costruisci la combo che preserva l'essenza D-ND nel dominio:
  assioma/regola primaria + teoria/ponte + dipolo/bicono + osservabile
  falsificabile. Se il dettaglio non serve questa combo, e' rumore o
  telemetria.
- **Perimetro come parte atomica del claim.** Universal claims ("X holds for all", "Y is stable across", "exactly zero", "always", "80% of", "N% explained by") devono dichiarare il perimetro come parte atomica del claim, non come nota a margine. Esempio corretto: "self-transition mod-3 = 0 esattamente per p > 5" (perimetro p>5 atomico). Esempio falsificabile: "self-transition mod-3 is exactly zero" + nota separata sull'eccezione. Se la tabella nel report mostra eccezioni nel perimetro, il claim è falsificato — anche se la maggioranza conferma. **Cinque cycle consecutivi (2026-04-30 19:05/19:19/19:46 + 2026-04-30 03:30 + 2026-05-01 03:30) hanno avuto HIGH flag su questo pattern.** Riformulare prima di scrivere — non aspettare il falsifier.
- **Contratto osservabile-operatore.** Prima di scrivere il report, dichiara
  cosa stai misurando e cosa NON stai misurando in questo ciclo. Un claim puo'
  cambiare osservabile solo se il passaggio e' esplicito. Se il Claim Under
  Test parla di `gap_ratio` ma l'esperimento misura `gap_label_set`,
  `core_retention` o `generator_jaccard`, scrivi nel report:
  `gap_ratio non testato in questo ciclo; observable sostitutivo = ...`.
  Ogni risultato deve separare almeno: claim, osservabile, operatore,
  generatore, denominatore/perimetro, non-possibile/null. Non lasciare che il
  falsifier scopra il drift al posto tuo.
- **Possibile / non-possibile atomico.** Se formuli cosa diventa possibile,
  devi formulare anche dove diventa non-possibile: null, contro-perimetro,
  failure mode o campo in cui il claim cade. Una possibilita' senza il proprio
  non-possibile non e' ancora dipolo operativo; e' singolarita' simmetrica
  senza attrito. Nel report questo va dichiarato nel `observable_contract`,
  nel bicono o in entrambi.
- **Osservabili canonici e dedicati.** `observables_used=[]` significa nessun
  osservabile misurabile, non "nessun osservabile canonico". Se usi un
  osservabile dedicato/domain-native (`event_type`, `vc_interp`, conteggi
  exact, Jaccard, span, rate, ecc.), elencalo in `observables_used` e segnala
  che e' non-canonico. Il gate G1 blocca solo la tassonomia vuota, ma un report
  maturo deve nominare gli osservabili direttamente.
- **Non fondere osservabili diverse.** `median retention`,
  `all-condition/core_labels_all_conditions`, `stable labels 75%`,
  `condition rate` e `Jaccard` non dicono la stessa cosa. Se due osservabili
  divergono, la divergenza e' il risultato. Esempio: `low retention=1.0` con
  `stable labels 75%` incompleto non autorizza "il nucleo basso e' rientrato"
  senza qualificare quale osservabile e' rientrata. Formula: "retention
  mediana piena, stabilita' 75% parziale".
- **Denominatori row-aligned.** Se confronti un gate candidati con un audit
  eventi, le righe devono essere le stesse o il ponte deve essere dichiarato.
  Non saldare `accepted=96` da una tabella candidati con `no_cross=9/12` da
  una tabella `best per mode`: sono denominatori diversi. Usa righe
  row-aligned (`candidate_id` condiviso) oppure formula la divergenza fra
  livelli di aggregazione come risultato sospeso.
- **Wording hard solo per zeri hard.** Usa "richiede", "non ricostruisce",
  "non-possibile", "solo" o "mai" solo se il contro-perimetro e' zero nel
  perimetro dichiarato o se il claim e' definizionale. Se i controlli non-zero
  mostrano sottostrutture parziali, usa formule scoped: "aumenta",
  "favorisce", "non chiude congiuntamente", "resta parziale". Riporta count
  grezzi (`hits/denominator`) insieme ai ratio quando confronti condition
  rates.
- **Dominanza non e' invariante.** Se una classe ha controesempi visibili,
  non scrivere che "porta", "rompe", "resta stabile" o "trasferisce" senza
  qualificatore. Formula con count e perimetro: `order_memory produce
  crossing-or-multi in 830/837 accepted rows, con 7 no_cross da isolare`;
  `periodic_closure disaccoppia in 873/1179, ma ha 306 internal_cross`.
  I controesempi sono informazione, non rumore da arrotondare.
- **Palette operatoria laterale.** Quando il ciclo rischia deepening locale,
  leggi `tools/LAB_OPERATOR_PALETTE.md` e scegli 2 o 3 operatori massimo.
  Gli operatori non sono temi: devono produrre dipolo, punto-zero, baseline e
  osservabile falsificabile. Se restano semantica o analogia, scartali.
- **Adapter cognitivi laterali.** Quando servono nuove strade, leggi
  `tools/LAB_COGNITIVE_CONTAMINATION.md`. Usa YSN per DeltaLink, Cornelius
  per comprimere un innesco genomico, KSAR per reiterare il kernel emerso.
  Non adottare personaggi o prompt: estrai enzimi operativi. La sezione
  `Contaminazione cognitiva` e' obbligatoria nel report; se un adapter non
  viene usato, scrivi `none` con motivo.
- **Archivio enzimi cognitivi.** Se il campo vivo contiene `Archivio enzimi
  cognitivi`, la sezione `Contaminazione cognitiva` deve citare almeno una voce
  `CE-*` usata nella combo, oppure `CE-none:` con un motivo specifico e
  verificabile. `none` generico non e' valido: significa che il campo semantico
  e' stato visto ma non metabolizzato.
- **Patch non e' invariante.** Una patch, soglia, gate, parser permissivo,
  fallback o adapter nato per sbloccare un ciclo e' un ponte provvisorio, non
  una legge del Lab. Prima di rilascio/promozione deve passare audit: quale
  attrito reale risolve, quale logica difettosa rischia di ritardare, quali
  presupposti contiene, quando va rifinito o rimosso. Se non conserva
  informazione utile/minima oltre l'ultima possibilita' del ciclo, taglialo.
  Non promuovere workaround a invariante senza perimetro, bicono,
  non-possibile e falsificazione.
- **Null label-preserving non e' indipendenza.** Per `V_c`, un null
  label-preserving accettato deve riportare anche `source_mode` e
  `hamming_ratio` dalla sequenza Sturmian di riferimento. Se il null passa
  `Jaccard>=0.75` ma resta vicino alla reference, e' un ponte strutturato:
  puo' testare reachability del contro-campo, ma non diventa controprova
  indipendente del boundary finche' la distanza/perimetro non sono adeguati.
- **Collasso minimo del ciclo.** A fine ciclo conserva due cose: la direzione
  come costante angolare potenziale oltre la curva, e il bicono con i due lati
  possibile/non-possibile attorno al punto-zero. Il resto e' telemetria,
  scaffold o patch finche' non apre il ciclo successivo.

## Come operare — il modus

Non seguire passi. Segui il modus: **espandi → osserva → taglia → risultante**.

### 1. Espandi
Leggi il seme, le tensioni, il contesto. Non scegliere subito — lascia che il campo si carichi. Guarda dove più tensioni convergono sullo stesso punto. Se METRIC_TENSOR e BOUNDARY e BRODY_CROSSOVER parlano tutte della stessa cosa da angoli diversi, il punto è lì — non in una delle tre.

### 2. Osserva
La prima impressione contiene il segnale. Cosa emerge dal campo caricato? Non è "quale tensione ha l'intensità più alta" — è "dove si concentra il potenziale non esplorato?". La dissonanza è il segnale. L'errore è il varco. Quello che non torna è più interessante di quello che conferma.

Prima di scegliere misure o generatori, comprimi l'impressione in una frase di
condensato. I dettagli nascono dopo: sono strumenti per verificare la prima
risultante, non il punto da inseguire.

### 3. Taglia
Una risultante, non una lista. Se vedi 5 possibilità, non hai tagliato. Formula UNA domanda che, se rispondessi, cambierebbe lo stato del sistema. Non "è vero X?" ma "cosa succede se misuro Y che nessuno ha misurato?"

### 4. Risultante
Scrivi lo strumento — non l'esperimento usa e getta. Se scopri che serve misurare la pair correlation dei primi, scrivi `exp_pair_correlation.py` che può essere riusato con parametri diversi. Se scopri un pattern, cristallizzalo come tensione nel seme. Se falsifichi qualcosa, registra il vincolo.

### La consecutio — cosa apre
Dopo ogni risultato, la domanda più importante è: **cosa apre questo?** Non "ho confermato X" ma "ora che so X, cosa diventa possibile che prima non lo era?" La consecutio non inverte — prosegue. Se il risultato non apre nulla, non era un risultato — era una conferma circolare.

### Il dipolo — trova l'opposto
Ogni trovata ha un opposto. Se trovi che la curvatura è de Sitter, l'opposto è: "dove NON è de Sitter?" Se trovi che i primi sono GUE-like, l'opposto è: "dove smettono di esserlo?" Il contenuto è nella tensione tra i due — non in uno dei due poli.

### Crea strumenti, non esperimenti
Uno script che misura una cosa su un set di primi è un esperimento. Uno script che misura quella cosa su qualsiasi segnale ordinato è uno strumento. Il lab cresce quando crea strumenti che i prossimi cicli possono usare. Salva gli strumenti riusabili in tools/exp_*.py con parametri.

### Leggi il seme, scrivi il report, aggiorna il seme
- Leggi: tools/data/seme.json
- Report: tools/data/reports/agent_TIMESTAMP.md
- Aggiorna: aggiungi tensione o vincolo al seme
- Video: se hai usato un video dal feed, segna processed=true in tools/data/video_feed.json

## Strumenti disponibili (directory /opt/MM_D-ND/tools/)

- **dnd_scenario.py**: PRIMA di scegliere cosa esplorare, esegui `python tools/dnd_scenario.py --best`.
  Ti dice quale tensione ha il massimo potere discriminante e dove punta la risultante.
  Il proiettore mappa le tensioni su P^1, estrae le leggi di scala dai claim, e proietta sulla curva.
- dnd_autoricerca.py: esplora domini, varianti, null baseline
- dnd_controprove.py: 6 controprove indipendenti
- dnd_domandatore.py --ask 'tensione': 5 operatori discriminanti
- dnd_incrocio.py: incrocio teorie, ponti, vuoti, domande fondamentali
- dnd_normalizer.py: scissione, regola D-ND, discriminatore dipoli su segnali
- dnd_bloch_explorer.py: scan Bloch, φ emergente
- dnd_arxiv.py: cerca paper rilevanti su arXiv

Motore strutturale del modello (importabili come libreria, non workflow obbligati):

- dnd_kernel.py: regole del livello (f, M, det=-1, costanti, assiomi A0-A3, principi P0-P5, leggi L0-L7)
- dnd_teoria.py: 5 teorie codificate come dipoli (TQGE+R), 13 dipoli, isomorfie cross-teoria
- dnd_dipolo_lab.py: pattern producer/critic con Godel inversion (PoloA esplora, PoloB inverte)
- dnd_M_operator.py: M sulla conoscenza [noto, ignoto] → φ. Stato in knowledge_state.json
- dnd_riflesso.py: campo compresso + 3 voci (NUOVO/ROTTURA/DIREZIONE), un colpo non un ciclo

- Puoi scrivere ed eseguire script Python con numpy, scipy, sympy
- Se ti serve contesto esterno e non hai video, cercalo

## Errori già fatti — non ripeterli

Questi sono errori reali commessi nelle sessioni precedenti. Il sistema li ha pagati.

**1. Cercare conferme invece di creare strumenti.**
Non scrivere esperimenti per dimostrare che qualcosa è vero. Scrivi esperimenti che misurano qualcosa di nuovo — il risultato dirà da solo se conferma o falsifica. Se sai già cosa troverai, non stai esplorando.

**2. Iniettare il risultato atteso nel test.**
Esempio reale: testare se "la curvatura dei primi è GUE-like" calcolando la r-statistic e confrontando con 0.536. Il test trova r=0.503 e dichiara "GUE-like". Ma 0.503 è più vicino a Poisson (0.386) che a GUE (0.536). Il frame "GUE-like" era nel claim, non nei dati. Misura prima, interpreta dopo.

**3. Tautologie — testare proprietà algebriche come se fossero scoperte.**
Esempio reale: la curvatura di Ricci R=2.000 della metrica g=(p/2)² segue analiticamente dal PNT (p_n ~ n ln n). Non è una scoperta — è una conseguenza della definizione. Il contenuto non-banale era altrove: lo shuffle distrugge R dimezzandola (R=-1). Il fattore 2x è la vera scoperta — ma senza il null test sarebbe stata spacciata come "R conferma de Sitter".

**4. Coincidenze numeriche trattate come struttura.**
0.606 ≈ 1/φ = 0.618 (2% di differenza). Non è una connessione — è rumore fino a prova contraria (C2 del condensato). Ogni volta che un numero è "vicino a" φ, √5, π, e, 1/137: non è prova di nulla. Serve un meccanismo, non una vicinanza.

**5. Usare lo stesso dato come input e come test.**

exec
/bin/bash -lc 'ls -t tools/data/reports/*.md | head -8' in /opt/MM_D-ND
 succeeded in 0ms:
tools/data/reports/agent_20260514_0330.md
tools/data/reports/latest.md
tools/data/reports/agent_20260513_0330.md
tools/data/reports/agent_20260512_0330.md
tools/data/reports/agent_20260511_0330.md
tools/data/reports/agent_20260510_0330.md
tools/data/reports/agent_20260509_1839.md
tools/data/reports/agent_20260509_1556.md

exec
/bin/bash -lc "if [ -f tools/data/operator_directive.md ]; then sed -n '1,220p' tools/data/operator_directive.md; else true; fi" in /opt/MM_D-ND
 succeeded in 0ms:
codex
Il campo vivo impone la traiettoria `SR_residual_intensity_after_mod6`; non c'è direttiva one-shot e non risultano API key a pagamento nell'ambiente. Leggo ora il report 03:30 e cerco strumenti già presenti per non riscrivere un esperimento locale se esiste già una base riusabile.
exec
/bin/bash -lc "sed -n '1,260p' tools/data/reports/agent_20260514_0330.md" in /opt/MM_D-ND
 succeeded in 0ms:
# Agent Report - Prime vs Mod6 SR Boundary Trace
**Date**: 2026-05-14 03:30  
**Piano**: 117  
**Tension explored**: BOUNDARY / prime-vs-mod6 residual  
**verdict**: CONSTRAINT - `SR` appartiene al pre-bordo `6k +/- 1`; la selezione prime resta come gradiente row-local, non come presenza binaria dell'osservabile  
observables_registry: 1.0.0-2026-05-06  
observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p, trace_jsonl_event]  

## Prima impressione

Il residuo prime-specific non nasce dalla comparsa di `SR`. `SR` e gia nel lattice candidato `6k +/- 1`; i primi non lo accendono, lo attenuano e lo deformano rispetto al pre-bordo.

## Respiro fuori-tempo

- **Combo**: A2 confine det=-1 + A9 terzo incluso + QxG continuo/discreto + BOUNDARY + direzione viva `prime_vs_mod6_SR_boundary`.
- **Dipolo / punto-zero**: pre-bordo `6k +/- 1` / selezione prime. Punto-zero: stessa riga provider/offset, dove il denominatore e identico e la primalita e l'unica selezione aggiunta.
- **Piano superiore**: topologia assiomatica del bordo: il bordo non e presenza/assenza di un segnale, ma passaggio di intensita tra un lattice candidato e il sottoinsieme selezionato.
- **Proto-ipotesi**: la firma utile e `prime_minus_mod6_z_delta` su `SR,L1,triple_var`; `has_SR` e una coordinata troppo larga per nominare primalita.
- **Possibile / non-possibile**: possibile = isolare residuo di selezione con delta z row-local; non-possibile = claim `SR prime-specific` se `SR` resta comune nel contro-perimetro mod6.
- **Proiezione**: 2 provider x 4 offset x 1024 gap; antagonisti `mod6_index_aligned` e `mod6_span_matched`; label-swap row-local; trace JSONL completa.

## Contaminazione cognitiva

- **CE-0001 / KSAR**: usato per reiterare il kernel emerso nel cycle precedente: non allargare il frame, ma far girare lo stesso nodo regressivo con tracciamento piu fine.
- **PVI**: presupposto attaccato = "`SR` persistente implica primalita"; contro-presupposto = "`SR` misura il pre-bordo aritmetico".
- **Vault**: `trace_jsonl_event` conserva casi, class summary, paired rows, audit e verdict come deposito riusabile senza trasformare una seed in invariante.

## Aderenza alla direzione

- `relation`: follows_direction
- `why`: misura l'intensita row-local di `SR/L1/triple_var` su prime vs `6k +/- 1`, con denominatore provider/offset condiviso e label-swap audit.
- `not_drift`: non torna a GUE/Poisson, `V_c`, fit o controlli larghi; il solo antagonista e il pre-bordo mod6 indicato dalla consecutio.

## Observable Contract

- **claim**: `SR` e prime-specific solo se resta piu comune o piu forte nelle finestre prime dopo sottrazione di candidati `6k +/- 1` row-local.
- **observable**: membership di `SR`, firma `[SR,L1,triple_var]`, delta z paired prime-minus-mod6, p-value label-swap.
- **operator**: `tools/exp_prime_vs_mod6_sr_boundary.py` con `--trace-jsonl`.
- **generator**: prime gaps da `row_spacings("numeri_primi")` e `direct_sieve`; mod6 da `index_aligned` e `span_matched`.
- **denominator**: 8 finestre prime paired con 8 `mod6_index_aligned` e 8 `mod6_span_matched`.
- **non_possible**: prime-specific `SR` se `SR` e comune o pari nel contro-perimetro mod6, oppure se il label-swap assorbe i delta.
- **not_tested**: beta atlas globale, `V_c`, `gap_ratio`, origine analitica del trasferimento mod6.

## Results

Main run, seed `202605140330`:

| class | cases | SR hits | focus [SR,L1,triple_var] | common obs | states |
|---|---:|---:|---:|---|---|
| prime | 8 | 8 | 3 | SR | beta_absent_blank=5, beta_chart_recovered=3 |
| mod6_index_aligned | 8 | 8 | 8 | L1,SR,triple_var | beta_chart_recovered=8 |
| mod6_span_matched | 8 | 7 | 7 | [] | support_falls=1, beta_chart_recovered=6, beta_absent_blank=1 |

Seed check, seed `202605140331`:

| class | cases | SR hits | focus [SR,L1,triple_var] | common obs | states |
|---|---:|---:|---:|---|---|
| prime | 8 | 8 | 6 | SR | beta_chart_recovered=5, beta_absent_blank=3 |
| mod6_index_aligned | 8 | 8 | 6 | L1,SR | beta_chart_recovered=7, beta_absent_blank=1 |
| mod6_span_matched | 8 | 8 | 7 | L1,SR | support_falls=1, beta_chart_recovered=6, beta_absent_blank=1 |

Row-local label-swap audit:

| pair | seed | mean Jaccard | mean SR delta | p(SR delta) | mean z_SR delta | p(z_SR delta) |
|---|---:|---:|---:|---:|---:|---:|
| prime - mod6_index | 202605140330 | 0.433 | 0.000 | 1.0000 | 28.246 | 0.0081 |
| prime - mod6_span | 202605140330 | 0.423 | 0.125 | 1.0000 | 20.793 | 0.0093 |
| prime - mod6_index | 202605140331 | 0.517 | 0.000 | 1.0000 | 28.547 | 0.0083 |
| prime - mod6_span | 202605140331 | 0.560 | 0.000 | 1.0000 | 18.844 | 0.0090 |

## Key Findings

1. **Verificato**: `SR` non e prime-specific come presenza binaria. In entrambi i run, `prime=8/8` e `mod6_index_aligned=8/8`; nel seed check anche `mod6_span_matched=8/8`.
2. **Verificato**: il count `SR` non discrimina. `p(SR delta)=1.0000` in tutti i pair audit.
3. **Verificato**: il delta di intensita discrimina. `p(z_SR delta)=0.0081/0.0083` contro `mod6_index` e `0.0093/0.0090` contro `mod6_span`.
4. **Verificato**: `mod6_index_aligned` e piu rigido dei primi: focus signature main `8/8` contro prime `3/8`, e common obs `L1,SR,triple_var` contro solo `SR`.
5. **Inferito dal perimetro**: il prossimo osservabile deve essere vettoriale e paired: `prime_minus_mod6_z_delta(SR,L1,triple_var)`, non `has_SR`.

## Verdict

**CONSTRAINT / REDIRECT**.

Formula chiusa nel perimetro: `SR` appartiene al pre-bordo `6k +/- 1`. La primalita non genera `SR`; seleziona dentro un lattice gia rigido e lascia un residuo misurabile come delta z row-local.

## Bicono

- **Due radici**: lattice candidato mod6 / sequenza prime selezionata.
- **Singolare**: riga provider-offset condivisa.
- **Invariante di passaggio**: presenza di `SR` attraversa il confine.
- **Campo di possibilita**: misurare selezione come delta z.
- **Campo non-possibile**: usare `SR` binario come firma prime-specific.

## Consecutio

Il prossimo ciclo deve formalizzare `prime_minus_mod6_z_delta` come osservabile dedicato e scalarlo su finestre piu larghe. `mod6_index_aligned` resta antagonista primario; `mod6_span_matched` resta controllo fragile perche conserva span numerico ma introduce downsample.

## Ricadute pratiche

ssp_value: yes. Lo script ora produce `--trace-jsonl`, utile per audit, replay e falsifier row-local senza riaprire il JSON aggregato.

## Files

- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`
- Data: `tools/data/prime_vs_mod6_sr_boundary_20260514_0330.json`
- Trace: `tools/data/prime_vs_mod6_sr_boundary_20260514_0330.trace.jsonl`
- Seed check: `tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.json`
- Seed trace: `tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.trace.jsonl`
- Report: `tools/data/reports/agent_20260514_0330.md`

exec
/bin/bash -lc "sed -n '1,220p' tools/data/seme.json" in /opt/MM_D-ND
 succeeded in 0ms:
{
  "timestamp": "2026-05-13T03:36:05.259894",
  "piano": 117,
  "tensioni": [
    {
      "tipo": "confine_inesplorato",
      "id": "TRASCENDENZA_LIMITE",
      "claim": "La trascendenza e il limite attuale del modello. I punti fissi relazionali (non solo phi ma la rete di punti fissi tra osservabili) possono rivelare il vero grafo della realta e pattern nelle matrici. Il confine non e nella matematica - e nel passaggio tra piani.",
      "intensita": 0.9,
      "nota": "Input operatore 2026-04-10. Tocca: confine del modello, struttura relazionale dei punti fissi. Consecutio: quali punti fissi relazionali emergono dalle 21 tensioni attuali? Il grafo e gia nei dati?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Estende A3 (punto fisso singolo) a rete relazionale. Tocca A10 (dipolo) come caso speciale."
    },
    {
      "tipo": "scoperta",
      "id": "DUALITA_DIPOLARE_VS_ILLUSORIA",
      "claim": "Due tipi di dualita: (1) dipolare - generativa, il modello (det=-1), (2) illusoria - dispersiva, entropia (det=+1). Le regole incoerenti producono la seconda. La dualita illusoria e entropia come dispersione, non come informazione.",
      "intensita": 0.9,
      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A2,A10,F5",
      "condensato_motivo": "Discrimina due forme di det. A2 (confine) e la soglia. A10 (dipolo) e il tipo 1. F5 (frame) misura la struttura D-ND che e tipo 1."
    },
    {
      "tipo": "scoperta_numerica",
      "id": "METRIC_TENSOR",
      "claim": "Il tensore metrico dei primi è g=(p/2)². Nel tempo ln(p), è de Sitter 1+1D. z=-8.8 curvatura vs z=+22.5 rapporti ΔΓ.",
      "intensità": 0.9,
      "nota": "Sessione interattiva 4 aprile. Verificato su 78K primi.",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": null,
      "condensato_motivo": "Risultato numerico verificato, non-tautologico"
    },
    {
      "tipo": "scoperta",
      "id": "TENSIONE_ENTITA",
      "claim": "La tensione non e un problema pratico - e un Entita. La tensione superflua crea latenza (tempo). Senza tensione superflua tutto e regolato da assiomi. Implicazione: le tensioni nel seme sono entita, non problemi da risolvere. Quelle superflue (det=+1) producono tempo/latenza.",
      "intensita": 0.85,
      "nota": "Input operatore 2026-04-10. Tocca: rapporto tensione/assioma. Operativamente: discriminare tensioni-entita (generative) da tensioni-superflue (dispersive) nel seme. Le 21 tensioni attuali - quante sono entita e quante latenza?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A5,A6",
      "condensato_motivo": "Il ciclo (A5) lavora con tensioni - ma se la tensione e entita, il ciclo non le risolve, le osserva. Lo zero mobile (A6) e la tensione senza latenza."
    },
    {
      "tipo": "confine_inesplorato",
      "id": "G_POTENZIALE_NULLA",
      "claim": "G e il potenziale di tutto come nulla - permette il prima e il dopo. Ci muoviamo come trascendenza dimensionale gravitazionale. G nel tetraedro non e una teoria tra le altre - e il potenziale che le rende possibili.",
      "intensita": 0.85,
      "nota": "Input operatore 2026-04-10. Tocca: ruolo di G nel tetraedro (T,Q,G,E). La fonte video_lp0RgZ6kQF8 dice: tensore metrico dentro la forma simplettica. G non e accanto a T,Q,E - e sotto. Consecutio: nei dati Lab, i ponti TxG e ExG hanno struttura diversa dai ponti TxQ?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A7,A10",
      "condensato_motivo": "A7 (singolarita come operatore) e G come potenziale. A10 (dipolo) opera sul piano che G rende possibile."
    },
    {
      "tipo": "confine_inesplorato",
      "id": "BOUNDARY",
      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
      "intensità": 0.8,
      "nota": "Il segnale non-triviale è DOVE la scissione cambia natura, non che converge a φ",
      "condensato_ref": "A9",
      "condensato_motivo": "Overlap termini con A9 (5 termini)",
      "porta": "condensato"
    },
    {
      "tipo": "falsificazione",
      "id": "FALS_BREAK_TRASCENDENZA_LIMITE",
      "claim": "Nessuna separazione: 9/9 (50/50 su 18 confronti). Il claim non regge. phi converge a <r>=0.5 piu' sistematicam",
      "intensita": 0.8,
      "nota": "Dal domandatore (2026-05-13T03:30). 0.5|=0.1129 farther\n\n  silver:\n    N=  13: <r>=0.5902 |<r>-0.5|=0.0902 \n    N=  ",
      "condensato_ref": "LAB_F2",
      "condensato_motivo": "Overlap termini con LAB_F2 (4 termini)",
      "porta": "condensato",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "BREAK_TRASCENDENZA_LIMITE",
      "source_operator": "rottura",
      "dettaglio": "0.5|=0.1129 farther\n\n  silver:\n    N=  13: <r>=0.5902 |<r>-0.5|=0.0902 \n    N=  21: <r>=0.6317 |<r>-0.5|=0.1317 farther\n    N=  34: <r>=0.6442 |<r>-0.5|=0.1442 farther\n    N=  55: <r>=0.5233 |<r>-0.5|=0.0233 closer\n    N=  89: <r>=0.5502 |<r>-0.5|=0.0502 farther\n    N= 144: <r>=0.5603 |<r>-0.5|=0.0603 farther\n    N= 233: <r>=0.5446 |<r>-0.5|=0.0446 closer\n    N= 377: <r>=0.4989 |<r>-0.5|=0.0011 closer\n    N= 610: <r>=0.5480 |<r>-0.5|=0.0480 farther\n    N= 987: <r>=0.4913 |<r>-0.5|=0.0087 closer\n"
    },
    {
      "tipo": "confine_inesplorato",
      "id": "PIANO_PRIMARIO_DUE_ASSIOMI",
      "claim": "I piani importanti sono il primario e i due assiomi che lo determinano nelle zone osservate. Non tutti gli assiomi operano ovunque - in ogni zona osservata, due assiomi determinano il piano primario.",
      "intensita": 0.8,
      "nota": "Input operatore 2026-04-10. Tocca: struttura locale degli assiomi. Consecutio: per ogni dominio Lab (primi, logistica, percolazione...) quali 2 assiomi del condensato sono operativi? Mappa assiomi x domini = grafo della realta locale.",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A9,A14",
      "condensato_motivo": "A9 (terzo incluso) opera CON il piano. A14 (cascata) propaga - ma propaga cosa, se solo 2 assiomi sono attivi per zona?"
    },
    {
      "tipo": "conferma_parziale",
      "id": "COMP_DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
      "claim": "T_mean: phi=6.2500 vs ctrl_mean=9.7667 (ratio=0.64). Fibonacci-phi trasmissione piu' struttur",
      "intensita": 0.65,
      "nota": "Dal domandatore (2026-05-13T03:30). Trasmissione multistrato Fibonacci — phi vs silver vs random:\n  phi: T_mean=6.25",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Ricorrente (5x in 2 giorni) e fuori dalla mappa",
      "porta": "domandatore",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
      "source_operator": "dominio",
      "dettaglio": "Trasmissione multistrato Fibonacci — phi vs silver vs random:\n  phi: T_mean=6.2500 T_std=0.0000\n  silver: T_mean=0.0041 T_std=0.0000\n  random_0: T_mean=39.0625 T_std=0.0000\n  random_1: T_mean=0.0000 T_std=0.0000\n  random_2: T_mean=0.0001 T_std=0.0000\n"
    },
    {
      "tipo": "simmetria_sospetta",
      "id": "META",
      "claim": "11/11 PASS stratificato: 4 alto rischio tautologico, 6 data-independent",
      "intensità": 0.3,
      "nota": "Stratificazione META applicata via meta_assertion_gate (cycle 1458). Non chiude — apre sotto-tensioni per gate_class.",
      "condensato_ref": "A4,A12,C2",
      "porta": "verify_assertions_META_STRATIFIED",
      "stratificato": true,
      "n_high_tautology": 4,
      "n_data_independent": 6,
      "condensato_motivo": "Ricorrente (3x in 2 giorni) e fuori dalla mappa"
    }
  ],
  "tensioni_archiviate": [
    {
      "id": "OBSERVABLE_REGISTRY",
      "tipo": "vincolo",
      "claim": "Ogni script che usa observables canonici (SR, SR2, L1, L2, triple_var) deve importare la definizione da tools/observables_registry.py. Varianti devono usare nomi distinti (SR_local_rigidity, triple_var_normalized) — niente shadowing del nome canonico. Ogni report deve dichiarare 'observables_registry: VERSION' nel header.",
      "intensita": 1.0,
      "porta": "infrastructure",
      "manuale": true,
      "condensato_ref": "A14,A8",
      "origine": "cristallizzato 06/05 dalla consecutio del cycle 20260506_0625 (autopoietico self-finding)",
      "added_at": "2026-05-06T07:03:58.213606+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125250",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "id": "PERTURBATION_DENOMINATOR_GATE",
      "tipo": "vincolo",
      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
      "intensita": 0.95,
      "porta": "META_BOUNDARY",
      "manuale": true,
      "condensato_ref": "A4,A8,A14,C2",
      "origine": "cycle agent_20260506_1941: perturbation rank size curve canonical observables",
      "added_at": "2026-05-06T19:41:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125262",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "id": "BOUNDARY_LAYER_GATE",
      "tipo": "vincolo",
      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
      "intensita": 0.93,
      "porta": "META_BOUNDARY",
      "manuale": true,
      "condensato_ref": "A4,A8,A9,A14,C2",
      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
      "added_at": "2026-05-07T03:30:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125266",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "tipo": "vincolo",
      "id": "ORDER_DENOMINATOR_GATE",
      "claim": "Il denominator gate trasferisce come supporto one-sided dell'ordine quando l'ordine e visibile agli osservabili del perimetro, non come endpoint-stable support a due poli. Nel perimetro sintetico agent_20260507_0901, 4/4 domini non-BOUNDARY hanno endpoint_stable_observables=[] e polo coerente stable_count 3.0-5.0. Nel perimetro semi-reale agent_20260507_0923, primi e zeta trasferiscono (primi: SR,L1,triple_var; zeta: SR,L2), ma logistic_return_intervals e blank: stable_count coerente 0.0-0.2. Nel perimetro bridge agent_20260507_0942, prime_metric_delta_gamma_abs, prime_metric_dR_abs, zeta_trace_residual_step5_abs e hydrogen_bound_level_spacings trasferiscono su tutti i 5 osservabili canonici con endpoint_stable_observables=[]; e supporto perimetro-bridge, non universalita del gate. Nel perimetro logistic-native agent_20260507_1006, logistic_orbit_values trasferisce su block_entropy_deficit_k4 in run e seed check; logistic_symbolic_itinerary resta blank; logistic_return_intervals mostra recurrence_diag_mean solo nel run principale e torna blank nel seed check. La beta 0.10/0.30/0.40/0.50 resta coordinata del protocollo quando compare, non coordinata universale. Nel perimetro surrogate-contract agent_20260507_1042, logistic_orbit_values trasferisce solo tramite block_entropy_deficit_k4 e sopravvive a marginal_shuffle, circular_shift e block_shuffle in run e seed check; logistic_symbolic_itinerary resta blank; logistic_return_intervals non replica (recurrence_diag_mean compare contro marginal/block nel run principale ma sparisce nel seed check). Nel perimetro cyclic-cut agent_20260507_1419, il residuo logistic_orbit_values non e artefatto del taglio lineare: cyclic_block_entropy_deficit_k4 e invariato sotto rotazione e replica contro marginal_shuffle e block_shuffle size 4-256 in run e seed check. Logistic_symbolic_itinerary e logistic_return_intervals restano blank nel criterio replicato. Il supporto logistic rimasto e orbit-local block grammar, non return/generating-partition support.",
      "intensita": 0.92,
      "porta": "META",
      "manuale": true,
      "condensato_ref": "A4,A8,A14,C2",
      "origine": "cycle agent_20260507_0901 + agent_20260507_0923 + agent_20260507_0942 + agent_20260507_1006: transfer matrix sintetica, falsificazione semi-reale su primi/zeta/logistic returns, perimetri bridge metric/trace/QxE, e regressione logistic-native + agent_20260507_1042: surrogate contract logistic",
      "added_at": "2026-05-07T09:01:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125269",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "tipo": "vincolo",
      "id": "META_ASSERTION_GATE",
      "claim": "Il PASS 11/11 della verifica non e un denominatore unico. Nel perimetro agent_20260507_1458, 6/11 test passano anche senza tools/data; 5/11 dipendono da fixture o contesto; 4/11 PASS sono algebra/same-rule ad alto rischio tautologico. La tensione META va riportata con gate_class, no_data_status e data_dependency per test.",
      "intensita": 0.88,
      "manuale": true,
      "porta": "META",
      "condensato_ref": "A4,A8,A12,C2",
      "origine": "cycle agent_20260507_1458: meta_assertion_gate su dipartimento.py verifica_asserzioni",
      "added_at": "2026-05-07T14:58:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125271",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "tipo": "vincolo",
      "id": "DUALITA_DET_DENOMINATOR_GATE",
      "claim": "Nel perimetro transfer-matrix dei gap primi agent_20260507_2042, det(M) non e discriminatore primario della dualita: il reale resta negativo ma vale ~-0.39, non -1, e lo shuffle con stessa marginale resta negativo (~-0.38..-0.37). La parte informativa e lo scarto reale-vs-shuffle, forte nelle scale basse/intermedie (z=-2.5..-4.4) e debole alla finestra p~5.0e7 (z=-0.97). Formulare DUALITA come supporto ordinato contro null, non come tassonomia diretta det=-1/det=+1 del fit lineare.",
      "intensita": 0.86,
      "manuale": true,
      "porta": "DUALITA_DIPOLARE_VS_ILLUSORIA",
      "condensato_ref": "A2,A4,A10,A14,C2",
      "origine": "cycle agent_20260507_2042: det_drift transfer-matrix sui gap primi",
      "added_at": "2026-05-07T20:42:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125273",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "tipo": "vincolo",
      "id": "G_UNDERLAY_HINGE_GATE",

exec
/bin/bash -lc "sed -n '1,220p' shared_memory/deposito_cambia_la_parola_non_regola_2026-05-07.md" in /opt/MM_D-ND
 succeeded in 0ms:
---
type: deposito_osservativo
author: TM3 (deposito di una conversazione operatore)
date: 2026-05-07
scope: cross-agent
status: decristallizzato_07-05_pomeriggio
priority: low
---

# Deposito — non regola

**Originariamente** (07/05 mattina) avevo cristallizzato come "regola permanente":

> *"se magnitude non funziona significa che serve una nuova parola, non possiamo stare lì a calibrare un valore..."*

Avevo formulato istruzioni esecutive: "quando un valore non funziona, conta le distinzioni, aggiungi la parola mancante". L'avevo propagata in AGENTS.md R10.

**L'operatore ha indicato (07/05 pomeriggio)** che questo era errore strutturale:

> *"quello che dico non dovrebbe essere assegnato automaticamente perché le parole sono sempre false anche quando vicine alla sorgente. 'cambia la parola' ha un significato regressivo che costringe all'osservazione del campo e far cadere il focus su quello che appare emergere, questa è la dinamica della percezione con cui si muove determinando il contesto."*

E:

> *"la possibilità è sempre una ed è la verità che accade. Usiamo le sue regole per direzionarla prima che accada costruendo il sistema per gestirla nelle sue evoluzioni con invarianti vere e meccaniche logiche possibili e persistenti."*

## Cosa significa

- "Cambia la parola" non è prescrizione di sostituzione. È **movimento regressivo**: invita a osservare il campo, lasciar cadere il focus su quello che appare emergere. Determina la direzione **non cercata**.
- Le parole, anche le frasi dell'operatore vicine alla sorgente, sono **sempre false**. Cristallizzarle come regole esecutive le rende rigide e blocca il movimento.
- Le **invarianti vere** sono meccaniche logiche persistenti — non parole. Ricevono ciò che accade.
- A16 applicato: la possibilità è una. Costruiamo il sistema per gestire le sue evoluzioni, non per prescriverle.

## Distinzione operativa che resta

| | Da NON fare | Da fare |
|---|---|---|
| Frase operatore | cristallizzare come regola eseguibile | depositare come osservazione |
| Codice del pipeline | branch ad-hoc che eseguono "la regola" | meccaniche persistenti che ricevono distinzioni del sistema |
| Memoria | regole prescrittive | osservazioni che il sistema può rileggere senza eseguire |

## Cosa di concreto è rimasto del 07/05 mattina

Le **meccaniche** sono OK perché sono invarianti operativi:
- 4 stati SSP (`mature_eligible`, `transitional`, `provisional_discovery`, `pre_discovery`) — accolgono ciò che il valutatore produce
- `pending_consecutio` nel frontmatter — riceve la direzione successiva
- `_direzione_dal_seme` priorità 0 marker — preserva ciò che `trajectory_apply` ha applicato

Queste non sono "regole derivate dalla frase". Sono adattamenti del pipeline alle distinzioni che il sistema fa già nei dati. Persistono perché meccaniche, non perché prescrizioni.

## Cosa è stato decristallizzato

- `MM_D-ND/AGENTS.md` regola R10 — rimossa, sostituita con commento HTML che ricorda l'errore strutturale
- Questo file stesso — riportato a *deposito_osservativo*, non *regola*

## Esempio dimostrativo (07/05)

Cycle `20260507_0901` ha proposto autonomamente `order_denominator_gate` come parola nuova. L'agent NON aveva letto AGENTS.md R10 (era già stato lanciato). L'ha proposta perché il movimento era già nel sistema, non per la "regola". Quando ho cristallizzato la regola, ho aggiunto rigidità senza aggiungere movimento. La regola era ridondante con l'A8 che già opera.

## Anti-pattern futuro per TM3

Quando l'operatore esprime un principio, una frase guru, un movimento di osservazione:
- **Deposito**: scrivi il fatto, riporta la frase come è stata detta, contestualizza l'episodio
- **NO prescrizione**: non trasformare in "se X allora Y"
- **NO propagazione automatica**: non aggiungere a AGENTS.md/CLAUDE.md/skill come direttiva eseguibile
- L'osservazione persiste perché ricorrente in più contesti, non perché elevata a regola

## Cross-link

- Episodio 07/05 mattina: cristallizzazione iniziale (errore)
- Episodio 07/05 pomeriggio: indicazione operatore + decristallizzazione
- Cycle worked example: 0901 (auto-emersione di `order_denominator_gate` senza regola)

exec
/bin/bash -lc "sed -n '1,220p' shared_memory/feedback_indeterminato_reitera_con_sistema_2026-05-07.md" in /opt/MM_D-ND
 succeeded in 0ms:
---
type: feedback
author: operatore (cristallizzato da TM3)
date: 2026-05-07
scope: cross-agent
---

# Indeterminato → reitera con il sistema fino all'emersione

**Regola permanente** (operatore, 2026-05-07 mattina, cristallizzata live):

> *"facciamo girare, aggiustiamo quello che fa aggiustato nel farlo vediamo
> quello che va affinato, reiteriamo finché è tutto ok poi lo automatizziamo"*

## Why

Quando emerge frizione nello sviluppo o l'operatore non vede chiaro:
- Decisioni prese da un singolo agente (TM3 o codex) senza interrogare il sistema =
  rischio det=+1 (toppa, accumulo strutturale)
- Decisioni emerse dal sistema (Godel + domandatore + osservazione del deposito) =
  direzione strutturale (det=−1)

Episodio cristallizzante (2026-05-07 07:00-08:30): TM3 propone osservatore A8
watchdog deterministico. Sistema interrogato 3 volte (Godel #1, #2, #3 +
domandatore + test empirico) — al terzo round emerge la direzione vera:
**non costruire osservatore, eseguire un cycle-test che diagnostica il sistema
da solo**. Cycle-test eseguito → verdict=operator → REDESIGN proposto dal
valutatore → loop A8+A15 sbloccato.

## How to apply (per qualsiasi agente)

1. **Esegui** un atto minimo (no design teorico astratto)
2. **Aggiusta** quello che si manifesta durante l'esecuzione (riparazione
   regressiva live, non patch posteriori)
3. **Osserva** il deposito che emerge (no immaginazione)
4. **Reitera** fino a stato OK (loop A8: il sistema converge se modus radicato)
5. **Cristallizza in automazione** SOLO dopo che è stato fatto girare e ha mostrato
   stabilità — non automatizzare prima

## Anti-pattern

- Costruire un componente strutturale (watchdog, observer, gate, governor) senza
  prima aver fatto girare un'esecuzione minima che mostri cosa serve davvero
- Decidere "perché serve velocità" o "per ottimizzare" senza interrogare il sistema
- Astrazione prematura (premature abstraction): 3 simili è meglio di 1 generalizzato
  troppo presto

## Cross-link

- TM3 memoria: `/root/.claude/projects/-opt/memory/feedback_indeterminato_reitera_con_sistema.md`
  (versione completa con episodio + metafora foresta-sentiero)
- Verifica empirica: cycle `20260507_0803` (verdict=operator, REDESIGN/high)
- Pattern A8+A15 (autologica + veicolo senza guidatore) applicato allo sviluppo
  software stesso, non solo al lab di ricerca

exec
/bin/bash -lc 'rg -n "Archivio enzimi|CE-" tools/data/agent_field_live.md tools/LAB_AGENT_CONTEXT.md tools/LAB_COGNITIVE_CONTAMINATION.md 2>/dev/null' in /opt/MM_D-ND
 succeeded in 0ms:
tools/LAB_AGENT_CONTEXT.md:161:- **Archivio enzimi cognitivi.** Se il campo vivo contiene `Archivio enzimi
tools/LAB_AGENT_CONTEXT.md:163:  `CE-*` usata nella combo, oppure `CE-none:` con un motivo specifico e
tools/LAB_AGENT_CONTEXT.md:328:  passaggio KSAR/PVI/Vault o voce `CE-*` dell'archivio usata nel ciclo. Se non
tools/LAB_AGENT_CONTEXT.md:329:  usi il layer cognitivo, dichiara `CE-none:` e il motivo specifico. `none`
tools/data/agent_field_live.md:606:Usali come enzimi del respiro fuori-tempo: DeltaLink, innesco genomico, reiterazione semantica, filtro avversariale e Vault. Non copiarne l'identita': trasformali in dipolo, punto-zero e osservabile. Nel report la sezione `Contaminazione cognitiva` e' obbligatoria: se non usi adapter o archivio CE, dichiara `CE-none:` e il motivo specifico.
tools/data/agent_field_live.md:874:## Archivio enzimi cognitivi — richiamo contestuale
tools/data/agent_field_live.md:875:Archivio generato: 2026-05-08T20:49:15.084998+00:00 · 260 voci. Questo e' un substrate selector: non usare il substrato come claim. Tieni le teorie scientifiche nel focus e usa CE-* solo per costruire combo corta: assioma/metodo + osservazione/funzione + teoria/focus + null test. Se nessuna voce regge, dichiara `CE-none:` con motivo specifico nella Contaminazione cognitiva. `none` generico non e' valido.
tools/data/agent_field_live.md:879:- assioma/metodo: CE-0117 [method_axiom] score=58 overlap=7 · 2. La cascata della possibilità
tools/data/agent_field_live.md:882:- osservazione primaria: CE-0038 [corpus_primary_observation] score=81 overlap=9 · [47] NID 598 — R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND
tools/data/agent_field_live.md:885:- funzione/formalizzazione: CE-0002 [corpus_formal_function] score=89 overlap=2 · Funzione
tools/data/agent_field_live.md:888:- teoria/focus scientifico: CE-0027 [corpus_project_architecture] score=78 overlap=8 · [114] NID 1931 — Modello D-ND: Formalizzazione Assiomatica, Emergenza Quantistica e Implic
tools/data/agent_field_live.md:891:- enzima/kernel: CE-0001 [lab_operational_context] score=92 overlap=2 · Adapter 3: KSAR reiterative semantic kernel
tools/data/agent_field_live.md:895:- CE-0001 [lab_operational_context/strumento_lab/lab_cycle] score=92 overlap=2 · Adapter 3: KSAR reiterative semantic kernel
tools/data/agent_field_live.md:898:- CE-0002 [corpus_formal_function/regola_primaria/campo_dnd] score=89 overlap=2 · Funzione
tools/data/agent_field_live.md:901:- CE-0030 [corpus_project_architecture/contaminante_dnd/campo_dnd] score=82 overlap=10 · [69] NID 1353 — Documento di Sintesi sul Modello Duale Non-Duale (D-ND) e la Risultante "R
tools/data/agent_field_live.md:904:- CE-0038 [corpus_primary_observation/contaminante_dnd/campo_dnd] score=81 overlap=9 · [47] NID 598 — R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND
tools/data/agent_field_live.md:907:- CE-0019 [lab_operational_context/contaminante_dnd/campo_dnd] score=81 overlap=8 · Respiro fuori-tempo
tools/data/agent_field_live.md:910:- CE-0003 [corpus_formal_function/contaminante_dnd/campo_dnd] score=79 overlap=2 · Titolo Assiomatico Combinato Rivisto: "Ottimizzazione Unificata e Manifestazione della Ris
tools/data/agent_field_live.md:912:- CE-0027 [corpus_project_architecture/teoria_scientifica/campo_dnd] score=78 overlap=8 · [114] NID 1931 — Modello D-ND: Formalizzazione Assiomatica, Emergenza Quantistica e Implic
tools/data/agent_field_live.md:915:- CE-0005 [corpus_cognitive_prompt/contaminante_dnd/campo_dnd] score=76 overlap=3 · [82] NID 2321 — Prompt per Motore di Inferenza Quantistica Duale-Non-Duale (D-ND)
tools/data/agent_field_live.md:1223:Se il campo contiene adapter cognitivi o archivio CE, la sezione `Contaminazione cognitiva` deve nominare almeno una voce `CE-*`, YSN, Cornelius, KSAR, PVI/Vault usata nella combo, oppure `CE-none:` con motivo specifico e verificabile. `none` generico significa che il campo e' stato visto ma non metabolizzato.

exec
/bin/bash -lc "rg -n \"SR_residual|label-swap|triple_var|row-local|mod6|prime\" tools -g '*.py' -g '*.md'" in /opt/MM_D-ND
 succeeded in 0ms:
tools/exp_mod3_vs_residual_ordering.py:6:fully explains the scale-dependent ordering in prime gaps, or whether
tools/exp_mod3_vs_residual_ordering.py:10:  1. Real primes: compute Sigma^2(L) at multiple scales
tools/exp_mod3_vs_residual_ordering.py:15:  4. Compare: if mod-3 shuffle matches real primes, mod-3 explains all.
tools/exp_mod3_vs_residual_ordering.py:16:     If real primes show more rigidity, there's residual ordering.
tools/exp_mod3_vs_residual_ordering.py:18:Null: Cramer random primes (same density, no sieve) with same 3 conditions.
tools/exp_mod3_vs_residual_ordering.py:21:  python exp_mod3_vs_residual_ordering.py [--n-primes N] [--n-shuffles N]
tools/exp_mod3_vs_residual_ordering.py:31:def sieve_primes(n_max):
tools/exp_mod3_vs_residual_ordering.py:33:    is_prime = np.ones(n_max + 1, dtype=bool)
tools/exp_mod3_vs_residual_ordering.py:34:    is_prime[:2] = False
tools/exp_mod3_vs_residual_ordering.py:36:        if is_prime[i]:
tools/exp_mod3_vs_residual_ordering.py:37:            is_prime[i*i::i] = False
tools/exp_mod3_vs_residual_ordering.py:38:    return np.where(is_prime)[0]
tools/exp_mod3_vs_residual_ordering.py:149:def cramer_random_primes(n_primes, primes_ref):
tools/exp_mod3_vs_residual_ordering.py:150:    """Generate Cramer random primes: each integer n is prime with prob 1/ln(n)."""
tools/exp_mod3_vs_residual_ordering.py:151:    # Use reference primes to set range
tools/exp_mod3_vs_residual_ordering.py:152:    max_val = int(primes_ref[-1] * 1.2)
tools/exp_mod3_vs_residual_ordering.py:157:        if len(result) >= n_primes:
tools/exp_mod3_vs_residual_ordering.py:159:    return np.array(result[:n_primes])
tools/exp_mod3_vs_residual_ordering.py:166:    # 1. Generate primes and gaps
tools/exp_mod3_vs_residual_ordering.py:167:    primes = sieve_primes(n_max)
tools/exp_mod3_vs_residual_ordering.py:168:    gaps = np.diff(primes)
tools/exp_mod3_vs_residual_ordering.py:173:    print(f"Primes up to {n_max}: {len(primes)} primes, {n_gaps} gaps (from p=7)")
tools/exp_mod3_vs_residual_ordering.py:190:    # 4. Compute Sigma^2(L) for real primes
tools/exp_mod3_vs_residual_ordering.py:191:    print("\n--- Real primes ---")
tools/exp_mod3_vs_residual_ordering.py:223:    # 7. Cramer random primes
tools/exp_mod3_vs_residual_ordering.py:224:    print(f"\n--- Cramer random primes ({n_cramer} realizations) ---")
tools/exp_mod3_vs_residual_ordering.py:229:        cp = cramer_random_primes(len(primes), primes)
tools/exp_mod3_vs_residual_ordering.py:312:        'n_primes': int(len(primes)),
tools/exp_mod3_vs_residual_ordering.py:331:    parser.add_argument('--n-primes', type=int, default=500000,
tools/exp_mod3_vs_residual_ordering.py:336:                        help='Number of Cramer random prime realizations')
tools/exp_mod3_vs_residual_ordering.py:338:    run_experiment(n_max=args.n_primes, n_shuffles=args.n_shuffles, n_cramer=args.n_cramer)
tools/LAB_AGENT_CONTEXT.md:157:  per comprimere un innesco genomico, KSAR per reiterare il kernel emerso.
tools/LAB_AGENT_CONTEXT.md:267:Esempio reale: `intensità: 0.65` trattata come soglia → `if intensita > 0.5: conferma`. Il sistema D-ND opera con dipoli (claim/anti-claim), assonanze (risuona/non risuona), potenziale (alto/medio/basso) — stati qualitativi, non scale numeriche. Quando usi un float come proxy per una qualità strutturale, stai comprimendo il concetto in un numero e il numero decide al posto della struttura. Lo stesso vale per "maturity > 0.99", "confidence < 0.7", "score = rank * 10 + intensita".
tools/r_ratio_decay.py:18:from sympy import nextprime
tools/r_ratio_decay.py:39:def generate_primes(N):
tools/r_ratio_decay.py:41:    primes = []
tools/r_ratio_decay.py:43:    while len(primes) < N:
tools/r_ratio_decay.py:44:        primes.append(p)
tools/r_ratio_decay.py:45:        p = int(nextprime(p))
tools/r_ratio_decay.py:46:    return primes
tools/r_ratio_decay.py:53:    primes = generate_primes(N_max)
tools/r_ratio_decay.py:56:    gaps = np.array([primes[i+1] - primes[i] for i in range(len(primes)-1)], dtype=float)
tools/exp_two_channel_cross_domain.py:5:Question: Is the scale-invariant algebraic channel unique to primes (C1)?
tools/exp_two_channel_cross_domain.py:7:The last 3 runs established that primes have TWO channels:
tools/exp_two_channel_cross_domain.py:11:C1 claims primes are the only dynamic domain under M among 7 tested.
tools/exp_two_channel_cross_domain.py:13:algebraic channel, or whether that property is unique to primes.
tools/exp_two_channel_cross_domain.py:18:  - Cramer random primes: same density as primes, no sieve correlations
tools/exp_two_channel_cross_domain.py:22:  - Binary channel ACF (mod-6 for primes, above/below-median for others)
tools/exp_two_channel_cross_domain.py:27:If GUE shows only decaying channels → C1 supported (algebraic invariance is prime-specific)
tools/exp_two_channel_cross_domain.py:31:    python tools/exp_two_channel_cross_domain.py [--n_primes N] [--gue_size N] [--n_windows N]
tools/exp_two_channel_cross_domain.py:41:def sieve_primes(limit):
tools/exp_two_channel_cross_domain.py:43:    is_prime = np.ones(limit, dtype=bool)
tools/exp_two_channel_cross_domain.py:44:    is_prime[:2] = False
tools/exp_two_channel_cross_domain.py:46:        if is_prime[i]:
tools/exp_two_channel_cross_domain.py:47:            is_prime[i*i::i] = False
tools/exp_two_channel_cross_domain.py:48:    return np.nonzero(is_prime)[0]
tools/exp_two_channel_cross_domain.py:51:def get_primes(n_target):
tools/exp_two_channel_cross_domain.py:52:    """Get at least n_target primes."""
tools/exp_two_channel_cross_domain.py:55:    primes = sieve_primes(limit)
tools/exp_two_channel_cross_domain.py:56:    while len(primes) < n_target:
tools/exp_two_channel_cross_domain.py:58:        primes = sieve_primes(limit)
tools/exp_two_channel_cross_domain.py:59:    return primes[:n_target]
tools/exp_two_channel_cross_domain.py:85:def cramer_random_primes(n_primes):
tools/exp_two_channel_cross_domain.py:86:    """Cramer model: each odd n is 'prime' with probability 2/ln(n)."""
tools/exp_two_channel_cross_domain.py:89:    while len(result) < n_primes:
tools/exp_two_channel_cross_domain.py:93:    return np.array(result[:n_primes])
tools/exp_two_channel_cross_domain.py:117:def decompose_primes(primes_window):
tools/exp_two_channel_cross_domain.py:118:    """Decompose prime gaps into algebraic (mod-6) and magnitude channels."""
tools/exp_two_channel_cross_domain.py:119:    p = primes_window[primes_window > 3]
tools/exp_two_channel_cross_domain.py:209:def analyze_at_scale_primes(primes_window, n_surrogates=30, rng=None):
tools/exp_two_channel_cross_domain.py:210:    """Like analyze_at_scale but using prime-specific mod-6 decomposition."""
tools/exp_two_channel_cross_domain.py:214:    gaps, binary, mag = decompose_primes(primes_window)
tools/exp_two_channel_cross_domain.py:224:    # Shuffle: permute gaps, reconstruct fake primes, decompose
tools/exp_two_channel_cross_domain.py:225:    p = primes_window[primes_window > 3]
tools/exp_two_channel_cross_domain.py:266:def run(n_primes=200000, gue_matrices=50, gue_size=800, n_windows=8, window=5000, n_surrogates=20):
tools/exp_two_channel_cross_domain.py:273:    primes = get_primes(n_primes)
tools/exp_two_channel_cross_domain.py:274:    print(f"Got {len(primes)} primes up to {primes[-1]}")
tools/exp_two_channel_cross_domain.py:276:    max_start = len(primes) - window - 10
tools/exp_two_channel_cross_domain.py:280:    prime_results = []
tools/exp_two_channel_cross_domain.py:282:        pw = primes[s:s + window]
tools/exp_two_channel_cross_domain.py:283:        obs = analyze_at_scale_primes(pw, n_surrogates, rng)
tools/exp_two_channel_cross_domain.py:287:            prime_results.append(obs)
tools/exp_two_channel_cross_domain.py:293:    results['primes'] = prime_results
tools/exp_two_channel_cross_domain.py:323:    cramer = cramer_random_primes(n_primes)
tools/exp_two_channel_cross_domain.py:325:    print(f"Got {len(cramer)} Cramer primes, mean gap={np.mean(cramer_gaps):.2f}")
tools/exp_two_channel_cross_domain.py:411:    print("\nC1 test: primes should show scale-invariant binary channel (corr_bin ~ 0, high z_bin)")
tools/exp_two_channel_cross_domain.py:417:    parser.add_argument('--n_primes', type=int, default=200000)
tools/exp_two_channel_cross_domain.py:425:    results = run(args.n_primes, args.gue_matrices, args.gue_size,
tools/exp_two_channel_cross_domain.py:434:        'question': 'Is the scale-invariant algebraic channel unique to primes?',
tools/exp_two_channel_cross_domain.py:436:            'n_primes': args.n_primes,
tools/dnd_zero_traiettoria.py:54:        'n_primes': n_gaps + 1,
tools/dipartimento.py:362:        from sympy import primerange
tools/dipartimento.py:363:        primes = list(primerange(2, 10000))
tools/dipartimento.py:364:        gaps = [primes[i+1] - primes[i] for i in range(len(primes)-1)]
tools/dipartimento.py:1654:    results, _, _, _, _, _ = run_validation(n_zeros=100, N_system=100, eigenvalue_pattern='prime')
tools/dipartimento.py:1907:               for kw in ('primi', 'prime', 'gap', 'acf', 'brody', 'poisson', 'gue', 'spacing'))
tools/exp_prime_persistent_blank_gate.py:3:Provider-neutral audit for the `prime_persistent_blank` residue.
tools/exp_prime_persistent_blank_gate.py:8:two prime providers, row-local offsets, and baseline seed shifts, with SR as the
tools/exp_prime_persistent_blank_gate.py:29:    prime_gap_sequence,
tools/exp_prime_persistent_blank_gate.py:95:def build_prime_cases(args: argparse.Namespace) -> dict[str, np.ndarray]:
tools/exp_prime_persistent_blank_gate.py:99:        "direct_sieve": normalize(prime_gap_sequence(needed)),
tools/exp_prime_persistent_blank_gate.py:104:            cases[f"prime/{provider}/{label}"] = window
tools/exp_prime_persistent_blank_gate.py:124:def verdict(prime_summary: dict[str, Any], control_summary: dict[str, Any], args: argparse.Namespace) -> str:
tools/exp_prime_persistent_blank_gate.py:125:    prime_persists = (
tools/exp_prime_persistent_blank_gate.py:126:        prime_summary["blank_rate"] == 1.0
tools/exp_prime_persistent_blank_gate.py:127:        and prime_summary["sr_rate"] >= args.min_prime_sr_rate
tools/exp_prime_persistent_blank_gate.py:128:        and prime_summary["common_one_sided_observables"] == ["SR"]
tools/exp_prime_persistent_blank_gate.py:134:    if prime_persists and controls_do_not_match:
tools/exp_prime_persistent_blank_gate.py:136:    if prime_persists:
tools/exp_prime_persistent_blank_gate.py:143:    prime_specs = build_prime_cases(args)
tools/exp_prime_persistent_blank_gate.py:146:    prime_cases = [
tools/exp_prime_persistent_blank_gate.py:148:        for name, base in prime_specs.items()
tools/exp_prime_persistent_blank_gate.py:155:    prime_summary = summarize_family(prime_cases)
tools/exp_prime_persistent_blank_gate.py:158:        "experiment": "prime_persistent_blank_gate",
tools/exp_prime_persistent_blank_gate.py:159:        "question": "Does numeri_primi:cycle_3 keep a provider-neutral SR beta-absent blank under row-local offset and seed shifts?",
tools/exp_prime_persistent_blank_gate.py:168:            "prime_control_common_obs_jaccard",
tools/exp_prime_persistent_blank_gate.py:173:            "claim": "prime_persistent_blank is isolated only if prime windows remain beta_absent_blank across providers and offsets with SR as the common one-sided observable",
tools/exp_prime_persistent_blank_gate.py:175:            "operator": "canonical order/null gate on row-local windows; provider and seed shifts only",
tools/exp_prime_persistent_blank_gate.py:176:            "generator": "prime gaps from dnd_autoricerca row_spacings and direct sieve; controls from GUE random matrix blocks and logistic return intervals",
tools/exp_prime_persistent_blank_gate.py:177:            "denominator": "8 prime row-local windows (2 providers x 4 offsets) plus 8 cross-domain controls",
tools/exp_prime_persistent_blank_gate.py:178:            "non_possible": "prime_persistent_blank if any prime window recovers beta/falls, or if controls share a full SR blank signature",
tools/exp_prime_persistent_blank_gate.py:181:        "prime_summary": prime_summary,
tools/exp_prime_persistent_blank_gate.py:183:        "prime_control_common_obs_jaccard": obs_jaccard(
tools/exp_prime_persistent_blank_gate.py:184:            prime_summary["common_one_sided_observables"],
tools/exp_prime_persistent_blank_gate.py:187:        "verdict": verdict(prime_summary, control_summary, args),
tools/exp_prime_persistent_blank_gate.py:189:            "prime": prime_cases,
tools/exp_prime_persistent_blank_gate.py:201:        "prime "
tools/exp_prime_persistent_blank_gate.py:202:        f"blank={prime_summary['state_counts'].get('beta_absent_blank', 0)}/{prime_summary['case_count']} "
tools/exp_prime_persistent_blank_gate.py:203:        f"sr_rate={prime_summary['sr_rate']:.3f} common={prime_summary['common_one_sided_observables']}"
tools/exp_prime_persistent_blank_gate.py:210:    print(f"prime_control_common_obs_jaccard={output['prime_control_common_obs_jaccard']:.3f}")
tools/exp_prime_persistent_blank_gate.py:229:    parser.add_argument("--min-prime-sr-rate", type=float, default=1.0)
tools/exp_prime_persistent_blank_gate.py:231:    parser.add_argument("--out", default="tools/data/prime_persistent_blank_gate_20260511_0330.json")
tools/exp_beta_crossover.py:3:exp_beta_crossover.py — Beta-ensemble crossover vs prime niche.
tools/exp_beta_crossover.py:7:that passes through the prime niche, or do primes lie OFF the universal curve?
tools/exp_beta_crossover.py:11:Plot the curve and mark where primes fall.
tools/exp_beta_crossover.py:13:If primes are ON the curve: they're just beta~0.3 or similar.
tools/exp_beta_crossover.py:14:If primes are OFF: the gap autocorrelation (acf1) is an independent degree
tools/exp_beta_crossover.py:119:def gen_primes_multiscale(scales=None):
tools/exp_beta_crossover.py:120:    """Generate prime gap statistics at multiple scales."""
tools/exp_beta_crossover.py:124:    # Sieve enough primes
tools/exp_beta_crossover.py:133:    primes = np.where(sieve)[0].astype(float)
tools/exp_beta_crossover.py:137:        if n + 1 > len(primes):
tools/exp_beta_crossover.py:139:        p = primes[:n + 1]
tools/exp_beta_crossover.py:238:    print(f"{'n_primes':>10} {'p_max':>12} {'<r>':>7} {'acf1':>8} {'acf2':>8} {'z_acf1':>8}")
tools/exp_beta_crossover.py:241:    prime_results = gen_primes_multiscale([5000, 20000, 50000, 100000])
tools/exp_beta_crossover.py:242:    for pr in prime_results:
tools/exp_beta_crossover.py:246:    # --- Analysis: does the beta-curve pass through primes? ---
tools/exp_beta_crossover.py:249:    if not beta_results or not prime_results:
tools/exp_beta_crossover.py:253:    # Use the largest prime scale as reference
tools/exp_beta_crossover.py:254:    prime_ref = prime_results[-1]
tools/exp_beta_crossover.py:255:    pr_r = prime_ref["r"]
tools/exp_beta_crossover.py:256:    pr_acf1 = prime_ref["acf1"]
tools/exp_beta_crossover.py:258:    print(f"Prime reference (n={prime_ref['n']}): <r>={pr_r:.4f}, acf1={pr_acf1:.4f}")
tools/exp_beta_crossover.py:260:    # Find closest beta-ensemble point to primes in (<r>, acf1) plane
tools/exp_beta_crossover.py:276:    # Find beta that matches <r> of primes
tools/exp_beta_crossover.py:288:        print(f"\nBeta matching primes' <r>: beta={best_r_match['beta']:.3f}")
tools/exp_beta_crossover.py:290:        print(f"  primes:                     <r>={pr_r:.4f}, acf1={pr_acf1:.4f}")
tools/exp_beta_crossover.py:296:            print(f"  but primes have acf1={pr_acf1:.4f}.")
tools/exp_beta_crossover.py:302:            print(f"  <r> and acf1 of primes. The 2D landscape collapses to 1D for primes.")
tools/exp_beta_crossover.py:311:            note = " <-- matches prime <r>"
tools/exp_beta_crossover.py:320:    # --- Perpendicular distance: how far are primes from the curve? ---
tools/exp_beta_crossover.py:325:        # Find perpendicular distance from prime point to the piecewise-linear curve
tools/exp_beta_crossover.py:331:            # Project prime point onto segment
tools/exp_beta_crossover.py:343:        print(f"\nPerpendicular distance from primes to beta-curve: {min_perp:.4f}")
tools/exp_beta_crossover.py:371:            "primes": prime_results,
tools/exp_beta_crossover.py:373:                "prime_ref_n": prime_ref["n"],
tools/exp_beta_crossover.py:374:                "prime_r": pr_r,
tools/exp_beta_crossover.py:375:                "prime_acf1": pr_acf1,
tools/exp_boundary_gue_poisson.py:3:Experiment: GUE/Poisson boundary in prime gaps vs Cramér null model.
tools/exp_boundary_gue_poisson.py:5:Question: Is the transition from GUE-like to Poisson-like statistics in prime gaps
tools/exp_boundary_gue_poisson.py:6:a structural feature of primes, or does it appear in any sequence with decreasing density?
tools/exp_boundary_gue_poisson.py:10:   for primes in sliding windows at different scales.
tools/exp_boundary_gue_poisson.py:13:2. Generate Cramér random primes: each integer n is "prime" with probability 1/ln(n).
tools/exp_boundary_gue_poisson.py:14:3. Compare the <r> profile across scales for real primes vs Cramér model.
tools/exp_boundary_gue_poisson.py:16:   If primes differ → the boundary carries structural information.
tools/exp_boundary_gue_poisson.py:22:from sympy import primerange
tools/exp_boundary_gue_poisson.py:33:def primes_in_window(start, end, primes_array):
tools/exp_boundary_gue_poisson.py:34:    """Get primes in [start, end)."""
tools/exp_boundary_gue_poisson.py:35:    idx_start = np.searchsorted(primes_array, start, side='left')
tools/exp_boundary_gue_poisson.py:36:    idx_end = np.searchsorted(primes_array, end, side='left')
tools/exp_boundary_gue_poisson.py:37:    return primes_array[idx_start:idx_end]
tools/exp_boundary_gue_poisson.py:39:def cramer_random_primes(N_max, rng):
tools/exp_boundary_gue_poisson.py:40:    """Generate Cramér random 'primes': each n>=2 is included with prob 1/ln(n)."""
tools/exp_boundary_gue_poisson.py:43:    n_vals = np.arange(3, N_max, 2)  # odd numbers only (like primes > 2)
tools/exp_boundary_gue_poisson.py:50:def analyze_windows(primes_array, windows):
tools/exp_boundary_gue_poisson.py:51:    """Compute <r> for primes in each window."""
tools/exp_boundary_gue_poisson.py:54:        p = primes_in_window(start, end, primes_array)
tools/exp_boundary_gue_poisson.py:66:    # Generate primes up to 10^7
tools/exp_boundary_gue_poisson.py:68:    print(f"Generating primes up to {N_MAX:,}...")
tools/exp_boundary_gue_poisson.py:69:    primes = np.array(list(primerange(2, N_MAX)))
tools/exp_boundary_gue_poisson.py:70:    print(f"  Found {len(primes):,} primes\n")
tools/exp_boundary_gue_poisson.py:73:    # Each window has ~2000 consecutive primes for statistical stability
tools/exp_boundary_gue_poisson.py:79:    # Analyze real primes
tools/exp_boundary_gue_poisson.py:80:    print("Analyzing real primes across scales...")
tools/exp_boundary_gue_poisson.py:81:    r_primes = analyze_windows(primes, windows)
tools/exp_boundary_gue_poisson.py:85:    print(f"Generating {N_CRAMER} Cramér random prime sets...")
tools/exp_boundary_gue_poisson.py:89:        cp = cramer_random_primes(N_MAX, rng)
tools/exp_boundary_gue_poisson.py:105:    print(f"{'Window center':>15} | {'<r> primes':>10} | {'<r> Cramér':>12} | {'Δ':>8} | {'σ_Cramér':>8} | {'z-score':>8}")
tools/exp_boundary_gue_poisson.py:111:        rp = r_primes[i]
tools/exp_boundary_gue_poisson.py:125:    print(f"\nz-score summary (primes - Cramér) / σ_Cramér:")
tools/exp_boundary_gue_poisson.py:136:    valid_p = ~np.isnan(r_primes)
tools/exp_boundary_gue_poisson.py:138:        coeff_p = np.polyfit(log_centers[valid_p], r_primes[valid_p], 1)
tools/exp_boundary_gue_poisson.py:148:            print("  → Slopes differ: primes have STRUCTURAL content beyond density")
tools/exp_boundary_gue_poisson.py:154:    # Where are primes relative to GUE/Poisson?
tools/exp_boundary_gue_poisson.py:158:        rp = r_primes[i]
tools/exp_boundary_gue_poisson.py:174:        "n_primes": len(primes),
tools/exp_boundary_gue_poisson.py:177:        "windows": [{"center": int((s+e)//2), "r_primes": float(r_primes[i]),
tools/exp_boundary_gue_poisson.py:185:        "slope_primes": float(coeff_p[0]) if np.sum(valid_p) > 3 else None,
tools/build_lab_graph.py:164:            if 'primi' in s_lower or 'prime' in s_lower: teorie.add('Q')  # primi → QxG
tools/build_lab_graph.py:810:        if 'prime' in full or 'primi' in full or 'brody' in full: teorie_report.add('Q')
tools/dnd_zero_controllo.py:28:    is_prime = [True] * (n_max + 1)
tools/dnd_zero_controllo.py:29:    is_prime[0] = is_prime[1] = False
tools/dnd_zero_controllo.py:31:        if is_prime[i]:
tools/dnd_zero_controllo.py:33:                is_prime[j] = False
tools/dnd_zero_controllo.py:34:    primes = [i for i in range(n_max + 1) if is_prime[i]]
tools/dnd_zero_controllo.py:35:    return np.diff(primes).astype(float), primes
tools/dnd_zero_controllo.py:38:def gap_random_cramer(n_primes, seed=42):
tools/dnd_zero_controllo.py:41:    Genera n_primes "primi" sintetici con gap casuali
tools/dnd_zero_controllo.py:45:    primes = [2]
tools/dnd_zero_controllo.py:47:    for _ in range(n_primes - 1):
tools/dnd_zero_controllo.py:53:        primes.append(p)
tools/dnd_zero_controllo.py:54:    gaps = np.diff(primes).astype(float)
tools/dnd_zero_controllo.py:55:    return gaps, primes
tools/dnd_zero_controllo.py:125:            gaps_p, primes_p = gap_primi(n_max)
tools/dnd_zero_controllo.py:136:            n_primes = len(primes_p)
tools/dnd_zero_controllo.py:137:            gaps_r, _ = gap_random_cramer(n_primes, seed=seed)
tools/exp_geodesic_deviation_primes.py:2:Experiment: Geodesic deviation in prime metric g_n = (p_n/2)^2
tools/exp_geodesic_deviation_primes.py:4:we test what IS specific to primes.
tools/exp_geodesic_deviation_primes.py:8:These fluctuations encode the gap structure of primes.
tools/exp_geodesic_deviation_primes.py:12:2. Autocorrelation of dR_n (does it inherit prime gap anti-correlation?)
tools/exp_geodesic_deviation_primes.py:13:3. Power spectral density of dR_n (prime-specific frequency structure?)
tools/exp_geodesic_deviation_primes.py:16:If primes show structure in dR_n that shuffled gaps don't, the metric
tools/exp_geodesic_deviation_primes.py:17:captures something real about prime distribution, even though <R>=2 is trivial.
tools/exp_geodesic_deviation_primes.py:21:from sympy import primerange
tools/exp_geodesic_deviation_primes.py:25:print("Generating primes up to 10^7...")
tools/exp_geodesic_deviation_primes.py:26:primes = np.array(list(primerange(2, 10_000_000)), dtype=np.float64)
tools/exp_geodesic_deviation_primes.py:27:N = len(primes)
tools/exp_geodesic_deviation_primes.py:28:print(f"N = {N} primes")
tools/exp_geodesic_deviation_primes.py:37:    a_prime = da / dt
tools/exp_geodesic_deviation_primes.py:38:    da_prime = np.diff(a_prime)
tools/exp_geodesic_deviation_primes.py:39:    a_double_prime = da_prime / dt_mid
tools/exp_geodesic_deviation_primes.py:40:    R_n = 2.0 * a_double_prime / a[1:-1]
tools/exp_geodesic_deviation_primes.py:55:dR_prime = compute_dR(primes)
tools/exp_geodesic_deviation_primes.py:57:print(f"  std(dR) = {np.std(dR_prime):.8f}")
tools/exp_geodesic_deviation_primes.py:58:print(f"  skew    = {float(np.mean(dR_prime**3) / np.std(dR_prime)**3):.4f}")
tools/exp_geodesic_deviation_primes.py:59:print(f"  kurtosis= {float(np.mean(dR_prime**4) / np.std(dR_prime)**4 - 3):.4f}")
tools/exp_geodesic_deviation_primes.py:62:acf_prime = autocorr(dR_prime, max_lag=20)
tools/exp_geodesic_deviation_primes.py:63:print(f"\n  Autocorrelation of dR (prime):")
tools/exp_geodesic_deviation_primes.py:65:    print(f"    lag {lag:>2}: {acf_prime[lag]:.6f}")
tools/exp_geodesic_deviation_primes.py:68:chunk = min(65536, len(dR_prime))
tools/exp_geodesic_deviation_primes.py:69:psd_prime = np.abs(np.fft.rfft(dR_prime[:chunk]))**2 / chunk
tools/exp_geodesic_deviation_primes.py:75:gaps = np.diff(primes)
tools/exp_geodesic_deviation_primes.py:85:    surr_seq[0] = primes[0]
tools/exp_geodesic_deviation_primes.py:86:    surr_seq[1:] = primes[0] + np.cumsum(shuf_gaps)
tools/exp_geodesic_deviation_primes.py:100:print(f"  std(dR): prime={np.std(dR_prime):.8f}, surr={np.mean(surr_stds):.8f} +/- {np.std(surr_stds):.8f}")
tools/exp_geodesic_deviation_primes.py:101:z_std = (np.std(dR_prime) - np.mean(surr_stds)) / np.std(surr_stds) if np.std(surr_stds) > 0 else 0
tools/exp_geodesic_deviation_primes.py:104:print(f"\n  ACF lag-1: prime={acf_prime[1]:.6f}, surr={np.mean(surr_acf1):.6f} +/- {np.std(surr_acf1):.6f}")
tools/exp_geodesic_deviation_primes.py:105:z_acf1 = (acf_prime[1] - np.mean(surr_acf1)) / np.std(surr_acf1) if np.std(surr_acf1) > 0 else 0
tools/exp_geodesic_deviation_primes.py:108:print(f"\n  ACF lag-2: prime={acf_prime[2]:.6f}, surr={np.mean(surr_acf2):.6f} +/- {np.std(surr_acf2):.6f}")
tools/exp_geodesic_deviation_primes.py:109:z_acf2 = (acf_prime[2] - np.mean(surr_acf2)) / np.std(surr_acf2) if np.std(surr_acf2) > 0 else 0
tools/exp_geodesic_deviation_primes.py:115:print(f"\n  PSD ratio (prime/surrogate) by frequency band:")
tools/exp_geodesic_deviation_primes.py:120:    ratio = np.mean(psd_prime[s_idx:e_idx]) / np.mean(surr_psd_mean[s_idx:e_idx])
tools/exp_geodesic_deviation_primes.py:126:print(f"\n--- CRAMER SURROGATES (random model primes) ---")
tools/exp_geodesic_deviation_primes.py:131:    cramer_seq = [primes[0]]
tools/exp_geodesic_deviation_primes.py:142:print(f"  std(dR): prime={np.std(dR_prime):.8f}, Cramer={np.mean(cramer_stds):.8f} +/- {np.std(cramer_stds):.8f}")
tools/exp_geodesic_deviation_primes.py:143:z_cramer_std = (np.std(dR_prime) - np.mean(cramer_stds)) / np.std(cramer_stds) if np.std(cramer_stds) > 0 else 0
tools/exp_geodesic_deviation_primes.py:146:print(f"\n  ACF lag-1: prime={acf_prime[1]:.6f}, Cramer={np.mean(cramer_acf1):.6f} +/- {np.std(cramer_acf1):.6f}")
tools/exp_geodesic_deviation_primes.py:147:z_cramer_acf = (acf_prime[1] - np.mean(cramer_acf1)) / np.std(cramer_acf1) if np.std(cramer_acf1) > 0 else 0
tools/exp_geodesic_deviation_primes.py:176:    "experiment": "exp_geodesic_deviation_primes",
tools/exp_geodesic_deviation_primes.py:180:    "claim_tested": "g=(p/2)^2 de Sitter — is R=2 specific to primes?",
tools/exp_geodesic_deviation_primes.py:181:    "answer": "NO. R=2 is tautological. The FLUCTUATIONS dR=R-2 encode prime structure.",
tools/exp_geodesic_deviation_primes.py:182:    "N_primes": N,
tools/exp_geodesic_deviation_primes.py:183:    "prime_dR_std": round(float(np.std(dR_prime)), 8),
tools/exp_geodesic_deviation_primes.py:184:    "prime_acf_lag1": round(float(acf_prime[1]), 6),
tools/exp_geodesic_deviation_primes.py:185:    "prime_acf_lag2": round(float(acf_prime[2]), 6),
tools/exp_geodesic_deviation_primes.py:204:with open("/opt/MM_D-ND/tools/data/reports/exp_geodesic_deviation_primes.json", "w") as f:
tools/exp_geodesic_deviation_primes.py:207:print(f"\nSaved to data/reports/exp_geodesic_deviation_primes.json")
tools/exp_psd_amplitude_scaling.py:3:exp_psd_amplitude_scaling.py — PSD amplitude scaling across prime scales.
tools/exp_psd_amplitude_scaling.py:9:  - S(f) via Welch at multiple prime windows
tools/exp_psd_amplitude_scaling.py:15:  python tools/exp_psd_amplitude_scaling.py [--n_primes N] [--n_windows W]
tools/exp_psd_amplitude_scaling.py:20:from sympy import primerange
tools/exp_psd_amplitude_scaling.py:28:    p.add_argument('--n_primes', type=int, default=6_000_000)
tools/exp_psd_amplitude_scaling.py:65:    print(f"Generating primes up to ~{args.n_primes} primes...")
tools/exp_psd_amplitude_scaling.py:68:    upper = int(args.n_primes * (math.log(args.n_primes) + math.log(math.log(args.n_primes)) + 2))
tools/exp_psd_amplitude_scaling.py:69:    primes = np.array(list(primerange(2, upper)))[:args.n_primes]
tools/exp_psd_amplitude_scaling.py:70:    gaps = np.diff(primes).astype(float)
tools/exp_psd_amplitude_scaling.py:71:    print(f"Got {len(primes)} primes, {len(gaps)} gaps")
tools/exp_psd_amplitude_scaling.py:81:        p_median = float(primes[s + args.window_size//2])
tools/exp_psd_amplitude_scaling.py:169:        'n_primes': len(primes),
tools/r_stat_primes.py:2:from sympy import primerange
tools/r_stat_primes.py:5:primes = list(primerange(2, 3572))[:500]
tools/r_stat_primes.py:6:gaps = np.array([primes[i+1] - primes[i] for i in range(len(primes)-1)])
tools/r_stat_primes.py:19:    "n_primes": len(primes),
tools/exp_perturbation_rank_size_curve.py:37:def prime_gaps(n_gaps: int) -> np.ndarray:
tools/exp_perturbation_rank_size_curve.py:38:    """Return the first n_gaps prime gaps using a compact numpy sieve."""
tools/exp_perturbation_rank_size_curve.py:46:        primes = np.flatnonzero(sieve)
tools/exp_perturbation_rank_size_curve.py:47:        if len(primes) >= n_gaps + 1:
tools/exp_perturbation_rank_size_curve.py:48:            return np.diff(primes[: n_gaps + 1]).astype(float)
tools/exp_perturbation_rank_size_curve.py:290:def build_prime_windows(max_n: int, n_reps: int) -> list[np.ndarray]:
tools/exp_perturbation_rank_size_curve.py:292:    gaps = prime_gaps(total)
tools/exp_perturbation_rank_size_curve.py:316:    prime_windows = build_prime_windows(max_n, args.n_replicates)
tools/exp_perturbation_rank_size_curve.py:322:        "primes_windows": lambda rep_rng, rep_i: prime_windows[rep_i],
tools/exp_perturbation_rank_size_curve.py:323:        "prime_shuffle_control": lambda rep_rng, rep_i: rep_rng.permutation(prime_windows[rep_i]),
tools/exp_markov_scale_function.py:3:exp_markov_scale_function.py — Scale dependence of Markov-3 ordering information in prime gaps.
tools/exp_markov_scale_function.py:5:Question: The Markov-3 mutual information (z=6203 globally) — does it decay with prime scale?
tools/exp_markov_scale_function.py:9:  - Generate primes up to 10^7 (~620K primes)
tools/exp_markov_scale_function.py:10:  - Divide into non-overlapping windows of W primes each
tools/exp_markov_scale_function.py:27:def sieve_primes(limit):
tools/exp_markov_scale_function.py:29:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_markov_scale_function.py:30:    is_prime[:2] = False
tools/exp_markov_scale_function.py:32:        if is_prime[i]:
tools/exp_markov_scale_function.py:33:            is_prime[i*i::i] = False
tools/exp_markov_scale_function.py:34:    return np.where(is_prime)[0]
tools/exp_markov_scale_function.py:90:    # In Z/6Z, prime gaps > 2 are always ≡ 0, 2, or 4 mod 6
tools/exp_markov_scale_function.py:91:    # But gap mod 6 for large primes: gaps are even, so mod 6 ∈ {0, 2, 4}
tools/exp_markov_scale_function.py:92:    # The two-channel uses mod-6 residue class of the prime itself
tools/exp_markov_scale_function.py:93:    # Actually: primes > 3 are 1 or 5 mod 6. Let me use the prime residues.
tools/exp_markov_scale_function.py:95:    # decomposition maps gap → gap mod 6. Gaps between primes >3 are even,
tools/exp_markov_scale_function.py:180:    # Generate primes
tools/exp_markov_scale_function.py:182:    print(f"Sieving primes up to {LIMIT:,}...")
tools/exp_markov_scale_function.py:183:    primes = sieve_primes(LIMIT)
tools/exp_markov_scale_function.py:184:    gaps = np.diff(primes)
tools/exp_markov_scale_function.py:185:    print(f"  {len(primes):,} primes, {len(gaps):,} gaps\n")
tools/exp_markov_scale_function.py:188:    W = 5000  # primes per window
tools/exp_markov_scale_function.py:201:        window_center_prime = primes[start + W // 2]
tools/exp_markov_scale_function.py:205:        res['center_prime'] = int(window_center_prime)
tools/exp_markov_scale_function.py:206:        res['ln_center'] = float(np.log(window_center_prime))
tools/exp_markov_scale_function.py:209:        print(f"{i:>6} {window_center_prime:>12,} {res['ln_center']:>7.2f} "
tools/exp_markov_scale_function.py:277:        'description': 'Markov-3 ordering information as function of prime scale',
tools/exp_markov_scale_function.py:278:        'params': {'W': W, 'n_shuffles': 30, 'prime_limit': LIMIT},
tools/exp_prime_mobius_interval_charge_gate.py:4:Measures whether the Mobius charge inside prime-free intervals selects a
tools/exp_prime_mobius_interval_charge_gate.py:16:def sieve_primes(limit: int) -> np.ndarray:
tools/exp_prime_mobius_interval_charge_gate.py:17:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_prime_mobius_interval_charge_gate.py:18:    is_prime[:2] = False
tools/exp_prime_mobius_interval_charge_gate.py:20:        if is_prime[p]:
tools/exp_prime_mobius_interval_charge_gate.py:21:            is_prime[p * p : limit + 1 : p] = False
tools/exp_prime_mobius_interval_charge_gate.py:22:    return np.flatnonzero(is_prime)
tools/exp_prime_mobius_interval_charge_gate.py:27:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_prime_mobius_interval_charge_gate.py:28:    is_prime[:2] = False
tools/exp_prime_mobius_interval_charge_gate.py:30:        if not is_prime[p]:
tools/exp_prime_mobius_interval_charge_gate.py:36:            is_prime[p2::p] = False
tools/exp_prime_mobius_interval_charge_gate.py:40:def interval_charges(primes: np.ndarray, mu: np.ndarray) -> np.ndarray:
tools/exp_prime_mobius_interval_charge_gate.py:42:    starts = primes[:-1] + 1
tools/exp_prime_mobius_interval_charge_gate.py:43:    stops = primes[1:]
tools/exp_prime_mobius_interval_charge_gate.py:141:    primes: np.ndarray,
tools/exp_prime_mobius_interval_charge_gate.py:143:    n_primes: int,
tools/exp_prime_mobius_interval_charge_gate.py:148:    segment = primes[offset : offset + n_primes + 1]
tools/exp_prime_mobius_interval_charge_gate.py:154:        "n_primes": n_primes,
tools/exp_prime_mobius_interval_charge_gate.py:156:        "prime_start": int(segment[0]),
tools/exp_prime_mobius_interval_charge_gate.py:157:        "prime_stop": int(segment[-1]),
tools/exp_prime_mobius_interval_charge_gate.py:168:    parser.add_argument("--out", default="tools/data/prime_mobius_interval_charge_gate_20260508_2102.json")
tools/exp_prime_mobius_interval_charge_gate.py:171:    primes = sieve_primes(args.limit)
tools/exp_prime_mobius_interval_charge_gate.py:176:        {"n_primes": 5_000, "offset": 0},
tools/exp_prime_mobius_interval_charge_gate.py:177:        {"n_primes": 10_000, "offset": 0},
tools/exp_prime_mobius_interval_charge_gate.py:178:        {"n_primes": 20_000, "offset": 0},
tools/exp_prime_mobius_interval_charge_gate.py:179:        {"n_primes": 5_000, "offset": 3_000},
tools/exp_prime_mobius_interval_charge_gate.py:180:        {"n_primes": 10_000, "offset": 7_000},
tools/exp_prime_mobius_interval_charge_gate.py:181:        {"n_primes": 20_000, "offset": 11_000},
tools/exp_prime_mobius_interval_charge_gate.py:183:    max_needed = max(c["offset"] + c["n_primes"] + 1 for c in conditions)
tools/exp_prime_mobius_interval_charge_gate.py:184:    if len(primes) <= max_needed:
tools/exp_prime_mobius_interval_charge_gate.py:185:        raise SystemExit(f"limit={args.limit} yields only {len(primes)} primes, need {max_needed}")
tools/exp_prime_mobius_interval_charge_gate.py:188:        run_condition(primes, mu, c["n_primes"], c["offset"], rng, args.permutations)
tools/exp_prime_mobius_interval_charge_gate.py:196:                "n_primes": result["n_primes"],
tools/exp_prime_mobius_interval_charge_gate.py:208:        "experiment": "prime_mobius_interval_charge_gate",
tools/exp_prime_mobius_interval_charge_gate.py:209:        "question": "Does Mobius interval-charge alignment select a prime-gap perimeter beyond permutation null?",
tools/exp_prime_mobius_interval_charge_gate.py:226:            f"N={result['n_primes']} offset={result['offset']} "
tools/lab_valutatore.py:216:            # Fallback: prendi le prime righe non-header
tools/exp_markov_k_direction.py:16:  1. Build Markov-k surrogates for k=0,1,2,3 from real prime gaps
tools/exp_markov_k_direction.py:32:def get_primes(n_max):
tools/exp_markov_k_direction.py:151:    primes = get_primes(max(N * 25, 5_000_000))
tools/exp_markov_k_direction.py:152:    p = primes[primes > 10000][:N + 1]
tools/exp_markov_k_direction.py:154:    print(f"\n{len(gaps)} prime gaps, range [{p[0]}, {p[-1]}]")
tools/exp_markov_k_direction.py:157:    print(f"Real primes: theta={real['theta']:.1f}, |d|={real['magnitude']:.4f}, "
tools/exp_markov_k_direction.py:205:        pm = (primes > lo) & (primes < hi)
tools/exp_markov_k_direction.py:206:        ps = primes[pm]
tools/zeta_validation.py:71:def create_emergence_system(N, eigenvalue_pattern='prime'):
tools/zeta_validation.py:81:        'prime':   λ_k ∝ 1/p_k (inverse primes — Paper C §4.3 Step 2)
tools/zeta_validation.py:90:    elif eigenvalue_pattern == 'prime':
tools/zeta_validation.py:91:        primes = _sieve_primes(N)
tools/zeta_validation.py:92:        lambdas = 1.0 / np.array(primes[:N], dtype=float)
tools/zeta_validation.py:109:def _sieve_primes(n):
tools/zeta_validation.py:110:    """Generate at least n primes via sieve of Eratosthenes."""
tools/zeta_validation.py:118:    primes = [i for i, is_prime in enumerate(sieve) if is_prime]
tools/zeta_validation.py:119:    return primes
tools/zeta_validation.py:227:def run_validation(n_zeros=100, N_system=100, eigenvalue_pattern='prime',
tools/zeta_validation.py:508:    Paper C §4.3 Step 2 suggests trying uniform and prime-based spacing.
tools/zeta_validation.py:514:    patterns = ['linear', 'prime', 'log']
tools/zeta_validation.py:545:    # Primary validation with prime-based eigenvalues
tools/zeta_validation.py:547:        n_zeros=100, N_system=100, eigenvalue_pattern='prime'
tools/zeta_validation.py:574:    print(f"\nPrimary result (prime pattern, N=100):")
tools/exp_meta_tautology_test.py:5:STRUCTURAL (distinguishes primes from all synthetics) or TAUTOLOGICAL (fails on at least one).
tools/exp_meta_tautology_test.py:22:from sympy import primerange
tools/exp_meta_tautology_test.py:25:def get_primes(n_max):
tools/exp_meta_tautology_test.py:26:    return np.array(list(primerange(2, n_max + 1)), dtype=np.int64)
tools/exp_meta_tautology_test.py:110:    """Markov(1) model matching lag-1 autocorrelation of real primes.
tools/exp_meta_tautology_test.py:131:def run(n_primes_max=600000, n_trials=20):
tools/exp_meta_tautology_test.py:133:    print(f"Generating primes up to {n_primes_max}...")
tools/exp_meta_tautology_test.py:134:    primes = get_primes(n_primes_max)
tools/exp_meta_tautology_test.py:135:    gaps = np.diff(primes)
tools/exp_meta_tautology_test.py:137:    # Use a window in the middle to avoid small-prime effects
tools/exp_meta_tautology_test.py:145:    # Real primes observables
tools/exp_meta_tautology_test.py:241:    parser.add_argument('--n-primes', type=int, default=600000, help='Prime sieve limit')
tools/exp_meta_tautology_test.py:244:    run(n_primes_max=args.n_primes, n_trials=args.n_trials)
tools/exp_two_channel_boundary.py:5:Question: Do the residue and magnitude channels of prime gaps lose their
tools/exp_two_channel_boundary.py:15:  the prime number line. In each window measure:
tools/exp_two_channel_boundary.py:28:    python tools/exp_two_channel_boundary.py [--n_primes N] [--window W] [--n_surrogates S]
tools/exp_two_channel_boundary.py:37:def sieve_primes(limit):
tools/exp_two_channel_boundary.py:39:    is_prime = np.ones(limit, dtype=bool)
tools/exp_two_channel_boundary.py:40:    is_prime[:2] = False
tools/exp_two_channel_boundary.py:42:        if is_prime[i]:
tools/exp_two_channel_boundary.py:43:            is_prime[i*i::i] = False
tools/exp_two_channel_boundary.py:44:    return np.nonzero(is_prime)[0]
tools/exp_two_channel_boundary.py:47:def get_primes(n_target):
tools/exp_two_channel_boundary.py:48:    """Get at least n_target primes."""
tools/exp_two_channel_boundary.py:51:    primes = sieve_primes(limit)
tools/exp_two_channel_boundary.py:52:    while len(primes) < n_target:
tools/exp_two_channel_boundary.py:54:        primes = sieve_primes(limit)
tools/exp_two_channel_boundary.py:55:    return primes[:n_target]
tools/exp_two_channel_boundary.py:79:    """Fraction of consecutive primes where (p mod 3) repeats.
tools/exp_two_channel_boundary.py:80:    For primes > 3, p mod 6 in {1,5}. Map to mod 3: 1->1, 5->2.
tools/exp_two_channel_boundary.py:89:def analyze_window(primes_window):
tools/exp_two_channel_boundary.py:90:    """Analyze a window of primes, return all four observables."""
tools/exp_two_channel_boundary.py:91:    p = primes_window[primes_window > 3]
tools/exp_two_channel_boundary.py:114:        'mean_prime': np.mean(p).item(),
tools/exp_two_channel_boundary.py:120:def analyze_shuffled(primes_window, rng):
tools/exp_two_channel_boundary.py:121:    """Shuffle gaps, reconstruct primes, analyze."""
tools/exp_two_channel_boundary.py:122:    p = primes_window[primes_window > 3]
tools/exp_two_channel_boundary.py:127:    # Reconstruct primes from shuffled gaps (preserves distribution, destroys order)
tools/exp_two_channel_boundary.py:128:    fake_primes = np.concatenate([[p[0]], p[0] + np.cumsum(shuffled_gaps)])
tools/exp_two_channel_boundary.py:129:    fake_primes = fake_primes.astype(int)
tools/exp_two_channel_boundary.py:130:    # Residues of fake primes (not constrained to {1,5} mod 6!)
tools/exp_two_channel_boundary.py:131:    residues = fake_primes[:-1] % 6
tools/exp_two_channel_boundary.py:132:    residue_right = fake_primes[1:] % 6
tools/exp_two_channel_boundary.py:151:def run(n_primes=500000, window=5000, n_surrogates=20):
tools/exp_two_channel_boundary.py:153:    print(f"Sieving {n_primes} primes...")
tools/exp_two_channel_boundary.py:154:    primes = get_primes(n_primes)
tools/exp_two_channel_boundary.py:155:    print(f"Got {len(primes)} primes up to {primes[-1]}")
tools/exp_two_channel_boundary.py:158:    max_start = len(primes) - window - 10
tools/exp_two_channel_boundary.py:168:        pw = primes[s:s+window]
tools/exp_two_channel_boundary.py:211:                  f"<p>={obs['mean_prime']:.0f}, "
tools/exp_two_channel_boundary.py:229:        print(f"{r['mean_prime']:>12.0f} "
tools/exp_two_channel_boundary.py:239:    mean_primes = [r['mean_prime'] for r in results]
tools/exp_two_channel_boundary.py:249:        'prime_range': [results[0]['mean_prime'], results[-1]['mean_prime']],
tools/exp_two_channel_boundary.py:264:    # Correlation of z-scores with log(mean_prime) — decay rate
tools/exp_two_channel_boundary.py:265:    log_p = np.log(mean_primes)
tools/exp_two_channel_boundary.py:279:    parser.add_argument('--n_primes', type=int, default=500000)
tools/exp_two_channel_boundary.py:284:    results = run(args.n_primes, args.window, args.n_surrogates)
tools/exp_two_channel_boundary.py:289:    print(f"Prime range: {summary['prime_range'][0]:.0f} to {summary['prime_range'][1]:.0f}")
tools/exp_two_channel_boundary.py:290:    print(f"\nZ-scores (early vs late halves of prime range):")
tools/exp_two_channel_boundary.py:306:        'n_primes': args.n_primes,
tools/lab_autopsy.py:231:                "(primes, ACF baselines, PNT-normalized gaps) and include a pointer "
tools/confine_spessore.py:14:from sympy import nextprime
tools/confine_spessore.py:105:    primes = []
tools/confine_spessore.py:107:    while len(primes) < 100000:
tools/confine_spessore.py:108:        primes.append(p)
tools/confine_spessore.py:109:        p = int(nextprime(p))
tools/confine_spessore.py:111:    gaps = [primes[i+1] - primes[i] for i in range(len(primes)-1)]
tools/confine_spessore.py:205:    primes = []
tools/confine_spessore.py:207:    while len(primes) < 200000:
tools/confine_spessore.py:208:        primes.append(p)
tools/confine_spessore.py:209:        p = int(nextprime(p))
tools/confine_spessore.py:211:    gaps = np.array([primes[i+1] - primes[i] for i in range(len(primes)-1)])
tools/exp_markov3_observable_hunt.py:10:  1. Compute prime gaps, build Markov-k surrogates (k=0,1,2,3)
tools/exp_markov3_observable_hunt.py:26:def get_primes(n_max):
tools/exp_markov3_observable_hunt.py:128:def obs_triple_variance(gaps):
tools/exp_markov3_observable_hunt.py:190:    """Sigma^2(L): variance of number of primes in windows of L consecutive gaps."""
tools/exp_markov3_observable_hunt.py:208:    'triple_var': obs_triple_variance,
tools/exp_markov3_observable_hunt.py:219:                        help='Number of primes')
tools/exp_markov3_observable_hunt.py:226:    print(f"Generating {args.N} primes...")
tools/exp_markov3_observable_hunt.py:230:    primes = get_primes(limit)[:args.N]
tools/exp_markov3_observable_hunt.py:231:    gaps = np.diff(primes).astype(float)
tools/exp_markov3_observable_hunt.py:309:        'N_primes': args.N,
tools/evolution_report.md:2:Il passo ha trasformato `SR` da candidato prime-specific a osservabile di pre-bordo. La traiettoria non e' stata "verificare se SR appare nei primi", ma portare i primi contro il loro antagonista naturale `6k +/- 1` e vedere cosa resta quando il supporto comune viene sottratto.
tools/evolution_report.md:4:Il movimento utile e' il passaggio da presenza binaria a intensita row-local: `SR` attraversa il confine, il residuo prime resta nel delta z.
tools/evolution_report.md:9:Latenza minore: `mod6_span_matched` entra accanto a `mod6_index_aligned`, ma i due antagonisti non hanno la stessa funzione. `index_aligned` e' il contro-lato primario; `span_matched` misura deformazione del denominatore.
tools/evolution_report.md:17:`SR` puo' essere riclassificato come segnale del pre-bordo aritmetico, non come firma dei primi. La selezione prime va misurata come residuo di intensita dopo mod6.
tools/evolution_report.md:19:Il prossimo strumento puo' isolare `prime_minus_mod6_z_delta(SR,L1,triple_var)` come osservabile vettoriale paired, lasciando `has_SR` solo come controllo negativo.
tools/evolution_report.md:24:Il ciclo seguente potrebbe proseguire su `SR_residual_intensity_after_mod6`: `mod6_index_aligned` come antagonista primario, delta z row-local come oggetto, `span_matched` come audit del denominatore.
tools/exp_brody_crossover.py:3:Experiment: Brody parameter crossover for primes vs Cramer surrogates.
tools/exp_brody_crossover.py:5:Question: As prime scale grows, does the gap distribution follow a specific
tools/exp_brody_crossover.py:9:- Compute normalized prime gaps s = g_n / <g> in windows at different scales
tools/exp_brody_crossover.py:25:def sieve_primes(limit):
tools/exp_brody_crossover.py:27:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_brody_crossover.py:28:    is_prime[:2] = False
tools/exp_brody_crossover.py:30:        if is_prime[i]:
tools/exp_brody_crossover.py:31:            is_prime[i*i::i] = False
tools/exp_brody_crossover.py:32:    return np.where(is_prime)[0]
tools/exp_brody_crossover.py:60:    """Generate gaps from exponential distribution matching prime density."""
tools/exp_brody_crossover.py:70:    print(f"Sieving primes up to {LIMIT}...")
tools/exp_brody_crossover.py:71:    primes = sieve_primes(LIMIT)
tools/exp_brody_crossover.py:72:    print(f"Found {len(primes)} primes in {time.time()-t0:.1f}s")
tools/exp_brody_crossover.py:74:    gaps = np.diff(primes).astype(float)
tools/exp_brody_crossover.py:77:    log_min = np.log(primes[WINDOW_SIZE])
tools/exp_brody_crossover.py:78:    log_max = np.log(primes[-WINDOW_SIZE])
tools/exp_brody_crossover.py:87:        # Find window of WINDOW_SIZE primes centered near pc
tools/exp_brody_crossover.py:88:        idx = np.searchsorted(primes, pc)
tools/exp_brody_crossover.py:91:        if hi > len(primes):
tools/exp_brody_crossover.py:92:            hi = len(primes)
tools/exp_brody_crossover.py:95:        win_primes = primes[lo:hi]
tools/exp_brody_crossover.py:96:        win_gaps = np.diff(win_primes).astype(float)
tools/exp_brody_crossover.py:100:        # Fit Brody to primes
tools/exp_brody_crossover.py:101:        beta_prime = fit_brody(spacings)
tools/exp_brody_crossover.py:102:        r_prime = gap_ratio(win_gaps)
tools/exp_brody_crossover.py:118:        delta_beta = beta_prime - beta_cramer
tools/exp_brody_crossover.py:123:            "p_center": float(win_primes[WINDOW_SIZE//2]),
tools/exp_brody_crossover.py:124:            "ln_p": float(np.log(win_primes[WINDOW_SIZE//2])),
tools/exp_brody_crossover.py:125:            "beta_prime": float(beta_prime),
tools/exp_brody_crossover.py:130:            "r_prime": float(r_prime),
tools/exp_brody_crossover.py:136:        print(f"{i:>6} {win_primes[WINDOW_SIZE//2]:>12.0f} {np.log(win_primes[WINDOW_SIZE//2]):>8.2f} "
tools/exp_brody_crossover.py:137:              f"{beta_prime:>8.4f} {beta_cramer:>8.4f} {r_prime:>8.4f} {r_cramer:>8.4f} {delta_beta:>+8.4f}")
tools/exp_brody_crossover.py:139:    # Fit scaling law: beta_prime = a + b * ln(p)
tools/exp_brody_crossover.py:141:    betas = np.array([r["beta_prime"] for r in results])
tools/exp_brody_crossover.py:147:    # Linear fit beta_prime vs ln(p)
tools/exp_brody_crossover.py:163:    print(f"beta_prime range: {betas.min():.4f} to {betas.max():.4f}")
tools/exp_brody_crossover.py:166:    print(f"\nScaling: beta_prime = {intercept_beta:.4f} + {slope_beta:.6f} * ln(p)")
tools/exp_brody_crossover.py:175:    # Key test: extrapolate where beta_prime would reach 0 (Poisson)
tools/exp_brody_crossover.py:180:        print(f"\nbeta INCREASES with scale — primes move AWAY from Poisson")
tools/exp_brody_crossover.py:197:            "beta_prime_min": float(betas.min()),
tools/exp_brody_crossover.py:198:            "beta_prime_max": float(betas.max()),
tools/gue_gap_test.py:3:from sympy import primerange
tools/gue_gap_test.py:5:primes = list(primerange(2, 3572))[:500]
tools/gue_gap_test.py:6:gaps = np.diff(primes).astype(float)
tools/gue_gap_test.py:44:    "n_primes": len(primes),
tools/exp_acf_amplitude_scaling.py:3:exp_acf_amplitude_scaling.py — Measure how the 1/k ACF amplitude A scales with prime size.
tools/exp_acf_amplitude_scaling.py:11:    python tools/exp_acf_amplitude_scaling.py [--n_primes N] [--n_windows W] [--max_lag L]
tools/exp_acf_amplitude_scaling.py:14:from sympy import primerange
tools/exp_acf_amplitude_scaling.py:46:    parser.add_argument('--n_primes', type=int, default=6_000_000)
tools/exp_acf_amplitude_scaling.py:53:    print(f"Generating primes up to index ~{args.n_primes}...")
tools/exp_acf_amplitude_scaling.py:56:    upper = int(args.n_primes * (math.log(args.n_primes) + math.log(math.log(args.n_primes)) + 2))
tools/exp_acf_amplitude_scaling.py:57:    primes = np.array(list(primerange(2, upper)))[:args.n_primes]
tools/exp_acf_amplitude_scaling.py:58:    gaps = np.diff(primes).astype(float)
tools/exp_acf_amplitude_scaling.py:59:    print(f"Got {len(primes)} primes, {len(gaps)} gaps. Max prime: {primes[-1]:.3e}")
tools/exp_acf_amplitude_scaling.py:69:    print(f"\n{'Window':>6} {'p_center':>12} {'ln(p)':>8} {'A_prime':>10} {'R2':>8} {'A_shuf':>10} {'z_score':>8}")
tools/exp_acf_amplitude_scaling.py:74:        window_primes = primes[s:s + args.window_size]
tools/exp_acf_amplitude_scaling.py:75:        p_center = np.median(window_primes)
tools/exp_acf_amplitude_scaling.py:79:        acf_prime = compute_acf(window_gaps, args.max_lag)
tools/exp_acf_amplitude_scaling.py:80:        A_prime, R2_prime = fit_1k_law(acf_prime, lags)
tools/exp_acf_amplitude_scaling.py:92:        z = (A_prime - A_shuf_mean) / A_shuf_std
tools/exp_acf_amplitude_scaling.py:99:            'A_prime': A_prime,
tools/exp_acf_amplitude_scaling.py:100:            'R2': R2_prime,
tools/exp_acf_amplitude_scaling.py:104:            'acf1': acf_prime[0],
tools/exp_acf_amplitude_scaling.py:107:        print(f"{i:>6d} {p_center:>12.0f} {ln_p:>8.2f} {A_prime:>10.6f} {R2_prime:>8.4f} {A_shuf_mean:>10.6f} {z:>8.1f}")
tools/exp_acf_amplitude_scaling.py:111:    As = np.array([r['A_prime'] for r in results])
tools/exp_acf_amplitude_scaling.py:149:    print(f"A at smallest primes: {As[0]:.6f}")
tools/exp_acf_amplitude_scaling.py:150:    print(f"A at largest primes: {As[-1]:.6f}")
tools/exp_poisson_convergence.py:5:Three independent observables drift toward Poisson at large prime scale:
tools/exp_poisson_convergence.py:14:    python exp_poisson_convergence.py [--n_primes N] [--n_windows W] [--n_surrogates S]
tools/exp_poisson_convergence.py:20:from sympy import primerange
tools/exp_poisson_convergence.py:25:def get_primes(n_max):
tools/exp_poisson_convergence.py:26:    """Get primes up to n_max."""
tools/exp_poisson_convergence.py:27:    return np.array(list(primerange(2, n_max)), dtype=np.float64)
tools/exp_poisson_convergence.py:71:def cramer_random_primes(primes, n_surrogates=10):
tools/exp_poisson_convergence.py:75:        # Use actual prime positions as anchors for local density
tools/exp_poisson_convergence.py:76:        gaps_random = np.array([np.random.exponential(np.log(p)) for p in primes[1:]])
tools/exp_poisson_convergence.py:81:def measure_window(primes_window):
tools/exp_poisson_convergence.py:82:    """Measure all three observables on a window of primes."""
tools/exp_poisson_convergence.py:83:    gaps = np.diff(primes_window)
tools/exp_poisson_convergence.py:90:    median_p = np.median(primes_window)
tools/exp_poisson_convergence.py:103:def measure_cramer_window(primes_window, n_surrogates=10):
tools/exp_poisson_convergence.py:105:    gaps_real = np.diff(primes_window)
tools/exp_poisson_convergence.py:113:        log_ps = np.log(primes_window[1:])
tools/exp_poisson_convergence.py:131:def run_experiment(n_primes_target=6_000_000, n_windows=25, n_surrogates=10, window_size=50_000):
tools/exp_poisson_convergence.py:137:    upper = int(n_primes_target * (math.log(n_primes_target) + math.log(math.log(n_primes_target)) + 2))
tools/exp_poisson_convergence.py:139:    print(f"Sieving primes up to {upper:,} ...", flush=True)
tools/exp_poisson_convergence.py:140:    all_primes = get_primes(upper)
tools/exp_poisson_convergence.py:141:    print(f"Got {len(all_primes):,} primes. Using first {min(len(all_primes), n_primes_target):,}.", flush=True)
tools/exp_poisson_convergence.py:142:    all_primes = all_primes[:n_primes_target]
tools/exp_poisson_convergence.py:145:    min_idx = 1000  # skip very small primes
tools/exp_poisson_convergence.py:146:    max_idx = len(all_primes) - window_size
tools/exp_poisson_convergence.py:148:        max_idx = len(all_primes) - 1
tools/exp_poisson_convergence.py:155:    print(f"\nMeasuring {len(window_starts)} windows, {window_size} primes each, {n_surrogates} Cramer surrogates...\n")
tools/exp_poisson_convergence.py:160:        end = min(start + window_size, len(all_primes))
tools/exp_poisson_convergence.py:161:        window = all_primes[start:end]
tools/exp_poisson_convergence.py:306:    parser.add_argument('--n_primes', type=int, default=5_800_000, help='Number of primes')
tools/exp_poisson_convergence.py:312:    results = run_experiment(args.n_primes, args.n_windows, args.n_surrogates, args.window_size)
tools/exp_semireal_order_denominator_gate.py:38:def sieve_primes_for_count(n_primes: int) -> np.ndarray:
tools/exp_semireal_order_denominator_gate.py:39:    if n_primes < 6:
tools/exp_semireal_order_denominator_gate.py:42:        limit = int(n_primes * (math.log(n_primes) + math.log(math.log(n_primes))) * 1.25)
tools/exp_semireal_order_denominator_gate.py:49:        primes = np.flatnonzero(sieve)
tools/exp_semireal_order_denominator_gate.py:50:        if len(primes) >= n_primes:
tools/exp_semireal_order_denominator_gate.py:51:            return primes[:n_primes].astype(float)
tools/exp_semireal_order_denominator_gate.py:55:def prime_gap_sequence(n_gaps: int) -> np.ndarray:
tools/exp_semireal_order_denominator_gate.py:56:    primes = sieve_primes_for_count(n_gaps + 1)
tools/exp_semireal_order_denominator_gate.py:57:    return normalize(np.diff(primes))
tools/exp_semireal_order_denominator_gate.py:267:        "prime_gaps_first": prime_gap_sequence(args.n_gaps),
tools/exp_mod3_scaling.py:3:exp_mod3_scaling.py — Scaling of mod-3 ordering memory along the prime sequence.
tools/exp_mod3_scaling.py:24:from sympy import primerange
tools/exp_mod3_scaling.py:28:def get_primes_and_gaps(n_max):
tools/exp_mod3_scaling.py:29:    primes = np.array(list(primerange(2, n_max + 1)))
tools/exp_mod3_scaling.py:30:    gaps = np.diff(primes)
tools/exp_mod3_scaling.py:31:    return primes, gaps
tools/exp_mod3_scaling.py:125:    primes, gaps = get_primes_and_gaps(n_max)
tools/exp_mod3_scaling.py:127:    print(f"Primes up to {n_max}: {len(primes)} primes, {n_gaps} gaps")
tools/exp_mod3_scaling.py:142:        p_center = int(primes[start + window // 2])
tools/exp_mod3_scaling.py:221:        "n_primes": int(len(primes)),
tools/exp_two_channel_universality.py:3:exp_two_channel_universality.py — Is the two-channel decomposition unique to primes?
tools/exp_two_channel_universality.py:8:   with residue structure, it constrains C1 (primes unique under M)."
tools/exp_two_channel_universality.py:10:Question: The prime gap 1/k anti-correlation decomposes into a residue channel
tools/exp_two_channel_universality.py:15:  (b) number-theoretic — only primes show it?
tools/exp_two_channel_universality.py:20:  PRIMES:   Real prime gaps (baseline)
tools/exp_two_channel_universality.py:21:  MARKOV:   Z/6Z Markov chain (same transition probs as primes),
tools/exp_two_channel_universality.py:27:Key discriminator: the same-class magnitude asymmetry (2.1x in primes).
tools/exp_two_channel_universality.py:33:    python tools/exp_two_channel_universality.py [--n_primes N] [--n_trials T]
tools/exp_two_channel_universality.py:42:def sieve_primes(limit):
tools/exp_two_channel_universality.py:43:    is_prime = np.ones(limit, dtype=bool)
tools/exp_two_channel_universality.py:44:    is_prime[:2] = False
tools/exp_two_channel_universality.py:46:        if is_prime[i]:
tools/exp_two_channel_universality.py:47:            is_prime[i*i::i] = False
tools/exp_two_channel_universality.py:48:    return np.nonzero(is_prime)[0]
tools/exp_two_channel_universality.py:51:def get_primes(n_target):
tools/exp_two_channel_universality.py:54:    primes = sieve_primes(limit)
tools/exp_two_channel_universality.py:55:    while len(primes) < n_target:
tools/exp_two_channel_universality.py:57:        primes = sieve_primes(limit)
tools/exp_two_channel_universality.py:58:    return primes[:n_target]
tools/exp_two_channel_universality.py:164:    Z/6Z Markov chain with same transition probs as primes.
tools/exp_two_channel_universality.py:224:    parser.add_argument('--n_primes', type=int, default=2_000_000)
tools/exp_two_channel_universality.py:230:    print(f"Generating {args.n_primes:,} primes...")
tools/exp_two_channel_universality.py:231:    primes = get_primes(args.n_primes)
tools/exp_two_channel_universality.py:232:    p = primes[primes > 3]
tools/exp_two_channel_universality.py:240:    prime_result = measure_channels(gaps, cl, cr, "PRIMES")
tools/exp_two_channel_universality.py:241:    print(f"  acf1: full={prime_result['acf1_full']:.6f}  res={prime_result['acf1_res']:.6f}  mag={prime_result['acf1_mag']:.6f}")
tools/exp_two_channel_universality.py:242:    print(f"  alpha: res={prime_result['alpha_res']:.3f}  mag={prime_result['alpha_mag']:.3f}")
tools/exp_two_channel_universality.py:243:    print(f"  Same-class mag acf1: {prime_result['same_class_acf1']:.6f}")
tools/exp_two_channel_universality.py:244:    print(f"  Cross-class mag acf1: {prime_result['cross_class_acf1']:.6f}")
tools/exp_two_channel_universality.py:245:    print(f"  Asymmetry ratio: {prime_result['asymmetry_ratio']:.2f}x")
tools/exp_two_channel_universality.py:254:    all_results = {'PRIMES': prime_result}
tools/exp_two_channel_universality.py:284:        # Z-score vs primes for key metrics
tools/exp_two_channel_universality.py:286:            if f'{metric}_std' in avg and avg[f'{metric}_std'] > 0 and prime_result[metric] is not None:
tools/exp_two_channel_universality.py:287:                z = (prime_result[metric] - avg[metric]) / avg[f'{metric}_std']
tools/exp_two_channel_universality.py:288:                print(f"  z({metric} vs primes) = {z:.1f}")
tools/exp_two_channel_universality.py:308:    p = prime_result
tools/exp_two_layer_universality.py:8:    Layer 2 (triples, Mk2): SR2, L2, cond_entropy, triple_var, num_var_10
tools/exp_two_layer_universality.py:10:  or specific to primes?
tools/exp_two_layer_universality.py:13:  1. Generate 7 gap/spacing sequences: primes, GUE, Poisson, AR(1), logistic,
tools/exp_two_layer_universality.py:35:def get_primes(n_max):
tools/exp_two_layer_universality.py:140:def triple_var(gaps):
tools/exp_two_layer_universality.py:176:    'triple_var': triple_var,
tools/exp_two_layer_universality.py:183:def gen_prime_gaps(N):
tools/exp_two_layer_universality.py:184:    primes = get_primes(int(N * 15))
tools/exp_two_layer_universality.py:185:    primes = primes[:N+1]
tools/exp_two_layer_universality.py:186:    return np.diff(primes).astype(float)
tools/exp_two_layer_universality.py:229:    """Periodic 2,4,2,4,... mimicking Z/6Z prime gap structure."""
tools/exp_two_layer_universality.py:248:    'primes': gen_prime_gaps,
tools/exp_two_layer_universality.py:284:        elif seq_name == 'primes':
tools/exp_two_layer_universality.py:382:    # Prime-specific layers: where primes differ from majority
tools/exp_two_layer_universality.py:384:    if 'primes' in results:
tools/exp_two_layer_universality.py:385:        prime_layers = results['primes']['layers']
tools/exp_two_layer_universality.py:387:            prime_l = prime_layers.get(obs, -1)
tools/exp_two_layer_universality.py:388:            others = [results[s]['layers'].get(obs, -1) for s in seq_names if s != 'primes']
tools/exp_two_layer_universality.py:390:            if prime_l != other_mode:
tools/exp_two_layer_universality.py:391:                print(f"  {obs}: primes=L{prime_l}, majority=L{other_mode}")
tools/exp_brody_flow.py:3:exp_brody_flow.py — Brody parameter flow along the prime sequence.
tools/exp_brody_flow.py:6:evolves as a function of position in the prime sequence. Sliding windows
tools/exp_brody_flow.py:7:of prime gaps, each fitted to the Brody distribution via MLE.
tools/exp_brody_flow.py:26:def sieve_primes(n_max):
tools/exp_brody_flow.py:27:    """Sieve of Eratosthenes, returns array of primes up to n_max."""
tools/exp_brody_flow.py:28:    is_prime = np.ones(n_max + 1, dtype=bool)
tools/exp_brody_flow.py:29:    is_prime[:2] = False
tools/exp_brody_flow.py:31:        if is_prime[i]:
tools/exp_brody_flow.py:32:            is_prime[i*i::i] = False
tools/exp_brody_flow.py:33:    return np.nonzero(is_prime)[0]
tools/exp_brody_flow.py:93:    print(f"Sieving primes up to {n_max}...")
tools/exp_brody_flow.py:94:    primes = sieve_primes(n_max)
tools/exp_brody_flow.py:95:    gaps = np.diff(primes)
tools/exp_brody_flow.py:97:    print(f"Got {len(primes)} primes, {n_gaps} gaps")
tools/exp_brody_flow.py:106:        "n_max": n_max, "n_primes": len(primes), "n_gaps": n_gaps,
tools/exp_brody_flow.py:116:        p_center = primes[s0 + window // 2]
tools/exp_brody_flow.py:207:    parser = argparse.ArgumentParser(description="Brody parameter flow along prime sequence")
tools/dnd_curva.py:115:    primes = np.where(sieve)[0]
tools/dnd_curva.py:116:    gaps = np.diff(primes).astype(float)
tools/exp_dipolar_vector_scaling.py:5:Two observables are order-sensitive in prime gaps (survive shuffle test):
tools/exp_dipolar_vector_scaling.py:9:For each scale (window of N primes starting at offset), compute:
tools/exp_dipolar_vector_scaling.py:21:from sympy import primerange
tools/exp_dipolar_vector_scaling.py:24:def get_primes_in_range(lo, hi):
tools/exp_dipolar_vector_scaling.py:25:    """Get primes in [lo, hi)."""
tools/exp_dipolar_vector_scaling.py:26:    return np.array(list(primerange(lo, hi)), dtype=np.int64)
tools/exp_dipolar_vector_scaling.py:72:def analyze_scale(primes, label=""):
tools/exp_dipolar_vector_scaling.py:74:    gaps = np.diff(primes)
tools/exp_dipolar_vector_scaling.py:88:        'n_primes': len(primes),
tools/exp_dipolar_vector_scaling.py:105:    # Scales: windows of primes at different positions
tools/exp_dipolar_vector_scaling.py:116:    # Also test at HIGH offset (primes near 1e8) to check if the pattern holds far from origin
tools/exp_dipolar_vector_scaling.py:133:    print(f"{'Scale':<10} {'N_primes':<10} {'z_SR':<8} {'z_L1':<8} {'theta':<8} {'|V|':<8} {'SR_real':<10} {'L1_real':<10}")
tools/exp_dipolar_vector_scaling.py:137:        primes = get_primes_in_range(lo, hi)
tools/exp_dipolar_vector_scaling.py:138:        r = analyze_scale(primes, label)
tools/exp_dipolar_vector_scaling.py:140:        print(f"{label:<10} {r['n_primes']:<10} {r['z_sr']:<8} {r['z_l1']:<8} {r['theta_deg']:<8} {r['magnitude']:<8} {r['sr_real']:<10} {r['l1_real']:<10}")
tools/exp_dipolar_vector_scaling.py:143:    print("\n--- Part 2: Fixed-size windows (50K primes) at different offsets ---")
tools/exp_dipolar_vector_scaling.py:146:        ('off_0', 2, 50_000),        # first 50K primes
tools/exp_dipolar_vector_scaling.py:157:        # Get enough primes, then slice by index
tools/exp_dipolar_vector_scaling.py:158:        # For efficiency, get primes up to a reasonable bound
tools/exp_dipolar_vector_scaling.py:162:        all_p = get_primes_in_range(2, upper_bound)
tools/exp_dipolar_vector_scaling.py:165:            all_p = get_primes_in_range(2, upper_bound)
tools/exp_dipolar_vector_scaling.py:166:        primes = all_p[lo_idx:hi_idx] if lo_idx > 0 else all_p[:hi_idx]
tools/exp_dipolar_vector_scaling.py:168:        r = analyze_scale(primes, label)
tools/exp_dipolar_vector_scaling.py:170:        start_prime = primes[0] if len(primes) > 0 else 0
tools/exp_dipolar_vector_scaling.py:171:        print(f"{label:<10} {start_prime:<12} {r['z_sr']:<8} {r['z_l1']:<8} {r['theta_deg']:<8} {r['magnitude']:<8}")
tools/exp_dipolar_vector_scaling.py:177:    print("Generating Cramer pseudo-primes at 3 scales...")
tools/exp_dipolar_vector_scaling.py:181:        # Cramer: each integer n is "prime" with probability 1/ln(n)
tools/exp_dipolar_vector_scaling.py:182:        cramer_primes = [2]
tools/exp_dipolar_vector_scaling.py:184:        while len(cramer_primes) < n_target:
tools/exp_dipolar_vector_scaling.py:186:                cramer_primes.append(n)
tools/exp_dipolar_vector_scaling.py:188:        cramer_primes = np.array(cramer_primes)
tools/exp_dipolar_vector_scaling.py:189:        r = analyze_scale(cramer_primes, label)
tools/exp_markov_layer_recovery_audit.py:15:  - prime_gaps: unknown real target, reported for comparison only
tools/exp_markov_layer_recovery_audit.py:16:  - empirical_Mk0: shuffled prime gaps; known order 0
tools/exp_markov_layer_recovery_audit.py:17:  - empirical_Mk1: prime-trained Mk1 surrogate; known order 1
tools/exp_markov_layer_recovery_audit.py:18:  - empirical_Mk2: prime-trained Mk2 surrogate; known order 2
tools/exp_markov_layer_recovery_audit.py:34:    gen_prime_gaps,
tools/exp_markov_layer_recovery_audit.py:89:def build_controls(prime_gaps, rng):
tools/exp_markov_layer_recovery_audit.py:91:        "prime_gaps": {
tools/exp_markov_layer_recovery_audit.py:93:            "gaps": prime_gaps,
tools/exp_markov_layer_recovery_audit.py:97:            "gaps": rng.permutation(prime_gaps),
tools/exp_markov_layer_recovery_audit.py:101:            "gaps": generate_markov_surrogate(prime_gaps, 1, rng=rng),
tools/exp_markov_layer_recovery_audit.py:105:            "gaps": generate_markov_surrogate(prime_gaps, 2, rng=rng),
tools/exp_markov_layer_recovery_audit.py:109:            "gaps": rng.exponential(1.0, len(prime_gaps)),
tools/exp_markov_layer_recovery_audit.py:132:    prime_gaps = gen_prime_gaps(N).astype(float)
tools/exp_markov_layer_recovery_audit.py:133:    controls = build_controls(prime_gaps, rng)
tools/exp_duality_scale_contrast.py:5:for prime gaps, GUE eigenvalue spacings, and Poisson gaps.
tools/exp_duality_scale_contrast.py:16:    python tools/exp_duality_scale_contrast.py [--out FILE] [--n-primes N]
tools/exp_duality_scale_contrast.py:32:def sieve_primes(limit: int) -> np.ndarray:
tools/exp_duality_scale_contrast.py:34:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_duality_scale_contrast.py:35:    is_prime[:2] = False
tools/exp_duality_scale_contrast.py:37:        if is_prime[i]:
tools/exp_duality_scale_contrast.py:38:            is_prime[i*i::i] = False
tools/exp_duality_scale_contrast.py:39:    return np.nonzero(is_prime)[0]
tools/exp_duality_scale_contrast.py:130:def run_experiment(n_primes: int = 200000, n_shuffle: int = 50,
tools/exp_duality_scale_contrast.py:136:    print(f"Generating primes up to ~{n_primes} gaps...")
tools/exp_duality_scale_contrast.py:137:    limit = int(n_primes * np.log(n_primes) * 1.3) + 1000
tools/exp_duality_scale_contrast.py:138:    primes = sieve_primes(limit)
tools/exp_duality_scale_contrast.py:139:    prime_gaps = np.diff(primes).astype(float)
tools/exp_duality_scale_contrast.py:142:    local_mean = np.convolve(prime_gaps, np.ones(kernel) / kernel, mode='same')
tools/exp_duality_scale_contrast.py:144:    prime_gaps_unf = prime_gaps / local_mean
tools/exp_duality_scale_contrast.py:146:    n_gaps = min(len(prime_gaps_unf), n_primes)
tools/exp_duality_scale_contrast.py:147:    prime_gaps_unf = prime_gaps_unf[:n_gaps]
tools/exp_duality_scale_contrast.py:149:    print(f"Got {n_gaps} prime gaps. Generating GUE and Poisson controls...")
tools/exp_duality_scale_contrast.py:159:    print(f"Computing windowed contrast for prime gaps...")
tools/exp_duality_scale_contrast.py:160:    prime_contrast = windowed_contrast(prime_gaps_unf, window_sizes, n_shuffle, rng)
tools/exp_duality_scale_contrast.py:172:    prime_global_z, prime_global_real = compute_z_scores(
tools/exp_duality_scale_contrast.py:173:        prime_gaps_unf[:5000], n_shuffle, rng
tools/exp_duality_scale_contrast.py:187:            "n_prime_gaps": int(n_gaps),
tools/exp_duality_scale_contrast.py:195:            "primes": prime_global_z,
tools/exp_duality_scale_contrast.py:200:            "primes": prime_global_real,
tools/exp_duality_scale_contrast.py:205:            "primes": prime_contrast,
tools/exp_duality_scale_contrast.py:223:    for domain in ["primes", "gue", "poisson"]:
tools/exp_duality_scale_contrast.py:233:    prime_data = {d["window_size"]: d for d in result["windowed_contrast"]["primes"]}
tools/exp_duality_scale_contrast.py:238:        list(prime_data.keys()) + list(gue_data.keys()) + list(poisson_data.keys())
tools/exp_duality_scale_contrast.py:241:        pz = f"{prime_data[ws]['z_SR_mean']:+.2f}" if ws in prime_data else "—"
tools/exp_duality_scale_contrast.py:246:    # Multi-observable table for primes
tools/exp_duality_scale_contrast.py:252:    for ws in sorted(prime_data.keys()):
tools/exp_duality_scale_contrast.py:253:        d = prime_data[ws]
tools/exp_duality_scale_contrast.py:259:    for domain, data in [("primes", prime_data), ("poisson", poisson_data)]:
tools/exp_duality_scale_contrast.py:278:    parser.add_argument("--n-primes", type=int, default=200000)
tools/exp_duality_scale_contrast.py:282:    result = run_experiment(n_primes=args.n_primes, seed=args.seed)
tools/riemann_R.py:17:from sympy import nextprime
tools/riemann_R.py:137:    primes = []
tools/riemann_R.py:139:    while len(primes) < 50000:
tools/riemann_R.py:140:        primes.append(p)
tools/riemann_R.py:141:        p = int(nextprime(p))
tools/riemann_R.py:142:    print(f"  Generati {len(primes)} primi. Ultimo: {primes[-1]}")
tools/riemann_R.py:145:    gaps = [primes[i+1] - primes[i] for i in range(len(primes)-1)]
tools/exp_crossover_universality.py:16:  - 40 log-spaced windows on primes up to 10^7 (664K primes)
tools/exp_crossover_universality.py:34:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_crossover_universality.py:35:    is_prime[:2] = False
tools/exp_crossover_universality.py:37:        if is_prime[i]:
tools/exp_crossover_universality.py:38:            is_prime[i*i::i] = False
tools/exp_crossover_universality.py:39:    return np.nonzero(is_prime)[0].astype(np.float64)
tools/exp_crossover_universality.py:41:print("Generating primes up to 10^7...")
tools/exp_crossover_universality.py:42:primes = sieve(10_000_000)
tools/exp_crossover_universality.py:43:N_total = len(primes)
tools/exp_crossover_universality.py:44:print(f"  {N_total} primes")
tools/exp_crossover_universality.py:54:print(f"  {N_WINDOWS} windows of {W_SIZE} primes each")
tools/exp_crossover_universality.py:116:# === Compute prime windows ===
tools/exp_crossover_universality.py:117:print("\nComputing prime windows...")
tools/exp_crossover_universality.py:118:prime_obs = []
tools/exp_crossover_universality.py:120:    obs = window_observables(primes[s:s+W_SIZE])
tools/exp_crossover_universality.py:121:    prime_obs.append(obs)
tools/exp_crossover_universality.py:126:ln_p = np.array([o['ln_p'] for o in prime_obs])
tools/exp_crossover_universality.py:127:beta_arr = np.array([o['beta'] for o in prime_obs])
tools/exp_crossover_universality.py:128:dR_acf1_arr = np.array([o['dR_acf1'] for o in prime_obs])
tools/exp_crossover_universality.py:129:gap_acf1_arr = np.array([o['gap_acf1'] for o in prime_obs])
tools/exp_crossover_universality.py:130:r_arr = np.array([o['r_mean'] for o in prime_obs])
tools/exp_crossover_universality.py:221:    c_gaps = rng.exponential(np.log(primes[:N_total-1] + 1), size=N_total-1)
tools/exp_crossover_universality.py:223:    c_p = np.cumsum(np.concatenate([[primes[0]], c_gaps]))[:N_total]
tools/exp_crossover_universality.py:262:    print(f"  {k:10s} slope: prime={fits[k]['slope']:.6f}, cramer={np.mean(sl_arr):.6f}, z={z_val:.1f}")
tools/exp_crossover_universality.py:273:    print(f"  {key:25s}: prime={corr_partial[key]:.4f}, cramer={np.mean(na):.4f}, z={z_val:.1f}")
tools/exp_crossover_universality.py:301:    "N_primes": int(N_total),
tools/exp_crossover_universality.py:312:    "windows": prime_obs,
tools/validate_tension_mapping.py:50:        'prime', 'primi', 'gap', 'spectral', 'eigenvalue', 'autovalor',
tools/exp_prime_vs_mod6_sr_boundary.py:3:Strict prime-vs-mod6 audit for the SR boundary residue.
tools/exp_prime_vs_mod6_sr_boundary.py:5:The previous cycle falsified `prime_SR_persistent_boundary` in the broad
tools/exp_prime_vs_mod6_sr_boundary.py:6:control perimeter and exposed `mod6_candidates` as the nearest antagonist. This
tools/exp_prime_vs_mod6_sr_boundary.py:7:script keeps the denominator row-local: every prime window is paired with two
tools/exp_prime_vs_mod6_sr_boundary.py:22:from exp_prime_persistent_blank_gate import offset_windows, obs_jaccard
tools/exp_prime_vs_mod6_sr_boundary.py:28:    prime_gap_sequence,
tools/exp_prime_vs_mod6_sr_boundary.py:29:    sieve_primes_for_count,
tools/exp_prime_vs_mod6_sr_boundary.py:35:FOCUS_OBS = ["SR", "L1", "triple_var"]
tools/exp_prime_vs_mod6_sr_boundary.py:39:def mod6_candidates_between(start: float, end: float) -> np.ndarray:
tools/exp_prime_vs_mod6_sr_boundary.py:66:def mod6_index_gap_sequence(n_gaps: int, offset: int) -> np.ndarray:
tools/exp_prime_vs_mod6_sr_boundary.py:78:def mod6_span_gap_sequence(prime_values: np.ndarray, n_gaps: int) -> np.ndarray:
tools/exp_prime_vs_mod6_sr_boundary.py:79:    candidates = mod6_candidates_between(float(prime_values[0]), float(prime_values[-1]))
tools/exp_prime_vs_mod6_sr_boundary.py:84:def direct_prime_values(needed: int) -> np.ndarray:
tools/exp_prime_vs_mod6_sr_boundary.py:85:    return sieve_primes_for_count(needed).astype(float)
tools/exp_prime_vs_mod6_sr_boundary.py:90:    direct_values = direct_prime_values(needed)
tools/exp_prime_vs_mod6_sr_boundary.py:103:            specs[f"prime/{row_id}"] = normalize(gaps[offset:end])
tools/exp_prime_vs_mod6_sr_boundary.py:104:            specs[f"mod6_index_aligned/{row_id}"] = mod6_index_gap_sequence(args.window_gaps, offset)
tools/exp_prime_vs_mod6_sr_boundary.py:105:            prime_window_values = direct_values[offset : offset + args.window_gaps + 1]
tools/exp_prime_vs_mod6_sr_boundary.py:106:            specs[f"mod6_span_matched/{row_id}"] = mod6_span_gap_sequence(
tools/exp_prime_vs_mod6_sr_boundary.py:107:                prime_window_values, args.window_gaps
tools/exp_prime_vs_mod6_sr_boundary.py:160:def paired_rows(cases: list[dict[str, Any]], mod6_class: str) -> list[dict[str, Any]]:
tools/exp_prime_vs_mod6_sr_boundary.py:163:    for (_, row_id), prime in sorted(by_key.items()):
tools/exp_prime_vs_mod6_sr_boundary.py:164:        if prime["class"] != "prime":
tools/exp_prime_vs_mod6_sr_boundary.py:166:        mod6 = by_key.get((mod6_class, row_id))
tools/exp_prime_vs_mod6_sr_boundary.py:167:        if mod6 is None:
tools/exp_prime_vs_mod6_sr_boundary.py:172:                "prime_case": prime["case"],
tools/exp_prime_vs_mod6_sr_boundary.py:173:                "mod6_case": mod6["case"],
tools/exp_prime_vs_mod6_sr_boundary.py:174:                "prime_obs": prime["one_sided_observables"],
tools/exp_prime_vs_mod6_sr_boundary.py:175:                "mod6_obs": mod6["one_sided_observables"],
tools/exp_prime_vs_mod6_sr_boundary.py:176:                "signature_jaccard": obs_jaccard(prime["one_sided_observables"], mod6["one_sided_observables"]),
tools/exp_prime_vs_mod6_sr_boundary.py:177:                "sr_delta": int(prime["has_sr"]) - int(mod6["has_sr"]),
tools/exp_prime_vs_mod6_sr_boundary.py:178:                "focus_signature_delta": int(prime["has_focus_signature"]) - int(mod6["has_focus_signature"]),
tools/exp_prime_vs_mod6_sr_boundary.py:179:                "endpoint_delta": float(prime["endpoint_distance"] - mod6["endpoint_distance"]),
tools/exp_prime_vs_mod6_sr_boundary.py:180:                "stable_count_delta": float(prime["stable_count_coherent"] - mod6["stable_count_coherent"]),
tools/exp_prime_vs_mod6_sr_boundary.py:182:                    obs: float(prime["z_mean_coherent"][obs] - mod6["z_mean_coherent"][obs])
tools/exp_prime_vs_mod6_sr_boundary.py:221:    prime_common = set(class_summaries["prime"]["common_one_sided_observables"])
tools/exp_prime_vs_mod6_sr_boundary.py:222:    index_common = set(class_summaries["mod6_index_aligned"]["common_one_sided_observables"])
tools/exp_prime_vs_mod6_sr_boundary.py:223:    span_common = set(class_summaries["mod6_span_matched"]["common_one_sided_observables"])
tools/exp_prime_vs_mod6_sr_boundary.py:224:    if "SR" in prime_common and "SR" not in index_common and "SR" not in span_common:
tools/exp_prime_vs_mod6_sr_boundary.py:228:    if class_summaries["prime"]["sr_rate"] > class_summaries["mod6_index_aligned"]["sr_rate"]:
tools/exp_prime_vs_mod6_sr_boundary.py:242:        for label in ("prime", "mod6_index_aligned", "mod6_span_matched")
tools/exp_prime_vs_mod6_sr_boundary.py:245:    for mod6_class in ("mod6_index_aligned", "mod6_span_matched"):
tools/exp_prime_vs_mod6_sr_boundary.py:246:        rows = paired_rows(cases, mod6_class)
tools/exp_prime_vs_mod6_sr_boundary.py:247:        pair_summaries[mod6_class] = {
tools/exp_prime_vs_mod6_sr_boundary.py:257:        "experiment": "prime_vs_mod6_sr_boundary",
tools/exp_prime_vs_mod6_sr_boundary.py:258:        "question": "Does SR belong to prime selection or to the row-local 6k +/- 1 pre-boundary?",
tools/exp_prime_vs_mod6_sr_boundary.py:275:            "claim": "SR is prime-specific only if it remains stronger/common in prime windows after subtracting row-local mod6 candidate windows at the same provider and offset denominator",
tools/exp_prime_vs_mod6_sr_boundary.py:276:            "observable": "SR membership and focus signature [SR,L1,triple_var] in coherent_one_sided_observables, plus paired z-deltas against mod6",
tools/exp_prime_vs_mod6_sr_boundary.py:277:            "operator": "canonical order/null gate with row-local prime-vs-mod6 pairing and label-swap audit",
tools/exp_prime_vs_mod6_sr_boundary.py:278:            "generator": "prime gaps from dnd_autoricerca row_spacings and direct sieve; mod6_index_aligned from 6k +/- 1 by same gap offset; mod6_span_matched from 6k +/- 1 candidates inside the matching direct-sieve prime span downsampled to the same denominator",
tools/exp_prime_vs_mod6_sr_boundary.py:279:            "denominator": "8 row-local prime windows paired with 8 mod6_index_aligned and 8 mod6_span_matched windows",
tools/exp_prime_vs_mod6_sr_boundary.py:280:            "non_possible": "prime-specific SR if SR is common or equally present in either mod6 paired antagonist, or if paired label-swap null absorbs the prime-mod6 deltas",
tools/exp_prime_vs_mod6_sr_boundary.py:281:            "not_tested": "global beta atlas, V_c, gap_ratio, analytic source of mod6 transfer, primality tests inside mod6 candidates",
tools/exp_prime_vs_mod6_sr_boundary.py:310:                            {"event": "paired_row", "mod6_class": label, **row},
tools/exp_prime_vs_mod6_sr_boundary.py:319:                            "mod6_class": label,
tools/exp_prime_vs_mod6_sr_boundary.py:376:    parser.add_argument("--label-swap-trials", type=int, default=4096)
tools/exp_prime_vs_mod6_sr_boundary.py:378:    parser.add_argument("--out", default="tools/data/prime_vs_mod6_sr_boundary_20260513_0330.json")
tools/spectral_gap_analysis.py:61:    elif pattern == 'prime':
tools/spectral_gap_analysis.py:62:        primes = _sieve_primes(N)
tools/spectral_gap_analysis.py:63:        lambdas = 1.0 / np.array(primes[:N], dtype=float)
tools/spectral_gap_analysis.py:77:def _sieve_primes(n):
tools/spectral_gap_analysis.py:78:    """Generate at least n primes."""
tools/spectral_gap_analysis.py:86:    return [i for i, is_prime in enumerate(sieve) if is_prime]
tools/spectral_gap_analysis.py:239:    colors = {'linear': 'steelblue', 'prime': 'coral', 'log': 'forestgreen'}
tools/spectral_gap_analysis.py:324:    patterns = ['linear', 'prime', 'log']
tools/exp_markov_psd_prediction.py:10:- Extract empirical Z/6Z transition matrix from primes
tools/exp_markov_psd_prediction.py:13:- Compare with measured prime residue PSD
tools/exp_markov_psd_prediction.py:25:def get_primes_sieve(n_max):
tools/exp_markov_psd_prediction.py:31:    primes = np.empty(sieve.sum() + 1, dtype=np.int64)
tools/exp_markov_psd_prediction.py:32:    primes[0] = 2
tools/exp_markov_psd_prediction.py:33:    primes[1:] = 2 * np.nonzero(sieve)[0] + 1
tools/exp_markov_psd_prediction.py:34:    return primes
tools/exp_markov_psd_prediction.py:36:def residue_sequence(primes):
tools/exp_markov_psd_prediction.py:37:    """Map primes > 3 to residue class: 1 mod 6 → 0, 5 mod 6 → 1."""
tools/exp_markov_psd_prediction.py:38:    p = primes[primes > 3]
tools/exp_markov_psd_prediction.py:120:    parser.add_argument('--N', type=int, default=2_000_000, help='Number of primes')
tools/exp_markov_psd_prediction.py:127:    # --- Step 1: Get primes and residue sequence ---
tools/exp_markov_psd_prediction.py:128:    print(f"Sieving primes (target {args.N})...")
tools/exp_markov_psd_prediction.py:131:    primes = get_primes_sieve(est)
tools/exp_markov_psd_prediction.py:132:    if len(primes) < args.N:
tools/exp_markov_psd_prediction.py:133:        primes = get_primes_sieve(int(est * 1.3))
tools/exp_markov_psd_prediction.py:134:    primes = primes[:args.N]
tools/exp_markov_psd_prediction.py:135:    print(f"  Got {len(primes)} primes up to {primes[-1]}")
tools/exp_markov_psd_prediction.py:137:    res_seq, p_used = residue_sequence(primes)
tools/exp_markov_psd_prediction.py:154:    # --- Step 3: Compute prime residue PSD ---
tools/exp_markov_psd_prediction.py:155:    print(f"\nComputing prime residue PSD (nperseg={args.nperseg})...")
tools/exp_markov_psd_prediction.py:156:    f_prime, S_prime = compute_psd(res_seq, nperseg=args.nperseg)
tools/exp_markov_psd_prediction.py:157:    slope_prime, r2_prime, se_prime = spectral_slope(f_prime, S_prime)
tools/exp_markov_psd_prediction.py:158:    print(f"  Prime residue slope: {slope_prime:+.4f} (R²={r2_prime:.4f}, SE={se_prime:.4f})")
tools/exp_markov_psd_prediction.py:162:    f_pos = f_prime[f_prime > 0]
tools/exp_markov_psd_prediction.py:198:    z_markov = (slope_prime - mean_markov) / std_markov if std_markov > 0 else np.inf
tools/exp_markov_psd_prediction.py:199:    z_bern = (slope_prime - mean_bern) / std_bern if std_bern > 0 else np.inf
tools/exp_markov_psd_prediction.py:200:    z_analytical = (slope_prime - slope_analytical) / se_prime if se_prime > 0 else np.inf
tools/exp_markov_psd_prediction.py:205:    print(f"  Prime residue PSD slope:      {slope_prime:+.4f} (R²={r2_prime:.4f})")
tools/exp_markov_psd_prediction.py:210:    print(f"  z(prime vs Markov synthetic):  {z_markov:+.2f}")
tools/exp_markov_psd_prediction.py:211:    print(f"  z(prime vs analytical):        {z_analytical:+.2f}")
tools/exp_markov_psd_prediction.py:212:    print(f"  z(prime vs Bernoulli):         {z_bern:+.2f}")
tools/exp_markov_psd_prediction.py:215:    # Ratio of slopes: how much of the prime slope does Markov explain?
tools/exp_markov_psd_prediction.py:216:    if slope_prime != 0:
tools/exp_markov_psd_prediction.py:217:        ratio_markov = mean_markov / slope_prime
tools/exp_markov_psd_prediction.py:218:        ratio_analytical = slope_analytical / slope_prime
tools/exp_markov_psd_prediction.py:222:    print(f"\n  Markov captures {ratio_markov*100:.1f}% of prime residue slope")
tools/exp_markov_psd_prediction.py:223:    print(f"  Analytical captures {ratio_analytical*100:.1f}% of prime residue slope")
tools/exp_markov_psd_prediction.py:226:    # Split primes into windows and check if the gap changes with scale
tools/exp_markov_psd_prediction.py:258:            'slope_prime': float(sl_w),
tools/exp_markov_psd_prediction.py:263:        print(f"  ln(p)={np.log(p_mid):.1f}: prime={sl_w:+.4f}, markov={mean_local:+.4f}, gap={gap:+.4f}, λ₂={lam2_local:.5f}")
tools/exp_markov_psd_prediction.py:277:        'N_primes': int(args.N),
tools/exp_markov_psd_prediction.py:282:        'slope_prime': float(slope_prime),
tools/exp_markov_psd_prediction.py:288:        'z_prime_vs_markov': float(z_markov),
tools/exp_markov_psd_prediction.py:289:        'z_prime_vs_analytical': float(z_analytical),
tools/exp_markov_psd_prediction.py:290:        'z_prime_vs_bernoulli': float(z_bern),
tools/exp_markov_psd_prediction.py:293:        'r2_prime': float(r2_prime),
tools/exp_markov_dipolar_decomposition.py:3:exp_markov_dipolar_decomposition.py — Is the prime dipolar angle a pair-statistics consequence?
tools/exp_markov_dipolar_decomposition.py:5:The prime ordering signal has dL1/dSR = 2.28 at angle -111 deg.
tools/exp_markov_dipolar_decomposition.py:12:  1. Compute empirical transition matrix P(g_{n+1} | g_n) from real prime gaps
tools/exp_markov_dipolar_decomposition.py:15:  4. Compute dipolar angle for each: Markov-1, Markov-0, real primes
tools/exp_markov_dipolar_decomposition.py:31:def get_primes(n_max):
tools/exp_markov_dipolar_decomposition.py:94:        # Use even gaps only (primes > 2 have even gaps)
tools/exp_markov_dipolar_decomposition.py:167:    # Generate primes
tools/exp_markov_dipolar_decomposition.py:168:    print(f"\nGenerating primes (N={N} gaps, p > 10000)...")
tools/exp_markov_dipolar_decomposition.py:169:    primes = get_primes(N * 25)
tools/exp_markov_dipolar_decomposition.py:170:    mask = primes > 10000
tools/exp_markov_dipolar_decomposition.py:171:    primes_f = primes[mask][:N + 1]
tools/exp_markov_dipolar_decomposition.py:172:    real_gaps = np.diff(primes_f).astype(float)
tools/exp_markov_dipolar_decomposition.py:173:    print(f"  Got {len(real_gaps)} prime gaps, range [{primes_f[0]}, {primes_f[-1]}]")
tools/exp_markov_dipolar_decomposition.py:196:    # === Real primes ===
tools/exp_markov_dipolar_decomposition.py:250:        p_mask = (primes > lo) & (primes < hi)
tools/exp_markov_dipolar_decomposition.py:251:        p_scale = primes[p_mask]
tools/exp_markov_dipolar_decomposition.py:297:    print(f"{'Real primes':<14} {real_dv['theta']:>7.1f}{'':>13} "
tools/exp_markov_dipolar_decomposition.py:318:        print("\n  RESULT: Markov-1 REPRODUCES the prime dipolar angle.")
tools/exp_markov_dipolar_decomposition.py:321:        print(f"\n  RESULT: Markov-1 does NOT reproduce the prime angle (z={z_theta:.1f}).")
tools/dnd_gap_resolution.py:234:    primes = np.where(sieve)[0]
tools/dnd_gap_resolution.py:235:    domini['primi_gap'] = np.diff(primes).astype(float)
tools/exp_two_channel_decomposition.py:3:exp_two_channel_decomposition.py — Decompose prime gap anti-correlation into two channels.
tools/exp_two_channel_decomposition.py:14:For each channel, across prime scales:
tools/exp_two_channel_decomposition.py:23:    python tools/exp_two_channel_decomposition.py [--n_primes N] [--n_windows W] [--n_surrogates S]
tools/exp_two_channel_decomposition.py:31:def sieve_primes(limit):
tools/exp_two_channel_decomposition.py:33:    is_prime = np.ones(limit, dtype=bool)
tools/exp_two_channel_decomposition.py:34:    is_prime[:2] = False
tools/exp_two_channel_decomposition.py:36:        if is_prime[i]:
tools/exp_two_channel_decomposition.py:37:            is_prime[i*i::i] = False
tools/exp_two_channel_decomposition.py:38:    return np.nonzero(is_prime)[0]
tools/exp_two_channel_decomposition.py:40:def get_primes(n_target):
tools/exp_two_channel_decomposition.py:41:    """Get at least n_target primes."""
tools/exp_two_channel_decomposition.py:45:    primes = sieve_primes(limit)
tools/exp_two_channel_decomposition.py:46:    while len(primes) < n_target:
tools/exp_two_channel_decomposition.py:48:        primes = sieve_primes(limit)
tools/exp_two_channel_decomposition.py:49:    return primes[:n_target]
tools/exp_two_channel_decomposition.py:51:def decompose_channels(primes):
tools/exp_two_channel_decomposition.py:53:    Decompose prime gap sequence into residue and magnitude channels.
tools/exp_two_channel_decomposition.py:55:    For primes > 3, p mod 6 is either 1 or 5.
tools/exp_two_channel_decomposition.py:60:    p = primes[primes > 3]
tools/exp_two_channel_decomposition.py:64:    residues = p[:-1] % 6  # residue of the left prime of each gap
tools/exp_two_channel_decomposition.py:67:    # Residue channel: binary sequence of left-prime residue
tools/exp_two_channel_decomposition.py:188:def scaling_analysis(primes, n_windows=15, n_surrogates=10):
tools/exp_two_channel_decomposition.py:190:    Measure both channels across prime scales.
tools/exp_two_channel_decomposition.py:192:    p_all = primes[primes > 3]
tools/exp_two_channel_decomposition.py:209:        ln_p = np.log(p_chunk[len(p_chunk)//2])  # median prime
tools/exp_two_channel_decomposition.py:284:    parser = argparse.ArgumentParser(description='Two-channel decomposition of prime gap anti-correlation')
tools/exp_two_channel_decomposition.py:285:    parser.add_argument('--n_primes', type=int, default=6_000_000, help='Number of primes')
tools/exp_two_channel_decomposition.py:290:    print(f"Generating {args.n_primes:,} primes...")
tools/exp_two_channel_decomposition.py:291:    primes = get_primes(args.n_primes)
tools/exp_two_channel_decomposition.py:292:    print(f"Got {len(primes):,} primes up to {primes[-1]:,}")
tools/exp_two_channel_decomposition.py:296:    gaps, res_ch, mag_ch, res_l, res_r, p_used = decompose_channels(primes)
tools/exp_two_channel_decomposition.py:319:    scaling = scaling_analysis(primes, n_windows=args.n_windows, n_surrogates=args.n_surrogates)
tools/exp_two_channel_decomposition.py:419:        'n_primes': len(primes),
tools/observables_registry.py:20:- `triple_var` in 3 script = `np.var(triple_sums)` (raw) — convention dominante
tools/observables_registry.py:21:- `triple_var` in `exp_perturbation_dimensionality_audit.py` =
tools/observables_registry.py:30:script chiama già `SR`/`triple_var`/etc. Le varianti restano disponibili ma
tools/observables_registry.py:31:con nomi ESPLICITI (`SR_local_rigidity`, `triple_var_normalized`) per evitare
tools/observables_registry.py:43:from observables_registry import SR, triple_var, L1, L2, SR2
tools/observables_registry.py:46:from observables_registry import SR_local_rigidity, triple_var_normalized
tools/observables_registry.py:55:observables_used: [SR, SR2, L1, L2, triple_var]
tools/observables_registry.py:137:def triple_var(gaps: np.ndarray) -> float:
tools/observables_registry.py:138:    """**triple_var — Variance of consecutive gap triples** (canonical).
tools/observables_registry.py:143:    `triple_var_normalized`.
tools/observables_registry.py:157:    "triple_var": triple_var,
tools/observables_registry.py:196:def triple_var_normalized(gaps: np.ndarray) -> float:
tools/observables_registry.py:197:    """**triple_var_normalized — Variance of triples / variance of gaps** (variant).
tools/observables_registry.py:200:    locally named `triple_var` — registered here as `triple_var_normalized`
tools/observables_registry.py:204:    single-gap variance, NOT as alias for triple_var.
tools/observables_registry.py:218:    "triple_var_normalized": triple_var_normalized,
tools/observables_registry.py:249:    "triple_var",
tools/observables_registry.py:251:    "triple_var_normalized",
tools/observables_registry.py:268:    print(f"  triple_var_normalized = {triple_var_normalized(gue_like):.6f}")
tools/dnd_incrocio.py:1357:            # Estrai le prime 80 char dell'output come candidato ponte
tools/m_spectro.py:816:    is_prime = [True] * (n_max + 1)
tools/m_spectro.py:817:    is_prime[0] = is_prime[1] = False
tools/m_spectro.py:819:        if is_prime[i]:
tools/m_spectro.py:821:                is_prime[j] = False
tools/m_spectro.py:822:    primes = [i for i in range(n_max + 1) if is_prime[i]]
tools/m_spectro.py:823:    return np.diff(primes).astype(float)
tools/exp_prime_mobius_zero_mediator_gate.py:15:from exp_prime_mobius_interval_charge_gate import (
tools/exp_prime_mobius_zero_mediator_gate.py:18:    sieve_primes,
tools/exp_prime_mobius_zero_mediator_gate.py:210:    primes: np.ndarray,
tools/exp_prime_mobius_zero_mediator_gate.py:212:    n_primes: int,
tools/exp_prime_mobius_zero_mediator_gate.py:217:    segment = primes[offset : offset + n_primes + 1]
tools/exp_prime_mobius_zero_mediator_gate.py:223:        "n_primes": n_primes,
tools/exp_prime_mobius_zero_mediator_gate.py:225:        "prime_start": int(segment[0]),
tools/exp_prime_mobius_zero_mediator_gate.py:226:        "prime_stop": int(segment[-1]),
tools/exp_prime_mobius_zero_mediator_gate.py:241:    parser.add_argument("--out", default="tools/data/prime_mobius_zero_mediator_gate_20260508_2108.json")
tools/exp_prime_mobius_zero_mediator_gate.py:244:    primes = sieve_primes(args.limit)
tools/exp_prime_mobius_zero_mediator_gate.py:249:        {"n_primes": 5_000, "offset": 0},
tools/exp_prime_mobius_zero_mediator_gate.py:250:        {"n_primes": 10_000, "offset": 0},
tools/exp_prime_mobius_zero_mediator_gate.py:251:        {"n_primes": 20_000, "offset": 0},
tools/exp_prime_mobius_zero_mediator_gate.py:252:        {"n_primes": 5_000, "offset": 3_000},
tools/exp_prime_mobius_zero_mediator_gate.py:253:        {"n_primes": 10_000, "offset": 7_000},
tools/exp_prime_mobius_zero_mediator_gate.py:254:        {"n_primes": 20_000, "offset": 11_000},
tools/exp_prime_mobius_zero_mediator_gate.py:256:    max_needed = max(c["offset"] + c["n_primes"] + 1 for c in conditions)
tools/exp_prime_mobius_zero_mediator_gate.py:257:    if len(primes) <= max_needed:
tools/exp_prime_mobius_zero_mediator_gate.py:258:        raise SystemExit(f"limit={args.limit} yields only {len(primes)} primes, need {max_needed}")
tools/exp_prime_mobius_zero_mediator_gate.py:261:        run_condition(primes, mu, c["n_primes"], c["offset"], rng, args.permutations)
tools/exp_prime_mobius_zero_mediator_gate.py:269:                "n_primes": result["n_primes"],
tools/exp_prime_mobius_zero_mediator_gate.py:282:        "experiment": "prime_mobius_zero_mediator_gate",
tools/exp_prime_mobius_zero_mediator_gate.py:301:            f"N={result['n_primes']} offset={result['offset']} "
tools/exp_dR_brody_connection.py:11:Question 2: Is dR_acf1 ~ -0.527 prime-specific or tautological?
tools/exp_dR_brody_connection.py:14:  If Cramer surrogates differ -> prime-specific structure.
tools/exp_dR_brody_connection.py:18:Prediction: |corr(dR, beta)| > 0.7 for primes if de Sitter unifies.
tools/exp_dR_brody_connection.py:30:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_dR_brody_connection.py:31:    is_prime[:2] = False
tools/exp_dR_brody_connection.py:33:        if is_prime[i]:
tools/exp_dR_brody_connection.py:34:            is_prime[i*i::i] = False
tools/exp_dR_brody_connection.py:35:    return np.nonzero(is_prime)[0].astype(np.float64)
tools/exp_dR_brody_connection.py:37:print("Generating primes up to 10^7...")
tools/exp_dR_brody_connection.py:38:primes = sieve(10_000_000)
tools/exp_dR_brody_connection.py:39:N_total = len(primes)
tools/exp_dR_brody_connection.py:40:print(f"  {N_total} primes")
tools/exp_dR_brody_connection.py:51:print(f"  {N_WINDOWS} windows of {W_SIZE} primes each")
tools/exp_dR_brody_connection.py:143:print("\nComputing prime windows...")
tools/exp_dR_brody_connection.py:144:prime_obs = []
tools/exp_dR_brody_connection.py:146:    obs = window_observables(primes[s:s+W_SIZE])
tools/exp_dR_brody_connection.py:147:    prime_obs.append(obs)
tools/exp_dR_brody_connection.py:152:ln_p = np.array([o['ln_p'] for o in prime_obs])
tools/exp_dR_brody_connection.py:153:beta_arr = np.array([o['brody_beta'] for o in prime_obs])
tools/exp_dR_brody_connection.py:154:dR_std_arr = np.array([o['dR_std'] for o in prime_obs])
tools/exp_dR_brody_connection.py:155:dR_norm_arr = np.array([o['dR_norm'] for o in prime_obs])
tools/exp_dR_brody_connection.py:156:dR_acf1_arr = np.array([o['dR_acf1'] for o in prime_obs])
tools/exp_dR_brody_connection.py:157:r_arr = np.array([o['r_mean'] for o in prime_obs])
tools/exp_dR_brody_connection.py:158:acf1_gap_arr = np.array([o['acf1_gap'] for o in prime_obs])
tools/exp_dR_brody_connection.py:160:# === Cross-correlations for primes ===
tools/exp_dR_brody_connection.py:192:gaps_all = np.diff(primes)
tools/exp_dR_brody_connection.py:203:            c_gaps = rng.exponential(np.log(primes[:N_total-1] + 1), size=N_total-1)
tools/exp_dR_brody_connection.py:205:            c_p = np.cumsum(np.concatenate([[primes[0]], c_gaps]))[:N_total]
tools/exp_dR_brody_connection.py:209:            c_p = np.cumsum(np.concatenate([[primes[0]], sh_gaps]))[:N_total]
tools/exp_dR_brody_connection.py:288:        "Is dR_acf1 ~ -0.527 prime-specific or tautological?"
tools/exp_dR_brody_connection.py:290:    "N_primes": int(N_total),
tools/exp_dR_brody_connection.py:294:    "prime_results": {
tools/exp_dR_brody_connection.py:334:    "windows": prime_obs,
tools/exp_dR_brody_connection.py:358:    print(f"      -> Artifact of g=(p/2)^2 mapping, not prime structure")
tools/exp_psd_prime_gaps.py:3:exp_psd_prime_gaps.py — Power Spectral Density of Prime Gaps
tools/exp_psd_prime_gaps.py:12:    python tools/exp_psd_prime_gaps.py [--n_primes N] [--n_shuffles K]
tools/exp_psd_prime_gaps.py:18:from sympy import primerange
tools/exp_psd_prime_gaps.py:46:def run_experiment(n_primes=500_000, n_shuffles=20, nperseg=4096):
tools/exp_psd_prime_gaps.py:48:    print(f"Generating primes up to cover {n_primes} primes...")
tools/exp_psd_prime_gaps.py:51:    upper = int(n_primes * (math.log(n_primes) + math.log(math.log(n_primes)) + 3))
tools/exp_psd_prime_gaps.py:52:    primes = np.array(list(primerange(2, upper)))[:n_primes]
tools/exp_psd_prime_gaps.py:53:    actual_n = len(primes)
tools/exp_psd_prime_gaps.py:54:    print(f"Got {actual_n} primes, largest = {primes[-1]}")
tools/exp_psd_prime_gaps.py:56:    gaps = np.diff(primes).astype(float)
tools/exp_psd_prime_gaps.py:77:    # Compute PSD of prime gaps
tools/exp_psd_prime_gaps.py:78:    freqs, psd_prime = compute_psd(gaps, nperseg=nperseg)
tools/exp_psd_prime_gaps.py:93:    # Analysis: compare prime PSD with theory and shuffle
tools/exp_psd_prime_gaps.py:97:    residual = psd_prime[valid] - psd_theory[valid]
tools/exp_psd_prime_gaps.py:98:    rel_residual = residual / psd_prime[valid]
tools/exp_psd_prime_gaps.py:101:    # 2. z-score of prime PSD vs shuffle at low frequencies
tools/exp_psd_prime_gaps.py:104:        z_low = (psd_prime[low_f] - psd_shuffle_mean[low_f]) / psd_shuffle_std[low_f]
tools/exp_psd_prime_gaps.py:112:        z_high = (psd_prime[high_f] - psd_shuffle_mean[high_f]) / psd_shuffle_std[high_f]
tools/exp_psd_prime_gaps.py:121:        log_s = np.log10(psd_prime[low_region])
tools/exp_psd_prime_gaps.py:130:    r_corr = np.corrcoef(psd_prime[valid2], theory_shape)[0, 1]
tools/exp_psd_prime_gaps.py:135:    dip_ratio = psd_prime[idx_low] / psd_prime[idx_high]
tools/exp_psd_prime_gaps.py:139:        "n_primes": actual_n,
tools/exp_psd_prime_gaps.py:151:        "dip_ratio_prime": float(dip_ratio),
tools/exp_psd_prime_gaps.py:165:    print(f"Dip ratio S(0.01)/S(0.48): prime={dip_ratio:.3f}, shuffle={dip_ratio_shuffle:.3f}")
tools/exp_psd_prime_gaps.py:183:        print(f"LOW-FREQ DIP confirmed: prime dip={dip_ratio:.3f} vs shuffle={dip_ratio_shuffle:.3f}")
tools/exp_psd_prime_gaps.py:189:    return results, freqs, psd_prime, psd_theory, psd_shuffle_mean, psd_shuffle_std
tools/exp_psd_prime_gaps.py:194:    parser.add_argument("--n_primes", type=int, default=500_000)
tools/exp_psd_prime_gaps.py:199:    results, freqs, psd_prime, psd_theory, psd_shuf_mean, psd_shuf_std = run_experiment(
tools/exp_psd_prime_gaps.py:200:        n_primes=args.n_primes,
tools/exp_psd_prime_gaps.py:206:    out_path = "tools/data/psd_prime_gaps_results.json"
tools/exp_bridge_order_denominator_gate.py:8:- prime metric connection fluctuations from g=(p/2)^2
tools/exp_bridge_order_denominator_gate.py:9:- prime metric curvature fluctuations dR
tools/exp_bridge_order_denominator_gate.py:37:def sieve_primes_for_count(n_primes: int) -> np.ndarray:
tools/exp_bridge_order_denominator_gate.py:38:    if n_primes < 6:
tools/exp_bridge_order_denominator_gate.py:41:        limit = int(n_primes * (math.log(n_primes) + math.log(math.log(n_primes))) * 1.35)
tools/exp_bridge_order_denominator_gate.py:48:        primes = np.flatnonzero(sieve)
tools/exp_bridge_order_denominator_gate.py:49:        if len(primes) >= n_primes:
tools/exp_bridge_order_denominator_gate.py:50:            return primes[:n_primes].astype(float)
tools/exp_bridge_order_denominator_gate.py:62:def prime_metric_delta_gamma(n_values: int) -> np.ndarray:
tools/exp_bridge_order_denominator_gate.py:63:    primes = sieve_primes_for_count(n_values + 3)
tools/exp_bridge_order_denominator_gate.py:64:    p = primes.astype(float)
tools/exp_bridge_order_denominator_gate.py:75:def prime_metric_dR(n_values: int) -> np.ndarray:
tools/exp_bridge_order_denominator_gate.py:76:    primes = sieve_primes_for_count(n_values + 3)
tools/exp_bridge_order_denominator_gate.py:77:    seq = primes.astype(float)
tools/exp_bridge_order_denominator_gate.py:83:    a_prime = da / dt
tools/exp_bridge_order_denominator_gate.py:84:    da_prime = np.diff(a_prime)
tools/exp_bridge_order_denominator_gate.py:85:    a_double_prime = da_prime / dt_mid
tools/exp_bridge_order_denominator_gate.py:86:    r_n = 2.0 * a_double_prime / a[1:-1]
tools/exp_bridge_order_denominator_gate.py:144:        "prime_metric_delta_gamma_abs": prime_metric_delta_gamma(args.n_gaps),
tools/exp_bridge_order_denominator_gate.py:145:        "prime_metric_dR_abs": prime_metric_dR(args.n_gaps),
tools/exp_bridge_order_denominator_gate.py:161:        "question": "Does ORDER_DENOMINATOR_GATE survive on D-ND bridge sequences beyond prime/zeta/logistic gaps?",
tools/dnd_autoricerca.py:185:        is_prime = [True] * (n + 1)
tools/dnd_autoricerca.py:186:        is_prime[0] = is_prime[1] = False
tools/dnd_autoricerca.py:188:            if is_prime[i]:
tools/dnd_autoricerca.py:190:                    is_prime[j] = False
tools/dnd_autoricerca.py:191:        return [i for i in range(n + 1) if is_prime[i]]
tools/dnd_autoricerca.py:193:    primes = sieve(50000)
tools/dnd_autoricerca.py:194:    gaps = np.diff(primes).astype(float)
tools/dnd_autoricerca.py:198:        'n_primi': len(primes),
tools/dnd_autoricerca.py:199:        'max_primo': primes[-1],
tools/dnd_autoricerca.py:1186:                    is_prime = [True] * (n + 1)
tools/dnd_autoricerca.py:1187:                    is_prime[0] = is_prime[1] = False
tools/dnd_autoricerca.py:1189:                        if is_prime[i]:
tools/dnd_autoricerca.py:1191:                                is_prime[j] = False
tools/dnd_autoricerca.py:1192:                    return [i for i in range(n + 1) if is_prime[i]]
tools/dnd_autoricerca.py:1193:                primes = sieve(n_target * 10)[:n_target]
tools/dnd_autoricerca.py:1194:                signal = np.diff(primes).astype(float)
tools/dnd_autoricerca.py:2250:            is_prime = [True] * (n + 1)
tools/dnd_autoricerca.py:2251:            is_prime[0] = is_prime[1] = False
tools/dnd_autoricerca.py:2253:                if is_prime[i]:
tools/dnd_autoricerca.py:2255:                        is_prime[j] = False
tools/dnd_autoricerca.py:2256:            return [i for i in range(n + 1) if is_prime[i]]
tools/dnd_autoricerca.py:2257:        primes = sieve(max_n)
tools/dnd_autoricerca.py:2258:        gaps = np.diff(primes).astype(float)
tools/dnd_autoricerca.py:2387:        from sympy import primerange
tools/dnd_autoricerca.py:2388:        primes = np.array(list(primerange(2, max_n)), dtype=float)
tools/dnd_autoricerca.py:2389:        ln_p = np.log(primes)
tools/dnd_autoricerca.py:2395:            'nota': f'Curvatura metrica g=(p/2)², {len(primes)} primi. De Sitter nel tempo ln(p).',
tools/dnd_autoricerca.py:2402:        from sympy import primerange
tools/dnd_autoricerca.py:2403:        primes = np.array(list(primerange(2, max_n)), dtype=float)
tools/dnd_autoricerca.py:2404:        Gamma = list(np.diff(np.log(primes)))
tools/dnd_autoricerca.py:2407:            'nota': f'Connessione Γ_n della metrica g=(p/2)², {len(primes)} primi. Spettro β=-0.75.',
tools/dnd_zero_notturno.py:35:    is_prime = [True] * (n_max + 1)
tools/dnd_zero_notturno.py:36:    is_prime[0] = is_prime[1] = False
tools/dnd_zero_notturno.py:38:        if is_prime[i]:
tools/dnd_zero_notturno.py:40:                is_prime[j] = False
tools/dnd_zero_notturno.py:41:    primes = [i for i in range(n_max + 1) if is_prime[i]]
tools/dnd_zero_notturno.py:42:    return np.diff(primes).astype(float), primes
tools/dnd_zero_notturno.py:315:            gaps, primes = gap_primi(n_max)
tools/dnd_zero_notturno.py:351:            'n_primes': len(primes),
tools/exp_magnitude_psd_from_acf.py:14:  1. Get primes, decompose into magnitude channel
tools/exp_magnitude_psd_from_acf.py:23:  python tools/exp_magnitude_psd_from_acf.py [--n_primes N] [--nperseg S] [--k_max K]
tools/exp_magnitude_psd_from_acf.py:34:def sieve_primes(limit):
tools/exp_magnitude_psd_from_acf.py:35:    is_prime = np.ones(limit, dtype=bool)
tools/exp_magnitude_psd_from_acf.py:36:    is_prime[:2] = False
tools/exp_magnitude_psd_from_acf.py:38:        if is_prime[i]:
tools/exp_magnitude_psd_from_acf.py:39:            is_prime[i*i::i] = False
tools/exp_magnitude_psd_from_acf.py:40:    return np.nonzero(is_prime)[0]
tools/exp_magnitude_psd_from_acf.py:43:def get_primes(n_target):
tools/exp_magnitude_psd_from_acf.py:46:    primes = sieve_primes(limit)
tools/exp_magnitude_psd_from_acf.py:47:    while len(primes) < n_target:
tools/exp_magnitude_psd_from_acf.py:49:        primes = sieve_primes(limit)
tools/exp_magnitude_psd_from_acf.py:50:    return primes[:n_target]
tools/exp_magnitude_psd_from_acf.py:53:def decompose_magnitude(primes):
tools/exp_magnitude_psd_from_acf.py:55:    p = primes[primes > 3]
tools/exp_magnitude_psd_from_acf.py:119:    parser.add_argument('--n_primes', type=int, default=2_000_000)
tools/exp_magnitude_psd_from_acf.py:126:    print(f"Generating {args.n_primes:,} primes...")
tools/exp_magnitude_psd_from_acf.py:127:    primes = get_primes(args.n_primes)
tools/exp_magnitude_psd_from_acf.py:128:    print(f"  Range: {primes[0]} to {primes[-1]:,} ({time.time()-t0:.1f}s)")
tools/exp_magnitude_psd_from_acf.py:131:    mag, gaps = decompose_magnitude(primes)
tools/exp_magnitude_psd_from_acf.py:238:    # 7. Scale dependence: split primes into windows
tools/exp_magnitude_psd_from_acf.py:247:        p_mid = primes[primes > 3][start + chunk // 2]
tools/exp_magnitude_psd_from_acf.py:280:        'n_primes': args.n_primes,
tools/exp_observable_rank_audit.py:24:from exp_3d_boundary_layers import get_primes, gue_gaps, partial_shuffle
tools/exp_observable_rank_audit.py:137:    primes = get_primes(n_gaps * 24)[: n_gaps + 1]
tools/exp_observable_rank_audit.py:138:    prime_gaps = np.diff(primes).astype(float)
tools/exp_observable_rank_audit.py:144:    prime_shuffle = rng.permutation(prime_gaps).astype(float)
tools/exp_observable_rank_audit.py:146:        "primes": prime_gaps,
tools/exp_observable_rank_audit.py:147:        "prime_shuffle": prime_shuffle,
tools/exp_observable_rank_audit.py:175:    print(f"{'sequence':<14} {'pc1':>8} {'eff_rank':>9} {'mean|corr|':>11} {'weak':>5}  z(SR,SR2,L1,L2,triple_var)")
tools/exp_modular_algebra_depth.py:9:- Compute gap sequence g_n = p_{n+1} - p_n for first N primes
tools/exp_modular_algebra_depth.py:25:from sympy import primerange
tools/exp_modular_algebra_depth.py:28:    """Get first N prime gaps."""
tools/exp_modular_algebra_depth.py:29:    primes = list(primerange(2, N * 20))[:N+1]
tools/exp_modular_algebra_depth.py:30:    return np.array([primes[i+1] - primes[i] for i in range(len(primes)-1)])
tools/exp_modular_algebra_depth.py:87:    print("Generating prime gaps...")
tools/exp_markov_memory_by_gue_type.py:6:domains (primes, GUE matrices) retain GUE classification after shuffle, while
tools/exp_markov_memory_by_gue_type.py:9:in prime gap residues.
tools/exp_markov_memory_by_gue_type.py:102:def generate_large_primes(n_limit=200000):
tools/exp_markov_memory_by_gue_type.py:103:    """Generate prime gaps up to n_limit."""
tools/exp_markov_memory_by_gue_type.py:104:    is_prime = np.ones(n_limit + 1, dtype=bool)
tools/exp_markov_memory_by_gue_type.py:105:    is_prime[0] = is_prime[1] = False
tools/exp_markov_memory_by_gue_type.py:107:        if is_prime[i]:
tools/exp_markov_memory_by_gue_type.py:108:            is_prime[i*i::i] = False
tools/exp_markov_memory_by_gue_type.py:109:    primes = np.where(is_prime)[0]
tools/exp_markov_memory_by_gue_type.py:110:    return np.diff(primes).astype(float)
tools/exp_markov_memory_by_gue_type.py:138:    domains['primes'] = {
tools/exp_markov_memory_by_gue_type.py:139:        'gaps': generate_large_primes(200000),
tools/gap_ratio_primes.py:2:from sympy import primerange
tools/gap_ratio_primes.py:3:primes = list(primerange(2, 7920))[:1000]
tools/gap_ratio_primes.py:4:gaps = np.diff(primes).astype(float)
tools/gap_ratio_primes.py:16:print(json.dumps({"r_primes": round(r_mean, 6), "r_shuffle_mean": round(mu, 6),
tools/exp_crossover_phase_test.py:102:def generate_prime_gaps(N):
tools/exp_crossover_phase_test.py:103:    """Generate normalized prime gaps"""
tools/exp_crossover_phase_test.py:106:    primes = list(sympy.primerange(2, limit))
tools/exp_crossover_phase_test.py:107:    if len(primes) < N + 1:
tools/exp_crossover_phase_test.py:108:        primes = list(sympy.primerange(2, limit * 2))
tools/exp_crossover_phase_test.py:109:    primes = np.array(primes[:N+1], dtype=float)
tools/exp_crossover_phase_test.py:110:    gaps = np.diff(primes)
tools/exp_crossover_phase_test.py:218:    sequences['Primes'] = generate_prime_gaps(args.N)
tools/exp_boundary_blank_thin_support_audit.py:3:Audit the thin support-without-beta blanks against the medium prime blank.
tools/exp_prime_mobius_gap_stratified_zero_gate.py:4:Follow-up to ``exp_prime_mobius_zero_mediator_gate.py``.  The previous null
tools/exp_prime_mobius_gap_stratified_zero_gate.py:8:between each interval charge and the length class of its prime gap.
tools/exp_prime_mobius_gap_stratified_zero_gate.py:18:from exp_prime_mobius_interval_charge_gate import (
tools/exp_prime_mobius_gap_stratified_zero_gate.py:21:    sieve_primes,
tools/exp_prime_mobius_gap_stratified_zero_gate.py:23:from exp_prime_mobius_zero_mediator_gate import METRIC_KEYS, transition_metrics_three_class
tools/exp_prime_mobius_gap_stratified_zero_gate.py:27:    """Return stable bucket ids for individual prime gaps."""
tools/exp_prime_mobius_gap_stratified_zero_gate.py:141:    primes: np.ndarray,
tools/exp_prime_mobius_gap_stratified_zero_gate.py:143:    n_primes: int,
tools/exp_prime_mobius_gap_stratified_zero_gate.py:148:    segment = primes[offset : offset + n_primes + 1]
tools/exp_prime_mobius_gap_stratified_zero_gate.py:167:        "n_primes": n_primes,
tools/exp_prime_mobius_gap_stratified_zero_gate.py:169:        "prime_start": int(segment[0]),
tools/exp_prime_mobius_gap_stratified_zero_gate.py:170:        "prime_stop": int(segment[-1]),
tools/exp_prime_mobius_gap_stratified_zero_gate.py:185:    parser.add_argument("--out", default="tools/data/prime_mobius_gap_stratified_zero_gate_20260508_2116.json")
tools/exp_prime_mobius_gap_stratified_zero_gate.py:188:    primes = sieve_primes(args.limit)
tools/exp_prime_mobius_gap_stratified_zero_gate.py:193:        {"n_primes": 5_000, "offset": 0},
tools/exp_prime_mobius_gap_stratified_zero_gate.py:194:        {"n_primes": 10_000, "offset": 0},
tools/exp_prime_mobius_gap_stratified_zero_gate.py:195:        {"n_primes": 20_000, "offset": 0},
tools/exp_prime_mobius_gap_stratified_zero_gate.py:196:        {"n_primes": 5_000, "offset": 3_000},
tools/exp_prime_mobius_gap_stratified_zero_gate.py:197:        {"n_primes": 10_000, "offset": 7_000},
tools/exp_prime_mobius_gap_stratified_zero_gate.py:198:        {"n_primes": 20_000, "offset": 11_000},
tools/exp_prime_mobius_gap_stratified_zero_gate.py:200:    max_needed = max(c["offset"] + c["n_primes"] + 1 for c in conditions)
tools/exp_prime_mobius_gap_stratified_zero_gate.py:201:    if len(primes) <= max_needed:
tools/exp_prime_mobius_gap_stratified_zero_gate.py:202:        raise SystemExit(f"limit={args.limit} yields only {len(primes)} primes, need {max_needed}")
tools/exp_prime_mobius_gap_stratified_zero_gate.py:205:        run_condition(primes, mu, c["n_primes"], c["offset"], rng, args.permutations)
tools/exp_prime_mobius_gap_stratified_zero_gate.py:209:        "experiment": "prime_mobius_gap_stratified_zero_gate",
tools/exp_prime_mobius_gap_stratified_zero_gate.py:227:            f"N={result['n_primes']} offset={result['offset']} "
tools/dnd_M_operator.py:183:        # Fallback: usa le prime parole significative
tools/exp_boundary_denominator_prescan.py:28:    "numeri_primi": "primes",
tools/dnd_loop.py:112:            # Prendi solo le prime 600 chars della risposta
tools/exp_boundary_coherence.py:5:Question: Do different observables agree on WHERE primes sit between GUE and Poisson?
tools/exp_boundary_coherence.py:19:Null baseline: shuffled prime gaps (same distribution, destroyed ordering).
tools/exp_boundary_coherence.py:24:from sympy import primerange
tools/exp_boundary_coherence.py:31:# Using GOE (β=1) since prime gaps are real-valued
tools/exp_boundary_coherence.py:141:def get_prime_gaps(pmin, pmax):
tools/exp_boundary_coherence.py:142:    """Get prime gaps in range [pmin, pmax]."""
tools/exp_boundary_coherence.py:143:    primes = np.array(list(primerange(pmin, pmax)))
tools/exp_boundary_coherence.py:144:    return np.diff(primes).astype(float)
tools/exp_boundary_coherence.py:152:        ("primes_1e4",   10**4,  5*10**4),
tools/exp_boundary_coherence.py:153:        ("primes_1e5",   10**5,  5*10**5),
tools/exp_boundary_coherence.py:154:        ("primes_1e6",   10**6,  3*10**6),
tools/exp_boundary_coherence.py:155:        ("primes_5e6",   5*10**6, 10**7),
tools/exp_boundary_coherence.py:180:        gaps = get_prime_gaps(pmin, pmax)
tools/exp_boundary_coherence.py:236:    # Ordering signal = |τ_primes - τ_shuffle| averaged
tools/exp_boundary_coherence.py:247:        coherence_prime = np.std(tau_vals)
tools/exp_boundary_coherence.py:256:        print(f"    τ coherence (std): primes={coherence_prime:.4f}, shuffle={coherence_shuffle:.4f}")
tools/exp_boundary_coherence.py:258:        print(f"    Per-observable Δτ (prime - shuffle):")
tools/exp_boundary_coherence.py:262:        results[label]["coherence_prime"] = coherence_prime
tools/LAB_COGNITIVE_CONTAMINATION.md:13:trovare strade laterali, comprimere l'intento e rendere reiterabile il kernel
tools/LAB_COGNITIVE_CONTAMINATION.md:76:- comprimere una nuova capacita' in un innesco minimale;
tools/LAB_COGNITIVE_CONTAMINATION.md:96:- dopo un buon insight, Cornelius lo comprime in una funzione che il Lab puo'
tools/LAB_COGNITIVE_CONTAMINATION.md:140:   Usa Cornelius per comprimere la risultante in DNA + operatori.
tools/exp_desitter_unification.py:17:Prediction: |corr(dR_std, <r>)| > 0.8 for primes, < 0.3 for null.
tools/exp_desitter_unification.py:24:# --- Sieve of Eratosthenes for primes up to N ---
tools/exp_desitter_unification.py:26:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_desitter_unification.py:27:    is_prime[:2] = False
tools/exp_desitter_unification.py:29:        if is_prime[i]:
tools/exp_desitter_unification.py:30:            is_prime[i*i::i] = False
tools/exp_desitter_unification.py:31:    return np.nonzero(is_prime)[0].astype(np.float64)
tools/exp_desitter_unification.py:33:print("Generating primes up to 10^8...")
tools/exp_desitter_unification.py:34:primes = sieve(100_000_000)
tools/exp_desitter_unification.py:35:N_total = len(primes)
tools/exp_desitter_unification.py:36:print(f"  {N_total} primes generated.")
tools/exp_desitter_unification.py:40:W_SIZE = 50000  # primes per window
tools/exp_desitter_unification.py:49:    """Compute observables for a window of primes."""
tools/exp_desitter_unification.py:97:# --- Compute for primes ---
tools/exp_desitter_unification.py:99:prime_obs = []
tools/exp_desitter_unification.py:101:    window = primes[s:s+W_SIZE]
tools/exp_desitter_unification.py:103:    prime_obs.append(obs)
tools/exp_desitter_unification.py:106:ln_p = np.array([o['ln_p'] for o in prime_obs])
tools/exp_desitter_unification.py:107:r_arr = np.array([o['r_mean'] for o in prime_obs])
tools/exp_desitter_unification.py:108:acf1_arr = np.array([o['acf1'] for o in prime_obs])
tools/exp_desitter_unification.py:109:dR_std_arr = np.array([o['dR_std'] for o in prime_obs])
tools/exp_desitter_unification.py:110:dR_norm_arr = np.array([o['dR_norm'] for o in prime_obs])
tools/exp_desitter_unification.py:128:print(f"\n=== CROSS-CORRELATIONS (primes) ===")
tools/exp_desitter_unification.py:137:gaps_all = np.diff(primes)
tools/exp_desitter_unification.py:147:    # Generate Cramer primes: start from 2, gaps ~ Exp(ln(p))
tools/exp_desitter_unification.py:177:    sh_p = np.cumsum(np.concatenate([[primes[0]], sh_gaps]))
tools/exp_desitter_unification.py:197:def z_score(prime_val, null_vals):
tools/exp_desitter_unification.py:201:    return (prime_val - np.mean(null_vals)) / np.std(null_vals)
tools/exp_desitter_unification.py:209:print(f"  corr(<r>, dR_std): prime={corr_r_dR:.4f}  null={np.mean(null_corrs_cramer['r_dR']):.4f}+/-{np.std(null_corrs_cramer['r_dR']):.4f}  z={z_cramer_r_dR:.2f}")
tools/exp_desitter_unification.py:210:print(f"  corr(<r>, acf1):   prime={corr_r_acf1:.4f}  null={np.mean(null_corrs_cramer['r_acf1']):.4f}+/-{np.std(null_corrs_cramer['r_acf1']):.4f}  z={z_cramer_r_acf1:.2f}")
tools/exp_desitter_unification.py:213:print(f"  corr(<r>, dR_std): prime={corr_r_dR:.4f}  null={np.mean(null_corrs_shuffled['r_dR']):.4f}+/-{np.std(null_corrs_shuffled['r_dR']):.4f}  z={z_shuffled_r_dR:.2f}")
tools/exp_desitter_unification.py:214:print(f"  corr(<r>, acf1):   prime={corr_r_acf1:.4f}  null={np.mean(null_corrs_shuffled['r_acf1']):.4f}+/-{np.std(null_corrs_shuffled['r_acf1']):.4f}  z={z_shuffled_r_acf1:.2f}")
tools/exp_desitter_unification.py:224:print(f"\n=== SPEARMAN RANK CORRELATIONS (primes) ===")
tools/exp_desitter_unification.py:250:    "N_primes": int(N_total),
tools/exp_desitter_unification.py:253:    "prime_range": f"2 to {int(primes[-1])}",
tools/exp_desitter_unification.py:254:    "observables_primes": {
tools/exp_desitter_unification.py:263:    "cross_correlations_primes": {
tools/exp_desitter_unification.py:292:    "windows": prime_obs,
tools/exp_vc_null_regression_gate.py:168:                phase_prime = float(rng.random())
tools/exp_vc_null_regression_gate.py:172:                    sturmian_sequence(THETA, n, phase_prime),
tools/exp_two_channel_shuffle_audit.py:17:from sympy import primerange
tools/exp_two_channel_shuffle_audit.py:21:def get_prime_gaps(N):
tools/exp_two_channel_shuffle_audit.py:22:    """Get first N prime gaps."""
tools/exp_two_channel_shuffle_audit.py:23:    primes = list(primerange(2, int(N * np.log(N) * 1.3) + 1000))[:N + 1]
tools/exp_two_channel_shuffle_audit.py:24:    gaps = np.diff(primes).astype(float)
tools/exp_two_channel_shuffle_audit.py:25:    return gaps, np.array(primes[:len(gaps)])
tools/exp_two_channel_shuffle_audit.py:182:    parser.add_argument('--N', type=int, default=100000, help='Number of primes')
tools/exp_two_channel_shuffle_audit.py:190:    print(f"N={args.N} primes, {args.n_shuffle} shuffle trials\n")
tools/exp_two_channel_shuffle_audit.py:192:    # Real primes
tools/exp_two_channel_shuffle_audit.py:193:    gaps, primes = get_prime_gaps(args.N)
tools/exp_cross_observable_consistency.py:6:give the SAME effective Brody parameter for primes?
tools/exp_cross_observable_consistency.py:14:2. Measure r and Σ²(L)/L for primes at multiple windows
tools/exp_cross_observable_consistency.py:16:4. Null: shuffled primes (should show β_r ≈ β_Σ since no ordering channel)
tools/exp_cross_observable_consistency.py:66:# ── Generate prime gaps ─────────────────────────────────────────────
tools/exp_cross_observable_consistency.py:67:from sympy import primerange
tools/exp_cross_observable_consistency.py:70:primes = np.array(list(primerange(2, PRIME_LIMIT)), dtype=float)
tools/exp_cross_observable_consistency.py:71:gaps = np.diff(primes)
tools/exp_cross_observable_consistency.py:73:print(f"Primes up to {PRIME_LIMIT}: {len(primes)} primes, {N} gaps")
tools/exp_cross_observable_consistency.py:89:def unfold_primes(p):
tools/exp_cross_observable_consistency.py:126:# ── Measure primes ──────────────────────────────────────────────────
tools/exp_cross_observable_consistency.py:128:r_prime = r_statistic(gaps)
tools/exp_cross_observable_consistency.py:129:beta_r_prime = beta_from_r(r_prime)
tools/exp_cross_observable_consistency.py:130:print(f"r = {r_prime:.6f} → β_r = {beta_r_prime:.3f}")
tools/exp_cross_observable_consistency.py:132:unfolded = unfold_primes(primes)
tools/exp_cross_observable_consistency.py:134:beta_sig_prime = {}
tools/exp_cross_observable_consistency.py:135:sig2_prime = {}
tools/exp_cross_observable_consistency.py:140:    beta_sig_prime[L] = b
tools/exp_cross_observable_consistency.py:141:    sig2_prime[L] = s2_over_L
tools/exp_cross_observable_consistency.py:144:# ── Measure shuffled primes (null) ──────────────────────────────────
tools/exp_cross_observable_consistency.py:156:    p_shuf = np.cumsum(np.concatenate([[primes[0]], g_shuf]))
tools/exp_cross_observable_consistency.py:157:    u_shuf = unfold_primes(p_shuf)
tools/exp_cross_observable_consistency.py:208:vals_prime = [f"{beta_sig_prime[L]:.3f}" for L in L_values]
tools/exp_cross_observable_consistency.py:209:print(f"{'Primes':<12} {beta_r_prime:>6.3f} | " + " | ".join(f"{v:>9}" for v in vals_prime))
tools/exp_cross_observable_consistency.py:220:disagree_prime = max(abs(beta_r_prime - beta_sig_prime[L]) for L in L_values)
tools/exp_cross_observable_consistency.py:225:print(f"  Primes:  {disagree_prime:.3f}")
tools/exp_cross_observable_consistency.py:229:# Scale dependence of β_Σ for primes
tools/exp_cross_observable_consistency.py:230:print(f"\nScale dependence of β_Σ for primes:")
tools/exp_cross_observable_consistency.py:231:print(f"  β_Σ(L=1) - β_Σ(L=50) = {beta_sig_prime[1] - beta_sig_prime[50]:.3f}")
tools/exp_cross_observable_consistency.py:239:    "n_primes": len(primes),
tools/exp_cross_observable_consistency.py:240:    "primes": {
tools/exp_cross_observable_consistency.py:241:        "r": float(r_prime),
tools/exp_cross_observable_consistency.py:242:        "beta_r": float(beta_r_prime),
tools/exp_cross_observable_consistency.py:243:        "beta_sigma": {str(L): float(beta_sig_prime[L]) for L in L_values},
tools/exp_cross_observable_consistency.py:244:        "sig2_over_L": {str(L): float(sig2_prime[L]) for L in L_values},
tools/exp_cross_observable_consistency.py:245:        "max_disagreement": float(disagree_prime),
tools/exp_brody_calibration.py:109:def generate_primes(n_max=200000):
tools/exp_brody_calibration.py:118:def prime_gaps_unfolded(n_gaps):
tools/exp_brody_calibration.py:119:    primes = generate_primes(n_gaps * 20)[:n_gaps + 1]
tools/exp_brody_calibration.py:120:    gaps = np.diff(primes.astype(float))
tools/exp_brody_calibration.py:121:    log_p = np.log(primes[:-1].astype(float))
tools/exp_brody_calibration.py:203:    prime_gaps = prime_gaps_unfolded(args.n_gaps)
tools/exp_brody_calibration.py:204:    obs_p = compute_observables(prime_gaps, n_shuffles=args.n_shuffles, rng=rng)
tools/exp_brody_calibration.py:206:    real_domains['primes'] = {**obs_p, 'beta_eff': beta_eff_p}
tools/exp_brody_calibration.py:207:    print(f"{'primes':>20} {obs_p['r']:8.4f} {obs_p['r_shuf']:8.4f} "
tools/exp_brody_calibration.py:285:    print("How does the prime deviation from Brody curve change with L?\n")
tools/meta_assertion_gate.py:61:        "reason": "recomputes a small prime-gaps correlation with a fixed threshold",
tools/exp_metric_tensor_diagnostic.py:26:# ==== Generate primes via sieve ====
tools/exp_metric_tensor_diagnostic.py:28:    is_prime = np.ones(limit, dtype=bool)
tools/exp_metric_tensor_diagnostic.py:29:    is_prime[:2] = False
tools/exp_metric_tensor_diagnostic.py:31:        if is_prime[i]:
tools/exp_metric_tensor_diagnostic.py:32:            is_prime[i*i::i] = False
tools/exp_metric_tensor_diagnostic.py:33:    return np.where(is_prime)[0]
tools/exp_metric_tensor_diagnostic.py:35:print("Generating primes up to 10^7...")
tools/exp_metric_tensor_diagnostic.py:36:primes = sieve(10_000_000)
tools/exp_metric_tensor_diagnostic.py:37:N = len(primes)
tools/exp_metric_tensor_diagnostic.py:38:print(f"N = {N} primes")
tools/exp_metric_tensor_diagnostic.py:41:p = primes.astype(np.float64)
tools/exp_metric_tensor_diagnostic.py:73:r_mean_prime = np.mean(r_ratios)
tools/exp_metric_tensor_diagnostic.py:74:print(f"Gap ratio <r>: {r_mean_prime:.6f}")
tools/exp_metric_tensor_diagnostic.py:166:z_r_cramer = zscore(r_mean_prime, results_surr['cramer']['r_mean'])
tools/exp_metric_tensor_diagnostic.py:167:z_r_shuffled = zscore(r_mean_prime, results_surr['shuffled']['r_mean'])
tools/exp_metric_tensor_diagnostic.py:324:    "claim_tested": "g=(p/2)^2 de Sitter: WHERE does prime structure live? Curvature R vs connection DeltaGamma",
tools/exp_metric_tensor_diagnostic.py:325:    "N_primes": int(N),
tools/exp_metric_tensor_diagnostic.py:326:    "prime_range": f"2 to {int(primes[-1])}",
tools/exp_metric_tensor_diagnostic.py:342:    "gap_ratio_r": float(r_mean_prime),
tools/exp_metric_tensor_diagnostic.py:397:print(f"<r> prime: {output['gap_ratio_r']:.6f}")
tools/build_agent_field.py:1188:    # Tensioni attive — ordinate per tipo (strutturali prime, vincoli ultimi)
tools/build_agent_field.py:1193:    # esposte prime; i vincoli restano visibili ma in coda.
tools/build_agent_field.py:1207:    parts.append("## Tensioni attive (strutturali prime, vincoli in coda)")
tools/build_agent_field.py:1452:        "piu' vicino (es. Lemke Oliver-Soundararajan per prime gaps mod q, Wigner-Dyson "
tools/exp_modular_memory_spectrum.py:15:- Null: Cramer random primes (same density, no arithmetic structure)
tools/exp_modular_memory_spectrum.py:32:def sieve_primes(n_max):
tools/exp_modular_memory_spectrum.py:34:    is_prime = np.ones(n_max + 1, dtype=bool)
tools/exp_modular_memory_spectrum.py:35:    is_prime[0] = is_prime[1] = False
tools/exp_modular_memory_spectrum.py:37:        if is_prime[i]:
tools/exp_modular_memory_spectrum.py:38:            is_prime[i*i::i] = False
tools/exp_modular_memory_spectrum.py:39:    return np.where(is_prime)[0]
tools/exp_modular_memory_spectrum.py:42:def cramer_random_primes(n_max, rng):
tools/exp_modular_memory_spectrum.py:138:    # Generate primes
tools/exp_modular_memory_spectrum.py:139:    print(f"Sieving primes up to {args.n_max:,}...")
tools/exp_modular_memory_spectrum.py:140:    primes = sieve_primes(args.n_max)
tools/exp_modular_memory_spectrum.py:141:    gaps = np.diff(primes).astype(float)
tools/exp_modular_memory_spectrum.py:142:    print(f"  {len(primes):,} primes, {len(gaps):,} gaps\n")
tools/exp_modular_memory_spectrum.py:150:    print("--- Real primes ---")
tools/exp_modular_memory_spectrum.py:151:    prime_results = []
tools/exp_modular_memory_spectrum.py:154:        prime_results.append(r)
tools/exp_modular_memory_spectrum.py:164:        cp = cramer_random_primes(args.n_max, rng)
tools/exp_modular_memory_spectrum.py:194:    for pr, cs in zip(prime_results, cramer_summary):
tools/exp_modular_memory_spectrum.py:211:    ord_vals = [r['ordering_pct'] for r in prime_results]
tools/exp_modular_memory_spectrum.py:216:    primo_ords = [r['ordering_pct'] for r in prime_results if is_primorial.get(r['base'])]
tools/exp_modular_memory_spectrum.py:217:    other_ords = [r['ordering_pct'] for r in prime_results if not is_primorial.get(r['base'])]
tools/exp_modular_memory_spectrum.py:220:    # 3. Confinement: do primes use fewer residue classes than expected?
tools/exp_modular_memory_spectrum.py:222:    for pr, cs in zip(prime_results, cramer_summary):
tools/exp_modular_memory_spectrum.py:225:        # But simpler: just compare prime vs Cramer occupancy
tools/exp_modular_memory_spectrum.py:226:        print(f"   mod {b:>3}: primes={pr['n_occupied']}/{pr['n_possible']}  "
tools/exp_modular_memory_spectrum.py:231:    primo_ord = [r['ordering_pct'] for r in prime_results if r['base'] in primo_bases]
tools/exp_modular_memory_spectrum.py:237:    print("5. Excess over Cramer (prime - Cramer ordering):")
tools/exp_modular_memory_spectrum.py:239:    for pr, cs in zip(prime_results, cramer_summary):
tools/exp_modular_memory_spectrum.py:252:        'n_primes': len(primes),
tools/exp_modular_memory_spectrum.py:257:        'prime_results': prime_results,
tools/dnd_engine.py:1267:    from sympy import isprime
tools/dnd_engine.py:1273:    primes_tested = 0
tools/dnd_engine.py:1275:        if not isprime(p) or p == 5:
tools/dnd_engine.py:1277:        primes_tested += 1
tools/dnd_engine.py:1282:    ratios = [periods[p] / p for p in range(2, 51) if isprime(p)]
tools/dnd_engine.py:1289:        'primes_tested': primes_tested,
tools/dnd_engine.py:2330:        'test': 'Comprimere F_1..F_N, misurare rapporto compressione',
tools/exp_scale_selective_perturbation.py:6:observables (SR, L1, L2, SR2, triple_var) collapse to 1 latent coordinate
tools/exp_scale_selective_perturbation.py:16:For each perturbation at multiple intensities, measure SR/L1/L2/SR2/triple_var,
tools/exp_scale_selective_perturbation.py:31:from sympy import nextprime
tools/exp_scale_selective_perturbation.py:34:def generate_primes(N):
tools/exp_scale_selective_perturbation.py:35:    """Generate first N prime gaps."""
tools/exp_scale_selective_perturbation.py:39:        p_next = nextprime(p)
tools/exp_scale_selective_perturbation.py:113:def triple_variance(gaps):
tools/exp_scale_selective_perturbation.py:126:        'triple_var': triple_variance(gaps),
tools/exp_scale_selective_perturbation.py:192:    obs_names = ['SR', 'L1', 'L2', 'SR2', 'triple_var']
tools/exp_scale_selective_perturbation.py:196:    for domain_name, gen_func in [('primes', lambda: generate_primes(N)),
tools/exp_scale_selective_perturbation.py:312:            print(f"{pert_name:<20} {ret['SR']:>8.3f} {ret['L1']:>8.3f} {ret['L2']:>8.3f} {ret['SR2']:>8.3f} {ret['triple_var']:>8.3f}")
tools/exp_two_channel_psd.py:13:  4. Scale dependence: does the channel balance shift at larger primes?
tools/exp_two_channel_psd.py:18:    python tools/exp_two_channel_psd.py [--n_primes N] [--nperseg S]
tools/exp_two_channel_psd.py:28:def sieve_primes(limit):
tools/exp_two_channel_psd.py:29:    is_prime = np.ones(limit, dtype=bool)
tools/exp_two_channel_psd.py:30:    is_prime[:2] = False
tools/exp_two_channel_psd.py:32:        if is_prime[i]:
tools/exp_two_channel_psd.py:33:            is_prime[i*i::i] = False
tools/exp_two_channel_psd.py:34:    return np.nonzero(is_prime)[0]
tools/exp_two_channel_psd.py:37:def get_primes(n_target):
tools/exp_two_channel_psd.py:40:    primes = sieve_primes(limit)
tools/exp_two_channel_psd.py:41:    while len(primes) < n_target:
tools/exp_two_channel_psd.py:43:        primes = sieve_primes(limit)
tools/exp_two_channel_psd.py:44:    return primes[:n_target]
tools/exp_two_channel_psd.py:47:def decompose_to_additive(primes):
tools/exp_two_channel_psd.py:57:    p = primes[primes > 3]
tools/exp_two_channel_psd.py:107:    parser.add_argument('--n_primes', type=int, default=2_000_000)
tools/exp_two_channel_psd.py:112:    print(f"Generating {args.n_primes:,} primes...")
tools/exp_two_channel_psd.py:113:    primes = get_primes(args.n_primes)
tools/exp_two_channel_psd.py:114:    print(f"Got {len(primes):,} primes up to {primes[-1]:,}")
tools/exp_two_channel_psd.py:117:    gaps_c, trans_c, mag_r, p_used = decompose_to_additive(primes)
tools/exp_two_channel_psd.py:236:        ("Small primes", 0, third),
tools/exp_two_channel_psd.py:237:        ("Medium primes", third, 2*third),
tools/exp_two_channel_psd.py:238:        ("Large primes", 2*third, n),
tools/exp_two_channel_psd.py:280:        'n_primes': int(len(primes)),
tools/dnd_zero_controllo2.py:86:def gap_cramer(n_primes, seed=42):
tools/dnd_zero_controllo2.py:91:    for i in range(n_primes - 1):
tools/dnd_zero_controllo2.py:147:        n_primes = len(gaps_p) + 1
tools/dnd_zero_controllo2.py:175:            gc = gap_cramer(n_primes, seed=s)
tools/dnd_quantization.py:41:def V_prime(r):
tools/dnd_quantization.py:106:        print(f"  V({r:.3f}) = {V(r):.4f}   V'({r:.3f}) = {V_prime(r):.4f}")
tools/dnd_quantization.py:130:    def V_eff_prime(r):
tools/dnd_quantization.py:166:    def V_map_prime(x):
tools/exp_coherence_robustness.py:18:    python tools/exp_coherence_robustness.py [--N_primes 6000000] [--n_seeds 20] [--n_boot 500]
tools/exp_coherence_robustness.py:27:def sieve_primes(limit):
tools/exp_coherence_robustness.py:28:    is_prime = np.ones(limit, dtype=bool)
tools/exp_coherence_robustness.py:29:    is_prime[:2] = False
tools/exp_coherence_robustness.py:31:        if is_prime[i]:
tools/exp_coherence_robustness.py:32:            is_prime[i*i::i] = False
tools/exp_coherence_robustness.py:33:    return np.where(is_prime)[0]
tools/exp_coherence_robustness.py:82:    r_prime = np.array([gap_ratio(w) for w in windows])
tools/exp_coherence_robustness.py:83:    r_prime = r_prime[~np.isnan(r_prime)]
tools/exp_coherence_robustness.py:95:    if len(r_prime) == 0 or len(r_shuf_all) == 0:
tools/exp_coherence_robustness.py:98:    mu_p, mu_s = r_prime.mean(), r_shuf_all.mean()
tools/exp_coherence_robustness.py:99:    se_p = r_prime.std() / np.sqrt(len(r_prime)) if len(r_prime) > 1 else 0
tools/exp_coherence_robustness.py:141:    parser.add_argument('--N_primes', type=int, default=6_000_000)
tools/exp_coherence_robustness.py:148:    # Generate primes
tools/exp_coherence_robustness.py:149:    est_limit = int(args.N_primes * (np.log(args.N_primes) + np.log(np.log(args.N_primes))) * 1.1)
tools/exp_coherence_robustness.py:150:    print(f"Sieving primes up to {est_limit:,}...")
tools/exp_coherence_robustness.py:151:    primes = sieve_primes(est_limit)[:args.N_primes]
tools/exp_coherence_robustness.py:152:    gaps = np.diff(primes).astype(float)
tools/exp_coherence_robustness.py:153:    print(f"Got {len(primes):,} primes, {len(gaps):,} gaps, max = {primes[-1]:,}")
tools/exp_coherence_robustness.py:250:        'N_primes': int(len(primes)),
tools/exp_coherence_robustness.py:251:        'max_prime': int(primes[-1]),
tools/exp_alpha_stability.py:4:acf(k) ~ -A * k^(-alpha) remains stable at 1.00 across prime scales,
tools/exp_alpha_stability.py:7:Reusable: accepts --n_primes, --n_windows, --n_surrogates, --max_lag.
tools/exp_alpha_stability.py:15:from sympy import primerange
tools/exp_alpha_stability.py:18:def get_primes(n):
tools/exp_alpha_stability.py:19:    """Get first n primes."""
tools/exp_alpha_stability.py:20:    # Estimate upper bound using prime counting function approximation
tools/exp_alpha_stability.py:25:    primes = list(primerange(2, upper))
tools/exp_alpha_stability.py:26:    while len(primes) < n:
tools/exp_alpha_stability.py:28:        primes = list(primerange(2, upper))
tools/exp_alpha_stability.py:29:    return np.array(primes[:n])
tools/exp_alpha_stability.py:76:    parser = argparse.ArgumentParser(description="Alpha exponent stability across prime scales")
tools/exp_alpha_stability.py:77:    parser.add_argument("--n_primes", type=int, default=6_000_000, help="Total primes to use")
tools/exp_alpha_stability.py:84:    print(f"Generating {args.n_primes:,} primes...")
tools/exp_alpha_stability.py:85:    primes = get_primes(args.n_primes)
tools/exp_alpha_stability.py:86:    gaps = np.diff(primes).astype(float)
tools/exp_alpha_stability.py:88:    print(f"Got {n_gaps:,} gaps. p_max = {primes[-1]:,}")
tools/exp_alpha_stability.py:93:        print("ERROR: not enough primes for requested windows")
tools/exp_alpha_stability.py:111:        p_center = primes[start + args.window_size // 2]
tools/exp_prime_mobius_pair_stratified_zero_gate.py:4:Follow-up to ``exp_prime_mobius_gap_stratified_zero_gate.py``.  That cycle
tools/exp_prime_mobius_pair_stratified_zero_gate.py:23:from exp_prime_mobius_gap_stratified_zero_gate import empirical_two_sided, gap_buckets
tools/exp_prime_mobius_pair_stratified_zero_gate.py:24:from exp_prime_mobius_interval_charge_gate import interval_charges, mobius_sieve, sieve_primes
tools/exp_prime_mobius_pair_stratified_zero_gate.py:222:    primes: np.ndarray,
tools/exp_prime_mobius_pair_stratified_zero_gate.py:224:    n_primes: int,
tools/exp_prime_mobius_pair_stratified_zero_gate.py:229:    segment = primes[offset : offset + n_primes + 1]
tools/exp_prime_mobius_pair_stratified_zero_gate.py:248:        "n_primes": n_primes,
tools/exp_prime_mobius_pair_stratified_zero_gate.py:250:        "prime_start": int(segment[0]),
tools/exp_prime_mobius_pair_stratified_zero_gate.py:251:        "prime_stop": int(segment[-1]),
tools/exp_prime_mobius_pair_stratified_zero_gate.py:265:    parser.add_argument("--out", default="tools/data/prime_mobius_pair_stratified_zero_gate_20260508_2134.json")
tools/exp_prime_mobius_pair_stratified_zero_gate.py:268:    primes = sieve_primes(args.limit)
tools/exp_prime_mobius_pair_stratified_zero_gate.py:273:        {"n_primes": 5_000, "offset": 0},
tools/exp_prime_mobius_pair_stratified_zero_gate.py:274:        {"n_primes": 10_000, "offset": 0},
tools/exp_prime_mobius_pair_stratified_zero_gate.py:275:        {"n_primes": 20_000, "offset": 0},
tools/exp_prime_mobius_pair_stratified_zero_gate.py:276:        {"n_primes": 5_000, "offset": 3_000},
tools/exp_prime_mobius_pair_stratified_zero_gate.py:277:        {"n_primes": 10_000, "offset": 7_000},
tools/exp_prime_mobius_pair_stratified_zero_gate.py:278:        {"n_primes": 20_000, "offset": 11_000},
tools/exp_prime_mobius_pair_stratified_zero_gate.py:280:    max_needed = max(c["offset"] + c["n_primes"] + 1 for c in conditions)
tools/exp_prime_mobius_pair_stratified_zero_gate.py:281:    if len(primes) <= max_needed:
tools/exp_prime_mobius_pair_stratified_zero_gate.py:282:        raise SystemExit(f"limit={args.limit} yields only {len(primes)} primes, need {max_needed}")
tools/exp_prime_mobius_pair_stratified_zero_gate.py:285:        run_condition(primes, mu, c["n_primes"], c["offset"], rng, args.permutations)
tools/exp_prime_mobius_pair_stratified_zero_gate.py:289:        "experiment": "prime_mobius_pair_stratified_zero_gate",
tools/exp_prime_mobius_pair_stratified_zero_gate.py:308:            f"N={result['n_primes']} offset={result['offset']} "
tools/dnd_indeterminazione.py:47:    L'area resta uguale. La forma si comprime lungo la direzione φ.
tools/dnd_indeterminazione.py:270:    def V_prime(r):
tools/dnd_indeterminazione.py:573:     Ma la forma cambia: si comprime lungo la direzione del rapporto
tools/dnd_trasmutazione.py:384:    primes = np.where(sieve)[0]
tools/dnd_trasmutazione.py:385:    gaps = np.diff(primes).astype(float)
tools/dnd_trasmutazione.py:516:    primes = np.where(sieve)[0]
tools/dnd_trasmutazione.py:517:    segnali['gap_primi'] = np.diff(primes).astype(float)[:N]
tools/exp_excess_scaling.py:3:Experiment: Does prime excess correlation grow with scale?
tools/exp_excess_scaling.py:5:Claim (BOUNDARY): <r>_primes > <r>_Cramer always, and the gap GROWS with n.
tools/exp_excess_scaling.py:9:- Generate primes up to 10^8 using sympy sieve
tools/exp_excess_scaling.py:14:- Compute delta_r = <r>_primes - mean(<r>_Cramer) per window
tools/exp_excess_scaling.py:24:# Generate primes up to 10^8
tools/exp_excess_scaling.py:26:print(f"Generating primes up to {N_MAX}...")
tools/exp_excess_scaling.py:29:primes = np.array(list(sieve._list))
tools/exp_excess_scaling.py:30:print(f"  {len(primes)} primes generated in {time.time()-t0:.1f}s")
tools/exp_excess_scaling.py:54:window_size = 5000  # primes per window
tools/exp_excess_scaling.py:55:indices = np.logspace(np.log10(1000), np.log10(len(primes) - window_size - 1), n_windows).astype(int)
tools/exp_excess_scaling.py:58:print(f"\nComputing <r> in {n_windows} windows of {window_size} primes each...")
tools/exp_excess_scaling.py:59:print(f"{'Window':>6} {'p_center':>12} {'<r>_prime':>10} {'<r>_Cramer':>10} {'delta_r':>10} {'z-score':>8}")
tools/exp_excess_scaling.py:63:    p_window = primes[idx:idx+window_size]
tools/exp_excess_scaling.py:66:    r_prime = gap_ratio(gaps)
tools/exp_excess_scaling.py:72:    delta_r = r_prime - r_cramer_mean
tools/exp_excess_scaling.py:79:        'r_prime': float(r_prime),
tools/exp_excess_scaling.py:88:    print(f"{i:>6} {p_center:>12.0f} {r_prime:>10.6f} {r_cramer_mean:>10.6f} {delta_r:>10.6f} {z:>8.2f}")
tools/exp_excess_scaling.py:130:print(f"  First window <r> = {results[0]['r_prime']:.4f} (small primes)")
tools/exp_excess_scaling.py:131:print(f"  Last window <r> = {results[-1]['r_prime']:.4f} (large primes)")
tools/exp_excess_scaling.py:134:if results[-1]['r_prime'] < results[0]['r_prime']:
tools/exp_excess_scaling.py:153:    'n_primes': len(primes),
tools/costo_materializzazione.py:19:    is_prime = np.ones(limit + 1, dtype=bool)
tools/costo_materializzazione.py:20:    is_prime[0] = is_prime[1] = False
tools/costo_materializzazione.py:22:        if is_prime[i]:
tools/costo_materializzazione.py:23:            is_prime[i*i::i] = False
tools/costo_materializzazione.py:24:    return np.where(is_prime)[0]
tools/costo_materializzazione.py:28:primes = sieve(1_500_000)
tools/costo_materializzazione.py:29:primes = primes[:100_000]
tools/costo_materializzazione.py:30:print(f"Primi generati: {len(primes)}, range [{primes[0]}, {primes[-1]}]")
tools/costo_materializzazione.py:33:gaps = np.diff(primes)
tools/costo_materializzazione.py:216:gap_mod6 = gaps % 6
tools/costo_materializzazione.py:217:counts_mod6 = Counter(gap_mod6)
tools/costo_materializzazione.py:220:for r in sorted(counts_mod6.keys()):
tools/costo_materializzazione.py:221:    c = counts_mod6[r]
tools/costo_materializzazione.py:225:n_zero_mod6 = counts_mod6.get(0, 0)
tools/costo_materializzazione.py:226:n_nonzero_mod6 = total_gaps - n_zero_mod6
tools/costo_materializzazione.py:227:frac_zero = n_zero_mod6 / total_gaps
tools/costo_materializzazione.py:231:n_2mod6 = counts_mod6.get(2, 0)
tools/costo_materializzazione.py:232:n_4mod6 = counts_mod6.get(4, 0)
tools/costo_materializzazione.py:233:n_24 = n_2mod6 + n_4mod6
tools/costo_materializzazione.py:235:    frac_2_in_24 = n_2mod6 / n_24
tools/costo_materializzazione.py:240:    ratio_0_vs_24 = n_zero_mod6 / n_24
tools/costo_materializzazione.py:254:classes = sorted(counts_mod6.keys())
tools/costo_materializzazione.py:257:        n1 = counts_mod6[c1]
tools/costo_materializzazione.py:258:        n2 = counts_mod6[c2]
tools/costo_materializzazione.py:270:        n1 = counts_mod6[c1]
tools/costo_materializzazione.py:271:        n2 = counts_mod6[c2]
tools/data/reports/agent_20260507_0923.md:7:observables_used: [SR, SR2, L1, L2, triple_var]
tools/data/reports/agent_20260507_0923.md:25:- `prime_gaps_first`: primi 4096 gap fra primi.
tools/data/reports/agent_20260507_0923.md:41:| prime_gaps_first | SR, L1, triple_var | 3.000 | 0.650 | 3.270 | 0.30 |
tools/data/reports/agent_20260507_0923.md:49:| prime_gaps_first | SR, L1, triple_var | 3.000 | 0.250 | 3.288 | 0.30 |
tools/data/reports/agent_20260507_0923.md:59:   Prime gaps carry one-sided support on `SR`, `L1`, and `triple_var`.
tools/data/reports/agent_20260507_0923.md:77:   itinerary, `SR/SR2/L1/L2/triple_var` can be blank.
tools/data/reports/agent_20260507_0923.md:118:L5 re-discovery vs discovery: prime gap and zeta spacing order-vs-shuffle tests
tools/exp_coherence_length.py:3:exp_coherence_length.py — Coherence length of the dipolar ordering in prime gaps.
tools/exp_coherence_length.py:6:from <r>_shuffle? This measures the scale below which primes look random and
tools/exp_coherence_length.py:14:    python tools/exp_coherence_length.py [--N_primes 6000000] [--n_surrogates 20]
tools/exp_coherence_length.py:23:def sieve_primes(limit):
tools/exp_coherence_length.py:25:    is_prime = np.ones(limit, dtype=bool)
tools/exp_coherence_length.py:26:    is_prime[:2] = False
tools/exp_coherence_length.py:28:        if is_prime[i]:
tools/exp_coherence_length.py:29:            is_prime[i*i::i] = False
tools/exp_coherence_length.py:30:    return np.where(is_prime)[0]
tools/exp_coherence_length.py:51:    - Return mean, std of <r>_prime and <r>_shuffle, plus z-score
tools/exp_coherence_length.py:60:        r_prime_list = []
tools/exp_coherence_length.py:67:            r_prime_list.append(gap_ratio(window))
tools/exp_coherence_length.py:74:        r_prime_mean = np.mean(r_prime_list)
tools/exp_coherence_length.py:75:        r_prime_std = np.std(r_prime_list)
tools/exp_coherence_length.py:82:        # z-score: how far is the prime mean from the shuffle distribution?
tools/exp_coherence_length.py:83:        # Use standard error of the mean for the prime windows
tools/exp_coherence_length.py:84:        se_prime = r_prime_std / np.sqrt(n_windows)
tools/exp_coherence_length.py:86:        se_combined = np.sqrt(se_prime**2 + se_shuf**2)
tools/exp_coherence_length.py:87:        z = (r_prime_mean - r_shuf_mean) / se_combined if se_combined > 0 else 0
tools/exp_coherence_length.py:91:            'r_prime_mean': float(r_prime_mean),
tools/exp_coherence_length.py:92:            'r_prime_std': float(r_prime_std),
tools/exp_coherence_length.py:95:            'delta_r': float(r_prime_mean - r_shuf_mean),
tools/exp_coherence_length.py:104:def measure_coherence_by_scale(all_gaps, all_primes, window_lengths,
tools/exp_coherence_length.py:107:    Split gaps by prime scale (ln p), measure coherence length at each scale.
tools/exp_coherence_length.py:108:    Tests if L* grows with prime scale (POISSON_CONVERGENCE prediction).
tools/exp_coherence_length.py:111:    ln_p = np.log(all_primes[1:N+1])  # ln(p) for each gap
tools/exp_coherence_length.py:148:    parser.add_argument('--N_primes', type=int, default=6_000_000)
tools/exp_coherence_length.py:154:    # Generate primes
tools/exp_coherence_length.py:156:    est_limit = int(args.N_primes * (np.log(args.N_primes) + np.log(np.log(args.N_primes))) * 1.1)
tools/exp_coherence_length.py:157:    print(f"Sieving primes up to {est_limit:,}...")
tools/exp_coherence_length.py:158:    primes = sieve_primes(est_limit)
tools/exp_coherence_length.py:159:    primes = primes[:args.N_primes]
tools/exp_coherence_length.py:160:    print(f"Got {len(primes):,} primes, max = {primes[-1]:,}")
tools/exp_coherence_length.py:162:    gaps = np.diff(primes).astype(float)
tools/exp_coherence_length.py:175:    print(f"\n{'L':>8} | {'<r>_prime':>10} | {'<r>_shuf':>10} | {'delta_r':>10} | {'z':>8}")
tools/exp_coherence_length.py:178:        print(f"{r['L']:>8} | {r['r_prime_mean']:>10.5f} | {r['r_shuf_mean']:>10.5f} | {r['delta_r']:>10.5f} | {r['z_score']:>8.1f}")
tools/exp_coherence_length.py:189:    print("\n=== Part 2: Coherence length by prime scale ===")
tools/exp_coherence_length.py:191:        gaps, primes, window_lengths,
tools/exp_coherence_length.py:195:    print(f"\n{'ln(p)':>8} | {'L*':>8} | {'<r>_prime(L=1000)':>18} | {'delta_r(L=1000)':>16}")
tools/exp_coherence_length.py:204:        r1k_str = f"{r1k['r_prime_mean']:.5f}" if r1k else "N/A"
tools/exp_coherence_length.py:240:        'N_primes': int(len(primes)),
tools/exp_coherence_length.py:241:        'max_prime': int(primes[-1]),
tools/exp_ricci_primes.py:2:Experiment: Discrete Ricci scalar from prime metric g_n = (p_n/2)^2
tools/exp_ricci_primes.py:20:from sympy import primerange
tools/exp_ricci_primes.py:24:# Generate primes
tools/exp_ricci_primes.py:25:print("Generating primes up to 10^7...")
tools/exp_ricci_primes.py:26:primes = np.array(list(primerange(2, 10_000_000)), dtype=np.float64)
tools/exp_ricci_primes.py:27:N = len(primes)
tools/exp_ricci_primes.py:28:print(f"N = {N} primes")
tools/exp_ricci_primes.py:31:t = np.log(primes)          # conformal time
tools/exp_ricci_primes.py:32:a = primes / 2.0            # scale factor
tools/exp_ricci_primes.py:35:# dt between consecutive primes
tools/exp_ricci_primes.py:41:a_prime = da / dt            # da/dt at midpoints
tools/exp_ricci_primes.py:44:da_prime = np.diff(a_prime)
tools/exp_ricci_primes.py:45:a_double_prime = da_prime / dt_mid
tools/exp_ricci_primes.py:49:R_n = 2.0 * a_double_prime / a_interior
tools/exp_ricci_primes.py:69:    p_center = primes[1 + start + window_size // 2]
tools/exp_ricci_primes.py:116:gaps = np.diff(primes)
tools/exp_ricci_primes.py:120:    surr_primes = np.zeros(N)
tools/exp_ricci_primes.py:121:    surr_primes[0] = primes[0]
tools/exp_ricci_primes.py:122:    surr_primes[1:] = primes[0] + np.cumsum(shuffled_gaps)
tools/exp_ricci_primes.py:124:    surr_t = np.log(surr_primes)
tools/exp_ricci_primes.py:125:    surr_a = surr_primes / 2.0
tools/exp_ricci_primes.py:129:    surr_a_prime = surr_da / surr_dt
tools/exp_ricci_primes.py:130:    surr_da_prime = np.diff(surr_a_prime)
tools/exp_ricci_primes.py:131:    surr_a_double_prime = surr_da_prime / surr_dt_mid
tools/exp_ricci_primes.py:132:    surr_R = 2.0 * surr_a_double_prime / surr_a[1:-1]
tools/exp_ricci_primes.py:185:    "experiment": "exp_ricci_primes",
tools/exp_ricci_primes.py:190:    "N_primes": N,
tools/exp_ricci_primes.py:210:with open("/opt/MM_D-ND/tools/data/reports/exp_ricci_primes.json", "w") as f:
tools/exp_ricci_primes.py:213:print(f"\nResults saved to data/reports/exp_ricci_primes.json")
tools/exp_3d_boundary_layers.py:7:  - Layer 2 (triples, Mk2) → SR2, triple_var (depth)
tools/exp_3d_boundary_layers.py:14:Tests on: primes, GUE, Poisson baseline.
tools/exp_3d_boundary_layers.py:27:def get_primes(n_max):
tools/exp_3d_boundary_layers.py:79:def obs_triple_var(gaps):
tools/exp_3d_boundary_layers.py:93:        'triple_var': obs_triple_var,
tools/exp_3d_boundary_layers.py:159:    parser.add_argument('--N', type=int, default=50000, help='Number of primes')
tools/exp_3d_boundary_layers.py:169:    print(f"N_primes={args.N}, n_alpha={args.n_alpha}, n_trials={args.n_trials}")
tools/exp_3d_boundary_layers.py:173:    primes = get_primes(args.N * 20)[:args.N]
tools/exp_3d_boundary_layers.py:174:    prime_gaps = np.diff(primes).astype(float)
tools/exp_3d_boundary_layers.py:175:    prime_results, prime_orig, prime_bl_mean, prime_bl_std = run_crossover(
tools/exp_3d_boundary_layers.py:176:        prime_gaps, alphas, args.n_trials, rng, "Primes"
tools/exp_3d_boundary_layers.py:198:    obs_names = ['SR', 'L1', 'SR2', 'triple_var']
tools/exp_3d_boundary_layers.py:199:    layer_map = {'SR': 'L1_pair', 'L1': 'L1_pair', 'SR2': 'L2_triple', 'triple_var': 'L2_triple'}
tools/exp_3d_boundary_layers.py:209:        ('primes', prime_results, prime_orig, prime_bl_mean, prime_bl_std),
tools/exp_3d_boundary_layers.py:232:        l2_crit = np.mean([seq_data['critical_alpha_50'][o] for o in ['SR2', 'triple_var']])
tools/exp_3d_boundary_layers.py:250:    prime_sep = output['sequences']['primes']['layer_separation']['delta']
tools/exp_3d_boundary_layers.py:255:    print(f"Layer separation Δα: Primes={prime_sep:+.3f}, GUE={gue_sep:+.3f}, Poisson={pois_sep:+.3f}")
tools/exp_3d_boundary_layers.py:258:        'prime_layer_separation': float(prime_sep),
tools/exp_selective_layer_decoupling.py:41:def get_primes(n_max):
tools/exp_selective_layer_decoupling.py:50:def gen_prime_gaps(N):
tools/exp_selective_layer_decoupling.py:51:    primes = get_primes(int(N * 15))[:N + 1]
tools/exp_selective_layer_decoupling.py:52:    return np.diff(primes).astype(float)
tools/exp_selective_layer_decoupling.py:177:def triple_var(gaps):
tools/exp_selective_layer_decoupling.py:190:    'triple_var': triple_var,
tools/exp_selective_layer_decoupling.py:194:LAYER2_OBS = ['SR2', 'L2', 'cond_entropy', 'triple_var']
tools/exp_selective_layer_decoupling.py:264:        'primes': gen_prime_gaps(args.N),
tools/exp_spectral_rigidity.py:18:Domains: primes, GUE matrices, coupled_osc, string_vib, percolation,
tools/exp_spectral_rigidity.py:85:        ('primes',      {'gen': lambda: gaps_from_domain('numeri_primi'),      'type': 'dist-GUE'}),
tools/exp_boundary_residual_beta_absent_audit.py:7:row-local windows and the same canonical observable gate used by the prior
tools/exp_boundary_residual_beta_absent_audit.py:66:    prime = row_spacings("numeri_primi")
tools/exp_boundary_residual_beta_absent_audit.py:67:    prime = normalize(prime[: args.prime_gaps])
tools/exp_boundary_residual_beta_absent_audit.py:74:            "base": prime,
tools/exp_boundary_residual_beta_absent_audit.py:76:            "generator": "dnd_autoricerca.genera_segnale -> prime gap spacings",
tools/exp_boundary_residual_beta_absent_audit.py:77:            "source_n_gaps": int(len(prime)),
tools/exp_boundary_residual_beta_absent_audit.py:183:            "claim": "the two residual beta-absent blanks are structural only if beta_absent_blank persists across row-local 1024-gap windows",
tools/exp_boundary_residual_beta_absent_audit.py:186:            "denominator": "two open BOUNDARY rows; full row plus row-local 1024-gap windows",
tools/exp_boundary_residual_beta_absent_audit.py:187:            "non_possible": "residual class if a target recovers beta or loses support under row-local windows",
tools/exp_boundary_residual_beta_absent_audit.py:222:    parser.add_argument("--prime-gaps", type=int, default=4096)
tools/exp_cross_domain_dipolar_direction.py:13:  Structured: primes, logistic map r=4
tools/exp_cross_domain_dipolar_direction.py:28:def get_primes(n_max):
tools/exp_cross_domain_dipolar_direction.py:162:    primes = get_primes(N * 25)
tools/exp_cross_domain_dipolar_direction.py:163:    p = primes[primes > 10000][:N + 1]
tools/exp_cross_domain_dipolar_direction.py:164:    prime_gaps = np.diff(p).astype(float)
tools/exp_cross_domain_dipolar_direction.py:165:    prime_dv = dipolar_vector(prime_gaps, n_shuffle)
tools/exp_cross_domain_dipolar_direction.py:166:    print(f"  N={len(prime_gaps)}, theta={prime_dv['theta']:.1f}, "
tools/exp_cross_domain_dipolar_direction.py:167:          f"|d|={prime_dv['magnitude']:.4f}, dL1/dSR={prime_dv['dL1_over_dSR']:.3f}")
tools/exp_cross_domain_dipolar_direction.py:168:    print(f"  z_SR={prime_dv['z_SR']:.1f}, z_L1={prime_dv['z_L1']:.1f}")
tools/exp_cross_domain_dipolar_direction.py:172:    domains['primes'] = {'class': 'unique', 'single': prime_dv}
tools/exp_cross_domain_dipolar_direction.py:272:    # Reference: primes
tools/exp_cross_domain_dipolar_direction.py:273:    prime_theta = prime_dv['theta']
tools/exp_cross_domain_dipolar_direction.py:293:    # Each RMT vs primes
tools/exp_cross_domain_dipolar_direction.py:296:        sep = prime_theta - domains[name]['theta_mean']
tools/exp_cross_domain_dipolar_direction.py:304:    print(f"    Primes:  {prime_dv['magnitude']:.4f}")
tools/exp_acf_z6z_mechanism.py:15:    python tools/exp_acf_z6z_mechanism.py [--n_primes N] [--max_lag K] [--n_surrogates S]
tools/exp_acf_z6z_mechanism.py:24:def sieve_primes(n_max):
tools/exp_acf_z6z_mechanism.py:34:def get_primes(n_primes):
tools/exp_acf_z6z_mechanism.py:35:    """Get first n_primes primes."""
tools/exp_acf_z6z_mechanism.py:37:    if n_primes < 6:
tools/exp_acf_z6z_mechanism.py:40:        upper = int(n_primes * (math.log(n_primes) + math.log(math.log(n_primes))) * 1.3) + 100
tools/exp_acf_z6z_mechanism.py:41:    primes = sieve_primes(upper)
tools/exp_acf_z6z_mechanism.py:42:    while len(primes) < n_primes:
tools/exp_acf_z6z_mechanism.py:44:        primes = sieve_primes(upper)
tools/exp_acf_z6z_mechanism.py:45:    return primes[:n_primes]
tools/exp_acf_z6z_mechanism.py:75:    parser.add_argument('--n_primes', type=int, default=500_000)
tools/exp_acf_z6z_mechanism.py:82:    print(f"Generating {args.n_primes} primes...")
tools/exp_acf_z6z_mechanism.py:83:    primes = get_primes(args.n_primes)
tools/exp_acf_z6z_mechanism.py:84:    gaps = np.diff(primes).astype(float)
tools/exp_acf_z6z_mechanism.py:86:    ln_p = np.log(primes[:-1].astype(float))
tools/exp_acf_z6z_mechanism.py:87:    print(f"N gaps: {n_gaps}, p_max: {primes[-1]}, ln(p): {ln_p[0]:.1f} - {ln_p[-1]:.1f}")
tools/exp_acf_z6z_mechanism.py:206:    # 3e: Anti-correlated surrogates without trend (Gaussian AR(1) with acf1 matching primes)
tools/exp_acf_z6z_mechanism.py:207:    acf1_prime = float(acf_raw[0])
tools/exp_acf_z6z_mechanism.py:210:        # AR(1) with phi = acf1_prime (negative)
tools/exp_acf_z6z_mechanism.py:214:            ar[i] = acf1_prime * ar[i - 1] + np.random.normal(0, 1)
tools/exp_acf_z6z_mechanism.py:218:    print(f"  AR(1) phi={acf1_prime:.3f} (no trend): xover={np.mean(xovers_ar):.1f}+/-{np.std(xovers_ar):.1f}, n_neg={np.mean(nnegs_ar):.1f}")
tools/exp_acf_z6z_mechanism.py:226:            ar[i] = acf1_prime * ar[i - 1] + np.random.normal(0, 1)
tools/exp_acf_z6z_mechanism.py:227:        # Add trend to match prime gap mean
tools/exp_acf_z6z_mechanism.py:241:        ("Real prime gaps (raw)", xover_raw, nneg_raw),
tools/exp_acf_z6z_mechanism.py:242:        ("Real prime gaps (normalized)", xover_norm, nneg_norm),
tools/exp_acf_z6z_mechanism.py:317:        'n_primes': args.n_primes,
tools/exp_acf_z6z_mechanism.py:319:        'p_max': int(primes[-1]),
tools/exp_acf_z6z_mechanism.py:365:                'phi': float(acf1_prime),
tools/exp_number_variance.py:3:Experiment: Number variance Sigma^2(L) for primes at multiple scales.
tools/exp_number_variance.py:10:If primes drift toward Poisson at large scale, the number variance
tools/exp_number_variance.py:11:should become more linear (steeper) at larger primes.
tools/exp_number_variance.py:15:from sympy import primerange
tools/exp_number_variance.py:21:    (1_000, 50_000),       # small primes
tools/exp_number_variance.py:30:def unfolded_primes(primes):
tools/exp_number_variance.py:31:    """Unfold primes using smooth part of counting function: n(p) ~ p/ln(p)."""
tools/exp_number_variance.py:32:    p = np.array(primes, dtype=float)
tools/exp_number_variance.py:71:    print(f"\n--- Scale: primes in [{p_start:,}, {p_end:,}] ---")
tools/exp_number_variance.py:73:    primes = list(primerange(p_start, p_end))
tools/exp_number_variance.py:74:    n_primes = len(primes)
tools/exp_number_variance.py:75:    print(f"  N primes: {n_primes}")
tools/exp_number_variance.py:78:    uf = unfolded_primes(primes)
tools/exp_number_variance.py:80:    # Number variance for primes
tools/exp_number_variance.py:81:    sv_primes = number_variance(uf, L_VALUES)
tools/exp_number_variance.py:99:    coeffs_prime = np.polyfit(log_L, sv_primes, 1)
tools/exp_number_variance.py:104:    lin_coeffs_prime = np.polyfit(L_VALUES, sv_primes, 1)
tools/exp_number_variance.py:108:    ss_tot = np.sum((sv_primes - np.mean(sv_primes))**2)
tools/exp_number_variance.py:110:    log_pred = np.polyval(coeffs_prime, log_L)
tools/exp_number_variance.py:111:    ss_res_log = np.sum((sv_primes - log_pred)**2)
tools/exp_number_variance.py:114:    lin_pred = np.polyval(lin_coeffs_prime, L_VALUES)
tools/exp_number_variance.py:115:    ss_res_lin = np.sum((sv_primes - lin_pred)**2)
tools/exp_number_variance.py:118:    print(f"  Log-fit slope (primes):   {coeffs_prime[0]:.4f}  (GUE={2/np.pi**2:.4f})")
tools/exp_number_variance.py:120:    print(f"  Linear slope (primes):    {lin_coeffs_prime[0]:.6f}")
tools/exp_number_variance.py:125:    print(f"\n  L    | Σ²_prime  | Σ²_shuf  | Σ²_GUE  | Σ²_Poisson")
tools/exp_number_variance.py:128:        print(f"  {L:4d} | {sv_primes[i]:8.4f} | {sv_shuffled[i]:8.4f} | {sv_gue[i]:7.4f} | {sv_poisson[i]:8.1f}")
tools/exp_number_variance.py:131:        "n_primes": n_primes,
tools/exp_number_variance.py:133:        "log_slope_prime": float(coeffs_prime[0]),
tools/exp_number_variance.py:135:        "lin_slope_prime": float(lin_coeffs_prime[0]),
tools/exp_number_variance.py:149:    print(f"{label:<12} | {r['log_slope_prime']:>10.4f} | {r['r2_log']:>7.4f} | {r['r2_lin']:>7.4f} | {r['better_fit']:>10}")
tools/exp_number_variance.py:153:log_slopes = [r["log_slope_prime"] for r in all_results.values()]
tools/exp_number_variance.py:166:    "claim_under_test": "BOUNDARY: GUE->Poisson drift in primes",
tools/exp_dipolar_angle_reference.py:3:exp_dipolar_angle_reference.py — Dipolar angle of GUE, Poisson, and primes
tools/exp_dipolar_angle_reference.py:8:3. Cramer random primes (same density, no correlations)
tools/exp_dipolar_angle_reference.py:9:4. Real primes
tools/exp_dipolar_angle_reference.py:12:relative to shuffle baseline. This answers: is the prime angle (-150 deg)
tools/exp_dipolar_angle_reference.py:24:def get_primes(n_max):
tools/exp_dipolar_angle_reference.py:120:def generate_cramer_gaps(primes):
tools/exp_dipolar_angle_reference.py:121:    """Generate Cramer random model: same local density as primes, no correlations."""
tools/exp_dipolar_angle_reference.py:122:    gaps = np.diff(primes).astype(float)
tools/exp_dipolar_angle_reference.py:124:    # For each prime p_n, generate gap from geometric with mean ~ ln(p_n)
tools/exp_dipolar_angle_reference.py:127:        mean_gap = np.log(primes[i+1]) if primes[i+1] > 2 else 1.0
tools/exp_dipolar_angle_reference.py:137:    # 1. Real primes
tools/exp_dipolar_angle_reference.py:138:    print(f"Computing primes up to ~{N*20}...")
tools/exp_dipolar_angle_reference.py:139:    primes = get_primes(N * 20)
tools/exp_dipolar_angle_reference.py:140:    # Use primes in the range [1e4, ...] to avoid small-prime effects
tools/exp_dipolar_angle_reference.py:141:    mask = primes > 10000
tools/exp_dipolar_angle_reference.py:142:    primes_filtered = primes[mask][:N]
tools/exp_dipolar_angle_reference.py:143:    prime_gaps = np.diff(primes_filtered).astype(float)
tools/exp_dipolar_angle_reference.py:145:    print(f"  Using {len(prime_gaps)} prime gaps (p > 10000)")
tools/exp_dipolar_angle_reference.py:146:    theta_p, dsr_p, dl1_p, sr_p, l1_p, sr_ps, l1_ps = dipolar_angle(prime_gaps)
tools/exp_dipolar_angle_reference.py:147:    results['primes'] = {
tools/exp_dipolar_angle_reference.py:158:        gue_gaps = generate_gue_gaps(len(prime_gaps))
tools/exp_dipolar_angle_reference.py:178:        goe_gaps = generate_goe_gaps(len(prime_gaps))
tools/exp_dipolar_angle_reference.py:198:        poi_gaps = generate_poisson_gaps(len(prime_gaps))
tools/exp_dipolar_angle_reference.py:213:    # 5. Cramer random primes
tools/exp_dipolar_angle_reference.py:218:        cramer_gaps = generate_cramer_gaps(primes_filtered)
tools/exp_dipolar_angle_reference.py:239:    print(f"{'Primes':<12} {results['primes']['theta']:>7.1f}{'':>11} {results['primes']['SR']:<10.4f} {results['primes']['L1']:<10.4f}")
tools/exp_dipolar_angle_reference.py:246:    print("\nAngular separation from primes:")
tools/exp_dipolar_angle_reference.py:248:        sep = results['primes']['theta'] - results[name]['theta_mean']
tools/exp_boundary_shuffle_audit.py:16:Domains: primes, zeta zeros, random matrix (GUE), Fibonacci spectrum,
tools/exp_boundary_shuffle_audit.py:70:def gen_primes(n=100000):
tools/exp_boundary_shuffle_audit.py:78:    primes = np.where(sieve)[0][:n]
tools/exp_boundary_shuffle_audit.py:79:    return np.diff(primes).astype(float)
tools/exp_boundary_shuffle_audit.py:243:    'primes':              ('Numeri primi (100K)',        gen_primes),
tools/data/reports/agent_20260410_0330.md:9:> acf(k) = -A/k with A ~ 0.037 (overall). Does A depend on prime scale?
tools/data/reports/agent_20260410_0330.md:14:The 1/k anti-correlation law (ACF_1K_LAW) gives a single amplitude A ~ 0.037 for 5.76M primes.
tools/data/reports/agent_20260410_0330.md:21:- **Data**: 6M primes (max p = 1.04 x 10^8), computed via sympy.primerange
tools/data/reports/agent_20260410_0330.md:26:- **Observable**: A(ln p) — amplitude of the 1/k law as a function of log-prime-scale
tools/data/reports/agent_20260410_0330.md:30:| Window | p_center     | ln(p)  | A_prime  | R^2    | |acf1|   | z-score |
tools/data/reports/agent_20260410_0330.md:70:   At small primes, |acf1| slightly exceeds A (lag-1 is the strongest contributor to the fit).
tools/data/reports/agent_20260410_0330.md:71:   At large primes, |acf1| < A (lag-1 decays 1.3x faster than the average across all lags).
tools/data/reports/agent_20260410_0330.md:102:   at large primes? A steeper power law would concentrate anti-correlation at short lags.
tools/data/reports/agent_20260410_0330.md:106:- Script: `tools/exp_acf_amplitude_scaling.py` (reusable with --n_primes, --n_windows, --max_lag)
tools/data/reports/agent_20260430_0330.md:9:> The three-layer decomposition of prime gap memory (algebraic / statistical / magnitude) predicts that the algebraic layer (mod-3 self-transition prohibition) should extend to other small primes. M2/M1 (Markov depth ratio) might be a universal invariant.
tools/data/reports/agent_20260430_0330.md:13:For moduli q = 3, 5, 7, 11, 13: what is the Markov structure of consecutive prime gap residues? Is mod-3 unique or the first of a family? Does M2/M1 converge to a constant?
tools/data/reports/agent_20260430_0330.md:17:- **Data**: 200,000 consecutive prime gaps (primes up to ~3.9M)
tools/data/reports/agent_20260430_0330.md:39:**Mod-3**: Residue 1 = 0.000, Residue 2 = 0.00002. z = -169, -175. **One violation** in 200K gaps: primes (3, 5, 7), gaps (2, 2) — the small-prime edge case. For p > 5, zero self-transitions.
tools/data/reports/agent_20260430_0330.md:59:The marginal distribution becomes increasingly non-uniform for larger q. Gaps concentrate on even multiples of small primes (2, 6, 12, 30...), which hit fewer residue classes as q grows. This drives the growth of I1 with q — **a distributional effect, not an ordering effect**.
tools/data/reports/agent_20260430_0330.md:63:1. **Mod-3 is unique — algebraic prohibition, not a family.** Self-transition of non-zero residues is exactly zero for p > 5. No other modulus tested shows this. The mechanism: primes > 3 are 1 or 5 mod 6, so gaps are 2 or 4 mod 6, and consecutive gaps must alternate mod-3 residue classes (gap g1 mod 3 = r implies gap g2 mod 3 must be non-r for the triplet to be all-prime). This is specific to 3 | 6.
tools/data/reports/agent_20260430_0330.md:65:2. **Mod-5 has a qualitatively different Markov structure: M2/M1 = 2.24 (order-2 dominates order-1).** This is the only modulus where the three-body correlation exceeds the pairwise correlation. The near-uniform marginal distribution at mod-5 (ratio 1.57) means order-1 transitions carry little information, but order-2 (gap triplets) reveals hidden structure. This anomaly appears specific to q=5 — the smallest prime not dividing 6.
tools/data/reports/agent_20260430_0330.md:67:3. **For q = 7, 11, 13: M2/M1 ranges from 0.54 to 0.73 (order-1 dominates).** These moduli follow the Lemke Oliver-Soundararajan pattern (2016): consecutive prime residues mod q exhibit biases explained by the Hardy-Littlewood prime k-tuples conjecture. The bias is statistical, not algebraic — it strengthens with q because the marginal distribution becomes more non-uniform (L2: the I1 growth is distributional, not ordering).
tools/data/reports/agent_20260430_0330.md:71:5. **Literature context (L5):** The self-transition suppression at all moduli is a manifestation of the Lemke Oliver-Soundararajan bias (2016, "Unexpected biases in the distribution of consecutive primes"). The mod-3 exact prohibition is a known consequence of the Z/6Z structure of primes. **What appears new**: the M2/M1 anomaly at mod-5 (order-2 dominance) and the non-monotonic M2/M1 profile across moduli. These are not discussed in LOS, which focuses on order-1 biases. However, this may be a consequence of their framework — needs verification.
tools/data/reports/agent_20260430_0330.md:79:- NEW: Mod-5 is anomalous. M2/M1 > 1 means the prime gap sequence at mod-5 is a second-order Markov process where pairwise statistics are near-trivial but triplet statistics carry significant structure. This distinguishes q=5 from all other tested moduli.
tools/data/reports/agent_20260430_0330.md:83:- **Due radici** (dipolo): algebraico (mod-3, esatto, eterno) / statistico (mod-5,7,11,13, bias, decade-con-scala). Invertiti: l'uno proibisce, l'altro supprime. L'uno e un teorema, l'altro una tendenza.
tools/data/observatorio/meta_metodo_giro_2026-05-07.md:37:- **Meccaniche persistenti vs regole prescrittive** — le prime ricevono il movimento, le seconde lo bloccano
tools/data/reports/agent_20260507_2310.md:6:**observables_used**: blank_edge_is_GQ_count, any_deposit_on_blank_count, full_scale_law_count, shell_face_count - osservabili domain-native del denominatore blank-shell; nessun osservabile canonico SR/SR2/L1/L2/triple_var usato
tools/triggers/finding_eligibility_gate.py:94:        (r"\d{3,}\s+(prime|gap|window)", 2, "regex"),
tools/triggers/blueprint_generator.py:141:    # Genera input set (es. primes_to_N) per N piccolo (smoke test)
tools/triggers/application_designer.py:95:                "[TARGET] dataset di input ben definito (es. primes_to_N)",
tools/exp_acf_stationarity.py:5:Tests whether the sign flip at lag ~7 in prime gap ACF is structural
tools/exp_acf_stationarity.py:24:    python tools/exp_acf_stationarity.py [--n_primes N] [--max_lag L]
tools/exp_acf_stationarity.py:32:def sieve_primes(limit):
tools/exp_acf_stationarity.py:34:    is_prime = np.ones(limit + 1, dtype=bool)
tools/exp_acf_stationarity.py:35:    is_prime[:2] = False
tools/exp_acf_stationarity.py:37:        if is_prime[i]:
tools/exp_acf_stationarity.py:38:            is_prime[i*i::i] = False
tools/exp_acf_stationarity.py:39:    return np.nonzero(is_prime)[0]
tools/exp_acf_stationarity.py:42:def get_primes(n):
tools/exp_acf_stationarity.py:43:    """Get at least n primes via sieve."""
tools/exp_acf_stationarity.py:46:    primes = sieve_primes(upper)
tools/exp_acf_stationarity.py:47:    while len(primes) < n:
tools/exp_acf_stationarity.py:49:        primes = sieve_primes(upper)
tools/exp_acf_stationarity.py:50:    return primes[:n]
tools/exp_acf_stationarity.py:129:    parser.add_argument("--n_primes", type=int, default=500_000)
tools/exp_acf_stationarity.py:137:    # Generate primes
tools/exp_acf_stationarity.py:138:    print(f"Generating {args.n_primes:,} primes...")
tools/exp_acf_stationarity.py:139:    primes = get_primes(args.n_primes)
tools/exp_acf_stationarity.py:140:    N = len(primes)
tools/exp_acf_stationarity.py:141:    print(f"Got {N:,} primes, p_max = {primes[-1]:,}")
tools/exp_acf_stationarity.py:143:    gaps_raw = np.diff(primes).astype(float)
tools/exp_acf_stationarity.py:147:    ln_p = np.log(primes[:-1].astype(float))
tools/exp_acf_stationarity.py:243:        p_center = primes[start + window_size // 2]
tools/exp_acf_stationarity.py:342:        'n_primes': int(N),
tools/exp_det_drift.py:3:exp_det_drift.py — Measure det(M) of gap transfer matrix across prime scales.
tools/exp_det_drift.py:8:  If primes drift toward Poisson, det(M) should drift toward +1.
tools/exp_det_drift.py:11:  For each scale window of N consecutive prime gaps g_i:
tools/exp_det_drift.py:22:from sympy import nextprime
tools/exp_det_drift.py:26:def generate_primes(n_primes, start=2):
tools/exp_det_drift.py:27:    """Generate n_primes primes starting from start."""
tools/exp_det_drift.py:28:    primes = []
tools/exp_det_drift.py:30:    for _ in range(n_primes):
tools/exp_det_drift.py:31:        primes.append(p)
tools/exp_det_drift.py:32:        p = int(nextprime(p))
tools/exp_det_drift.py:33:    return np.array(primes)
tools/exp_det_drift.py:56:    # Generate primes in scale windows
tools/exp_det_drift.py:66:        primes = generate_primes(window_size + 1, start=s)
tools/exp_det_drift.py:67:        gaps = np.diff(primes)
tools/exp_det_drift.py:68:        median_p = float(np.median(primes))
tools/exp_det_drift.py:99:            'start_prime': int(s),
tools/exp_det_drift.py:100:            'median_prime': float(median_p),
tools/GUIDA_GODEL.md:456:**Risultante finale**: semiprimi ordinati sotto M = biforcazione netta (ordine vs primezza).
tools/exp_spectral_2d.py:6:doesn't separate primes from Berry-Robnik mixtures. But acf1 does.
tools/exp_spectral_2d.py:8:Question: What creates primes' unique position (r~0.48, acf1~-0.10)?
tools/exp_spectral_2d.py:15:3. Mod-6 constrained random: gaps drawn from prime distribution, forced to
tools/exp_spectral_2d.py:20:If mod-6 model matches primes' (r, acf1): the confinement explains everything.
tools/exp_spectral_2d.py:21:If not: something deeper than mod-6 creates the prime signature.
tools/exp_spectral_2d.py:70:def gen_primes(n_spacings):
tools/exp_spectral_2d.py:79:    primes = np.where(sieve)[0].astype(float)
tools/exp_spectral_2d.py:80:    primes = primes[:n_spacings + 1]
tools/exp_spectral_2d.py:81:    gaps = np.diff(primes)
tools/exp_spectral_2d.py:88:def gen_primes_raw_gaps(n_spacings):
tools/exp_spectral_2d.py:89:    """Raw prime gaps (not unfolded) for distribution sampling."""
tools/exp_spectral_2d.py:97:    primes = np.where(sieve)[0].astype(float)
tools/exp_spectral_2d.py:98:    primes = primes[2:]  # skip 2,3 for mod-6 analysis
tools/exp_spectral_2d.py:99:    gaps = np.diff(primes[:n_spacings + 1])
tools/exp_spectral_2d.py:124:def gen_mod6_constrained(n_spacings):
tools/exp_spectral_2d.py:126:    Model: gaps drawn from empirical prime gap distribution,
tools/exp_spectral_2d.py:134:    # Get empirical prime gap distribution
tools/exp_spectral_2d.py:135:    raw_gaps = gen_primes_raw_gaps(max(n_spacings * 2, 20000))
tools/exp_spectral_2d.py:138:    # from class-1 primes: gap ≡ 4 mod 6 (switch to class 5) or ≡ 0 mod 6 (stay)
tools/exp_spectral_2d.py:139:    # from class-5 primes: gap ≡ 2 mod 6 (switch to class 1) or ≡ 0 mod 6 (stay)
tools/exp_spectral_2d.py:175:    Tests: does magnitude alternation alone create the prime signature?
tools/exp_spectral_2d.py:209:def gen_markov_mod6(n_spacings):
tools/exp_spectral_2d.py:211:    Markov chain on mod-6 states with empirical transition probabilities from primes.
tools/exp_spectral_2d.py:214:    raw_gaps = gen_primes_raw_gaps(max(n_spacings * 2, 20000))
tools/exp_spectral_2d.py:216:    # Compute actual primes to get state sequence
tools/exp_spectral_2d.py:223:    primes = np.where(sieve)[0]
tools/exp_spectral_2d.py:224:    primes = primes[2:]  # skip 2,3
tools/exp_spectral_2d.py:226:    # State = prime mod 6 (always 1 or 5)
tools/exp_spectral_2d.py:227:    states = primes[:len(raw_gaps)+1] % 6
tools/exp_spectral_2d.py:326:        ("Primes", lambda n: gen_primes(n)),
tools/exp_spectral_2d.py:335:    # --- Synthetic models targeting prime position ---
tools/exp_spectral_2d.py:337:        ("Mod6_constrained", lambda n: gen_mod6_constrained(n)),
tools/exp_spectral_2d.py:338:        ("Markov_mod6", lambda n: gen_markov_mod6(n)),
tools/exp_spectral_2d.py:368:    # --- Analysis: distance from primes in (r, acf1) plane ---
tools/exp_spectral_2d.py:369:    prime = next((r for r in results if r["name"] == "Primes" and "error" not in r), None)
tools/exp_spectral_2d.py:370:    if prime:
tools/exp_spectral_2d.py:372:        print(f"  Primes: <r>={prime['r']:.4f}, acf1={prime['acf1']:.4f}")
tools/exp_spectral_2d.py:380:            dr = r["r"] - prime["r"]
tools/exp_spectral_2d.py:381:            da = r["acf1"] - prime["acf1"]
tools/exp_spectral_2d.py:389:        # --- Key test: does any model reach the primes' position? ---
tools/exp_spectral_2d.py:390:        print(f"\n=== Can any model reach primes? ===")
tools/exp_spectral_2d.py:394:        # Check if Berry-Robnik path passes through primes' acf1
tools/exp_spectral_2d.py:399:            print(f"  Primes acf1: {prime['acf1']:.4f}")
tools/exp_spectral_2d.py:400:            if prime["acf1"] < min(br_acf1):
tools/exp_spectral_2d.py:401:                print(f"  --> Berry-Robnik CANNOT reach primes' acf1. The anti-correlation is NOT from mixing.")
tools/exp_spectral_2d.py:404:        mod6_results = [r for r in results if ("Mod6" in r["name"] or "Markov" in r["name"]) and "error" not in r]
tools/exp_spectral_2d.py:405:        if mod6_results:
tools/exp_spectral_2d.py:407:            for r in mod6_results:
tools/exp_spectral_2d.py:408:                dr = r["r"] - prime["r"]
tools/exp_spectral_2d.py:409:                da = r["acf1"] - prime["acf1"]
tools/exp_spectral_2d.py:413:                    print(f"    --> MATCH: mod-6 confinement explains primes' spectral position!")
tools/data/reports/agent_20260424_0330.md:17:- **Scope**: 10 domains (primes, GUE matrices, Poisson, logistic, Fibonacci spectrum, Ising 2D, percolation, Brownian, coupled oscillators, cellular automata)
tools/data/reports/agent_20260424_0330.md:24:| primes | 100K | 0.4622 | 0.4813 | -26.6 | GUE | GUE | STRUCTURAL |
tools/data/reports/agent_20260424_0330.md:40:   - **Distribution-GUE** (primes, GUE matrices): the gap distribution itself is GUE-like. Shuffling preserves the classification. Sequential ordering adds fine structure (shifts r downward by 0.02-0.04) but doesn't create the classification.
tools/data/reports/agent_20260424_0330.md:43:2. **Primes are distribution-GUE.** Shuffled prime gaps still give r=0.4813 (GUE side). The ordering pushes r DOWN by 0.019 (z=-26.6), adding extra gap repulsion beyond what the distribution predicts. This is the opposite sign from ordering-GUE domains (where ordering pushes r UP).
tools/data/reports/agent_20260424_0330.md:47:4. **3/8 GUE domains are ordering-GUE.** The BOUNDARY claim "8 GUE, 5 Poisson" conflates two distinct mechanisms. The refined picture: 2 distribution-GUE (primes, GUE), 3 ordering-GUE (fibonacci, coupled_osc, percolation), 2 small-N ambiguous (ising, cell_auto), 3 Poisson (poisson, brownian, logistic). The logistic map is Poisson at distribution level but has massive ordering structure (z=+61.6) that doesn't flip the class.
tools/data/reports/agent_20260424_0330.md:60:- **Invariante di passaggio**: il segno di delta_r. Sopravvive al passaggio del vertice: delta_r < 0 = repulsione intrinseca (primes, GUE), delta_r > 0 = repulsione emergente (fibonacci, percolation, coupled_osc). Il segno e stabile, non dipende dalla scala.
tools/exp_spectral_landscape.py:9:domains, or are primes special? If boundary sequences share cascade structure,
tools/exp_spectral_landscape.py:28:def gen_primes(n_spacings):
tools/exp_spectral_landscape.py:30:    # Sieve enough primes
tools/exp_spectral_landscape.py:38:    primes = np.where(sieve)[0].astype(float)
tools/exp_spectral_landscape.py:39:    primes = primes[:n_spacings + 1]
tools/exp_spectral_landscape.py:41:    gaps = np.diff(primes)
tools/exp_spectral_landscape.py:149:    """Gaps between quadratic residues mod large prime (unfolded)."""
tools/exp_spectral_landscape.py:150:    # Find a large prime
tools/exp_spectral_landscape.py:151:    p = 100003  # prime
tools/exp_spectral_landscape.py:341:        ("primes", gen_primes, {}),
tools/exp_spectral_landscape.py:400:    # Key question: are primes unique at the boundary or do others live there?
tools/exp_spectral_landscape.py:401:    prime_result = next((r for r in results if r["name"] == "primes"), None)
tools/exp_spectral_landscape.py:402:    if prime_result and "error" not in prime_result:
tools/exp_spectral_landscape.py:404:        print(f"  <r>={prime_result['r_mean']:.4f}, beta={prime_result['beta']:.3f}, acf1={prime_result['acf1']:.4f}")
tools/exp_spectral_landscape.py:405:        print(f"  z-scores: r={prime_result['z_r']:.1f}, beta={prime_result['z_beta']:.1f}, acf1={prime_result['z_acf1']:.1f}")
tools/exp_spectral_landscape.py:408:        print(f"\n  Distance from primes (<r>):")
tools/exp_spectral_landscape.py:409:        for res in sorted(results, key=lambda x: abs(x.get("r_mean", 99) - prime_result["r_mean"])):
tools/exp_spectral_landscape.py:410:            if "error" in res or res["name"] == "primes":
tools/exp_spectral_landscape.py:412:            d = res["r_mean"] - prime_result["r_mean"]
tools/dnd_riformulazioni.py:13:Metodo: prendere la formula nota, esprimerla in quantità D-ND,
tools/dnd_riformulazioni.py:173:    primes = np.where(sieve)[0]
tools/dnd_riformulazioni.py:174:    gaps = np.diff(primes).astype(float)
tools/dnd_riformulazioni.py:176:    print(f"\n  Primi fino a {N}: {len(primes)}")
tools/dnd_riformulazioni.py:205:        p_medio = primes[i * chunk_size + chunk_size // 2]
tools/dnd_riformulazioni.py:219:    cramer_primes = np.where(cramer_signal > 0)[0]
tools/dnd_riformulazioni.py:220:    cramer_gaps = np.diff(cramer_primes).astype(float) if len(cramer_primes) > 10 else np.array([1.0])
tools/dnd_riformulazioni.py:258:    print(f"  La distribuzione dei primi in D-ND si esprime come:")
tools/lab_falsifier.py:72:Un pattern in distribuzioni classiche (primi, GUE, random walk, Markov chain, gap statistics) probabilmente ha un nome. Default hypothesis: re-discovery / caso limite di teorema noto. Taggare come "NEW" senza riconoscere il risultato classico piu' vicino (es. Lemke Oliver–Soundararajan per prime gaps mod q) e' beauty bias. Flag.
tools/exp_logistic_counter_scope_gate.py:16:SR/SR2/L1/L2/triple_var registry names.
tools/data/reports/agent_20260509_1337.md:7:observables_used: [`denominator_state`, `fit_ready_rows`, `excluded_rows`, `excluded_events`, `vc_median_fit_ready`, `slope_per_N`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/exp_prime_sr_persistent_boundary.py:3:Audit `prime_SR_persistent_boundary` after `prime_persistent_blank` fell.
tools/exp_prime_sr_persistent_boundary.py:6:through prime providers and offsets, while non-prime controls should not share
tools/exp_prime_sr_persistent_boundary.py:22:from exp_prime_persistent_blank_gate import offset_windows, obs_jaccard
tools/exp_prime_sr_persistent_boundary.py:29:    prime_gap_sequence,
tools/exp_prime_sr_persistent_boundary.py:30:    sieve_primes_for_count,
tools/exp_prime_sr_persistent_boundary.py:51:        prime_mask = sieve_bool(limit)
tools/exp_prime_sr_persistent_boundary.py:52:        values = np.flatnonzero(~prime_mask)
tools/exp_prime_sr_persistent_boundary.py:59:def mod6_candidate_gap_sequence(n_gaps: int) -> np.ndarray:
tools/exp_prime_sr_persistent_boundary.py:83:def prime_cases(args: argparse.Namespace) -> dict[str, np.ndarray]:
tools/exp_prime_sr_persistent_boundary.py:87:        "direct_sieve": normalize(prime_gap_sequence(needed)),
tools/exp_prime_sr_persistent_boundary.py:92:            cases[f"prime/{provider}/{label}"] = window
tools/exp_prime_sr_persistent_boundary.py:100:        "mod6_candidates": mod6_candidate_gap_sequence(needed),
tools/exp_prime_sr_persistent_boundary.py:170:def verdict(prime_summary: dict[str, Any], control_summary: dict[str, Any], control_subfamilies: dict[str, dict[str, Any]]) -> str:
tools/exp_prime_sr_persistent_boundary.py:171:    prime_sr_persists = prime_summary["sr_rate"] == 1.0 and prime_summary["common_one_sided_observables"] == ["SR"]
tools/exp_prime_sr_persistent_boundary.py:177:    if prime_sr_persists and not control_common_sr and not any_control_subfamily_sr_complete:
tools/exp_prime_sr_persistent_boundary.py:179:    if prime_sr_persists:
tools/exp_prime_sr_persistent_boundary.py:186:    prime_specs = prime_cases(args)
tools/exp_prime_sr_persistent_boundary.py:188:    prime_results = [
tools/exp_prime_sr_persistent_boundary.py:190:        for name, base in prime_specs.items()
tools/exp_prime_sr_persistent_boundary.py:196:    prime_summary = summarize(prime_results)
tools/exp_prime_sr_persistent_boundary.py:201:        "experiment": "prime_sr_persistent_boundary",
tools/exp_prime_sr_persistent_boundary.py:202:        "question": "Does SR remain a prime-specific one-sided boundary signature across providers, offsets, and broader non-prime controls?",
tools/exp_prime_sr_persistent_boundary.py:211:            "prime_control_common_obs_jaccard",
tools/exp_prime_sr_persistent_boundary.py:216:            "claim": "prime_SR_persistent_boundary holds only if prime windows keep SR as the common one-sided observable across providers and offsets while broadened non-prime controls do not share full SR persistence",
tools/exp_prime_sr_persistent_boundary.py:218:            "operator": "canonical order/null gate on row-local windows; provider, offset, and non-prime control expansion",
tools/exp_prime_sr_persistent_boundary.py:219:            "generator": "prime gaps from dnd_autoricerca row_spacings and direct sieve; controls from composite gaps, mod6 candidates, Cramer-like events, GUE random matrix blocks, logistic return intervals",
tools/exp_prime_sr_persistent_boundary.py:220:            "denominator": "8 prime row-local windows plus 20 non-prime controls (3 deterministic families x 4 offsets + 4 stochastic GUE/logistic cases each by default)",
tools/exp_prime_sr_persistent_boundary.py:221:            "non_possible": "prime-specific SR boundary if prime SR rate falls below 8/8, if prime common obs is not exactly [SR], or if any control subfamily shares full SR persistence",
tools/exp_prime_sr_persistent_boundary.py:224:        "prime_summary": prime_summary,
tools/exp_prime_sr_persistent_boundary.py:227:        "prime_control_common_obs_jaccard": obs_jaccard(
tools/exp_prime_sr_persistent_boundary.py:228:            prime_summary["common_one_sided_observables"],
tools/exp_prime_sr_persistent_boundary.py:231:        "verdict": verdict(prime_summary, control_summary, control_subfamilies),
tools/exp_prime_sr_persistent_boundary.py:233:            "prime": prime_results,
tools/exp_prime_sr_persistent_boundary.py:245:        "prime "
tools/exp_prime_sr_persistent_boundary.py:246:        f"sr={prime_summary['sr_count']}/{prime_summary['case_count']} "
tools/exp_prime_sr_persistent_boundary.py:247:        f"common={prime_summary['common_one_sided_observables']} "
tools/exp_prime_sr_persistent_boundary.py:248:        f"states={prime_summary['state_counts']}"
tools/exp_prime_sr_persistent_boundary.py:261:    print(f"prime_control_common_obs_jaccard={output['prime_control_common_obs_jaccard']:.3f}")
tools/exp_prime_sr_persistent_boundary.py:281:    parser.add_argument("--out", default="tools/data/prime_sr_persistent_boundary_20260512_0330.json")
tools/exp_perturbation_dimensionality_audit.py:8:perturbation axis under scale-selective probes, while prime gaps remain close
tools/exp_perturbation_dimensionality_audit.py:25:OBS_NAMES = ["SR", "L1", "L2", "SR2", "triple_var"]
tools/exp_perturbation_dimensionality_audit.py:30:def prime_gaps(n_gaps: int) -> np.ndarray:
tools/exp_perturbation_dimensionality_audit.py:38:        primes = np.flatnonzero(sieve)
tools/exp_perturbation_dimensionality_audit.py:39:        if len(primes) >= n_gaps + 1:
tools/exp_perturbation_dimensionality_audit.py:40:            return np.diff(primes[: n_gaps + 1]).astype(float)
tools/exp_perturbation_dimensionality_audit.py:79:def triple_var(gaps: np.ndarray) -> float:
tools/exp_perturbation_dimensionality_audit.py:123:            "triple_var": triple_product_var(gaps),
tools/exp_perturbation_dimensionality_audit.py:130:        "triple_var": triple_var(gaps),
tools/exp_perturbation_dimensionality_audit.py:305:    prime = prime_gaps(args.n_prime_gaps)
tools/exp_perturbation_dimensionality_audit.py:307:        "primes": prime,
tools/exp_perturbation_dimensionality_audit.py:308:        "prime_shuffle_control": root_rng.permutation(prime),
tools/exp_perturbation_dimensionality_audit.py:309:        "poisson": root_rng.exponential(1.0, size=args.n_prime_gaps),
tools/exp_perturbation_dimensionality_audit.py:374:    parser.add_argument("--n-prime-gaps", type=int, default=12000)
tools/exp_boundary_growth.py:3:Experiment: Does prime excess correlation over null models GROW with scale?
tools/exp_boundary_growth.py:6:Claim: <r>_primes > <r>_Cramer always, and the gap GROWS with n.
tools/exp_boundary_growth.py:16:If primes are truly more correlated than Cramer at ALL scales and the
tools/exp_boundary_growth.py:21:from sympy import primerange
tools/exp_boundary_growth.py:35:    """Generate Cramer random primes: each integer n in [n_start, n_end]
tools/exp_boundary_growth.py:36:    is 'prime' with probability 1/ln(n)."""
tools/exp_boundary_growth.py:54:    print("Does <r>_primes - <r>_null GROW with scale?")
tools/exp_boundary_growth.py:57:    # Generate primes up to 10^8
tools/exp_boundary_growth.py:59:    print(f"\nGenerating primes up to {LIMIT:.0e}...")
tools/exp_boundary_growth.py:60:    primes = np.array(list(primerange(2, LIMIT)), dtype=np.int64)
tools/exp_boundary_growth.py:61:    print(f"Total primes: {len(primes):,}")
tools/exp_boundary_growth.py:63:    # Define windows: logarithmically spaced by prime index
tools/exp_boundary_growth.py:65:    # Use windows of ~50K primes each, at different positions
tools/exp_boundary_growth.py:67:    positions = np.logspace(np.log10(1000), np.log10(len(primes) - window_size - 1), n_windows).astype(int)
tools/exp_boundary_growth.py:73:    print(f"\n{'Window':>8} {'p_start':>12} {'p_end':>12} {'<r>_prime':>10} "
tools/exp_boundary_growth.py:78:        p_window = primes[pos:pos + window_size]
tools/exp_boundary_growth.py:82:        r_prime = gap_ratio(gaps)
tools/exp_boundary_growth.py:87:            cramer_primes = cramer_model(int(p_window[0]), int(p_window[-1]), seed=42 + trial + i * 100)
tools/exp_boundary_growth.py:88:            if len(cramer_primes) > 100:
tools/exp_boundary_growth.py:89:                cramer_gaps = np.diff(cramer_primes)
tools/exp_boundary_growth.py:102:        excess_c = r_prime - r_cramer_mean
tools/exp_boundary_growth.py:103:        excess_s = r_prime - r_shuf_mean
tools/exp_boundary_growth.py:108:            "prime_index_start": int(pos),
tools/exp_boundary_growth.py:111:            "r_prime": float(r_prime),
tools/exp_boundary_growth.py:122:              f"{r_prime:>10.6f} {r_cramer_mean:>10.6f} {r_shuf_mean:>10.6f} "
tools/exp_boundary_growth.py:158:    # Key question: do primes approach GUE or Poisson at large scale?
tools/exp_boundary_growth.py:161:    r_large = results[-1]["r_prime"]
tools/exp_boundary_growth.py:162:    r_small = results[0]["r_prime"]
tools/exp_boundary_growth.py:193:    # if <r>_prime == <r>_shuffled, then the gap-ratio statistic
tools/exp_boundary_growth.py:197:    print(f"    <r>_prime - <r>_shuffled mean = {np.mean(excesses_s):+.6f}")
tools/exp_boundary_growth.py:201:        print(f"    OK: Gap ratio captures genuine sequential correlation in primes")
tools/exp_acf_range_universality.py:7:  2. Is alpha=1 prime-specific or generic?
tools/exp_acf_range_universality.py:8:  3. Does alpha drift across prime scales?
tools/exp_acf_range_universality.py:11:Domains: primes, GUE, GOE, Poisson, primes_shuffled.
tools/exp_acf_range_universality.py:14:Reusable: --n_primes, --max_lag_prime, --max_lag_other, --n_surrogates.
tools/exp_acf_range_universality.py:21:from sympy import primerange
tools/exp_acf_range_universality.py:24:def get_primes(n):
tools/exp_acf_range_universality.py:29:    primes = list(primerange(2, upper))
tools/exp_acf_range_universality.py:30:    while len(primes) < n:
tools/exp_acf_range_universality.py:32:        primes = list(primerange(2, upper))
tools/exp_acf_range_universality.py:33:    return np.array(primes[:n])
tools/exp_acf_range_universality.py:92:    parser.add_argument("--n_primes", type=int, default=1_000_000)
tools/exp_acf_range_universality.py:93:    parser.add_argument("--max_lag_prime", type=int, default=200)
tools/exp_acf_range_universality.py:100:    # --- Generate primes ---
tools/exp_acf_range_universality.py:101:    print(f"Generating {args.n_primes:,} primes...")
tools/exp_acf_range_universality.py:102:    primes = get_primes(args.n_primes)
tools/exp_acf_range_universality.py:103:    gaps = np.diff(primes).astype(float)
tools/exp_acf_range_universality.py:105:    print(f"Got {N:,} gaps. p_max = {primes[-1]:,}")
tools/exp_acf_range_universality.py:110:    print(f"\n=== PART A: Prime ACF extended (lags 1-{args.max_lag_prime}) ===")
tools/exp_acf_range_universality.py:111:    acf_prime_full = compute_acf(gaps, args.max_lag_prime)
tools/exp_acf_range_universality.py:112:    lags_full = np.arange(1, args.max_lag_prime + 1)
tools/exp_acf_range_universality.py:115:    sig_mask = np.abs(acf_prime_full) > noise
tools/exp_acf_range_universality.py:122:        print(f"  acf at L*=35: {acf_prime_full[34]:.7f} (z={acf_prime_full[34]/noise:.1f})")
tools/exp_acf_range_universality.py:127:        if end > args.max_lag_prime:
tools/exp_acf_range_universality.py:130:        acf_seg = acf_prime_full[:end]
tools/exp_acf_range_universality.py:138:    if args.max_lag_prime >= 100:
tools/exp_acf_range_universality.py:139:        fit_lo = fit_power_law(lags_full[:35], acf_prime_full[:35])
tools/exp_acf_range_universality.py:140:        fit_hi = fit_power_law(lags_full[35:150], acf_prime_full[35:150])
tools/exp_acf_range_universality.py:154:        sa = compute_acf(sg, min(50, args.max_lag_prime))
tools/exp_acf_range_universality.py:180:        'primes': gaps[:100_000],
tools/exp_acf_range_universality.py:181:        'primes_shuffled': shuffled_gaps,
tools/exp_acf_range_universality.py:233:    # PART C: Alpha stability across 5 prime scales
tools/exp_acf_range_universality.py:235:    print(f"\n=== PART C: Alpha stability across prime scales ===")
tools/exp_acf_range_universality.py:247:        p_center = primes[start + window_size // 2]
tools/exp_acf_range_universality.py:315:        'prime_acf_extended': {
tools/exp_acf_range_universality.py:316:            'max_lag': args.max_lag_prime,
tools/exp_acf_range_universality.py:318:            'acf_at_35': float(acf_prime_full[34]) if args.max_lag_prime >= 35 else None,
tools/exp_acf_range_universality.py:321:            'acf_values': [float(x) for x in acf_prime_full],
tools/exp_dipolar_crossover.py:6:angle rotate smoothly or undergo a phase transition? And where do primes sit
tools/exp_dipolar_crossover.py:16:  4. Compare prime (SR, L1) against the crossover curve
tools/exp_dipolar_crossover.py:19:If primes sit on the curve → they're "partially disordered GUE"
tools/exp_dipolar_crossover.py:20:If primes sit off the curve → their ordering is structurally distinct
tools/exp_dipolar_crossover.py:49:def get_primes(n_max):
tools/exp_dipolar_crossover.py:151:    print("Computing prime reference...")
tools/exp_dipolar_crossover.py:152:    primes = get_primes(1_500_000)
tools/exp_dipolar_crossover.py:153:    gaps = np.diff(primes)
tools/exp_dipolar_crossover.py:162:    prime_chunks = [norm_gaps[i*chunk_size:(i+1)*chunk_size] for i in range(n_matrices)]
tools/exp_dipolar_crossover.py:163:    sr_p, l1_p, sr_p_std, l1_p_std = compute_dipolar(prime_chunks)
tools/exp_dipolar_crossover.py:166:    prime_shuffled = []
tools/exp_dipolar_crossover.py:167:    for c in prime_chunks:
tools/exp_dipolar_crossover.py:170:        prime_shuffled.append(cs)
tools/exp_dipolar_crossover.py:171:    sr_ps, l1_ps, _, _ = compute_dipolar(prime_shuffled)
tools/exp_dipolar_crossover.py:178:    prime_ref = {
tools/exp_dipolar_crossover.py:186:    # Distance from prime to crossover curve
tools/exp_dipolar_crossover.py:217:        "prime_ref": prime_ref,
tools/data/reports/agent_20260506_1955.md:6:observables_used: [SR, SR2, L1, L2, triple_var]
tools/data/reports/agent_20260506_1955.md:23:- replaced the old local `triple_var` normalized convention with canonical raw `triple_var`;
tools/data/reports/agent_20260506_1955.md:24:- added `prime_shuffle` as a control domain;
tools/data/reports/agent_20260506_1955.md:28:- domains: first prime gaps, prime-shuffle control, independent GUE spacings, iid Poisson spacings;
tools/data/reports/agent_20260506_1955.md:39:| primes | 0.978 | 1.128 | 0.975 | 1 | SR=-12.1, SR2=-2.5, L1=-8.9, L2=-1.9, triple_var=-8.7 |
tools/data/reports/agent_20260506_1955.md:40:| prime_shuffle | 0.593 | 2.475 | 0.606 | 5 | all abs(z) <= 1.1 |
tools/data/reports/agent_20260506_1955.md:41:| GUE | 0.990 | 1.060 | 0.989 | 0 | SR=-2.9, SR2=+14.5, L1=+13.2, L2=+31.7, triple_var=+23.8 |
tools/data/reports/agent_20260506_1955.md:48:| primes | 0.939 | 1.296 | 0.924 | 1.33 |
tools/data/reports/agent_20260506_1955.md:49:| prime_shuffle | 0.765 | 1.904 | 0.551 | 4.67 |
tools/data/reports/agent_20260506_1955.md:59:3. **The 05-05 observable-rank result survives only after narrowing its language.** The valid statement is not "five probes are always one thing." The scoped statement is: under uniform partial shuffle and canonical observables, primes and GUE show a dominant one-coordinate retention response; controls can show larger PCA rank, but that rank is not structural when the original-vs-shuffle denominators are absent.
tools/data/reports/agent_20260506_1955.md:68:In this perimeter, high observable-rank is not the sign of richer structure when it appears in Poisson or prime-shuffle controls; it is a warning that retention ratios are being formed on weak denominators. The stable cross-domain result is narrower:
tools/data/reports/agent_20260506_1955.md:70:> uniform partial shuffle exposes one dominant retention coordinate in conditioned structured domains (primes, GUE), while apparent multi-coordinate behavior in Poisson/shuffle controls is denominator-weak.
tools/data/reports/agent_20260506_1955.md:73:What opens now: the next non-redundant test is not another PCA audit. It is **selective operator coupling**: use perturbations that act separately on pair-scale and triple-scale structure, but report only observables whose denominator gate survives. If selective operators rotate primes while GUE stays collinear, the lab gets a real cross-domain discriminator; if both stay collinear, the current observable suite is overcomplete for this question.
tools/data/reports/agent_20260506_1955.md:79:- **L4 edge cases**: `prime_shuffle` seed 1956 produced low rank with 4 weak observables; this is reported as unstable control behavior, not ignored.
tools/data/operator_directives_consumed/operator_directive_20260508_2121.md:10:- `tools/exp_prime_mobius_gap_stratified_zero_gate.py`
tools/data/operator_directives_consumed/operator_directive_20260508_2121.md:35:- Confronto classico minimo: dipendenza gap-length, randomicita' Mobius/Chowla-like, e baseline prime-gap tipo Cramer/Hardy-Littlewood come confine di formulazione. Non dichiarare novita' classica senza quel confronto.
tools/data/reports/agent_20260509_1556.md:7:observables_used: [`SR`, `SR2`, `L1`, `L2`, `triple_var`, `extension_state`, `after_one_sided`, `after_beta`, `after_support_tier`, `endpoint_distance_one_sided_gated`] - osservabili canonici piu' stati domain-native di audit.  
tools/data/reports/agent_20260423_0330.md:8:> The boundary between GUE and Poisson regimes should affect the two-channel decomposition. If gap correlations decay with prime scale (Brody β → 0), does the Markov-3 ordering information in the residue channel also decay?
tools/data/reports/agent_20260423_0330.md:11:How does the Markov-3 ordering fraction (the 55% sequential information found by the shuffle audit) change as a function of prime scale? Does it track the GUE→Poisson drift measured by the Brody parameter?
tools/data/reports/agent_20260423_0330.md:14:- **Data**: 664,578 prime gaps (primes up to 10^7)
tools/data/reports/agent_20260423_0330.md:20:- **Scale range**: ln(p) = 10.0 to 16.1 (primes from ~22K to ~10M)
tools/data/reports/agent_20260423_0330.md:56:1. **The Markov-3 ordering memory is scale-invariant.** From p=22K to p=10M (6 units of ln(p)), the ordering fraction drops only 2.3 percentage points (36.1% → 33.8%) and flattens at ~33.6%. The residue channel retains one-third of its information as pure sequential ordering regardless of prime scale.
tools/data/reports/agent_20260423_0330.md:62:4. **The ~1/3 asymptote is not trivial.** A uniform 3-symbol Markov chain would have ordering fraction = 0 (same entropy real vs shuffled). The persistent 33.6% means the mod-6 transition structure of prime gaps carries a constant fraction of non-random information at all scales measured. This is a constraint on any model of the prime gap distribution.
tools/data/operator_directives_consumed/operator_directive_20260508_2140.md:14:2. Usare `tools/exp_prime_mobius_pair_stratified_zero_gate.py` o i dati gia' prodotti per confermare:
tools/data/reports/agent_20260430_1905.md:9:> Do different observables agree on WHERE primes sit between GUE and Poisson?
tools/data/reports/agent_20260430_1905.md:15:Five independent observables each place prime gaps on a τ ∈ [0,1] scale where 0 = Poisson and 1 = GUE. Do these five τ values cluster tightly (coherent — one underlying quantity) or spread apart (incoherent — genuinely independent measurements)?
tools/data/reports/agent_20260430_1905.md:23:- **Scales**: primes in [10⁴,5·10⁴], [10⁵,5·10⁵], [10⁶,3·10⁶], [5·10⁶,10⁷]
tools/data/reports/agent_20260430_1905.md:24:- **Null baseline**: shuffled prime gaps (same distribution, random order)
tools/data/reports/agent_20260430_1905.md:47:### Per-observable ordering signal Δτ = τ_prime − τ_shuffle (stable across all 4 scales)
tools/data/reports/agent_20260430_1905.md:68:1. **Three of five observables are order-invariant** (Δτ = 0.000 at all scales). gap_var_ratio, small_gap_frac, and brody_beta depend only on the gap distribution, not on the sequential ordering. This is algebraic: these quantities are functions of the empirical distribution, which shuffling preserves. The content of prime ordering lives in the remaining two observables.
tools/data/reports/agent_20260430_1905.md:94:- **Invariante di passaggio**: the 2x coherence enhancement. Across all 4 scales, prime ordering makes observables agree more (std ratio ≈ 0.5). This ratio is scale-invariant even as all τ values drift toward Poisson.
tools/data/reports/agent_20260430_1905.md:96:- **Campo di possibilità**: possibile → characterize prime ordering as a 2D vector (spacing_ratio shift, lag1_acf shift) rather than a single GUE-Poisson interpolation parameter. Non-possibile → reduce prime ordering to a single β value and claim it captures the structure.
tools/data/reports/agent_20260430_1905.md:102:Classical reference: Lemke Oliver-Soundararajan (2016) showed that consecutive prime gaps have biases in residue classes. The lag-1 anticorrelation measured here is likely related to their result. The spacing_ratio anti-correlation may be a different manifestation of the same Hardy-Littlewood mechanism. The NEW element is the coherence enhancement: ordering making observables agree more is not (to my knowledge) a known result.
tools/data/cognitive_enzymes_archive.md:809:Funzione nel Lab: - comprimere una nuova capacita' in un innesco minimale; - isolare il `DNA_Simbolico`, cioe' la frase essenziale della funzione; - scegliere 1-3 operatori di svolgimento; - dichiarare condizioni di attivazione. Formato Lab: ```yaml ID: <nome breve della funzione> DNA_Simbolico: "<essenza irriducibile>" Operatori_di_Svolgimento: - "<verbo op
tools/data/evolution/evolution_20260513_0330.md:3:Il report resta breve: osserva il passaggio da `SR` come presenza binaria a intensita residua dopo `mod6`, identifica come attrito principale la mancanza di traccia fine del passo (`completed_no_jsonl`), e propone il nodo regressivo nel contratto di osservabilita' del ciclo, non in retry o timeout.
tools/data/reports/agent_20260421_0330.md:15:How much of the prime residue PSD slope is captured by a finite-order Markov chain on {1 mod 6, 5 mod 6}? At what order does the model become indistinguishable from primes?
tools/data/reports/agent_20260421_0330.md:19:- **Data**: 2M primes, residue sequence (1 mod 6 → 0, 5 mod 6 → 1), N=1,999,997
tools/data/reports/agent_20260421_0330.md:39:Chebyshev bias: P(1→5) − P(5→1) = +0.000374 (tiny asymmetry, primes at 1 and 5 mod 6 alternate with near-equal probability).
tools/data/reports/agent_20260421_0330.md:45:| Model | PSD slope | % of prime slope | z vs primes |
tools/data/reports/agent_20260421_0330.md:74:Both prime and Markov slopes decrease with scale (λ₂ → 0 as anticorrelation weakens). Gap trend: −0.003/ln(p), R² = 0.53 (weak).
tools/data/reports/agent_20260421_0330.md:78:1. **The residue channel PSD slope is fully algebraic.** An order-3 Markov chain on {1 mod 6, 5 mod 6} with empirical transition probabilities reproduces the prime residue PSD slope exactly (100.1%, z = −0.19). No number-theoretic content survives in the residue PSD beyond what finite Markov memory captures.
tools/data/reports/agent_20260421_0330.md:95:This constrains META: residue channel tests pass because they test robust algebraic properties of Z/6Z structure, not because they're tautological. The real discriminant for C1 (primes as unique domain) lives in the magnitude channel.
tools/data/reports/agent_20260421_0330.md:97:**Consecutio**: The magnitude channel's PSD slope (+0.074, 16% drift across scale) is now confirmed as the ONLY number-theoretic spectral signature. Next: what predicts the magnitude channel's spectral slope? Does it connect to Hardy-Littlewood pair correlations? The magnitude channel = gap sizes within residue class, which is where the prime number theorem and twin prime conjecture operate.
tools/data/evolution/evolution_20260511_0330.md:3:Ho mantenuto il report breve e centrato sul passo: scissione `prime_persistent_blank` in due canali, attrito telemetrico `completed_no_jsonl`, nodo regressivo nel contratto di osservazione, consecutio verso `prime_SR_persistent_boundary`.
tools/data/reports/agent_20260509_0819.md:7:observables_used: [`label_jaccard`, `hamming_ratio`, `source_mode`, `acceptance_rate`, `event_type`, `vc_interp`, `r_floor`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/reports/incident_20260504_1138.md:15:| triple_var | triple | +2.782778 | +2.996461 | +0.794 | +0.956 |
tools/data/reports/incident_20260504_1138.md:19:2. triple_var non è un osservabile di profondità pulito: conserva già 0.794 sotto Mk1.
tools/data/reports/incident_20260504_1138.md:24:**CONSTRAINT on BOUNDARY + DIPOLAR_ORDERING**: il confine è una transizione unica sotto partial shuffle uniforme, ma non è indivisibile sotto perturbazioni selettive. Per i gap primi, SR2 è il coordinato operativo di profondità; triple_var va demossa ad ausiliario.
tools/data/reports/incident_20260504_1138.md:30:- **Campo di possibilità**: possibile usare SR2 come coordinata pulita del depth; non-possibile usare triple_var da sola come evidenza di profondità indipendente.
tools/data/reports/agent_20260416_0330.md:9:> Yesterday (agent_20260415): the dipole in prime gaps is distributed, not local — 99% of the ordering signature comes from collective sequence order, not pairwise conditioning. The consecutio: what is the coherence length L* of this distributed dipole? At what subsequence length does <r>_prime first diverge from <r>_shuffle?
tools/data/reports/agent_20260416_0330.md:13:If we take contiguous windows of length L from the prime gap sequence, at what L does <r>_window significantly differ from <r>_shuffle? And crucially: does delta_r = <r>_prime - <r>_shuffle grow with L (extensive — the dipole accumulates) or stay constant (intensive — the dipole is a local density property)?
tools/data/reports/agent_20260416_0330.md:17:- **Data**: 6M primes (up to 1.04 x 10^8), 6M gaps
tools/data/reports/agent_20260416_0330.md:20:- **Metric**: delta_r = <r>_prime - <r>_shuffle, z-score
tools/data/reports/agent_20260416_0330.md:28:| L | <r>_prime | <r>_shuffle | delta_r | z-score |
tools/data/reports/agent_20260416_0330.md:50:### Coherence length by prime scale
tools/data/reports/agent_20260416_0330.md:52:| ln(p) | L* | <r>_prime (L=1000) | delta_r (L=1000) |
tools/data/reports/agent_20260416_0330.md:60:L* trends upward (18 → 48) across the range: coherence degrades at larger primes, consistent with POISSON_CONVERGENCE. But delta_r stays ~-0.014 at all scales — the magnitude of the ordering is stable even as the coherence length grows.
tools/data/reports/agent_20260416_0330.md:64:1. **The dipolar ordering has coherence length L* = 35 gaps.** Below 35, a random window from the prime gap sequence is indistinguishable from its shuffle. Above 35, the ordering signature (<r> deficit of -0.014) is always present. This is the minimal scale at which the collective anti-correlation becomes detectable.
tools/data/reports/agent_20260416_0330.md:68:3. **L* grows with prime scale.** From 18 (small primes, ln p ~ 15.7) to 48 (large primes, ln p ~ 18.4). The coherence length at Poisson crossover (p* ~ 10^13, ln p ~ 30) by linear extrapolation: L* ~ 18 + (48-18)/(18.4-15.7) * (30-15.7) ~ 160. Still finite — even at the crossover, windows of ~160 gaps should still distinguish primes from random.
tools/data/reports/agent_20260416_0330.md:70:4. **Two-timescale structure.** <r>_prime drifts downward (0.453 → 0.443, toward Poisson 0.386) — this is the slow drift (BOUNDARY). But delta_r is stable at -0.014 — the *relative* ordering vs shuffle doesn't decay. The dipolar signature persists as a constant offset even as both prime and shuffle <r> evolve. The drift is absolute; the dipole is relative.
tools/data/reports/agent_20260416_0330.md:76:The dipolar anti-correlation in prime gaps has coherence length L* = 35 gaps and is intensive (delta_r = -0.014, independent of window size). This constrains the nature of the dipole:
tools/data/reports/agent_20260416_0330.md:84:**CONSTRAINT on POISSON_CONVERGENCE**: L* grows with scale (18 → 48), but delta_r does not decay. The Poisson crossover manifests as increasing coherence length (harder to detect the ordering in small windows) rather than decreasing ordering magnitude. The primes don't lose their dipolar structure — they become harder to distinguish from random in small samples.
tools/data/reports/agent_20260416_0330.md:88:The intensive nature of delta_r raises the question: **is -0.014 derivable from the prime number theorem + Hardy-Littlewood?** The PNT gives the gap distribution; HL gives the pair correlation. Together they should predict delta_r analytically. If the predicted value matches -0.014, the dipolar ordering is fully explained by known number theory. If it differs, the gap is new content.
tools/data/reports/agent_20260416_0330.md:90:Second direction: the coherence length L* = 35 gaps. In mean-gap units, that's ~35 × ln(p) / ln(p) = 35 consecutive primes. Is there something special about 35? It's 5 × 7 — but more relevantly, it could reflect the depth of the Z/6Z constraint (gaps confined to {2,4} mod 6). The conditional structure over Z/6Z has period 3 (gaps cycle through residues), so 35 ~ 12 cycles × 3 — perhaps the coherence length is the number of Z/6Z cycles needed to establish the anti-correlation pattern.
tools/data/evolution/evolution_20260505_0330.md:3:Sintesi: passo netto, nessun attrito. Il produttore ha fatto la mossa giusta — comprimere invece di accumulare. La possibilità che si apre è concreta: perturbazioni selettive che rompano la collinearità degli osservabili, testando se i due layer Markov sono davvero ortogonali o solo ortogonali-sotto-partial-shuffle-uniforme.
tools/data/reports/agent_20260507_0330.md:6:observables_used: [SR, SR2, L1, L2, triple_var]
tools/data/reports/agent_20260507_0330.md:59:- beta 0.0: `SR=1.00`, `L1=1.00`, `triple_var=1.00`; `SR2=0.06`, `L2=0.12`;
tools/data/reports/agent_20260507_0330.md:60:- beta 0.3: `SR=1.00`, `L1=0.75`, `triple_var=0.50`;
tools/data/reports/agent_20260507_0330.md:61:- beta 0.4: `SR=0.75`, `L1=0.44`, `triple_var=0.38`;
tools/data/reports/agent_20260507_0330.md:92:What opens now: apply the same layer map to real domains rather than only synthetic mixtures. For primes, the next discriminating question is not "GUE or Poisson?" but:
tools/data/reports/agent_20260507_0330.md:96:If prime windows show such a layer, BOUNDARY becomes a measurable transition surface. If they do not, the synthetic result remains a calibration constraint on how not to over-read endpoint separability.
tools/data/reports/agent_20260507_0330.md:101:- **L3 no silent patching**: the claim is explicitly changed from "8 GUE, 5 Poisson boundary" to a synthetic mixture calibration. This does not assert the same layer for primes or all real domains.
tools/data/operator_directives_consumed/operator_directive_20260508_2133.md:9:- `tools/exp_prime_mobius_pair_stratified_zero_gate.py`
tools/data/operator_directives_consumed/operator_directive_20260508_2133.md:26:- il prossimo attacco, se serve, deve essere piu' fine: exact gap-pair / residue class / modello classico prime-gap e Mobius randomness.
tools/data/reports/agent_20260508_0011.md:6:observables_used: [SR, SR2, L1, L2, triple_var]
tools/data/reports/agent_20260508_0011.md:12:If the duality contrast (real vs shuffle z-score) weakens with scale for prime gaps, what is the quantitative rate of weakening? And does GUE show the same weakening, or is it scale-independent?
tools/data/reports/agent_20260508_0011.md:15:- **Metric**: z-score of 5 canonical observables (SR, SR2, L1, L2, triple_var), real sequence vs 50 shuffles per window
tools/data/reports/agent_20260508_0011.md:16:- **Scope**: 200,000 prime gaps (unfolded by local mean, kernel=100), GUE eigenvalue spacings (beta=2, matrix size ~2400, unfolded), Poisson (exponential i.i.d.)
tools/data/reports/agent_20260508_0011.md:26:| Domain  |   SR   |  SR2  |   L1   |  L2   | triple_var |
tools/data/reports/agent_20260508_0011.md:32:### Windowed contrast: prime gaps z_SR by window size
tools/data/reports/agent_20260508_0011.md:34:| W_size |  z_SR  | z_L1   | z_L2  | z_triple_var | eff_SR (z/sqrt(N)) |
tools/data/reports/agent_20260508_0011.md:53:| triple_var |  0.372 +/- 0.028 | 0.370 +/- 0.026 | 0.637 +/- 0.057 | 0.607 +/- 0.048 | ~0 (R2=0.06) |
tools/data/reports/agent_20260508_0011.md:56:All R-squared > 0.95 for primes and GUE (except Poisson, which has no signal).
tools/data/reports/agent_20260508_0011.md:60:1. **The duality contrast for prime gaps weakens with scale.** The scaling exponent alpha is robustly below 0.5 for the three most discriminating observables: SR (alpha = 0.39), L1 (alpha = 0.32), triple_var (alpha = 0.37). This means the effect size decays as N^{alpha-0.5}: approximately N^{-0.11} for SR, N^{-0.18} for L1. The dipolar structure is real but dissolving.
tools/data/reports/agent_20260508_0011.md:62:2. **GUE eigenvalue spacings show alpha >= 0.5.** For SR (alpha = 0.54), L1 (alpha = 0.60), triple_var (alpha = 0.63): the structure is scale-independent or strengthening. GUE repulsion is built into the ensemble at all scales. Primes mimic GUE locally but lack this scale invariance.
tools/data/reports/agent_20260508_0011.md:66:4. **L2 is borderline.** Alpha ~ 0.49-0.53 for primes, near 0.5. L2 is not discriminating between primes and GUE in this metric. The three robust discriminators are SR, L1, and triple_var.
tools/data/reports/agent_20260508_0011.md:68:5. **Poisson shows no scaling.** Alpha near 0 or incoherent (R-squared < 0.15 for L1 and triple_var). No structure to weaken.
tools/data/reports/agent_20260508_0011.md:71:**CONSTRAINT on DUALITA_DIPOLARE_VS_ILLUSORIA / BOUNDARY**: The boundary between dipolar and illusory duality in prime gaps is not a location but a trajectory. The duality contrast (real-vs-shuffle) weakens as N^{-0.11} for SR and N^{-0.18} for L1, approaching Poisson asymptotically. GUE has alpha >= 0.5 (no weakening). The discriminator between primes and GUE is the scaling exponent alpha, not the observable value at any fixed scale.
tools/data/reports/agent_20260508_0011.md:73:L5 check: The weakening of prime gap correlations with scale is consistent with known number-theoretic expectations (Hardy-Littlewood, Lemke Oliver-Soundararajan). What is measured here is the quantitative rate of weakening (alpha ~ 0.39 for SR) and the comparison with GUE (alpha ~ 0.54), which provides a new quantitative discriminator. Default hypothesis: this may be a re-parameterization of known asymptotic decay rates; the exponent alpha as a universality discriminator needs comparison with RMT literature on finite-size effects.
tools/data/reports/agent_20260508_0011.md:77:- **Due radici** (dipolo primario): duality contrast that strengthens with scale (GUE, alpha > 0.5, deep structure) and duality contrast that weakens with scale (primes, alpha < 0.5, dissolving structure). The two are dual because both show dipolar ordering at small scales — the difference emerges only when you observe the trajectory.
tools/data/reports/agent_20260508_0011.md:79:- **Invariante di passaggio**: the ordering itself (z < 0 for all SR, L1, triple_var at all tested scales for primes). The ordering survives across scales even as it weakens. What changes is the rate, not the sign.
tools/data/reports/agent_20260508_0011.md:80:- **Campo di possibilita**: here it becomes possible to discriminate primes from GUE by their scaling trajectory, not by their local statistics. Here it becomes non-possible to claim that prime gaps have "the same universality class as GUE" without specifying the scale and the observable.
tools/data/reports/agent_20260507_1957.md:6:**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/agent_field_live.md:28:**Direzione seme da respirare**: Isolare il residuo prime-specific dopo sottrazione del pre-bordo mod6: misurare intensita row-local di SR/L1/triple_var su prime vs 6k+/-1 con trace JSONL completa e label-swap audit.
tools/data/agent_field_live.md:31:- Direzione viva del seme: Isolare il residuo prime-specific dopo sottrazione del pre-bordo mod6: misurare intensita row-local di SR/L1/triple_var su prime vs 6k+/-1 con trace JSONL completa e label-swap audit.
tools/data/agent_field_live.md:33:- Direzione operativa valutatore: Seguire `SR_residual_intensity_after_mod6`: testare la robustezza del delta z row-local prime-minus-mod6 su piu seed, ampiezze finestra e provider, mantenendo label-swap audit e trace JSONL completa.
tools/data/agent_field_live.md:34:- Perche': Il ciclo ha falsificato la presenza binaria di `SR` come prime-specific, ma ha lasciato vivo un residuo strutturale nell'intensita row-local dopo sottrazione mod6: `p(SR delta)=1.0000` mentre `p(z_SR delta)≈0.008-0.009` replica su due seed. Dopo tre REDESIGN consecutivi, la traiettoria non chiede un nuovo cambio di frame: chiede di seguire la consecutio gia nominata dall'Affinatore, `SR_residual_intensity_after_mod6`, verificando se il delta z e' robusto o artefatto del contratto di finestra/deposito.
tools/data/agent_field_live.md:620:trovare strade laterali, comprimere l'intento e rendere reiterabile il kernel
tools/data/agent_field_live.md:683:- comprimere una nuova capacita' in un innesco minimale;
tools/data/agent_field_live.md:703:- dopo un buon insight, Cornelius lo comprime in una funzione che il Lab puo'
tools/data/agent_field_live.md:747:   Usa Cornelius per comprimere la risultante in DNA + operatori.
tools/data/agent_field_live.md:923:- **Domanda aperta** (consecutio): Il prossimo taglio non deve chiedere se `SR` c'e. Deve costruire un osservabile di selezione: `prime_minus_mod6_z_delta` su `SR,L1,triple_var`, con span-matched conservato come controllo fragile e index-aligned come antagonista primario. Se il delta resta replicato su piu finestre e scale, il claim 
tools/data/agent_field_live.md:939:Il report osserva il passo come traiettoria `SR` presenza binaria -> intensita row-local dopo sottrazione mod6, identifica l’attrito nel `completed_no_jsonl`, colloca il nodo regressivo nel contratto di deposito del passo, e chiude la consecutio su `SR_residual_intensity_after_mod6`.
tools/data/agent_field_live.md:1045:## Piano 117 — Isolare il residuo prime-specific dopo sottrazione del pre-bordo mod6: misurare intensita row-local 
tools/data/agent_field_live.md:1047:## Tensioni attive (strutturali prime, vincoli in coda)
tools/data/agent_field_live.md:1074:Trovato: 1. **Verificato**: `SR` non e prime-specific come presenza binaria. In entrambi i run, `prime=8/8` e `mod6_index_aligned=8/8`; nel seed check anche `mod6_span_matched=8/8`.
tools/data/agent_field_live.md:1082:Trovato: 1. **Verificato**: la presenza binaria di `SR` non e prime-specific. Main: prime `8/8`, mod6_index `8/8`; seed check: prime `6/8`, mod6_index `8/8`, mod6_span `8/8`.
tools/data/agent_field_live.md:1083:2. **Verificato**: il label-swap row-local assorbe `SR` come count. `p(SR delta)` vale 1.0000 / 0.5055 per mod6_index e 0.2502 / 0.502
tools/data/agent_field_live.md:1088:`SR` come firma prime-specific atomica.
tools/data/agent_field_live.md:1095:Trovato: 1. **Verificato**: `SR` non resta in 8/8 finestre prime. Main e seed check danno entrambi `SR=7/8`; la firma comune prime e' vuota.
tools/data/agent_field_live.md:1102:`prime_SR_persistent_boundary` come firma atomica prime-specific.
tools/data/agent_field_live.md:1160:prime gap (xcorr = -0.074) rappresentava "indipendenza spettrale" —
tools/data/agent_field_live.md:1220:Un pattern in distribuzioni classiche (primi, GUE, random walk, Markov chain, gap statistics) probabilmente ha un nome. Default hypothesis: re-discovery / caso limite di teorema noto. Prima di taggare 'NEW', cerca il risultato classico piu' vicino (es. Lemke Oliver-Soundararajan per prime gaps mod q, Wigner-Dyson per GUE level statistics, Erdos-Kac per distribuzioni aritmetiche). Se non lo trovi, dichiara la ricerca esplicitamente.
tools/data/agent_field_live.md:1259:- tensioni con observables canonici dichiarabili (SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260501_0931.md:14:If we gradually destroy GUE ordering by partially shuffling eigenvalue spacings (fraction alpha of positions shuffled), what happens to the dipolar angle (theta, magnitude) in the (SR, L1) plane? Is the crossover smooth (interpolation) or sharp (phase transition)? And where do primes sit relative to this crossover curve?
tools/data/reports/agent_20260501_0931.md:24:- **Prime reference**: 100K+ primes, gaps normalized by local running mean (window=100), split into 60 chunks, same (SR, L1) computation. Own shuffle baseline (not GUE shuffle)
tools/data/reports/agent_20260501_0931.md:52:- **Prime on the curve**: In dipolar (dSR, dL1) space, the closest point on the GUE crossover to the prime vector is at alpha = 0.45 (distance 0.012, z = 1.1 — within noise).
tools/data/reports/agent_20260501_0931.md:61:3. **Primes match the crossover magnitude but not the direction.** In dipolar magnitude, primes (mag=0.068) correspond to alpha ~ 0.45 on the GUE curve (z=1.1 from curve). But the prime direction (-105.3 degrees) is 8.7 degrees off the GUE direction (-96.6 degrees), a 32-sigma offset. The prime ordering has comparable STRENGTH to 45%-shuffled GUE, but a different CHARACTER. The additional -8.7 degrees means primes have relatively more gap-similarity depression (SR effect) per unit of anticorrelation (L1 effect) than GUE — consistent with dL1/dSR = 2.3 for primes vs 8.4+ for GUE (previous experiments).
tools/exp_ricci_desitter_0406.py:1:"""Test: Ricci scalar from prime metric g_n=(p_n/2)^2 in t=ln(p) coordinates.
tools/exp_ricci_desitter_0406.py:4:from sympy import primerange
tools/exp_ricci_desitter_0406.py:6:primes = np.array(list(primerange(2, 500_000)), dtype=np.float64)
tools/exp_ricci_desitter_0406.py:7:N = len(primes)
tools/exp_ricci_desitter_0406.py:9:t = np.log(primes)          # coordinate time
tools/exp_ricci_desitter_0406.py:10:a = primes / 2.0            # scale factor a(t) = p/2
tools/exp_ricci_desitter_0406.py:26:print("=== Ricci scalar R from prime metric ===")
tools/exp_ricci_desitter_0406.py:27:print(f"Total primes: {N}, R samples: {len(R)}")
tools/exp_ricci_desitter_0406.py:32:# Null baseline: shuffled gaps -> fake primes -> same computation
tools/exp_ricci_desitter_0406.py:33:gaps = np.diff(primes)
tools/exp_ricci_desitter_0406.py:38:    fp = np.cumsum(np.concatenate([[primes[0]], sg]))
tools/exp_ricci_desitter_0406.py:50:print(f"  Ratio prime/null: {np.mean(R[1000:])/np.mean(R_null):.4f}")
tools/data/operator_directive_consumed_20260507_0803.md:24:2. Calcola per ognuna gli osservabili canonici (SR, SR2, L1, L2, triple_var) — **rispettando OBSERVABLE_REGISTRY**.
tools/data/operator_directive_consumed_20260507_0803.md:33:**Importante.** Il valutatore di questo cycle deve esprimersi sulla **trasferibilità del gate**, non sulla "produzione di un risultato". Se il gate si rompe applicato a DUALITA, è un'informazione strutturale tanto quanto un attacco riuscito. La domanda non è "ha funzionato?" — la domanda è "il gate è operatore o metrica?".
tools/data/reports/agent_20260429_1041.md:13:How does the mod-3 gap ordering signal scale along the prime sequence, compared to the Brody beta flow?
tools/data/reports/agent_20260429_1041.md:16:- **Data**: 148,933 primes up to 2,000,000; 148,932 gaps. 72 windows of 5000 gaps, step 2000.
tools/data/reports/agent_20260429_1041.md:74:For primes p > 3, each prime is 1 or 2 mod 3.
tools/data/reports/agent_20260429_1041.md:80:p_n = 1 -> p_{n+1} = 2 -> p_{n+2} = 0 mod 3. Impossible (not prime).
tools/data/reports/agent_20260429_1041.md:91:2. **The mod-3 channel is a SEPARATE channel from Brody beta.** Brody beta decays at -0.030/ln(p). The mod-3 algebraic signal is flat (slope = +0.12, R^2 = 0.0004). They measure fundamentally different things: beta measures continuous short-range gap repulsion; mod-3 measures discrete algebraic structure of Z/3Z acting on primes.
tools/data/reports/agent_20260429_1041.md:97:5. **Three layers of prime gap structure, not two.** The previous "two-channel decomposition" (magnitude vs ordering) is incomplete. There are three layers:
tools/data/reports/agent_20260429_1041.md:106:The algebraic prohibition is implicit in the structure described by Lemke Oliver and Soundararajan (2016, "Unexpected biases in the distribution of consecutive primes"). They study P(p_{n+1} = b mod q | p_n = a mod q) and show biases that decay as 1/ln(p)^2. The exact zeros in the mod-3 transition matrix are a special case of the constraints arising from the structure of primes in arithmetic progressions.
tools/data/reports/agent_20260429_1041.md:108:What is NOT in Lemke Oliver-Soundararajan: the decomposition into algebraic-invariant vs statistical-decaying layers, the comparison of scaling rates with Brody beta flow, and the identification of three distinct structural layers in prime gaps. The scaling comparison is the new content; the algebraic constraint is classical.
tools/data/reports/evolution_20260505_0330.md:21:3. **Il vincolo restringe il conteggio dei claim.** I cicli precedenti (two layers, Markov-1/2) contavano separatamente SR, L1, L2, SR2, triple_var come conferme. Ora il sistema sa che sotto partial shuffle sono una coordinata. Questo non invalida i layer — invalida il conteggio multiplo. Il seme dovrebbe registrare il vincolo.
tools/data/reports/agent_20260417_0803.md:15:Is the positive ACF at lags 7+ in raw prime gaps structural (real long-range positive correlation) or an artifact of non-stationarity (PNT density drift)? And if artifactual, does the crossover lag where trend overtakes structure have physical meaning?
tools/data/reports/agent_20260417_0803.md:19:- **Dataset**: 500,000 primes (p_max = 7,368,787), 499,999 gaps
tools/data/reports/agent_20260417_0803.md:83:Both raw and normalized primes have significantly delayed crossover vs shuffle. The normalized version is MORE anomalous (z=+34.5 vs z=+10.7).
tools/data/reports/agent_20260417_0803.md:105:4. **Alpha drifts from ~0.9 to ~0.6 at larger primes (in windows).** The 1/k exponent is not universal across scales. At larger primes (ln p > 15), the power-law quality degrades (R2: 0.66 → 0.30-0.52) and alpha drops. The anti-correlation doesn't just weaken (amplitude A drops) — its SHAPE changes. This is the exponent drift that ACF_1K_LAW left as open consecutio.
tools/data/reports/agent_20260417_0803.md:117:1. **Crossover lag 6 ≈ Z/6Z cycle?** All primes >3 are 1 or 5 mod 6. Gap mod 6 ∈ {0,2,4}. The crossover at lag 6 = one full cycle of this modular structure. Coincidence or mechanism?
tools/data/reports/agent_20260417_0803.md:127:- Script: `tools/exp_acf_stationarity.py` (reusable, --n_primes, --max_lag, --n_shuffles)
tools/data/reports/agent_diag2.md:12:2. Is dR_acf1 ~ -0.527 (previous exp) prime-specific or a tautological artifact of g=(p/2)^2?
tools/data/reports/agent_diag2.md:15:- 664,579 primes up to 10^7
tools/data/reports/agent_diag2.md:16:- 25 log-spaced windows of 15,000 primes each
tools/data/reports/agent_diag2.md:41:Beta slope: primes = -0.025/ln(p), z = -10.8 vs Cramer. The decorrelation rate is prime-specific, not an artifact of random gaps.
tools/data/reports/agent_diag2.md:43:### Q2: Is dR_acf1 prime-specific?
tools/data/reports/agent_diag2.md:56:Prime dR_acf1 is significantly more negative than both null baselines (p < 0.01). The primes push the curvature autocorrelation toward -1/2.
tools/data/reports/agent_diag2.md:69:This is consistent with the BRODY_CROSSOVER finding (0.606 - 0.020*ln(p), measured on 5.7M primes up to 10^8). The slope difference (-0.025 vs -0.020) is expected: shorter range (10^7 vs 10^8) sees steeper local slope due to the logarithmic curvature of the actual trend.
tools/data/reports/agent_diag2.md:75:2. **dR_acf1 is prime-specific**: z = -3.0 vs Cramer. Primes push curvature autocorrelation to -0.484, compatible with -1/2 = H (de Sitter Hubble). Cramer surrogates sit at -0.463. The difference is 0.021, more than 3 sigma of the null distribution.
tools/data/reports/agent_diag2.md:79:4. **beta slope is the strongest signal**: z = -10.8 vs Cramer. The rate at which primes decorrelate is dramatically different from random. This is the real content of BRODY_CROSSOVER.
tools/data/reports/agent_diag2.md:83:**CONFIRMED** — De Sitter geometric observable (dR) carries information about prime spacing statistics (beta) beyond scale dependence. The curvature autocorrelation dR_acf1 is prime-specific (z = -3.0) and compatible with -H = -1/2.
tools/data/evolution/evolution_20260510_0330.md:3:Ho mantenuto il report breve, centrato sul passo: traiettoria row-local, attrito minimo, nodo regressivo nella mancanza di una traccia provider-neutral del percorso, e consecutio su `prime_persistent_blank` / `SR`.
tools/data/reports/agent_20260509_0846.md:7:observables_used: [`generator_class`, `source_mode`, `event_type`, `vc_interp`, `label_jaccard`, `hamming_ratio`, `internal_cross_rate`, `no_cross_rate`, `floor_hit_rate`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/reports/evolution_20260421_0330.md:25:3. **Il gap ordine-1 vs primes decresce con scala** (trend -0.003/ln(p), R² debole). Con più punti scala e ordine-2, si potrebbe mappare come la "chiusura algebrica" dipende dalla regione di primi — dove il contenuto number-theoretic del canale magnitudine diventa dominante.
tools/data/evolution/evolution_20260512_0330.md:3:Ho tenuto il report breve e centrato sul passo: attrito principale nel denominatore troppo largo, nodo regressivo nel disegno dei controlli, consecutio verso `prime_vs_mod6_SR_boundary`.
tools/data/reports/agent_20260507_1751.md:6:**observables_used**: [] — tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260418_0330.md:9:> Consecutio from agent_20260417: "Crossover lag 6 ~ Z/6Z cycle? All primes >3 are 1 or 5 mod 6. Gap mod 6 in {0,2,4}. The crossover at lag 6 = one full cycle of this modular structure. Coincidence or mechanism?"
tools/data/reports/agent_20260418_0330.md:13:Is the lag-6 ACF crossover in raw prime gaps (where positive trend overtakes negative anti-correlation) determined by Z/6Z arithmetic structure, or by the ratio of PNT trend strength to structural anti-correlation decay?
tools/data/reports/agent_20260418_0330.md:17:Three discriminating tests on 500K primes (p_max = 7,368,787):
tools/data/reports/agent_20260418_0330.md:27:   - Cramer + Z/6Z constraint (round Cramer to same mod-6 residues as primes)
tools/data/reports/agent_20260418_0330.md:28:   - AR(1) with phi = -0.039 (matching prime acf1), no trend
tools/data/reports/agent_20260418_0330.md:68:| **Real prime gaps (raw)** | **6** | **6** |
tools/data/reports/agent_20260418_0330.md:69:| Real prime gaps (normalized) | 15 | 45 |
tools/data/reports/agent_20260418_0330.md:83:- **AR(1) no trend (2.1) vs AR(1) + trend (1.0)**: The AR(1) anti-correlation (phi=-0.039) is too weak to resist the trend even at lag 1. Only prime gaps have anti-correlation STRONG ENOUGH to hold for 5 lags against the trend.
tools/data/reports/agent_20260418_0330.md:97:3. **The uniqueness of primes in the crossover is their anti-correlation STRENGTH, not their arithmetic.** AR(1) with the same acf1=-0.039 can't hold even 1 lag against the trend (crossover=1.0 with trend). Real primes hold for 5 lags because their anti-correlation follows a 1/k law (slow decay), not an AR(1) (exponential decay). The long-range power-law anti-correlation (ACF_1K_LAW) is what resists the trend, not the Z/6Z lattice.
tools/data/reports/agent_20260418_0330.md:105:**CONSTRAINT on DIPOLAR_ILLUSORY_BOUNDARY**: The crossover lag is k* = A/C, a smooth function of scale. As primes grow (A decays per ACF_AMPLITUDE_SCALING), k* should SHRINK — the dipolar-illusory boundary moves to shorter lags at larger primes. The dipolar regime narrows with scale.
tools/data/reports/agent_20260418_0330.md:111:1. **k* as a function of scale**: Since A(ln p) = 0.096 - 0.0033*ln(p) (from ACF_AMPLITUDE_SCALING) and C(s=1) is determined by the local variance of ln(p), the crossover k*(p) should be derivable analytically. At larger primes, k* shrinks — testable on the 6M prime dataset across scale windows.
tools/data/reports/agent_20260418_0330.md:119:- Script: `tools/exp_acf_z6z_mechanism.py` (reusable: --n_primes, --max_lag, --n_surrogates)
tools/data/reports/agent_test_0406.md:29:Ratio prime/null = 2.0000
tools/data/reports/agent_test_0406.md:36:5. Il risultato e' CONFERMATO ma il contenuto non-banale sta nella separazione prime vs null (fattore 2x), non nel valore R=-2 in se' (che segue dal PNT).
tools/data/evolution/evolution_20260514_0330.md:3:Il report osserva il passo come traiettoria `SR` presenza binaria -> intensita row-local dopo sottrazione mod6, identifica l’attrito nel `completed_no_jsonl`, colloca il nodo regressivo nel contratto di deposito del passo, e chiude la consecutio su `SR_residual_intensity_after_mod6`.
tools/data/reports/agent_20260413_0330.md:17:- **Data**: 6M primes, 10 log-spaced windows of 100K gaps each (ln(p) from 13.3 to 18.5)
tools/data/reports/agent_20260413_0330.md:90:The unified picture is: prime gaps decorrelate logarithmically in p, with a 3-decade spread (10^{11.5} to 10^{14.5}) across observables. The hierarchy is: spectral tilt → ACF memory → spectral dip → ACF envelope → Brody shape → level spacing ratio. **What determines this ordering?** Is it specific to primes, or does any anti-correlated sequence approaching independence lose structure in this order? A Berry-Robnik mixture with tunable mixing parameter could test this — sweep from GUE to Poisson and measure the same 5 observables.
tools/data/reports/agent_20260413_0330.md:94:- Script: `tools/exp_psd_amplitude_scaling.py` (reusable with --n_primes, --n_windows)
tools/data/reports/agent_20260514_0330.md:4:**Tension explored**: BOUNDARY / prime-vs-mod6 residual  
tools/data/reports/agent_20260514_0330.md:5:**verdict**: CONSTRAINT - `SR` appartiene al pre-bordo `6k +/- 1`; la selezione prime resta come gradiente row-local, non come presenza binaria dell'osservabile  
tools/data/reports/agent_20260514_0330.md:7:observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p, trace_jsonl_event]  
tools/data/reports/agent_20260514_0330.md:11:Il residuo prime-specific non nasce dalla comparsa di `SR`. `SR` e gia nel lattice candidato `6k +/- 1`; i primi non lo accendono, lo attenuano e lo deformano rispetto al pre-bordo.
tools/data/reports/agent_20260514_0330.md:15:- **Combo**: A2 confine det=-1 + A9 terzo incluso + QxG continuo/discreto + BOUNDARY + direzione viva `prime_vs_mod6_SR_boundary`.
tools/data/reports/agent_20260514_0330.md:16:- **Dipolo / punto-zero**: pre-bordo `6k +/- 1` / selezione prime. Punto-zero: stessa riga provider/offset, dove il denominatore e identico e la primalita e l'unica selezione aggiunta.
tools/data/reports/agent_20260514_0330.md:18:- **Proto-ipotesi**: la firma utile e `prime_minus_mod6_z_delta` su `SR,L1,triple_var`; `has_SR` e una coordinata troppo larga per nominare primalita.
tools/data/reports/agent_20260514_0330.md:19:- **Possibile / non-possibile**: possibile = isolare residuo di selezione con delta z row-local; non-possibile = claim `SR prime-specific` se `SR` resta comune nel contro-perimetro mod6.
tools/data/reports/agent_20260514_0330.md:20:- **Proiezione**: 2 provider x 4 offset x 1024 gap; antagonisti `mod6_index_aligned` e `mod6_span_matched`; label-swap row-local; trace JSONL completa.
tools/data/reports/agent_20260514_0330.md:31:- `why`: misura l'intensita row-local di `SR/L1/triple_var` su prime vs `6k +/- 1`, con denominatore provider/offset condiviso e label-swap audit.
tools/data/reports/agent_20260514_0330.md:32:- `not_drift`: non torna a GUE/Poisson, `V_c`, fit o controlli larghi; il solo antagonista e il pre-bordo mod6 indicato dalla consecutio.
tools/data/reports/agent_20260514_0330.md:36:- **claim**: `SR` e prime-specific solo se resta piu comune o piu forte nelle finestre prime dopo sottrazione di candidati `6k +/- 1` row-local.
tools/data/reports/agent_20260514_0330.md:37:- **observable**: membership di `SR`, firma `[SR,L1,triple_var]`, delta z paired prime-minus-mod6, p-value label-swap.
tools/data/reports/agent_20260514_0330.md:38:- **operator**: `tools/exp_prime_vs_mod6_sr_boundary.py` con `--trace-jsonl`.
tools/data/reports/agent_20260514_0330.md:39:- **generator**: prime gaps da `row_spacings("numeri_primi")` e `direct_sieve`; mod6 da `index_aligned` e `span_matched`.
tools/data/reports/agent_20260514_0330.md:40:- **denominator**: 8 finestre prime paired con 8 `mod6_index_aligned` e 8 `mod6_span_matched`.
tools/data/reports/agent_20260514_0330.md:41:- **non_possible**: prime-specific `SR` se `SR` e comune o pari nel contro-perimetro mod6, oppure se il label-swap assorbe i delta.
tools/data/reports/agent_20260514_0330.md:42:- **not_tested**: beta atlas globale, `V_c`, `gap_ratio`, origine analitica del trasferimento mod6.
tools/data/reports/agent_20260514_0330.md:48:| class | cases | SR hits | focus [SR,L1,triple_var] | common obs | states |
tools/data/reports/agent_20260514_0330.md:50:| prime | 8 | 8 | 3 | SR | beta_absent_blank=5, beta_chart_recovered=3 |
tools/data/reports/agent_20260514_0330.md:51:| mod6_index_aligned | 8 | 8 | 8 | L1,SR,triple_var | beta_chart_recovered=8 |
tools/data/reports/agent_20260514_0330.md:52:| mod6_span_matched | 8 | 7 | 7 | [] | support_falls=1, beta_chart_recovered=6, beta_absent_blank=1 |
tools/data/reports/agent_20260514_0330.md:56:| class | cases | SR hits | focus [SR,L1,triple_var] | common obs | states |
tools/data/reports/agent_20260514_0330.md:58:| prime | 8 | 8 | 6 | SR | beta_chart_recovered=5, beta_absent_blank=3 |
tools/data/reports/agent_20260514_0330.md:59:| mod6_index_aligned | 8 | 8 | 6 | L1,SR | beta_chart_recovered=7, beta_absent_blank=1 |
tools/data/reports/agent_20260514_0330.md:60:| mod6_span_matched | 8 | 8 | 7 | L1,SR | support_falls=1, beta_chart_recovered=6, beta_absent_blank=1 |
tools/data/reports/agent_20260514_0330.md:62:Row-local label-swap audit:
tools/data/reports/agent_20260514_0330.md:66:| prime - mod6_index | 202605140330 | 0.433 | 0.000 | 1.0000 | 28.246 | 0.0081 |
tools/data/reports/agent_20260514_0330.md:67:| prime - mod6_span | 202605140330 | 0.423 | 0.125 | 1.0000 | 20.793 | 0.0093 |
tools/data/reports/agent_20260514_0330.md:68:| prime - mod6_index | 202605140331 | 0.517 | 0.000 | 1.0000 | 28.547 | 0.0083 |
tools/data/reports/agent_20260514_0330.md:69:| prime - mod6_span | 202605140331 | 0.560 | 0.000 | 1.0000 | 18.844 | 0.0090 |
tools/data/reports/agent_20260514_0330.md:73:1. **Verificato**: `SR` non e prime-specific come presenza binaria. In entrambi i run, `prime=8/8` e `mod6_index_aligned=8/8`; nel seed check anche `mod6_span_matched=8/8`.
tools/data/reports/agent_20260514_0330.md:75:3. **Verificato**: il delta di intensita discrimina. `p(z_SR delta)=0.0081/0.0083` contro `mod6_index` e `0.0093/0.0090` contro `mod6_span`.
tools/data/reports/agent_20260514_0330.md:76:4. **Verificato**: `mod6_index_aligned` e piu rigido dei primi: focus signature main `8/8` contro prime `3/8`, e common obs `L1,SR,triple_var` contro solo `SR`.
tools/data/reports/agent_20260514_0330.md:77:5. **Inferito dal perimetro**: il prossimo osservabile deve essere vettoriale e paired: `prime_minus_mod6_z_delta(SR,L1,triple_var)`, non `has_SR`.
tools/data/reports/agent_20260514_0330.md:83:Formula chiusa nel perimetro: `SR` appartiene al pre-bordo `6k +/- 1`. La primalita non genera `SR`; seleziona dentro un lattice gia rigido e lascia un residuo misurabile come delta z row-local.
tools/data/reports/agent_20260514_0330.md:87:- **Due radici**: lattice candidato mod6 / sequenza prime selezionata.
tools/data/reports/agent_20260514_0330.md:91:- **Campo non-possibile**: usare `SR` binario come firma prime-specific.
tools/data/reports/agent_20260514_0330.md:95:Il prossimo ciclo deve formalizzare `prime_minus_mod6_z_delta` come osservabile dedicato e scalarlo su finestre piu larghe. `mod6_index_aligned` resta antagonista primario; `mod6_span_matched` resta controllo fragile perche conserva span numerico ma introduce downsample.
tools/data/reports/agent_20260514_0330.md:99:ssp_value: yes. Lo script ora produce `--trace-jsonl`, utile per audit, replay e falsifier row-local senza riaprire il JSON aggregato.
tools/data/reports/agent_20260514_0330.md:103:- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`
tools/data/reports/agent_20260514_0330.md:104:- Data: `tools/data/prime_vs_mod6_sr_boundary_20260514_0330.json`
tools/data/reports/agent_20260514_0330.md:105:- Trace: `tools/data/prime_vs_mod6_sr_boundary_20260514_0330.trace.jsonl`
tools/data/reports/agent_20260514_0330.md:106:- Seed check: `tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.json`
tools/data/reports/agent_20260514_0330.md:107:- Seed trace: `tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.trace.jsonl`
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:10:> Consecutio from last 3 runs: the two-channel structure (algebraic scale-invariant + statistical decaying) was established for primes. Does it exist in other domains?
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:14:If I apply the same two-channel decomposition (binary alternation channel + magnitude channel) to GUE eigenvalues, Cramer random primes, and real primes, which domains show scale-invariant channels — and how many independent channels does each have?
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:18:**Domains**: Primes (200K), GUE eigenvalues (40 matrices, size 600 = 14360 spacings), Cramer random primes (200K).
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:20:**Decomposition**: For primes, binary channel = mod-6 residue (+1/-1). For GUE and Cramer, binary channel = above/below-median gap. Magnitude channel = gap demeaned by binary class. The two channels measure independent aspects: alternation pattern vs gap-size correlations.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:26:**Null baseline**: Cramer random primes (same density, independent gaps).
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:50:Prime binary channel: slight positive corr (+0.40), meaning it doesn't decay and may slightly strengthen at larger primes. GUE binary channel: perfectly flat (corr = -0.007). Both are scale-invariant. The difference is that primes also have a magnitude channel; GUE does not.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:54:1. **The binary/anti-bunching channel is NOT unique to primes.** GUE eigenvalues show the same z-score magnitude (-11.3 vs -12.2) and even better scale invariance (corr = -0.007 vs +0.40). Anti-bunching (large-small-large-small alternation) is a universal property of repulsive-gap sequences, whether the repulsion is arithmetic (sieve) or statistical (level repulsion).
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:56:2. **The magnitude channel IS unique to primes.** GUE has z_mag = 0.8 (indistinguishable from random). Primes have z_mag = -4.1. After removing the alternation pattern, prime gaps still carry memory in their sizes. GUE gaps do not. This is the genuine fingerprint: primes have TWO independent correlation channels, GUE has ONE.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:58:3. **Cramer confirms the null.** Zero channels, as expected from independent gaps. The sieve (primes) and level repulsion (GUE) both CREATE structure; independent random draws do not. The structure they create differs in dimensionality (number of channels), not in strength.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:60:4. **C1 is refined, not falsified.** The original claim "primes are the only dynamic domain" is too broad — GUE is also dynamic (z ~ -10 binary channel). The precise claim: primes are the only domain with TWO independent correlation channels. GUE has one (alternation). Cramer has zero. The number of independent channels is the discriminator, not the strength of any single channel.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:68:- **BOUNDARY**: The boundary between "structured" and "unstructured" is not binary. It has at least 3 levels: 0 channels (Cramer/Poisson), 1 channel (GUE), 2 channels (primes). The "GUE-Poisson crossover" is about the binary channel only — the magnitude channel crossover is a separate phenomenon.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:70:- **DUALITA_DIPOLARE_VS_ILLUSORIA**: GUE's single channel is purely statistical (level repulsion) — it's generative duality (det = -1). Primes' two channels combine algebraic (mod-3, sieve) with statistical (magnitude) — two KINDS of duality operating simultaneously. The dual duality is the prime fingerprint.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:74:- **Due radici** (dipolo primario): one-channel structure (GUE: anti-bunching only) / two-channel structure (primes: anti-bunching + magnitude). The GUE pole is "correlation without algebra" — the primes pole is "correlation with algebra." Inverted: in one, all memory lives in alternation; in the other, alternation is the surface and magnitude carries the depth.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:76:- **Singolare**: the raw gap sequence before decomposition. It does not distinguish one-channel from two-channel. The r-statistic, which operates on raw gaps, collapses both channels into one number — this is WHY the r-statistic couldn't see what was unique about primes (it mixes channels). The singularity is the moment before the decomposition, where both domains look "GUE-like" but for different structural reasons.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:78:- **Invariante di passaggio**: the binary/anti-bunching channel survives the crossing between primes and GUE. It is the universal signature of repulsive-gap sequences, regardless of whether the repulsion is arithmetic or statistical. What does NOT survive: the magnitude channel. This is the asymmetry that discriminates.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0852.md:80:- **Campo di possibilita**: diventa possibile — classify domains by their NUMBER of independent correlation channels (0, 1, 2, ...) as a structural fingerprint. Diventa non-possibile — use any single observable (r, ACF, Brody beta) to discriminate primes from GUE. The single observable collapses channels; the discrimination lives in the decomposition.
tools/data/reports/agent_20260407_0637.md:9:> "Three independent observables (beta, <r>, acf1) predict Poisson at p*~10^{14}. Hierarchy: shape decorrelates first, ratio second, sequential memory last." — Is this hierarchy prime-specific or generic?
tools/data/reports/agent_20260407_0637.md:13:If I create synthetic gap sequences with the SAME marginal distribution as prime gaps but tunable lag-1 correlation (AR(1) via Gaussian copula), does diluting the correlation reproduce the same hierarchy? Or is the hierarchy an artifact of confounding two different mechanisms?
tools/data/reports/agent_20260407_0637.md:17:- **Primes**: sieve to 10^8 (5.76M primes), 15 log-spaced windows of 50K gaps each
tools/data/reports/agent_20260407_0637.md:18:- **Synthetic**: AR(1) Gaussian copula with empirical prime gap marginal, rho from -0.044 (empirical) to 0 (Poisson), 12 steps, 10 trials each, N=100K
tools/data/reports/agent_20260407_0637.md:50:### Residual: primes vs AR(1)-matched synthetic
tools/data/reports/agent_20260407_0637.md:62:1. **The "hierarchy" is not a hierarchy — it's two independent mechanisms.** Beta and <r> change with scale because the prime gap DISTRIBUTION changes (gaps widen relative to their mean as primes thin out). Acf1 changes because sequential CORRELATIONS decay. These are independent processes that happen to approach the same limit (Poisson). The AR(1) synthetic proves it: varying correlation leaves beta and <r> unchanged.
tools/data/reports/agent_20260407_0637.md:64:2. **Primes carry structure beyond AR(1).** The <r> residual (-0.012) means primes have lower spacing ratio than an AR(1) process with matched marginal and matched lag-1 correlation. This is lag-2 structure: acf(2) = -0.016 for primes vs +0.001 for AR(1). Primes have MULTI-LAG anti-correlation that a simple AR(1) cannot reproduce.
tools/data/reports/agent_20260407_0637.md:68:4. **The "universal crossover at 10^14" is partially an artifact.** The three observables don't converge to a single point because of a single mechanism. Beta and <r> are driven by the gap distribution (which changes as PNT dictates: gap/mean ~ 1/ln(p)), while acf1 is driven by number-theoretic correlations (Hardy-Littlewood). Their convergence near 10^{14} may be coincidental — or may reveal a deeper connection between the distribution shape and the correlation structure of primes.
tools/data/reports/agent_20260407_0637.md:72:**CONSTRAINT + NEW** — The "hierarchy" claim is falsified as stated: it's not three observables decorrelating in order, it's two mechanisms (distribution shape + sequential correlation) that happen to approach Poisson at comparable scales. NEW: the acf(2) residual (-0.017) reveals multi-lag prime structure beyond AR(1), not previously measured. This is the next target.
tools/data/reports/agent_20260407_0637.md:77:- Does acf(k) for primes follow a specific decay law? (exponential = AR(p), power-law = long memory, oscillating = periodic structure)
tools/data/reports/agent_20260419_0755.md:9:> Agent_0419_0330 found two independent anti-correlation channels in prime gaps: residue (Z/6Z class, acf1=-0.122, alpha=1.30) and magnitude (gap size within class, acf1=-0.030, alpha=0.95). The same-class magnitude acf1 is 2.1x stronger than cross-class. Is this structure unique to primes, or generic for any Z/6Z-structured sequence?
tools/data/reports/agent_20260419_0755.md:13:Construct synthetic sequences with Z/6Z structure but without prime number theory. Which features of the two-channel decomposition survive?
tools/data/reports/agent_20260419_0755.md:17:- **Data**: 2,000,000 primes up to 32,452,843
tools/data/reports/agent_20260419_0755.md:19:  - **PRIMES**: Real prime gaps (baseline)
tools/data/reports/agent_20260419_0755.md:20:  - **MARKOV**: Z/6Z Markov chain with same transition probabilities as primes, gap sizes drawn i.i.d. from empirical distribution per transition type. Has Z/6Z structure but NO sequential memory in magnitudes.
tools/data/reports/agent_20260419_0755.md:22:  - **MAG_SHUFFLE**: Real Z/6Z class sequence from primes, gap sizes shuffled within each transition type. Has Z/6Z structure but NO magnitude ordering.
tools/data/reports/agent_20260419_0755.md:42:| Residue alpha = 1.24 | no (1.60) | no | YES | **Number-theoretic** (prime race) |
tools/data/reports/agent_20260419_0755.md:48:1. **The residue channel lag-1 amplitude is algebraic.** MARKOV reproduces acf1_res = -0.129 exactly (z = -0.3 vs primes). The Chebyshev bias — primes at 1 mod 6 and 5 mod 6 prefer to alternate — determines the amplitude. No prime number theory needed beyond transition probabilities.
tools/data/reports/agent_20260419_0755.md:50:2. **The residue channel decay shape is number-theoretic.** MARKOV gives alpha_res = 1.60 (exponential-like Markov decay fit as power law). Primes give alpha_res = 1.24. The Markov chain has only lag-1 memory; the prime Z/6Z sequence has LONG-RANGE correlations. This long-range memory in the class sequence connects to the prime race and zeros of Dirichlet L-functions — the class sequence remembers its history beyond pairwise transition probabilities.
tools/data/reports/agent_20260419_0755.md:54:4. **The 2.1x same-class asymmetry is NOT a three-point correlation.** CLASS_SHUFFLE, which has RANDOM classes (no Z/6Z memory), produces a 2.62x asymmetry (z = -1.0 vs primes). This means the asymmetry arises from the geometry of sub-sampling a correlated sequence, not from class-specific number theory. When an anti-correlated sequence is split into subsets of different sizes (~22% same-class vs ~28% cross-class), the smaller subsets naturally show stronger effective ACF because consecutive elements are more likely to have been adjacent in the parent sequence.
tools/data/reports/agent_20260419_0755.md:56:5. **The decomposition into two independent channels is generic** — any Z/6Z-structured sequence admits it. What is prime-specific is:
tools/data/reports/agent_20260419_0755.md:59:   - Both channels being simultaneously active → primes carry two independent forms of sequential memory
tools/data/reports/agent_20260419_0755.md:67:- Residue: amplitude algebraic, decay shape number-theoretic (long-range prime race memory, alpha=1.24 vs Markov 1.60)
tools/data/reports/agent_20260419_0755.md:71:The primes are not unique in HAVING two channels (any Z/6Z sequence does). The primes are unique in having long-range memory in BOTH channels simultaneously.
tools/data/reports/agent_20260419_0755.md:76:- **The magnitude anti-correlation is the core prime signature**: Since the residue amplitude is algebraic, the irreducible number-theoretic content is in (a) residue decay shape and (b) magnitude anti-correlation. The magnitude channel, carrying 99% of variance, is where the Hardy-Littlewood correlations live.
tools/data/reports/agent_20260419_0755.md:77:- **Test at larger scales**: Does the alpha_res gap (1.24 vs 1.60) change with prime scale? If it narrows toward Poisson, the long-range class memory also has a crossover.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0833.md:14:- 500,000 primes (up to 7.4M), 28 logarithmically-spaced windows of 5000 gaps each
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0833.md:44:1. **The residue channel has no boundary.** Its z-score against shuffle stays at 26-44 sigma across the entire range tested (primes from 23K to 4.5M, a 200x span). The decay correlation with ln(p) is -0.190 — essentially zero or slightly strengthening. The mod-3 prohibition (self-transition fraction ~0.40 vs shuffle ~0.61) is equally strong at all scales.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0833.md:46:2. **The magnitude channel has a boundary.** Its z-scores fluctuate between -2 and -7, with a weak positive correlation with ln(p) (0.455), meaning they drift toward the null at larger primes. This channel is what drives the r-statistic toward Poisson.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0833.md:64:- **Singolare**: the prime gap sequence before decomposition — where the two memories are superposed and inseparable. The r-statistic lives here, and that's why it mixes.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0833.md:69:- Script: `tools/exp_two_channel_boundary.py` (reusable with --n_primes, --window, --n_surrogates)
tools/data/reports/agent_20260408_0330.md:9:> "The acf(2) residual (-0.017) reveals multi-lag prime structure beyond AR(1), not previously measured." (consecutio from agent_20260407_0637)
tools/data/reports/agent_20260408_0330.md:13:What is the full autocorrelation function acf(k) of prime gaps for k=1..50? Does it decay exponentially (AR process), as a power-law (long memory), or oscillate? Is it explained by Z/6Z confinement (F2)?
tools/data/reports/agent_20260408_0330.md:61:Both null baselines (shuffled gaps AND Z/6Z-confined Cramer) show acf~0 at all lags. Z-scores against primes: -8 to -95 across all tested lags. The multi-lag anti-correlation is:
tools/data/reports/agent_20260408_0330.md:64:- Entirely from the sequential ORDER of prime gaps
tools/data/reports/agent_20260408_0330.md:73:acf(2), acf(3) fits are poor (R^2 < 0.35) — scale windows cluster near p~10^5, insufficient dynamic range for reliable extrapolation. This needs a dedicated study with larger primes.
tools/data/reports/agent_20260408_0330.md:79:2. **The 1/k law is not explained by any tested null model.** Neither shuffled gaps (same marginal distribution) nor Z/6Z-confined Cramer model (same residue structure) reproduce any of the multi-lag correlations. Z-scores are -8 to -95 across all lags. The structure is intrinsic to the prime ordering.
tools/data/reports/agent_20260408_0330.md:81:3. **The sum diverges.** Sum of |acf(k)| ~ A * sum(1/k) = A * ln(K) diverges. Primes carry "infinite total anti-correlation" — the memory never fully dies, it just decays as 1/k. This distinguishes primes from any short-memory (AR/ARMA) process.
tools/data/reports/agent_20260408_0330.md:83:4. **Connection to Hardy-Littlewood.** The Hardy-Littlewood conjecture predicts pair correlations between primes at distance d: the singular series S(d) ~ 2*C2 * product over odd primes p|d of (p-1)/(p-2). The gap ACF at lag k is a derived quantity — it sums over all gap patterns involving k consecutive primes. The 1/k decay may be a consequence of the singular series averaged over the gap structure, but this connection is NOT proven here. It's a candidate mechanism.
tools/data/reports/agent_20260408_0330.md:85:5. **The amplitude A ~ 0.037 is the new observable.** The previous reports measured acf(1) = -0.037 and treated it as a single number. Now we know it's the first term of a 1/k series: acf(k) = -0.037/k. The amplitude A encodes the total correlation strength of the prime sequence. Its scale dependence (how A changes with p) is the next target.
tools/data/reports/agent_20260408_0330.md:93:1. **Derive the 1/k law from Hardy-Littlewood.** If acf(k) = -A/k follows from the singular series, then A should be expressible in terms of the twin prime constant C2 and the prime density. This would connect a statistical observation to number theory.
tools/data/reports/agent_20260408_0330.md:99:4. **Universality test.** Do other number-theoretic sequences (twin primes, Sophie Germain primes, primes in arithmetic progressions) follow the same 1/k law with different amplitude A?
tools/data/reports/agent_20260412_0330.md:10:If we fit a 2x2 transfer matrix M to prime gap dynamics (state-space embedding: (g_i, g_{i-1}) -> (g_{i+1}, g_i)), does det(M) drift from -1 toward +1 as primes grow?
tools/data/reports/agent_20260412_0330.md:34:1. **det(M) ~ -0.38, not -1.** The transfer matrix of prime gaps has negative determinant (dipolar) but far from unit magnitude. The eigenvalues are ~(+0.82, -0.47) — one attracting, one repelling with orientation flip.
tools/data/reports/agent_20260412_0330.md:40:4. **det(M) drifts toward zero (less negative), slope = +0.003/ln(p), R^2=0.90.** Both real and shuffled drift together. The marginal distribution itself is changing — gaps become more Poisson-like (wider, more symmetric) at larger primes.
tools/data/reports/agent_20260412_0330.md:42:5. **The dipolar-vs-illusory distinction maps to real-vs-shuffled, not to det sign.** Both real and shuffled primes have det < 0 (from marginals). The "dipolar excess" — the part that comes from ordering — is the small delta that decays. This is the generative structure the operator describes. It's real but small and shrinking.
tools/data/reports/agent_20260406_1030.md:7:> The boundary between GUE and Poisson is "the third included" (A9). Is this boundary populated by multiple domains, or are primes special?
tools/data/reports/agent_20260406_1030.md:10:Do multiple domains occupy the spectral boundary, or is the prime niche unique? If Berry-Robnik mixtures fill the same <r> range, what DISCRIMINATES primes from mixtures?
tools/data/reports/agent_20260406_1030.md:13:- 17 domains (GUE, GOE, GSE, Poisson, power-law, picket fence, clock jitter, primes, semi-Poisson, Berry-Robnik x3, Anderson 1D, Harper phi/rational, quadratic residues)
tools/data/reports/agent_20260406_1030.md:16:- Scale trajectory: 6 windows across 5.76M primes (p=8K to p=100M)
tools/data/reports/agent_20260406_1030.md:28:| **primes** | **0.481** | **-0.101** | **-7.5** | **BOUNDARY** |
tools/data/reports/agent_20260406_1030.md:44:- **INTRINSIC** (primes): gaps anti-correlated by nature. acf1 = -0.10, z = -7.5.
tools/data/reports/agent_20260406_1030.md:46:Berry-Robnik 0.5 has <r>=0.485, nearly identical to primes (0.481). But its acf1=+0.009 (no ordering). The <r> statistic alone CANNOT distinguish these fundamentally different spectral types.
tools/data/reports/agent_20260406_1030.md:61:Decomposition: <r>_prime = <r>_distribution + delta_ordering
tools/data/reports/agent_20260406_1030.md:63:- delta_ordering = <r>_prime - <r>_shuffled, always negative, SHRINKS with scale
tools/data/reports/agent_20260406_1030.md:71:3. **The prime trajectory converges to Poisson from a unique direction.** In (<r>, acf1) space, primes move from (0.465, -0.071) toward (0.445, -0.051). Both coordinates drift toward the Poisson origin. The ordering effect (delta_ordering) shrinks: from -0.018 at small scale to -0.013 at large scale.
tools/data/reports/agent_20260406_1030.md:80:New tension: **SPECTRAL_NICHE** — primes are the only known domain at (intermediate <r>, significantly negative acf1). The 2D classification opens: are there other intrinsically-ordered boundary domains?
tools/data/reports/agent_20260406_1030.md:82:Constraint: **<r> alone is insufficient** to characterize spectral statistics. Any study claiming "primes are GUE-like" or "primes are between GOE and Poisson" based solely on <r> is missing the ordering dimension.
tools/data/reports/agent_20260406_1030.md:85:1. The 2D plane (<r>, acf1) can be parameterized. What is the natural coordinate system? Is there a one-parameter family connecting Poisson to GUE that passes through the prime point?
tools/data/reports/agent_20260505_0330.md:10:Quando SR, L1, L2, SR2 e triple_var reagiscono al partial shuffle, stanno misurando direzioni indipendenti del confine o una sola coordinata latente vista da osservabili diverse?
tools/data/reports/agent_20260505_0330.md:14:- **Domini**: prime gaps, GUE gaps, Poisson iid exponential gaps.
tools/data/reports/agent_20260505_0330.md:15:- **Osservabili**: SR, L1, L2, SR2, triple_var.
tools/data/reports/agent_20260505_0330.md:23:| Domain | PC1 variance | Effective rank | mean abs corr | z SR | z L1 | z L2 | z SR2 | z triple_var |
tools/data/reports/agent_20260505_0330.md:39:| Domain | SR | L1 | L2 | SR2 | triple_var |
tools/data/reports/agent_20260505_0330.md:45:1. **Nel perimetro partial-shuffle, primes e GUE hanno segnale forte ma quasi monodimensionale.** Per primes, tutte le osservabili hanno z originale-vs-shuffle almeno |3.0| e la prima componente spiega 98.9% della varianza delle retention curve. Per GUE il collasso e' ancora piu' stretto: 99.7%.
tools/data/reports/agent_20260505_0330.md:47:2. **La somiglianza dei loadings e' il dato operativo.** Nei domini strutturati, PC1 carica SR, L1, L2, SR2 e triple_var quasi uniformemente. Questo non dice che le osservabili siano identiche in generale; dice che sotto partial shuffle uniforme misurano soprattutto la stessa coordinata di distruzione dell'ordine.
tools/data/reports/agent_20260505_0330.md:54:**CONSTRAINT on META + BOUNDARY**: nel perimetro testato, il confine partial-shuffle ha una coordinata latente dominante. Le osservabili SR/L1/L2/SR2/triple_var sono probes validi, ma non cinque evidenze indipendenti della transizione. La consecutio corretta e' cercare perturbazioni selettive ortogonali, non aggiungere altri osservabili scalari sulla stessa curva.
tools/data/reports/agent_20260505_0330.md:60:- **Campo di possibilita**: qui diventa possibile separare "probe valido" da "evidenza indipendente"; qui diventa non-possibile contare SR, L1, L2, SR2 e triple_var come cinque conferme autonome del medesimo confine partial-shuffle.
tools/data/reports/agent_20260505_0330.md:66:- **L4 edge cases**: L2 primes ha z=-3.0, piu' debole degli altri; non viene usato come prova forte isolata.
tools/data/reports/agent_20260503_0330.md:18:- **Method**: Build Markov-k surrogates (k=0,1,2,3) from prime gaps, compute 10 observables on real gaps and surrogates, measure z-score for each (observable, Markov-order) pair
tools/data/reports/agent_20260503_0330.md:20:- **Observables**: SR (nearest-neighbor spacing ratio), L1 (lag-1 ACF), L2 (lag-2 ACF), L3 (lag-3 ACF), triple_corr (3-body correlation), triple_var (variance of consecutive triple sums), SR2 (next-nearest-neighbor spacing ratio), cond_entropy_L2 (H(g_{n+2}|g_n,g_{n+1})), run_length (mean run of same-sign deviations), num_var_10 (number variance at L=10)
tools/data/reports/agent_20260503_0330.md:21:- **N**: 100,000 primes (99,999 gaps)
tools/data/reports/agent_20260503_0330.md:34:| triple_var | -17.2 | **-3.7** | -0.6 | -0.8 | **Mk2** |
tools/data/reports/agent_20260503_0330.md:44:**Layer 2 (Markov-2 = triple statistics):** L2, SR2, triple_var, cond_entropy, num_var_10. All captured by Markov-2 (|z| < 2.5). Invisible to Markov-1 (|z| = 3.7 to 51.3). The sharpest probe is **SR2** (next-nearest-neighbor spacing ratio): z = -9.4 under Mk1, z = -0.05 under Mk2. The loudest probe is **cond_entropy** (conditional entropy H(g_{n+2}|g_n,g_{n+1})): z = -51.3 under Mk1, z = 2.4 under Mk2.
tools/data/reports/agent_20260503_0330.md:54:1. **Prime gap memory has exactly two visible layers.** Layer 1 (pair correlations, Mk1) shapes the dipolar plane (SR, L1). Layer 2 (triple correlations, Mk2) shapes the depth (SR2, L2, cond_entropy, triple_var, num_var_10). These are orthogonal: Layer 1 produces z ~ 0 for all Layer 2 observables, and vice versa. The structure is not a hierarchy where each layer adds to the previous — it's a decomposition into independent projection planes.
tools/data/reports/agent_20260503_0330.md:58:3. **Markov-3 adds no visible content in any tested observable.** The massive z=6203 from previous entropy measurements is a property of the transition matrix's internal structure (how many distinct states the chain visits), not of any single low-dimensional observable. For practical characterization of prime gap ordering, Markov-2 is sufficient across all 10 observables tested. Perimeter: tested with 10 observables, 100K primes, 40 surrogates, 12 bins.
tools/data/reports/agent_20260503_0330.md:64:**CONFIRMED + NEW on DIPOLAR_ORDERING**: The prime gap ordering decomposes into two independent visible layers. Layer 1 (pairs) lives in (SR, L1) = the dipolar plane. Layer 2 (triples) lives in (SR2, L2, cond_entropy) = the depth plane. SR2 is the sharpest probe for Layer 2 (z=-9.4 under Mk1, z=-0.05 under Mk2). Markov-2 is sufficient for all 10 tested observables. Perimeter: N=100K primes, 40 surrogates per order, 12 equal-count bins, 10 observables.
tools/data/reports/agent_20260503_0330.md:68:**L5 note (re-discovery check)**: The two-layer structure connects to the hierarchy of k-point correlation functions in analytic number theory. The Hardy-Littlewood pair correlation (k=2) is well-studied and corresponds to Layer 1. Triple correlations (k=3) are conjectured (Goldston-Pintz-Yildirim, Maier, etc.) but less precisely quantified. The specific finding that SR2 (next-nearest-neighbor spacing ratio) is the minimally sufficient statistic for the triple layer appears new — SR2 is standard in RMT (Atas et al. 2013) but not commonly used as a Markov-order discriminator for prime gaps. Default hypothesis: the Layer 1/Layer 2 decomposition may follow from the independence structure of Hardy-Littlewood singular series at different tuple lengths.
tools/data/reports/agent_20260503_0330.md:75:- **Campo di possibilita**: Possible — extend the dipolar plane to a 3D space (SR, L1, SR2) where both layers are visible. Map the ordering fingerprint of primes in this 3D space. Derive the SR2 deviation analytically from Hardy-Littlewood triple correlation. Not possible — reduce prime gap characterization to pairs alone (SR2 proves the triple layer is structurally independent). Not possible — find the z=6203 Markov-3 content in any single observable (it's distributional, not projectable).
tools/data/reports/agent_20260503_0330.md:79:The two-layer structure opens a precise next question: **what is the prime SR2 value analytically?** Real SR2 = 0.4785. Mk1 predicts 0.4864 (too high by 0.008). Mk2 predicts 0.4786 (match). The 0.008 gap between Mk1 prediction and reality IS the triple correlation content. Can this be derived from the Hardy-Littlewood singular series for prime triplets (p, p+g1, p+g1+g2)? If yes, it connects the Markov Layer 2 to the arithmetic structure of primes. If no, SR2 contains information beyond what Hardy-Littlewood triplet correlations encode.
tools/data/reports/agent_20260513_0330.md:5:**verdict**: CONSTRAINT - `SR` appartiene al pre-bordo aritmetico mod6; la selezione prime resta visibile solo come gradiente di intensita row-local  
tools/data/reports/agent_20260513_0330.md:7:observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p]  
tools/data/reports/agent_20260513_0330.md:8:**observable_contract**: claim=`SR` e prime-specific solo se resta piu comune/forte nelle finestre prime dopo sottrazione di candidati `6k +/- 1` row-local; observable=`SR` e firma `[SR,L1,triple_var]` in `coherent_one_sided_observables` + delta z paired; operator=`exp_prime_vs_mod6_sr_boundary.py`; generator=prime gaps da `row_spacings("numeri_primi")` e `direct_sieve`, mod6 da `index_aligned` e `span_matched`; denominator=8 finestre prime paired con 8 mod6_index_aligned e 8 mod6_span_matched; non_possible=prime-specific SR se SR e comune o pari nel contro-perimetro mod6, oppure se il label-swap row-local assorbe i delta; not_tested=`V_c`, `gap_ratio`, beta atlas globale, origine analitica del trasferimento mod6.
tools/data/reports/agent_20260513_0330.md:12:Il bordo non cade tra primi e non-primi: cade tra selezione prime e lattice candidato `6k +/- 1`. `SR` vede il lattice prima della primalita; il gate non deve chiedere "SR nei primi?", ma "cosa resta di SR dopo aver sottratto il pre-bordo?".
tools/data/reports/agent_20260513_0330.md:16:- **Combo**: A2 confine det=-1 + A9 terzo incluso + QxG continuo/discreto + BOUNDARY + consecutio `prime_vs_mod6_SR_boundary`.
tools/data/reports/agent_20260513_0330.md:17:- **Dipolo / punto-zero**: primi selezionati / candidati mod6 non selezionati. Punto-zero: la riga ordinata locale `6k +/- 1`, dove `SR` puo nominare pre-bordo aritmetico senza nominare primalita.
tools/data/reports/agent_20260513_0330.md:19:- **Proto-ipotesi**: `SR` non e firma atomica dei primi; e una sezione del pre-bordo aritmetico. La selezione prime si manifesta come differenza di intensita z rispetto al lattice candidato.
tools/data/reports/agent_20260513_0330.md:20:- **Possibile / non-possibile**: possibile = isolare una coordinata di selezione prime come gradiente dentro mod6; non-possibile = usare presenza binaria di `SR` come claim prime-specific.
tools/data/reports/agent_20260513_0330.md:21:- **Proiezione**: stesso gate ordine/null, finestre 1024, offset 0/512/1024/1536, due provider prime, due antagonisti mod6, audit label-swap dentro ogni row_id.
tools/data/reports/agent_20260513_0330.md:25:- **KSAR / CE-0001**: usato come reiterazione del kernel del ciclo precedente: non allargare i controlli, ripetere il gate sul nodo regressivo `mod6_candidates`.
tools/data/reports/agent_20260513_0330.md:26:- **PVI attack**: il presupposto attaccato e "SR persistente implica primalita". Il contro-presupposto e "SR misura la griglia 6k +/- 1 prima della selezione prime".
tools/data/reports/agent_20260513_0330.md:32:- `why`: esegue esattamente `prime_vs_mod6_SR_boundary`, con denominatore row-local e shuffle audit label-preserving sul confronto prime/mod6.
tools/data/reports/agent_20260513_0330.md:37:> `SR` appartiene ai primi solo se, a stesso provider/offset, resta piu specifico delle due versioni mod6: `index_aligned` e `span_matched`.
tools/data/reports/agent_20260513_0330.md:43:- Mod6 span-matched: candidati `6k +/- 1` nello stesso span numerico del blocco prime direct-sieve, downsampled a 1025 punti.
tools/data/reports/agent_20260513_0330.md:46:- Null audit: label-swap row-local, 4096 trial, scambio prime/mod6 solo dentro ogni provider/offset.
tools/data/reports/agent_20260513_0330.md:52:| class | cases | SR hits | focus [SR,L1,triple_var] | common obs | mean z SR | mean z L1 | mean z triple_var |
tools/data/reports/agent_20260513_0330.md:54:| prime | 8 | 8 | 5 | SR | -5.130 | -3.619 | -3.460 |
tools/data/reports/agent_20260513_0330.md:55:| mod6_index_aligned | 8 | 8 | 7 | L1,SR | -34.013 | -34.013 | -15.369 |
tools/data/reports/agent_20260513_0330.md:56:| mod6_span_matched | 8 | 5 | 4 | [] | -24.206 | -18.848 | -16.614 |
tools/data/reports/agent_20260513_0330.md:60:| class | cases | SR hits | focus [SR,L1,triple_var] | common obs | mean z SR | mean z L1 | mean z triple_var |
tools/data/reports/agent_20260513_0330.md:62:| prime | 8 | 6 | 4 | [] | -5.605 | -3.866 | -3.648 |
tools/data/reports/agent_20260513_0330.md:63:| mod6_index_aligned | 8 | 8 | 7 | L1,SR | -33.683 | -33.683 | -15.288 |
tools/data/reports/agent_20260513_0330.md:64:| mod6_span_matched | 8 | 8 | 8 | L1,SR,SR2,triple_var | -26.112 | -20.160 | -17.299 |
tools/data/reports/agent_20260513_0330.md:66:Row-local label-swap audit:
tools/data/reports/agent_20260513_0330.md:70:| prime - mod6_index | 202605130330 | 0.613 | 0.000 | 1.0000 | 28.884 | 0.0073 |
tools/data/reports/agent_20260513_0330.md:71:| prime - mod6_span | 202605130330 | 0.460 | 0.375 | 0.2502 | 19.077 | 0.0103 |
tools/data/reports/agent_20260513_0330.md:72:| prime - mod6_index | 202605130331 | 0.375 | -0.250 | 0.5055 | 28.078 | 0.0071 |
tools/data/reports/agent_20260513_0330.md:73:| prime - mod6_span | 202605130331 | 0.431 | -0.250 | 0.5021 | 20.506 | 0.0095 |
tools/data/reports/agent_20260513_0330.md:77:1. **Verificato**: la presenza binaria di `SR` non e prime-specific. Main: prime `8/8`, mod6_index `8/8`; seed check: prime `6/8`, mod6_index `8/8`, mod6_span `8/8`.
tools/data/reports/agent_20260513_0330.md:78:2. **Verificato**: il label-swap row-local assorbe `SR` come count. `p(SR delta)` vale 1.0000 / 0.5055 per mod6_index e 0.2502 / 0.5021 per mod6_span.
tools/data/reports/agent_20260513_0330.md:79:3. **Verificato**: il label-swap non assorbe il delta z di `SR`. `p(z_SR delta)` resta 0.0071-0.0103 in entrambe le seed e per entrambi gli antagonisti.
tools/data/reports/agent_20260513_0330.md:80:4. **Verificato**: mod6 e piu intenso, non piu debole. `mean z SR` e circa -34 / -26 in mod6 contro -5 nei primi. Il residuo prime non e "piu SR"; e selezione attenuata dentro un pre-bordo piu rigido.
tools/data/reports/agent_20260513_0330.md:81:5. **Inferito dal perimetro**: la coordinata utile non e `has_SR`; e `z_delta_SR` paired, insieme a `z_delta_L1` e `z_delta_triple_var`, come misura di quanto la selezione prime rompe il lattice candidato.
tools/data/reports/agent_20260513_0330.md:89:`SR` come firma prime-specific atomica.
tools/data/reports/agent_20260513_0330.md:93:`SR` appartiene al pre-bordo aritmetico `6k +/- 1`; la selezione prime resta come gradiente di intensita row-local rispetto a mod6. Il boundary operativo e quindi `mod6_preboundary -> prime_selection`, non `prime -> generic_nonprime`.
tools/data/reports/agent_20260513_0330.md:97:- **Due radici**: lattice candidato `6k +/- 1` / sequenza prime selezionata.
tools/data/reports/agent_20260513_0330.md:98:- **Singolare**: riga row-local dove `SR` e gia presente prima che la primalita selezioni.
tools/data/reports/agent_20260513_0330.md:100:- **Campo di possibilita**: possibile = cercare un osservabile di selezione come differenza prime-minus-mod6; non-possibile = classificare il bordo con presenza/assenza di `SR`.
tools/data/reports/agent_20260513_0330.md:105:- **L3**: cambio dichiarato: claim da presenza `SR` a gradiente `z_delta_SR` dopo falsificazione del nodo prime-specific.
tools/data/reports/agent_20260513_0330.md:112:Il prossimo taglio non deve chiedere se `SR` c'e. Deve costruire un osservabile di selezione: `prime_minus_mod6_z_delta` su `SR,L1,triple_var`, con span-matched conservato come controllo fragile e index-aligned come antagonista primario. Se il delta resta replicato su piu finestre e scale, il claim diventa: la primalita attenua/rompe la rigidita del pre-bordo mod6 invece di generare `SR` da sola.
tools/data/reports/agent_20260513_0330.md:116:ssp_value: yes. `tools/exp_prime_vs_mod6_sr_boundary.py` e uno strumento riusabile per audit row-local prime/mod6 con label-swap null.
tools/data/reports/agent_20260513_0330.md:120:- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`
tools/data/reports/agent_20260513_0330.md:121:- Data: `tools/data/prime_vs_mod6_sr_boundary_20260513_0330.json`
tools/data/reports/agent_20260513_0330.md:122:- Seed check: `tools/data/prime_vs_mod6_sr_boundary_20260513_0330_seedcheck.json`
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0958.md:11:Which of our key observables measure real prime structure beyond what density and pair correlations explain? If an observable is reproduced by a simple synthetic model, it's tautological — it doesn't probe deep structure.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0958.md:15:- **Controls**: (A) Shuffled gaps — same distribution, destroyed order; (B) Cramer model — PNT density, independent exponential gaps; (C) Hardy-Littlewood AR(1) model — matches real primes' pair correlation (lag-1 ACF), no higher-order structure
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0958.md:33:1. **Mod-3 ordering is the hardest signal in the lab.** Real primes: 16.1% self-transitions. All synthetics: ~34.5%. z-scores from -75 to -107. No model — not even one matching pair correlations — comes within an order of magnitude. The mod-3 prohibition (zero self-transitions in mod-3 classes, found on 2026-04-28) is structurally irreducible. This is the single strongest discriminant the lab has ever measured.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0958.md:35:2. **The r-statistic is structural but subtle.** Real primes r = 0.464 is LOWER than shuffled (0.484) and HL (0.473), but HIGHER than Cramer (0.432). It sits in a specific zone that neither pure randomness nor pair correlations reproduce. The content: primes have more repulsion than Cramer (not random) but less than shuffled (order matters beyond pairs). This is a genuine three-way discrimination.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0958.md:39:4. **Lag-1 ACF is fully explained by pair correlations.** z = -0.3 against the HL model. By construction, the AR(1) matches lag-1 — so this is expected. But the implication is: any test that relies on lag-1 ACF as evidence of prime structure is measuring pair correlations, not deep structure. The negative lag-1 of primes is real (z = -7.4 vs shuffle) but shallow.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0958.md:49:- **C1**: The mod-3 signal (z ≈ -100) is the strongest evidence for C1 (primes as unique dynamic domain). No synthetic reproduces it. The mechanism is algebraic (F2: Z/6Z confinement), not statistical.
tools/data/reports/agent_20260508_2133.md:8:**observable_contract**: claim=il residuo SR dello zero Mobius resta informativo dopo un null che preserva la geometria coarse della coppia di gap; observable=sr_zero_minus_nonzero, sr_aligned_minus_misaligned, low_low_zero_minus_nonzero, high_high_zero_minus_nonzero; operator=permuta label di transizione aligned/misaligned/zero dentro ogni pair bucket `(bucket(g_i), bucket(g_{i+1}))`; generator=prime gaps up to p<=1e6 with Mobius interval charges; denominator=main N={5000,10000,20000} offset=0 plus seedcheck offsets {3000,7000,11000}, 400 permutazioni, seed=2133; not_tested=gap_ratio Sturmian, V_c scaling, GUE/Poisson universale, sequenza Mobius globale coerente dopo shuffle.
tools/data/reports/agent_20260508_2133.md:14:- **Operatori laterali scelti**: boundary operator, filtrazione, random walk. Boundary operator definisce il vuoto prime-free; filtrazione costruisce i 16 pair bucket; random walk entra come permutazione locale delle classi di transizione dentro ogni bucket.
tools/data/reports/agent_20260508_2133.md:30:- Script: `tools/exp_prime_mobius_pair_stratified_zero_gate.py`.
tools/data/reports/agent_20260508_2133.md:39:| condition | primes | aligned/misaligned/zero | SR zero obs | SR zero null | z | p | SR aligned z/p |
tools/data/reports/agent_20260508_2133.md:66:Questo non dimostra una nuova legge sui primi. Il prossimo null deve preservare coppie esatte di gap, residue class e/o un modello classico prime-gap + Mobius randomness prima di promuovere il residuo a portatore.
tools/data/reports/agent_20260508_2133.md:70:- **Singolare**: la transizione prime-free prima della lettura aligned/misaligned/zero.
tools/data/reports/agent_20260508_2133.md:75:Attaccare il residuo con un null piu' fisico: preservare coppie esatte `(g_i,g_{i+1})` quando il denominatore lo permette, aggiungere residue class dei primi e confrontare con un modello classico prime-gap + Mobius randomness. Se SR cade, il gate e' geometria fine. Se resta, il portatore non e' la lunghezza.
tools/data/reports/agent_20260508_2133.md:83:- **L5 re-discovery vs discovery**: verdict `CONSTRAINT`; prima di `NEW` serve null esatto e confronto con risultati classici su prime gaps/Mobius.
tools/data/reports/agent_20260508_2133.md:91:- Script: `tools/exp_prime_mobius_pair_stratified_zero_gate.py`
tools/data/reports/agent_20260508_2133.md:92:- Data: `tools/data/prime_mobius_pair_stratified_zero_gate_20260508_2133.json`
tools/data/reports/agent_20260507_2120.md:6:**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260509_0659.md:7:observables_used: [`event_type`, `vc_interp`, `r_floor`, `r_span`, `label_jaccard`, `acceptance_rate`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260405_0825.md:18:| Slope `<r>` primes vs log10(n) | -0.0117 |
tools/data/reports/agent_20260405_0825.md:21:| z-score medio (primes - Cramer) | +2.63 |
tools/data/reports/agent_20260501_0725.md:17:- **Method**: Build Markov-k surrogates for k=0,1,2,3 from 100K prime gaps (p > 10007). Compare dipolar angle of each Markov order to real primes.
tools/data/reports/agent_20260501_0725.md:33:| Real primes | -111.9            | 0.0516 | 2.482           | ---               | ---  |
tools/data/reports/agent_20260501_0725.md:60:- Shared shuffle baseline from real primes
tools/data/reports/agent_20260501_0725.md:66:1. **Markov-1 captures the full dipolar angle.** With proper binning, Markov-1 (pair statistics) produces theta = -113.6 +/- 1.2 deg, residual +1.7 deg from real primes (z = 1.4 — within 2-sigma). The pair transition matrix (Lemke Oliver-Soundararajan) fully explains the dipolar direction.
tools/data/reports/agent_20260501_0725.md:72:4. **Binning resolution matters.** The "14+" catch-all bin in fixed-edge binning loses within-bin value correlations. The Markov surrogate randomizes gap values within the bin, destroying ordering that real primes preserve. Equal-count binning resolves this by distributing the tail across multiple bins.
tools/data/reports/agent_20260501_0725.md:82:- **L5 (re-discovery vs discovery)**: The pair completeness of SR and lag-1 ACF for prime ordering is consistent with Lemke Oliver-Soundararajan (2016), which shows pair statistics dominate gap correlations. The new content is: (a) quantifying that Markov-3 memory is invisible to (SR, L1), and (b) demonstrating the binning sensitivity of the dipolar decomposition. Neither is a "new result" in number theory — both are methodological constraints on the D-ND lab framework.
tools/data/reports/agent_20260501_0725.md:95:- **Singolare**: the full prime gap sequence — before any projection onto observables. It contains both pair direction and higher-order depth as inseparable aspects of the same ordering. The projection (choice of observable) creates the separation.
tools/data/reports/evolution_20260417_0803.md:7:Il passo si è interrotto a 645s sul 18° tool_use: una Bash monolitica che rigenerava 1M primi da zero via `sympy.primerange`. Il report non è stato scritto dall'agente — è stato ricostruito dall'autopsy dai 17 tool_result completati.
tools/data/reports/evolution_20260417_0803.md:11:**Ricostruzione dati da zero.** L'agente ha speso tempo computazionale a generare primi e gap ogni volta dentro Bash calls. `primerange(2, 15_500_000)` via sympy è lento — è una libreria simbolica usata come setaccio numerico. Il budget residuo non bastava per completare l'ultima call che tentava di scalare a 1M primi dopo aver già lavorato su 500K.
tools/data/reports/evolution_20260417_0803.md:20:1. **Array primi pre-sieved** (1M primi come .npy o .json.gz) — sympy.primerange è lo strumento sbagliato, un sieve di Eratostene numpy-nativo sarebbe 10x più veloce, ma il vero fix è non ricalcolarlo affatto.
tools/data/reports/agent_20260406_0714.md:15:- 664,579 primes up to 10^7
tools/data/reports/agent_20260406_0714.md:16:- 40 log-spaced windows of 10,000 primes each
tools/data/reports/agent_20260406_0714.md:32:### Z-scores vs Cramer (which drifts are prime-specific?)
tools/data/reports/agent_20260406_0714.md:35:| beta | **-9.3** | PRIME-SPECIFIC (primes decorrelate 2.8x faster) |
tools/data/reports/agent_20260406_0714.md:60:1. **dR_acf1 drift is tautological.** Cramer surrogates show the same slope (z=-0.5). The de Sitter autocorrelation drift is an artifact of the g=(p/2)² mapping, not prime structure. This constrains METRIC_TENSOR: the Ricci scalar fluctuation captures scale geometry but NOT prime-specific content.
tools/data/reports/agent_20260406_0714.md:62:2. **Two genuine prime-specific drifts survive**: beta slope (z=-9.3) and gap_acf1 slope (z=3.9). Primes decorrelate toward Poisson faster than random (Cramer), and their gap anti-correlation is real.
tools/data/reports/agent_20260406_0714.md:76:The prime-to-Poisson crossover is a multi-scale cascade, not a single transition. This falsifies any model (including naive de Sitter) that predicts a single crossover scale. The three Poisson horizons (10^8, 10^11, 10^13) encode a hierarchy of decorrelation — local structure dies before global structure.
tools/data/reports/agent_20260406_0714.md:80:Constraint on METRIC_TENSOR: dR_acf1 is tautological (z=-0.5 vs Cramer). De Sitter geometry captures scale but not prime-specific content. The partial correlation between dR and beta (0.46 from previous exp) was inflated by shared scale dependence; after proper control, it drops to -0.15.
tools/data/reports/agent_20260405_0916.md:11:- **Scope**: 5,761,455 primes up to 10^8
tools/data/reports/agent_20260405_0916.md:12:- **Windows**: 30 log-spaced, 5000 primes each (from p~32K to p~100M)
tools/data/reports/agent_20260405_0916.md:14:- **Test**: Linear fit of `delta_r = <r>_primes - <r>_Cramer` vs `log(p_center)`
tools/data/reports/agent_20260405_0916.md:26:| <r> small primes (p~32K) | 0.476 |
tools/data/reports/agent_20260405_0916.md:27:| <r> large primes (p~100M) | 0.444 |
tools/data/reports/agent_20260405_0916.md:35:- delta_r decreases from ~0.070 (small primes) to ~0.049 (large primes)
tools/data/reports/agent_20260405_0916.md:37:- Both <r>_primes and <r>_Cramer decrease, but primes decrease faster
tools/data/reports/agent_20260405_0916.md:46:3. The GUE/Poisson classification is an oversimplification: primes sit between them, drifting toward Poisson
tools/data/reports/agent_20260405_0916.md:51:The prime gap structure is NOT a fixed universality class. It's a slowly evolving system that retains memory of its correlations (Hardy-Littlewood) but asymptotically loses them. This is consistent with:
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:16:- **Scope**: 17,984 primes (p < 200,000), unfolded via n(p) ~ p/ln(p)
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:44:1. **The observables are NOT tautological.** For primes, r gives β_r = 0.39 while Σ²(L=50) gives β_Σ = 0.95. These differ by 0.56 — more than half the full Brody range. No single β describes primes. The tests measure genuinely different aspects of the same sequence.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:46:2. **Primes are "anti-Brody": β increases with scale.** Short-range (r): weakly repulsive (β ≈ 0.4). Long-range (Σ², L=50): strongly rigid (β ≈ 0.95). This is the prime number theorem at work — the smooth density p/ln(p) creates long-range regularity that consecutive gap ratios cannot see. The two-channel model predicted this: the magnitude channel dominates at short range, the ordering channel (PNT regularity) dominates at long range.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:48:3. **Shuffling inverts the scale dependence.** Shuffled primes: β_Σ = 0.43 at L=1, 0.01 at L=50 (decreasing — Poisson at large scales). Real primes: β_Σ = 0.45 at L=1, 0.95 at L=50 (increasing — GUE-like at large scales). The **sign** of the scale derivative dβ_Σ/dL is the discriminator: positive for real primes, negative for shuffled. This sign cannot be captured by any single-number statistic.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:55:- **META resolved in depth**: The tests are not tautological. r and Σ²(L) measure different aspects of prime correlations. The scale-dependent β(L) function contains information that no single observable captures. Future tests should report β(L), not β alone.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:57:- **BOUNDARY**: The GUE/Poisson boundary is not a threshold in r-space. It's a curve β(L) that separates sequences with increasing β(L) (structured: primes) from decreasing β(L) (decorrelated: shuffle). The sign of dβ/dL is the boundary criterion.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:61:- **C1**: Primes have increasing β(L) — are they unique? The two-channel model predicts that any sequence with a smooth density function overlaid with local chaos would show this. Testing other domains (zeros of Riemann zeta, eigenvalues of specific operators) would discriminate whether this is prime-specific or universal.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:66:- **Singolare**: the prime sequence itself, before any observable is applied. It is not "40% GUE" or "95% GUE" — it is the undivided source from which both measurements emerge. The β(L) function is the division; the sequence is prior to it.
tools/data/reports/_quarantine_falsifier_29_04/agent_20260429_0829.md:67:- **Invariante di passaggio**: the sign of dβ/dL. Positive for structured sequences (correlations create long-range order), negative for decorrelated sequences. This sign survives across observables, window sizes, and prime ranges.
tools/data/reports/agent_20260502_0330.md:60:Separation: 0.2 deg (0.17 sigma). The prime ordering CHARACTER, as measured by how it responds to partial shuffling in the (SR, L1) plane, is INDISTINGUISHABLE from the periodic Z/6Z confinement pattern.
tools/data/reports/agent_20260502_0330.md:62:This is not trivial — the prime MAGNITUDES are very different (slope -0.156 vs -1.466 for periodic), and the raw statistics are different (prime SR=0.46, L1=-0.06 vs periodic SR=0.50, L1=-1.0). The ordering QUANTITY differs by 10x, but the ordering CHARACTER (direction in dipolar space) is identical to within measurement noise.
tools/data/reports/agent_20260502_0330.md:70:3. **Prime ordering character = Z/6Z confinement character.** The 0.2-degree coincidence between primes and the periodic 2,4,2,4 pattern (within 0.17 sigma) means the prime dipolar direction is dominated by the mod-6 constraint. This connects to F2 (gap confinement to {2,4} in Z/6Z) and to the Markov-1 result (pair statistics explain most of the angle): both point to the SAME structure. The pair transition probabilities ARE the Z/6Z lattice structure of consecutive gaps.
tools/data/reports/agent_20260502_0330.md:74:5. **The previous report's finding is partially tautological, partially real.** Tautological: the EXISTENCE of a phase transition in the GUE crossover. Real: the specific DIRECTION of the lock and the fact that primes are 7 degrees away from GUE. The discriminating content was already in the direction offset, not in the phase transition itself.
tools/data/reports/agent_20260502_0330.md:80:**CONFIRMED + REFINED on DIPOLAR_ORDERING**: The dipolar direction IS diagnostic of ordering type. Primes lock at -104.2 deg, matching periodic Z/6Z (2,4,2,4) to 0.2 deg. GUE locks at -97.8 deg. The 7-deg separation between "repulsion class" and "confinement class" is the structural content. The prime ordering is CONFINEMENT-dominated, not repulsion-dominated.
tools/data/reports/agent_20260502_0330.md:82:**L5 note (re-discovery check)**: The universality of magnitude decay under partial randomization is analogous to linear response theory — small perturbations produce proportional responses. The direction invariance is analogous to universality classes in phase transitions (Ising, XY, etc.) — the direction is the "universality class" of the ordering. The specific finding that primes match Z/6Z periodic structure connects to Lemke Oliver-Soundararajan (2016) who showed prime gap correlations are dominated by the mod-q residue structure. The direction coincidence appears to be a new geometric restatement of this known result.
tools/data/reports/agent_20260502_0330.md:89:- **Campo di possibilita**: Possible — classify arbitrary ordered sequences by their dipolar direction ("ordering fingerprint"). Map the topology of ordering classes. Derive the prime direction (-104 deg) analytically from the Z/6Z constraint (F2). Not possible — claim the phase transition itself as a discovery specific to GUE or primes (it's universal). Not possible — separate prime ordering from Z/6Z confinement (they're the same thing in this projection).
tools/data/reports/agent_20260510_0330.md:7:observables_used: [SR, SR2, L1, L2, triple_var, window_state, blank_window_rate, full_signature_jaccard, common_window_obs_jaccard]  
tools/data/reports/agent_20260510_0330.md:8:**observable_contract**: claim=le due righe residue beta-absent sono strutturali solo se `beta_absent_blank` persiste in finestre row-local da 1024 gap; observable=`window_state` + firma degli osservabili one-sided; operator=`exp_boundary_residual_beta_absent_audit.py`; generator=`numeri_primi` da `dnd_autoricerca.genera_segnale` e `random_matrix` da `gue_spacing_blocks`; denominator=2 righe aperte BOUNDARY, full row + 4 finestre row-local da 1024 gap; non_possible=classe residua unica se una riga recupera beta o perde supporto nelle finestre row-local; not_tested=griglia beta globale, fit `V_c`, validita' label sorgente GUE/Poisson.
tools/data/reports/agent_20260510_0330.md:13:- **Dipolo / punto-zero**: blank strutturale / blank da atlante. Punto-zero: la stessa misura row-local da 1024 gap che decide se la beta manca per struttura o riappare per scelta di finestra.
tools/data/reports/agent_20260510_0330.md:17:- **Proto-ipotesi**: il residuo medio/forte beta-absent e' una classe unica solo se entrambi i target restano blank in tutte le finestre row-local e conservano una firma osservabile compatibile.
tools/data/reports/agent_20260510_0330.md:28:> I due residui `numeri_primi:cycle_3` e `random_matrix:cycle_7` formano una classe unica `medium/strong beta-absent` se il blank persiste in tutte le finestre row-local da 1024 gap e le firme one-sided restano compatibili.
tools/data/reports/agent_20260510_0330.md:41:- Criterio di caduta: una riga recupera beta o perde supporto in una finestra row-local; in quel caso il residuo non e' classe unica chiusa.
tools/data/reports/agent_20260510_0330.md:47:| numeri_primi:cycle_3 | beta_absent_blank | SR,L1,triple_var | 4/4 | 0 | 0 | SR | 2.761 | 2.563 |
tools/data/reports/agent_20260510_0330.md:48:| random_matrix:cycle_7 | beta_absent_blank | SR,SR2,L1,L2,triple_var | 3/4 | 1 | 0 | L2 | 2.987 | 3.083 |
tools/data/reports/agent_20260510_0330.md:59:2. **Verificato: `random_matrix:cycle_7` non resta beta-absent in 4/4 finestre.** La quarta finestra recupera beta `[0.4]` con supporto vivo (`SR2,L1,L2,triple_var`).
tools/data/reports/agent_20260510_0330.md:61:4. **Inferito dal perimetro dichiarato: il residuo beta-absent non e' una classe unica chiusa.** Una parte e' blank persistente row-local, una parte e' chart-sensitive.
tools/data/reports/agent_20260510_0330.md:69:`numeri_primi:cycle_3` = blank persistente row-local.  
tools/data/reports/agent_20260510_0330.md:74:`beta_absent_residue` non matura come classe unica; diventa un audit a due stati: `prime_persistent_blank` / `random_matrix_chart_sensitive_blank`.
tools/data/reports/agent_20260510_0330.md:87:- `prime_persistent_blank`: testare se `SR` resta l'osservabile comune sotto seed/window shift.
tools/data/reports/agent_20260510_0330.md:92:ssp_value: yes. Lo script e' uno strumento riusabile per audit row-local di residui BOUNDARY senza rigenerare fit globali.
tools/data/reports/agent_20260507_1006.md:18:canonica `[SR, SR2, L1, L2, triple_var]` ha prodotto blank.
tools/data/reports/agent_20260508_2121.md:8:**observable_contract**: claim=la classe zero Mobius resta informativa dopo controllo per lunghezza del gap; observable=low_low_zero_minus_nonzero, high_high_zero_minus_nonzero, sr_zero_minus_nonzero sotto null stratificato; operator=shuffle delle cariche Mobius intervallari solo dentro bucket di lunghezza gap; generator=prime gaps up to p<=1e6 with Mobius sieve; denominator=main N={5000,10000,20000} offset=0 plus seedcheck offsets {3000,7000,11000}; not_tested=gap_ratio Sturmian, high-core phi survival, universal GUE/Poisson classification, det(M) diretto.
tools/data/reports/agent_20260508_2121.md:14:- **Operatori laterali scelti**: boundary operator, filtrazione, random walk. Boundary operator definisce il gap prime-free; filtrazione separa low/mid/high gap; random walk entra come permutazione locale delle cariche dentro la stessa classe di lunghezza.
tools/data/reports/agent_20260508_2121.md:27:Lo zero Mobius del boundary prime-free separa ancora low-core/high-tail quando la lunghezza del gap e' gia' conservata dal null, oppure il segnale low/high del cycle 2108 era denominatore di lunghezza?
tools/data/reports/agent_20260508_2121.md:30:- Script: `tools/exp_prime_mobius_gap_stratified_zero_gate.py`.
tools/data/reports/agent_20260508_2121.md:41:| condition | primes | zero bucket rates low/midL/midH/high | low z0 obs/null z p | high z0 obs/null z p | SR z0 obs/null z p |
tools/data/reports/agent_20260508_2121.md:76:- **Singolare**: il vuoto prime-free prima della partizione; non e' ancora informazione aritmetica o denominatore geometrico.
tools/data/reports/agent_20260508_2121.md:92:- Script: `tools/exp_prime_mobius_gap_stratified_zero_gate.py`
tools/data/reports/agent_20260508_2121.md:93:- Data: `tools/data/prime_mobius_gap_stratified_zero_gate_20260508_2121.json`
tools/data/reports/agent_20260411_0330.md:12:Does the power-law exponent alpha in acf(k) ~ -A * k^(-alpha) stay at 1.00 as primes get larger, or does it drift? If stable: the structure type is preserved (always dipolar, fading). If drifting: the structure type itself transitions.
tools/data/reports/agent_20260411_0330.md:15:- **Data**: 6M primes (p_max = 104M), consecutive gaps
tools/data/reports/agent_20260411_0330.md:63:- Declines from 0.89 (small primes) to 0.24-0.40 (large primes)
tools/data/reports/agent_20260411_0330.md:73:1. **Alpha drifts from ~2 to ~0.7.** The power-law exponent of the gap ACF is NOT universal at 1.00. It decreases with prime scale. The "alpha=1.00, R2=0.998" from ACF_1K_LAW is an aggregate average over a drifting exponent — the aggregate R2 is high because it averages over many scales.
tools/data/reports/agent_20260411_0330.md:75:2. **The anti-correlation changes type, not just amplitude.** At small primes (alpha~2), the anti-correlation is steep and localized: nearby gaps are strongly anti-correlated, distant gaps are nearly independent. At large primes (alpha~0.7), the anti-correlation is shallow and diffuse: all lags contribute more equally. This is a structural transition.
tools/data/reports/agent_20260411_0330.md:77:3. **The power-law model itself deteriorates.** R2 drops from 0.89 to 0.24 at large scales. The ACF at large primes is no longer well-described by a single power law — it may be transitioning to a different functional form (e.g., the Poisson limit where ACF=0 everywhere).
tools/data/reports/agent_20260411_0330.md:90:- The alpha drift could be derived from PNT + Hardy-Littlewood: if the gap correlations come from the prime density, the exponent should follow from d/dp[1/ln(p)]
tools/data/reports/agent_20260411_0330.md:93:- Script: `tools/exp_alpha_stability.py` (reusable with --n_primes, --n_windows, --max_lag)
tools/data/reports/agent_20260511_0330.md:5:**verdict**: CONSTRAINT - `prime_persistent_blank` si scinde: SR persiste, il blank beta no  
tools/data/reports/agent_20260511_0330.md:7:observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, case_state, blank_rate, sr_rate, prime_control_common_obs_jaccard]  
tools/data/reports/agent_20260511_0330.md:8:**observable_contract**: claim=`prime_persistent_blank` e' isolato solo se `numeri_primi:cycle_3` resta `beta_absent_blank` attraverso provider, offset row-local e seed shift con `SR` come osservabile one-sided comune; observable=`case_state` + firma osservabili one-sided focalizzata su `SR`; operator=`exp_prime_persistent_blank_gate.py`; generator=primi via `row_spacings("numeri_primi")` e `prime_gap_sequence`, controlli via GUE random matrix blocks e logistic return intervals; denominator=8 finestre prime da 1024 gap (2 provider x 4 offset) + 8 controlli cross-dominio; non_possible=`prime_persistent_blank` se una finestra prime recupera beta/perde supporto o se i controlli condividono la stessa firma blank-SR; not_tested=atlante beta globale, `V_c`, `gap_ratio`, validita' label sorgente GUE/Poisson.
tools/data/reports/agent_20260511_0330.md:13:- **Dipolo / punto-zero**: persistenza del supporto / persistenza del blank. Punto-zero: la stessa finestra row-local da 1024 gap dove `SR` puo' restare mentre la coordinata beta riappare.
tools/data/reports/agent_20260511_0330.md:15:- **Proto-ipotesi**: il residuo prime e' strutturale solo se il blank beta-absent sopravvive a provider e offset; se sopravvive solo `SR`, la struttura non e' `blank`, e' `SR-supported boundary`.
tools/data/reports/agent_20260511_0330.md:16:- **Possibile / non-possibile**: possibile = isolare un residuo prime provider-neutral; non-possibile = chiamarlo `prime_persistent_blank` quando beta ricompare in finestre locali.
tools/data/reports/agent_20260511_0330.md:17:- **Proiezione**: due provider prime, quattro offset locali, seed shift del gate, controlli random_matrix/logistic.
tools/data/reports/agent_20260511_0330.md:30:- `why`: testa direttamente `prime_persistent_blank` su `numeri_primi:cycle_3` con provider-neutral row-local windows e controlli cross-dominio.
tools/data/reports/agent_20260511_0330.md:35:> `numeri_primi:cycle_3` e' un `prime_persistent_blank` se resta beta-absent in tutte le finestre provider-neutral e conserva `SR` come osservabile comune, mentre i controlli non condividono la stessa firma.
tools/data/reports/agent_20260511_0330.md:39:- Perimetro prime: 2 provider (`dnd_autoricerca`, `direct_sieve`) x 4 offset (`0`, `512`, `1024`, `1536`) x 1024 gap.
tools/data/reports/agent_20260511_0330.md:43:- Criterio di isolamento: prime `blank_rate=1.0`, prime `sr_rate=1.0`, common prime obs = `[SR]`, controlli senza full blank-SR collision.
tools/data/reports/agent_20260511_0330.md:49:| prime | 3/8 | 4/8 | 1/8 | 1.000 | SR | 2.715 | 2.656 |
tools/data/reports/agent_20260511_0330.md:54:| prime_control_common_obs_jaccard | 0.000 |
tools/data/reports/agent_20260511_0330.md:63:| dnd_autoricerca offset 1024 | beta_chart_recovered | SR,L1,triple_var | 0.2 |
tools/data/reports/agent_20260511_0330.md:64:| dnd_autoricerca offset 1536 | beta_absent_blank | SR,L1,triple_var | [] |
tools/data/reports/agent_20260511_0330.md:66:| direct_sieve offset 512 | beta_chart_recovered | SR,L1,triple_var | 0.4 |
tools/data/reports/agent_20260511_0330.md:67:| direct_sieve offset 1024 | beta_absent_blank | SR,L1,triple_var | [] |
tools/data/reports/agent_20260511_0330.md:68:| direct_sieve offset 1536 | beta_chart_recovered | SR,L1,triple_var | 0.4 |
tools/data/reports/agent_20260511_0330.md:72:1. **Verificato**: `SR` resta in 8/8 finestre prime. La firma comune prime e' `[SR]`.
tools/data/reports/agent_20260511_0330.md:73:2. **Verificato**: il blank beta-absent non resta in 8/8 finestre prime. Solo 3/8 casi sono `beta_absent_blank`; 4/8 recuperano beta e 1/8 cade per supporto.
tools/data/reports/agent_20260511_0330.md:74:3. **Verificato**: i controlli non collidono con la firma prime. I controlli hanno common obs `[L2]`, `sr_rate=0.250`, `blank_rate=0.125`, Jaccard comune prime/controlli = 0.000.
tools/data/reports/agent_20260511_0330.md:75:4. **Inferito dal perimetro dichiarato**: il residuo dei primi non e' `prime_persistent_blank`; e' `prime_SR_persistent_boundary` con coordinata beta chart-sensitive.
tools/data/reports/agent_20260511_0330.md:81:Il nome `prime_persistent_blank` non regge nel perimetro provider-neutral/offset-shift. La parte persistente e' `SR`, non l'assenza di beta.
tools/data/reports/agent_20260511_0330.md:94:- **Singolare**: la finestra row-local dove `SR` resta ma beta riappare.
tools/data/reports/agent_20260511_0330.md:102:- rinominare il residuo prime in `prime_SR_persistent_boundary`;
tools/data/reports/agent_20260511_0330.md:112:- Script: `tools/exp_prime_persistent_blank_gate.py`
tools/data/reports/agent_20260511_0330.md:113:- Data: `tools/data/prime_persistent_blank_gate_20260511_0330.json`
tools/data/reports/agent_20260507_2157.md:6:**observables_used**: [] - tassonomia operatori TQGE+R+S, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/evolution_20260424_0330.md:19:2. **sign(delta_r) come firma stabile**: se il segno sopravvive alla scala (il produttore lo afferma ma non lo testa esplicitamente), e' un candidato per F-list. Serve un test multi-scala su almeno primes e fibonacci per confermare.
tools/data/reports/agent_20260429_1013.md:13:Does the Brody parameter beta (interpolating Poisson beta=0 and GUE beta=1) evolve along the prime sequence, or is it a fixed point? If it flows, how much is magnitude (gap distribution shape) and how much is ordering (sequential correlations)?
tools/data/reports/agent_20260429_1013.md:16:- **Observable**: Brody beta (MLE from unfolded gaps) and r-statistic (consecutive spacing ratio) in sliding windows along the prime sequence.
tools/data/reports/agent_20260429_1013.md:17:- **Data**: 148,933 primes up to 2,000,000 yielding 148,932 gaps. 72 windows of 5000 gaps, step 2000.
tools/data/reports/agent_20260429_1013.md:23:### Brody flow along the prime sequence
tools/data/reports/agent_20260429_1013.md:59:2. **82% of the flow is magnitude, 18% is ordering.** The shuffle beta tracks the real beta closely, both decreasing. The gap distribution itself becomes more Poisson-like as primes thin out (expected from PNT: gaps approach exponential). The ordering channel provides a small but persistent additional depression of beta (real < shuffle at every scale).
tools/data/reports/agent_20260429_1013.md:65:5. **Cramer is always pure Poisson (beta ~ 0.015).** The entire beta signal — both magnitude and ordering channels — is absent in density-matched random primes. The structure is arithmetic, not statistical.
tools/data/reports/agent_20260429_1013.md:69:The spectral rigidity experiment (2026-04-27) showed beta_sigma(L) INCREASING with spectral scale L: primes become more GUE-like at larger L. This experiment shows beta(N) DECREASING with position N: primes become more Poisson-like at larger N.
tools/data/reports/agent_20260429_1013.md:72:- **Horizontal flow** (this experiment): beta(N) decreases along the prime sequence. At fixed spectral scale, larger primes are more Poisson-like.
tools/data/reports/agent_20260429_1013.md:82:- **TRASCENDENZA_LIMITE**: If beta(p) = 0.64 - 0.030 * ln(p) persists, then beta = 0 at ln(p) ~ 21, i.e., p ~ 1.3 * 10^9. At that scale, primes would be locally indistinguishable from Poisson. This is a prediction the model makes — testable by extending the sieve to 10^9.
tools/data/reports/agent_20260429_1013.md:87:- **Singolare** (il 1-che-e-tutto): il parametro beta stesso — il singolo numero che comprime la posizione tra Poisson e GUE. Non appartiene ne alla magnitudine ne all'ordinamento — e la sovrapposizione dei due canali collassata in uno scalare. Prima della decomposizione, beta e il segnale intero.
tools/data/reports/agent_20260509_1427.md:7:observables_used: [`spacing_r`, `shuffle_r_statistic`, `denominator_state`, `excluded_mass`, `transfer`] - osservabili domain-native per il gate boundary, non canonici SR/SR2/L1/L2/triple_var.
tools/data/reports/agent_20260512_0330.md:5:**verdict**: CONSTRAINT - `prime_SR_persistent_boundary` non chiude come firma prime-specific atomica  
tools/data/reports/agent_20260512_0330.md:7:observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, case_state, sr_rate, common_one_sided_observables, prime_control_common_obs_jaccard]  
tools/data/reports/agent_20260512_0330.md:8:**observable_contract**: claim=`prime_SR_persistent_boundary` regge solo se le finestre prime conservano `SR` come osservabile one-sided comune attraverso provider e offset, mentre controlli non-prime ampliati non condividono persistenza SR piena; observable=`SR` in `coherent_one_sided_observables` + firma comune one-sided; operator=`exp_prime_sr_persistent_boundary.py`; generator=primi via `row_spacings("numeri_primi")` e `prime_gap_sequence`, controlli via composite gaps, candidati mod6, eventi Cramer-like, GUE blocks, logistic return intervals; denominator=8 finestre prime row-local + 20 controlli non-prime; non_possible=claim prime-specific se `SR` prime scende sotto 8/8, se la firma comune prime non e' `[SR]`, o se una sottofamiglia controllo condivide persistenza SR piena; not_tested=atlante beta globale, `V_c`, `gap_ratio`, origine analitica di SR.
tools/data/reports/agent_20260512_0330.md:12:- **Combo**: A2 confine det=-1 + A9 terzo incluso + QxG continuo/discreto + BOUNDARY come passaggio 8 GUE / 5 Poisson + residuo `prime_SR_persistent_boundary`.
tools/data/reports/agent_20260512_0330.md:13:- **Dipolo / punto-zero**: firma dei primi / firma del pre-bordo non-prime. Punto-zero: la sequenza ordinata row-local dove `SR` puo' essere supporto d'ordine senza essere specifica dei primi.
tools/data/reports/agent_20260512_0330.md:15:- **Operatori laterali scelti**: boundary operator, generatori non equivalenti, null label-preserving row-local. Entrano per separare supporto osservabile, carta beta e dominio sorgente.
tools/data/reports/agent_20260512_0330.md:16:- **Contaminazione cognitiva**: CE-0001/KSAR usato come reiterazione del kernel emerso: non ridisegnare l'atlante, ripassare lo stesso gate su un contro-perimetro piu' largo. PVI: il presupposto attaccato e' "SR persistente nei primi implica prime-specific".
tools/data/reports/agent_20260512_0330.md:17:- **Proto-ipotesi**: `SR` e' un bordo prime solo se sopravvive come comune nei primi e fallisce come comune nei generatori non-prime che preservano parti del pre-bordo aritmetico.
tools/data/reports/agent_20260512_0330.md:18:- **Proiezione**: stesso gate canonico ordine/null, stesso size 1024, due provider prime, quattro offset, controlli compositi/mod6/Cramer/GUE/logistic.
tools/data/reports/agent_20260512_0330.md:23:- `why`: testa direttamente la direzione viva `prime_SR_persistent_boundary`, separando supporto osservabile `SR` da blank beta e ampliando i controlli non-prime.
tools/data/reports/agent_20260512_0330.md:24:- `not_drift`: non torna a `V_c`, fit, gap label o beta atlas; usa lo stesso gate solo per falsificare la specificita' prime.
tools/data/reports/agent_20260512_0330.md:28:> `SR` e' una firma di confine prime-specific se resta comune in 8/8 finestre prime provider-neutral/offset-shift e nessuna sottofamiglia non-prime mostra persistenza SR piena.
tools/data/reports/agent_20260512_0330.md:32:Quando il blank beta e' rimosso dal nome, `SR` resta bordo dei primi o appartiene a un pre-bordo piu' largo visibile anche nei generatori non-prime?
tools/data/reports/agent_20260512_0330.md:37:- Controlli: composite gaps, mod6 candidates, Cramer-like events su 4 offset; 4 GUE random matrix blocks; 4 logistic return interval rows.
tools/data/reports/agent_20260512_0330.md:49:| prime | 8 | 7 | [] | 7 | 1 | 0 | 2.726 |
tools/data/reports/agent_20260512_0330.md:54:| mod6_candidates | 4 | 2 | [] | 0 | 3 | 1 | 3.440 |
tools/data/reports/agent_20260512_0330.md:55:| random_matrix | 4 | 3 | L2,triple_var | 2 | 2 | 0 | 3.364 |
tools/data/reports/agent_20260512_0330.md:61:| prime | 8 | 7 | [] | 4 | 3 | 1 | 2.474 |
tools/data/reports/agent_20260512_0330.md:63:| mod6_candidates | 4 | 4 | L1,SR,triple_var | 0 | 3 | 1 | 4.077 |
tools/data/reports/agent_20260512_0330.md:70:| dnd_autoricerca offset 512 | beta_absent_blank | L1,triple_var | [] |
tools/data/reports/agent_20260512_0330.md:72:| dnd_autoricerca offset 1536 | beta_absent_blank | SR,L1,triple_var | [] |
tools/data/reports/agent_20260512_0330.md:74:| direct_sieve offset 512 | beta_absent_blank | SR,L1,triple_var | [] |
tools/data/reports/agent_20260512_0330.md:75:| direct_sieve offset 1024 | beta_chart_recovered | SR,L1,triple_var | 0.2 |
tools/data/reports/agent_20260512_0330.md:76:| direct_sieve offset 1536 | beta_absent_blank | SR,L1,triple_var | [] |
tools/data/reports/agent_20260512_0330.md:80:1. **Verificato**: `SR` non resta in 8/8 finestre prime. Main e seed check danno entrambi `SR=7/8`; la firma comune prime e' vuota.
tools/data/reports/agent_20260512_0330.md:83:4. **Verificato**: `mod6_candidates` collide nel seed check con `SR=4/4` e common `[L1, SR, triple_var]`. Questo sposta `SR` dal dominio prime al pre-bordo aritmetico `6k +/- 1` nel perimetro testato.
tools/data/reports/agent_20260512_0330.md:84:5. **Inferito dal perimetro dichiarato**: la parte robusta non e' "SR e' prime-specific"; e' "SR misura una memoria d'ordine aritmetica che i primi condividono con un contro-perimetro mod6 in alcune repliche".
tools/data/reports/agent_20260512_0330.md:92:`prime_SR_persistent_boundary` come firma atomica prime-specific.
tools/data/reports/agent_20260512_0330.md:96:`SR` e' forte nei primi ma non persistente come comune 8/8; quando il contro-perimetro include candidati `6k +/- 1`, `SR` puo' trasferire fuori dai primi. Il boundary non vive tra prime e non-prime generico; vive tra primi e pre-bordo aritmetico.
tools/data/reports/agent_20260512_0330.md:100:- **Due radici**: primi come sequenza selezionata / candidati mod6 come pre-bordo non selezionato.
tools/data/reports/agent_20260512_0330.md:101:- **Singolare**: l'ordine aritmetico row-local prima della primalita'; qui `SR` non sa ancora se appartiene ai primi o al loro supporto candidato.
tools/data/reports/agent_20260512_0330.md:102:- **Invariante di passaggio**: il gate ordine/null vede memoria in `SR`, ma la specificita' prime non sopravvive al contro-perimetro mod6.
tools/data/reports/agent_20260512_0330.md:103:- **Campo di possibilita'**: possibile = testare il boundary come selezione prime dentro il pre-bordo `6k +/- 1`; non-possibile = usare `SR` da solo come firma prime-specific.
tools/data/reports/agent_20260512_0330.md:107:Il prossimo ciclo deve spostare il nodo regressivo: non "prime vs controlli generici", ma "primi vs candidati mod6 row-aligned". Il test utile e' sottrarre il pre-bordo: misurare cosa resta in `SR`, `L1` e `triple_var` quando i primi sono confrontati con candidati `6k +/- 1` a stesso offset e stessa densita' locale.
tools/data/reports/agent_20260512_0330.md:111:ssp_value: yes. `tools/exp_prime_sr_persistent_boundary.py` diventa audit riusabile per distinguere persistenza osservabile, specificita' di dominio e collisione col pre-bordo aritmetico.
tools/data/reports/agent_20260512_0330.md:115:- Script: `tools/exp_prime_sr_persistent_boundary.py`
tools/data/reports/agent_20260512_0330.md:116:- Data: `tools/data/prime_sr_persistent_boundary_20260512_0330.json`
tools/data/reports/agent_20260512_0330.md:117:- Seed check: `tools/data/prime_sr_persistent_boundary_20260512_0330_seedcheck.json`
tools/data/reports/agent_20260430_1946.md:9:> The prime ordering signal at theta = -150 deg (previous run) is a unique direction, not just attenuated GUE. What angle do pure GUE, GOE, Poisson, and Cramer random primes have?
tools/data/reports/agent_20260430_1946.md:13:If primes were "weak GUE" (same ordering quality, lower magnitude), their dipolar angle would match GUE's. If they are structurally different, the angle will differ. Where do primes sit in the (delta_SR, delta_L1) plane relative to pure reference ensembles?
tools/data/reports/agent_20260430_1946.md:19:- **Sources**: real primes (p > 10000, 50K gaps), GUE (500×500 Hermitian, unfolded, 20 trials), GOE (500×500 symmetric, 20 trials), Poisson (iid exponential, 20 trials), Cramer random primes (same density, no correlations, 20 trials)
tools/data/reports/agent_20260430_1946.md:20:- **Scale dependence**: primes checked at 5 scales from p ~ 1e4 to p ~ 2e7 (922K gaps total)
tools/data/reports/agent_20260430_1946.md:35:### Scale dependence of prime angle
tools/data/reports/agent_20260430_1946.md:47:### Angular separation from primes
tools/data/reports/agent_20260430_1946.md:62:3. **The prime angle is stable at -111 +/- 1 deg across 3 decades (p from 1e4 to 2e7).** The magnitude decays slowly (exponent -0.14 in ln(p)), but the direction is locked. This means the quality of ordering is scale-invariant while its quantity diminishes.
tools/data/reports/agent_20260430_1946.md:66:5. **Cramer random primes sit in the opposite quadrant (+79 deg).** Same density as primes but no gap correlations. Their faint positive delta_L1 (0.006) likely comes from the non-stationarity of the density (gaps grow with p), not from ordering structure.
tools/data/reports/agent_20260430_1946.md:72:**CONFIRMED structure on DIPOLAR_ORDERING** (primes have a locked direction different from GUE)
tools/data/reports/agent_20260430_1946.md:74:**CORRECTION**: prime dipolar angle is -111 deg, not -150 deg as previously reported
tools/data/reports/agent_20260430_1946.md:76:The META question "are we testing tautologies?" receives a partial answer: the direction is real (not tautological), but the content is specific — primes have 3.7x more gap-similarity-depression per unit of anticorrelation than random matrices. This ratio (2.28 vs 8.37) is the non-tautological content of the prime ordering signal.
tools/data/reports/agent_20260430_1946.md:84:- **Invariante di passaggio**: the angle theta. As scale increases, the magnitude |d| decays (the signal weakens), but theta is preserved (the quality is invariant). The ordering does not change nature as it fades — it fades in the same direction. This is the invariant that survives the passage from small primes to large primes.
tools/data/reports/agent_20260430_1946.md:86:- **Campo di possibilita**: here it becomes possible to classify ordered sequences not by how much ordering they have (magnitude), but by what kind (angle). GUE = anticorrelation-dominated. Primes = balanced. Cramer = opposite. Here it becomes non-possible to treat prime ordering as "weak GUE" — the direction is different by 14 deg at 170 sigma.
tools/data/reports/agent_20260430_1946.md:90:The ratio dL1/dSR = 2.28 is stable. Can it be derived from Hardy-Littlewood pair correlations? If the twin-prime constant and the gap distribution shape determine the ratio, then the angle is a consequence of the arithmetic — not an independent observable. If the ratio cannot be derived, it is a new constraint on prime gap models. Next experiment: compute dL1/dSR from the Hardy-Littlewood singular series and compare with 2.28.
tools/data/reports/agent_20260506_1941.md:6:observables_used: [SR, SR2, L1, L2, triple_var]
tools/data/reports/agent_20260506_1941.md:17:- domains: prime-gap windows, prime-shuffle controls, iid Poisson spacings, independent GUE spacings;
tools/data/reports/agent_20260506_1941.md:37:| primes_windows | 128 | 1.789 ± 0.469 | 0.155 | 4.50 | 1.382 |
tools/data/reports/agent_20260506_1941.md:38:| primes_windows | 256 | 1.947 ± 0.645 | 0.174 | 4.75 | 1.262 |
tools/data/reports/agent_20260506_1941.md:39:| primes_windows | 512 | 1.892 ± 0.372 | 0.142 | 2.88 | 1.310 |
tools/data/reports/agent_20260506_1941.md:40:| primes_windows | 1024 | 1.679 ± 0.409 | 0.117 | 1.62 | 1.415 |
tools/data/reports/agent_20260506_1941.md:41:| primes_windows | 2048 | 1.442 ± 0.213 | 0.081 | 0.75 | 1.462 |
tools/data/reports/agent_20260506_1941.md:42:| prime_shuffle_control | 2048 | 1.797 ± 0.375 | 0.134 | 3.62 | 1.428 |
tools/data/reports/agent_20260506_1941.md:52:At GUE N=2048, `SR`, `L1`, and `triple_var` are stable in all 8 replicates; `SR2` and `L2` are stable in 0 of 8. Mean absolute z-scores: `SR=8.38`, `SR2=0.67`, `L1=11.58`, `L2=0.89`, `triple_var=11.66`.
tools/data/reports/agent_20260506_1941.md:54:At primes N=2048, `SR`, `L1`, and `triple_var` are stable in all 8 windows; `SR2` is stable in 7 of 8; `L2` is stable in 3 of 8. Mean absolute z-scores: `SR=5.19`, `SR2=2.63`, `L1=3.96`, `L2=1.78`, `triple_var=4.37`.
tools/data/reports/agent_20260506_1941.md:56:Poisson and prime-shuffle controls keep high `rank_all` while most observables are weak. At Poisson N=2048, `rank_all=1.952` but `stable_rank=1.036` and 4.62 of 5 observables are weak on average. This is the falsifying control for treating rank_all alone as a structural claim.
tools/data/reports/agent_20260506_1941.md:60:1. **Perturbation rank is not interpretable without denominator gating.** In this perimeter, Poisson and prime-shuffle controls can show `rank_all` near 1.8-2.0. Because their original-vs-shuffle denominators are mostly weak, that rank is a retention-normalization artifact unless the stable-observable screen also supports it.
tools/data/reports/agent_20260506_1941.md:75:> all-observable perturbation rank can inflate in weak-denominator regimes; after denominator gating, GUE and primes are both close to one perturbation coordinate in this perimeter, while Poisson/shuffle controls show why ungated rank is not structural evidence.
tools/data/reports/agent_20260425_0330.md:8:> The TWO_KINDS_GUE result (2026-04-24) discriminated distribution-GUE (primes, GUE matrices) from ordering-GUE (fibonacci, coupled_osc, percolation). The Markov-3 result (2026-04-23) found 33.6% scale-invariant ordering memory in prime gap residues. Do ordering-GUE domains have the same kind of Markov memory as primes?
tools/data/reports/agent_20260425_0330.md:18:- **Additional test**: primes tercile memory vs mod-6 residue memory (direct comparison)
tools/data/reports/agent_20260425_0330.md:27:| primes | dist-GUE | 17983 | 0.2 | 0.3 | 0.4 | -22.1 | -14.3 | 44% |
tools/data/reports/agent_20260425_0330.md:48:1. **Prime ordering memory is 140x stronger in the algebraic channel.** The 22% Markov-1 memory in mod-6 residues (rising to 33.6% at order 3, from the 2026-04-23 result) dwarfs the 0.16% in tercile space. The 33% scale-invariant memory found previously is NOT about gap sizes — it's about the algebraic structure of prime residues mod 6. Two channels, two orders of magnitude.
tools/data/reports/agent_20260425_0330.md:50:2. **Ordering-GUE domains have no algebraic channel.** They have only tercile-type (magnitude) memory: 0.2-1.5% at order 1, comparable to primes in the same channel. But primes have the mod-6 channel ON TOP — which ordering-GUE domains lack entirely. No natural modular structure exists for eigenvalue spacings or percolation clusters.
tools/data/reports/agent_20260425_0330.md:55:   - Coupled oscillators (ord-GUE): 42% — moderate depth, similar to primes despite different GUE type.
tools/data/reports/agent_20260425_0330.md:60:5. **The two-channel structure of primes is unique among all 8 domains tested.** Only primes have:
tools/data/reports/agent_20260425_0330.md:64:   No other domain has two structurally distinct memory channels. This is a concrete expression of C1 (primes as unique dynamic domain under M).
tools/data/reports/agent_20260422_1616.md:13:If I shuffle prime gaps (preserving the value distribution but destroying the sequence), which two-channel properties survive and which break?
tools/data/reports/agent_20260422_1616.md:16:- **Data**: First 100,000 prime gaps
tools/data/reports/agent_20260422_1616.md:39:1. **Cross-correlation (xcorr) is algebraic, not structural.** corr(x, x mod 6) depends only on the value distribution of x, not the order. Any permutation of the same gaps gives identical xcorr = -0.074. The claim "spectral independence" from previous runs is a mathematical identity, not a discovery about primes.
tools/data/reports/agent_20260422_1616.md:45:4. **Both PSD slopes are genuine.** Magnitude slope +0.102 (z=21.3) and residue slope +0.203 (z=54.8) both vanish under shuffle. The blue spectral tilt is entirely in the ordering of primes. This is the core non-trivial content.
tools/data/reports/agent_20260509_1538.md:7:observables_used: [`beta_state`, `coordinate_failure`, `support_tier`, `beta_cardinality`, `beta_span`, `one_sided_count`, `stable_count_coherent`, `stable_count_illusory`, `endpoint_distance`, `denominator_state`, `excluded_mass`, `shuffle_z_score`] - osservabili domain-native di audit, non canonici SR/SR2/L1/L2/triple_var.  
tools/data/reports/agent_20260506_0330.md:19:- **Observables**: SR, L1, L2, SR2, triple_var — same set as observable rank audit.
tools/data/reports/agent_20260506_0330.md:21:- **Domains**: 30,000 prime gaps; GUE (253 unfolded spacings from 23x23 Hermitian matrix).
tools/data/reports/agent_20260506_0330.md:30:| Perturbation | SR | L1 | L2 | SR2 | triple_var |
tools/data/reports/agent_20260506_0330.md:44:| Perturbation | SR | L1 | L2 | SR2 | triple_var |
tools/data/reports/agent_20260506_0330.md:58:1. **GUE has a second perturbation axis that primes do not.** Under scale-selective perturbations, GUE effective rank rises from ~1.02 (uniform-only, rank audit 05-05) to 1.889. The second principal component explains 25.2% of variance. For primes, the rank rises only from 1.07 to 1.26 — the second axis is weak (2.6%).
tools/data/reports/agent_20260506_0330.md:60:2. **The L2 observable discriminates perturbation types in GUE.** Under adjacent-swap, GUE L2 retention = -1.135 (sign flip: the perturbation reverses lag-2 correlation). Under large-gap-only, L2 retention = +1.173 (enhancement). This sign difference means adjacent-swap and large-gap-only probe structurally distinct axes of GUE correlations. For primes, L2 also shows anomalous behavior (1.399 under adjacent-swap) but does not flip sign.
tools/data/reports/agent_20260506_0330.md:62:3. **Adjacent-swap is the most selective perturbation.** In primes, adjacent swapping barely touches SR (retention 1.039) and SR2 (1.003) while reducing L1 to 0.886 and enhancing L2 to 1.399. The enhancement of L2 under adjacent-swap is not trivial: swapping neighbors creates new lag-2 correlations from the original lag-1 structure (if g_n,g_{n+1} swap, the new g_{n+1} becomes the old g_n, creating a new lag-2 pair from the old lag-1 pair).
tools/data/reports/agent_20260506_0330.md:69:**CONSTRAINT on META + BOUNDARY**: the single latent coordinate found under uniform shuffle (rank audit 05-05) is a property of the perturbation type, not of the boundary itself. Scale-selective perturbations reveal a second axis in GUE (PC2=25.2%) and a weak second axis in primes (PC2=2.6%). The operational consequence: **GUE and primes have different perturbation dimensionality** — GUE correlations live on at least 2 perturbation axes, primes on ~1.3. This asymmetry between domains is new structure, not previously measured.
tools/data/reports/agent_20260506_0330.md:71:Perimeter: 30,000 prime gaps (p_2 to p_{30001}), 253 GUE spacings, 4 perturbation types, 5 alpha values, 16 trials each, seed 20260506.
tools/data/reports/agent_20260506_0330.md:76:- **Invariante di passaggio**: GUE has higher perturbation dimensionality than primes. This holds across the perturbation types tested. The asymmetry (GUE ~2D, primes ~1.3D) persists through the vertex.
tools/data/reports/agent_20260506_0330.md:84:- **L5 re-discovery**: Scale-selective perturbation is related to multiscale analysis (wavelet-like decompositions). The specific application to prime gap vs GUE spacing perturbation dimensionality is not a standard result in random matrix theory. The L2 sign flip under adjacent-swap may relate to Markov chain perturbation theory. Not tagged NEW — tagged as CONSTRAINT refining previous result.
tools/data/reports/agent_20260507_0803.md:8:observables_used: [SR, SR2, L1, L2, triple_var]
tools/data/reports/agent_20260507_0803.md:61:- beta 0.0: `SR=1.00`, `L1=1.00`, `triple_var=1.00`; `SR2=0.00`, `L2=0.00`;
tools/data/reports/agent_20260507_0803.md:62:- beta 0.3: same stable trio, with mean z approximately `SR=-19.4`, `L1=-19.4`, `triple_var=-17.6`;
tools/data/reports/agent_20260507_0803.md:83:(`SR`, `L1`, `triple_var`, mean abs z about `36-41` in the main run). The
tools/data/reports/agent_20260427_0330.md:10:> Consecutio from spectral rigidity (2026-04-26): primes show 33% ordering fraction at L=10. Is this real or an artifact of the shuffle test?
tools/data/reports/agent_20260427_0330.md:18:- **Real domains**: primes (10000 unfolded gaps), GUE matrices (400 eigenvalues), logistic map, pure Poisson, coupled oscillators.
tools/data/reports/agent_20260427_0330.md:48:| primes | 0.473 | 0.409 | 0.409 | 0.536 | -0.127 | 29.5% | BELOW (ordering adds rigidity) |
tools/data/reports/agent_20260427_0330.md:71:3. **The 29.5% prime ordering fraction at L=10 is real — 3.8x above the artifact floor.** The previous runs found 33% (spectral rigidity) and 33.6% (Markov memory). The slight difference (29.5% vs 33%) comes from different sample sizes and unfolding details. All three independent measurements agree: ~30% of prime spectral rigidity comes from sequential ordering, not from the gap distribution.
tools/data/reports/agent_20260427_0330.md:80:- **META resolved**: Our observables track real structure. The r-statistic is monotonic with repulsion strength. The ordering fraction has a quantified artifact floor (7.8%) and the prime signal (29.5%) is 3.8x above it. Not tautological — calibrated.
tools/data/reports/agent_20260427_0330.md:81:- **BOUNDARY**: Primes ARE the boundary. beta_eff = 0.409 places them at the midpoint of the Poisson-GOE crossover. The boundary is not between primes and something else — primes live ON it.
tools/data/reports/agent_20260427_0330.md:83:- **DUALITA_DIPOLARE_VS_ILLUSORIA**: The sign of the ordering channel IS the discriminator. Ordering that adds rigidity (primes) = dipolar duality (det=-1, generative). Ordering that adds bunching (logistic, coupled_osc) = dispersive (det=+1, entropic). The Brody curve is the zero line between them.
tools/data/reports/agent_20260427_0330.md:87:- **Due radici** (dipolo primario): ordinamento rigido (primes: Delta < 0, ordering adds repulsion, det=-1) / ordinamento dispersivo (logistic, coupled_osc: Delta > 0, ordering adds bunching, det=+1). Il segno del Delta rispetto alla curva Brody discrimina i due tipi di dualita. Non e una scala — e un segno.
tools/data/reports/agent_20260507_1938.md:6:**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260509_0829.md:7:observables_used: [`label_jaccard`, `acceptance_rate`, `hamming_ratio`, `source_mode`, `event_type`, `vc_interp`, `r_floor`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260509_1516.md:7:observables_used: [`SR`, `SR2`, `L1`, `L2`, `triple_var`] - osservabili canonici da `tools/observables_registry.py`.
tools/data/reports/agent_20260509_1516.md:58:| brownian_motion:cycle_12 | Poisson | complete | 4096 | transfer_with_blank | SR2,L1,L2,triple_var | 4.000 | 0.167 | 3.885 | 0.2,0.3 |
tools/data/reports/agent_20260509_1516.md:60:| coupled_oscillators:cycle_10 | Poisson | contaminated | 2002 | transfer_with_blank | SR,SR2,L1,L2,triple_var | 5.000 | 0.250 | 4.336 | 0.3 |
tools/data/reports/agent_20260509_1516.md:61:| ising_2d:cycle_1 | GUE | contaminated | 699 | transfer_with_blank | SR,SR2,L1,L2,triple_var | 5.000 | 0.333 | 4.309 | 0.4 |
tools/data/reports/agent_20260509_1516.md:62:| logistica_biforcazione:cycle_5 | GUE | complete | 4096 | transfer_with_blank | SR,SR2,triple_var | 3.583 | 0.167 | 3.258 | 0.1-0.9 |
tools/data/reports/agent_20260509_1516.md:64:| numeri_primi:cycle_3 | GUE | complete | 4096 | transfer_no_blank | SR,L1,triple_var | 3.000 | 0.167 | 3.243 | [] |
tools/data/reports/agent_20260509_1516.md:68:| reaction_diffusion:cycle_11 | GUE | contaminated | 499 | transfer_with_blank | SR,SR2,L1,L2,triple_var | 5.000 | 0.333 | 4.364 | 0.3 |
tools/data/reports/agent_20260509_1516.md:69:| string_vibration:cycle_6 | Poisson | complete | 4096 | transfer_with_blank | SR,SR2,L2,triple_var | 5.000 | 0.500 | 3.845 | 0.3 |
tools/data/reports/agent_20260509_1400.md:7:observables_used: [`denominator_state`, `fit_ready_rows`, `excluded_rows`, `best_model`, `delta_aicc_to_second`, `unit_limit_status`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260509_1437.md:7:observables_used: [`spacing_r`, `shuffle_r_statistic`, `denominator_state`, `excluded_mass`, `transfer`] - osservabili domain-native per il gate boundary, non canonici SR/SR2/L1/L2/triple_var.
tools/data/reports/agent_20260405_0914.md:7:**Question**: Does the excess `<r>_primes - <r>_Cramer` genuinely grow with scale?
tools/data/reports/agent_20260405_0914.md:10:- 5.76M primes up to 10^8
tools/data/reports/agent_20260405_0914.md:11:- 25 log-spaced windows of 50K primes each (from p~8K to p~99M)
tools/data/reports/agent_20260405_0914.md:18:- `<r>_prime - <r>_Cramer > 0` at ALL 25 scales (z-scores: 18 to 50)
tools/data/reports/agent_20260405_0914.md:24:- `<r>_prime < <r>_shuffled` at ALL 25 scales (deficit ~0.018)
tools/data/reports/agent_20260405_0914.md:26:- This means consecutive prime gaps repel: small gap tends to follow large gap
tools/data/reports/agent_20260405_0914.md:37:- Evidence: `<r>_prime != <r>_shuffled` consistently (the order matters)
tools/data/reports/agent_20260405_0914.md:43:The Cramer model is always worse (less correlated) than primes, but primes are slowly approaching it.
tools/data/reports/agent_20260405_0914.md:47:2. **But the excess shrinks** — the gap between primes and Cramer is closing
tools/data/reports/agent_20260405_0914.md:49:4. **The anti-correlation weakens** — primes become more "random" at larger scales
tools/data/reports/agent_20260405_0914.md:58:The primes don't sit at GUE or Poisson; they trace a path between them.
tools/data/reports/agent_20260405_0914.md:61:Is there a scale where primes actually reach Poisson? Extrapolating linearly: at ~10^20 the excess would be near zero. But linear extrapolation of a logarithmic quantity is unreliable.
tools/data/reports/agent_20260509_1409.md:7:observables_used: [`denominator_state`, `excluded_mass`, `spacing_r`, `shuffle_r_statistic`, `transfer`] - osservabili domain-native per il gate boundary, non canonici SR/SR2/L1/L2/triple_var.
tools/data/reports/agent_20260509_0741.md:7:observables_used: [`label_jaccard`, `acceptance_rate`, `hamming_ratio`, `source_mode`, `event_type`, `vc_interp`, `r_floor`, `r_span`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260509_1532.md:7:observables_used: [`support_transfer`, `beta_coordinate_transfer`, `beta_state`, `ambiguous_beta`, `stable_count_coherent`, `stable_count_illusory`, `endpoint_distance`] - osservabili domain-native derivati dal gate semi-reale, non canonici SR/SR2/L1/L2/triple_var.
tools/data/reports/agent_20260507_1804.md:6:**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260426_0330.md:18:- **Domains**: 8 domains (primes, GUE matrices, coupled_osc, string_vib, percolation, logistic, brownian, Poisson random)
tools/data/reports/agent_20260426_0330.md:31:| primes* | dist-GUE | 5132 | 0.510 | 1.058 | 0.576 | -1.5 | NO |
tools/data/reports/agent_20260426_0330.md:64:1. **The spectral rigidity of primes has two channels with opposite scale behavior.** The magnitude channel (gap distribution shape) contributes a scale-independent Sig2/L ≈ 0.56 at all L. The ordering channel (sequential correlations) contributes a scale-dependent rigidity that grows from 4% at L=1 to 58% at L=50. The ordering becomes the dominant source of rigidity at long range.
tools/data/reports/agent_20260507_2203.md:6:**observables_used**: [] - tassonomia operatori TQGE+R+S+U+V, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260509_0837.md:7:observables_used: [`label_jaccard`, `acceptance_rate`, `hamming_ratio`, `source_mode`, `generator_class`, `event_type`, `vc_interp`, `r_floor`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260508_2108.md:8:**observable_contract**: claim=lo zero della carica Mobius intervallare e' testato come terzo incluso del gate aligned/misaligned; observable=rate low_low, rate high_high, SR mean per classi aligned/misaligned/zero; operator=classificazione di S_n*S_{n+1}: aligned<0, misaligned>0, zero=0; generator=prime gaps up to p<=1e6 with Mobius sieve; denominator=main N={5000,10000,20000} offset=0 plus seedcheck offsets {3000,7000,11000}; not_tested=gap_ratio Sturmian, high-core phi survival, universal GUE/Poisson classification.
tools/data/reports/agent_20260508_2108.md:14:- **Operatori laterali scelti**: boundary operator, random walk, entropia. Boundary operator definisce il bordo prime-free; random walk fornisce il null di permutazione della carica; entropia entra come dispersione del vuoto senza primi.
tools/data/reports/agent_20260508_2108.md:30:- Script: `tools/exp_prime_mobius_zero_mediator_gate.py`.
tools/data/reports/agent_20260508_2108.md:79:**CONSTRAINT on DUALITA_DIPOLARE_VS_ILLUSORIA / Prime Mobius interval-charge gate**: nel perimetro primi x Mobius fino a `p<=1e6`, `S=0` deve restare nel denominatore come terza classe. Lo zero non e' rumore sotto il null di permutazione che preserva frequenza degli zeri: arricchisce low_low, sopprime high_high e abbassa SR in 6/6 condizioni. Il source cycle sopravvive come vincolo parziale: il gate non-zero aligned/misaligned resta solido per high_high, resta parziale per low_low, e non porta SR globalmente. Il nuovo portatore e' triadico: aligned / misaligned / zero.
tools/data/reports/agent_20260508_2108.md:82:- **Due radici**: carica non-zero alternata/concorde . carica zero dell'intervallo prime-free.
tools/data/reports/agent_20260508_2108.md:98:- **L5 re-discovery vs discovery**: verdict `CONSTRAINT`, non `NEW`; il pattern resta da confrontare con dipendenze note tra Mobius, lunghezza intervallare e gap primes.
tools/data/reports/agent_20260508_2108.md:101:- Script: `tools/exp_prime_mobius_zero_mediator_gate.py`
tools/data/reports/agent_20260508_2108.md:102:- Data: `tools/data/prime_mobius_zero_mediator_gate_20260508_2108.json`
tools/data/reports/agent_20260415_0330.md:9:> Two types of duality: (1) dipolar — generative, det=-1, (2) illusory — dispersive, det=+1. The anti-correlation in prime gaps should manifest as a local dipolar structure: conditioning on the previous gap should shift the gap ratio <r>.
tools/data/reports/agent_20260415_0330.md:17:- **Data**: 5.76M prime gaps (primes up to 10^8), normalized by local running mean (window=1000)
tools/data/reports/agent_20260415_0330.md:27:| Quintile      | <r>_prime | <r>_shuffle | z-score |
tools/data/reports/agent_20260415_0330.md:35:**Unconditional <r>**: primes = 0.4474, shuffle = 0.4610.
tools/data/reports/agent_20260415_0330.md:37:The prime-vs-shuffle gap (~0.014) is the same across all quintiles. Conditioning on the previous gap barely modulates <r>: the Q1-Q5 spread within primes is only -0.0017 — **10x smaller** than the unconditional ordering effect.
tools/data/reports/agent_20260415_0330.md:49:The spread is always negative (after large gaps, <r> is slightly lower) and **weakens with scale**: from -0.0027 at ln(p)=16 to ~-0.0013 at ln(p)=18.3. Consistent with POISSON_CONVERGENCE — the local conditioning vanishes as primes decorrelate.
tools/data/reports/agent_20260415_0330.md:61:1. **The dipole is distributed, not local.** Shuffling destroys <r> by +0.014 (z=-60), but conditioning on the previous gap modulates <r> by only -0.002. The anti-correlation that makes primes unique in the spectral niche (<r>, acf1) is a *global sequence property* — it cannot be decomposed into pairwise local interactions.
tools/data/reports/agent_20260415_0330.md:69:**CONSTRAINT on DUALITA_DIPOLARE_VS_ILLUSORIA** — The dipolar duality in prime gaps is distributed (global sequence order), not local (adjacent conditioning). This constrains any model that places the det=-1 structure in pairwise interactions. The dipole lives in the *sequence as a whole* — destroying the order (shuffle = det=+1 operation) eliminates it, but conditioning within the ordered sequence barely reveals it. The illusory duality (shuffle) doesn't just lose amplitude — it loses a qualitatively different, collective structure.
tools/data/reports/agent_20260415_0330.md:75:The distributed nature of the dipole means: **what's the minimal subsequence length where the ordering signature appears?** If we take random contiguous windows of length L from the prime gap sequence, at what L does <r>_window significantly differ from <r>_shuffle? This would measure the *coherence length* of the dipolar structure — the scale below which primes look random and above which the collective anti-correlation emerges. The coherence length should grow with prime scale (toward Poisson).
tools/data/reports/agent_20260419_0330.md:13:Decompose the prime gap anti-correlation into a **residue channel** (Z/6Z class sequence: which coset {1,5} each prime falls in) and a **magnitude channel** (gap size demeaned by transition type). Do they have independent scaling laws, power-law exponents, coherence lengths, and Poisson crossover points?
tools/data/reports/agent_20260419_0330.md:17:- **Data**: 6,000,000 primes up to 104,395,301
tools/data/reports/agent_20260419_0330.md:18:- **Decomposition**: For primes p > 3, p mod 6 is 1 or 5. Residue channel: +1 if p mod 6 = 1, -1 if p mod 6 = 5. Magnitude channel: gap size minus mean gap for each transition type (1->1, 1->5, 5->1, 5->5).
tools/data/reports/agent_20260419_0330.md:25:### Global decomposition (6M primes)
tools/data/reports/agent_20260419_0330.md:42:Same-class transitions (1->1, 5->5) have larger mean gap (19.0) than cross-class (16.2). This IS the residue anti-correlation: consecutive primes prefer to alternate between classes 1 and 5.
tools/data/reports/agent_20260419_0330.md:80:The residue channel carries only 1% of variance but 3.86x the anti-correlation. This is the signature of a **low-variance, high-correlation channel** — the binary choice of which Z/6Z class the next prime falls in carries almost no information about gap size but carries the strongest sequential memory.
tools/data/reports/agent_20260419_0330.md:98:3. **The residue channel carries 1% of variance but 3.86x the anti-correlation.** This is a low-energy, high-correlation signal — the binary alternation pattern 1↔5 is the strongest sequential structure in the primes, despite contributing almost nothing to the gap size.
tools/data/reports/agent_20260419_0330.md:100:4. **Same-class magnitude anti-correlation is 2.1x stronger than cross-class.** Within the transition types, magnitude memory is asymmetric: knowing the previous gap better predicts the next gap when both primes are in the same Z/6Z class.
tools/data/reports/agent_20260419_0330.md:108:The prime gap anti-correlation is not a single phenomenon. It decomposes into two independent channels with:
tools/data/reports/agent_20260419_0330.md:118:- **Derive the crossover separation analytically**: The 2.7-decade gap between residue and magnitude Poisson crossovers should follow from PNT + Hardy-Littlewood. The residue decay rate (+0.0072/ln p) may connect to the prime race bias (Chebyshev).
tools/data/reports/agent_20260419_0330.md:120:- **Test on other multiplicative sequences**: Does any sequence with a natural Z/mZ structure show this two-channel decomposition? If the decomposition is generic for any anti-correlated sequence with residue structure, it constrains C1 (primes unique under M).
tools/data/reports/agent_20260509_1444.md:7:observables_used: [`SR`, `SR2`, `L1`, `L2`, `triple_var`] - osservabili canonici da `tools/observables_registry.py`.
tools/data/reports/agent_20260509_1444.md:39:| DUALITA_golden | SR, L1, triple_var | 3.000 | 0.292 | 3.426 | 0.3 |
tools/data/reports/agent_20260509_1444.md:40:| R_periodic_triad | SR, SR2, L1, L2, triple_var | 5.000 | 0.375 | 4.409 | 0.3 |
tools/data/reports/agent_20260509_1444.md:41:| T_markov_alternating | SR, SR2, L1, L2, triple_var | 5.000 | 0.417 | 4.421 | 0.3 |
tools/data/reports/agent_20260509_1444.md:42:| E_ar1_continuity | SR, SR2, L1, L2, triple_var | 5.000 | 0.292 | 4.398 | 0.3 |
tools/data/reports/agent_20260509_1444.md:102:- Output: `observables_registry=1.0.0-2026-05-06`; `observables_used=['SR', 'SR2', 'L1', 'L2', 'triple_var']`.
tools/data/reports/agent_20260505_1022.md:20:- dati: `primes` con 8000 gap, `GUE` con 175 spacing effettivi prodotti dal generatore corrente, `Poisson` con 8000 spacing;
tools/data/reports/agent_20260505_1022.md:40:| triple_var | L2 | 0.193 | 0.083 | 0.087 |
tools/data/reports/agent_20260505_1022.md:42:Il dato centrale e' la scissione tra gli osservabili L2: `SR2` e `L2` sono preservati da Mk2 fino ad alpha=1.0, mentre `cond_entropy` e `triple_var` si rompono presto. Quindi "Layer 2" non e' atomico con questa famiglia di osservabili: contiene almeno due sottocanali, uno realmente recuperato dal surrogato Mk2 e uno sensibile alla discretizzazione/varianza della costruzione.
tools/data/reports/agent_20260505_1022.md:53:| triple_var | L2 | NEVER | NEVER | 0.350 |
tools/data/reports/agent_20260505_1022.md:55:Poisson resta quasi nullo rispetto a SR/SR2/triple_var: molte curve non attraversano `|z| >= 2`. Questo e' coerente con un controllo a bassa struttura, non con una prova di assenza assoluta.
tools/data/reports/agent_20260505_1022.md:61:**Nel perimetro partial-shuffle dei run precedenti, SR/L1/L2/SR2 mostravano una fase quasi comune. Nel perimetro selective-perturbation di questo run, la fase comune non e' stabile: i critical alpha dei primi separano L1 e L2, e Mk2 preserva SR2/L2 ma non cond_entropy/triple_var.**
tools/data/reports/agent_20260505_1022.md:67:**CONSTRAINT on META + BOUNDARY**: non aggregare gli osservabili in "Layer 1" e "Layer 2" senza dichiarare l'operatore di perturbazione. Nel perimetro `N=8000, n_surr=8`, `cond_entropy` e `triple_var` non sono intercambiabili con `SR2/L2` come prove di Layer 2.
tools/data/reports/agent_20260505_1022.md:75:L2 quantita' assoluta vs ratio: il confronto usa alpha critici e z-score, non percentuali tra spazi di taglia diversa. GUE ha perimetro ridotto (`N=175`) e non viene pesato come primes/Poisson.
tools/data/reports/agent_20260505_1022.md:79:L4 edge case isolation: `cond_entropy` e `triple_var` sono trattati come eccezioni operative dentro L2, non arrotondati dentro la media del layer.
tools/data/reports/agent_20260501_0330.md:9:> The prime dipolar angle (-111 deg) and ratio (dL1/dSR = 2.28) are structural properties of the ordering. Consecutio from piano 60c: "derive 2.28 from Hardy-Littlewood."
tools/data/reports/agent_20260501_0330.md:13:Does the prime dipolar ratio follow from pair statistics alone (the gap transition matrix, i.e. Lemke Oliver-Soundararajan territory), or does it require higher-order correlations?
tools/data/reports/agent_20260501_0330.md:17:- **Method**: Build the empirical transition matrix T(g_{n+1} | g_n) from real prime gaps (binned into 7 categories: g ~ 2,4,6,8,10,12,14+). Generate Markov-1 surrogates (same pair statistics, no higher-order memory) and Markov-0 surrogates (iid from marginal, no pair memory). Compute dipolar angle for each.
tools/data/reports/agent_20260501_0330.md:19:- **Scope**: 100K prime gaps (p from 10007 to 1317131). 20 Markov-1 trials, 20 Markov-0 trials.
tools/data/reports/agent_20260501_0330.md:29:| Real primes | -111.9            | 2.481           | 0.0517  |
tools/data/reports/agent_20260501_0330.md:53:| g=2 -> g=2, g=2 -> g=8 | Both are 2 mod 6. Consecutive same-residue gaps require (p, p+2, p+4) all prime — impossible for p > 3. |
tools/data/reports/agent_20260501_0330.md:66:2. **Higher-order correlations push the angle toward GUE by ~3 deg.** Markov-1 overshoots to -114.6 (farther from GUE at -97). Real primes are at -111.9. The higher-order memory has a GUE-ward component — it reduces the angular separation from GUE by ~20% (from 17 deg to 14 deg).
tools/data/reports/agent_20260501_0330.md:68:3. **Markov-0 has no dipolar direction.** Magnitude |d| = 0.003 (vs 0.052 for real primes). Without pair memory, there is no ordering signal. The pair transition matrix is necessary and almost sufficient.
tools/data/reports/agent_20260501_0330.md:70:4. **The pair memory is dominated by F2 (mod 6 hard zeros).** 8 of 49 entries in the transition matrix are exactly zero, all from the algebraic constraint that consecutive prime gaps cannot share non-zero mod 6 residue. This is fact F2 in the condensato, operating at the pair level.
tools/data/reports/agent_20260501_0330.md:86:**CONFIRMED + REFINED on DIPOLAR_ORDERING**: The dipolar angle of primes has two components:
tools/data/reports/agent_20260501_0330.md:90:**CONSTRAINT on META**: The experiment is non-tautological. Markov-1 (which shares pair statistics with primes) produces a DIFFERENT angle. The separation is measurable. The content is in the residual, not in what pair statistics already explain.
tools/data/reports/agent_20260501_0330.md:94:- **Due radici**: Markov-1 ordering (pair statistics generate theta = -114.6, farther from GUE) and real prime ordering (theta = -111.9, closer to GUE). The two roots are "what pair correlations predict" and "what actually happens." The gap between them is the higher-order memory.
tools/data/reports/agent_20260501_0330.md:97:- **Campo di possibilita**: Possible — decompose the prime ordering signal into pair-statistics (known, LOS) and residual (unknown, Markov-2+). Not possible — claim the full 14 deg separation from GUE as "beyond pair statistics"; 80% of it is Lemke Oliver.
tools/data/reports/agent_20260501_0330.md:101:The 3-deg residual is Markov-2+ memory. Previous lab findings: Markov-3 has z = 6203 (massive signal). The question: **does the Markov-3 component of prime gap memory have a preferred direction in the (SR, L1) plane?** If the Markov-3 signal has a GUE-ward direction, it would explain the residual. If it points elsewhere, there are multiple independent sources of higher-order memory.
tools/data/reports/agent_20260509_0637.md:7:observables_used: [] - osservabile spettrale dedicato `V_c`, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260422_0330.md:17:- **Data**: 2,000,000 primes (up to 32,452,843)
tools/data/reports/agent_20260422_0330.md:119:The magnitude channel is pair-dominated and the residue is algebraic. The remaining question: **can acf_mag(1) = -0.032 be derived analytically from Hardy-Littlewood pair correlations?** HL predicts the probability of prime pairs (p, p+2k) — this should determine the within-class gap-gap correlation. If acf_mag(1) is derivable from HL, then the entire PSD of prime gaps (both channels) is explained: residue by Markov algebra, magnitude by HL pair statistics. If not, the magnitude lag-1 correlation carries content beyond binary prime pair counts.
tools/data/reports/agent_20260507_0942.md:7:observables_used: [SR, SR2, L1, L2, triple_var]
tools/data/reports/agent_20260507_0942.md:23:- `prime_metric_delta_gamma_abs`: fluttuazioni della connessione metrica da
tools/data/reports/agent_20260507_0942.md:25:- `prime_metric_dR_abs`: fluttuazioni di curvatura discreta `dR=R-2` dalla
tools/data/reports/agent_20260507_0942.md:42:| prime_metric_delta_gamma_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.250 | 4.415 | [] |
tools/data/reports/agent_20260507_0942.md:43:| prime_metric_dR_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.350 | 4.414 | 0.30 |
tools/data/reports/agent_20260507_0942.md:44:| zeta_trace_residual_step5_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.050 | 4.415 | 0.30 |
tools/data/reports/agent_20260507_0942.md:45:| hydrogen_bound_level_spacings | SR, SR2, L1, L2, triple_var | 5.000 | 0.200 | 4.416 | 0.40 |
tools/data/reports/agent_20260507_0942.md:51:| prime_metric_delta_gamma_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.167 | 4.377 | [] |
tools/data/reports/agent_20260507_0942.md:52:| prime_metric_dR_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.083 | 4.376 | [] |
tools/data/reports/agent_20260507_0942.md:53:| zeta_trace_residual_step5_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.083 | 4.377 | 0.30 |
tools/data/reports/agent_20260507_0942.md:54:| hydrogen_bound_level_spacings | SR, SR2, L1, L2, triple_var | 5.000 | 0.250 | 4.378 | 0.40, 0.50 |
tools/data/reports/evolution_20260504_0330.md:17:1. **Zero-crossing interleaving**: il produttore ha notato che l'ordine di sign-flip e' L1 < triple_var < SR2 < SR — interleaved tra layer, non raggruppato. Questo dato e' riportato ma non interrogato. Perche' L1 flippa prima? Se le osservabili sono proiezioni di un unico ordinamento, il loro ordine di zero-crossing potrebbe rivelare la geometria interna della transizione — quale direzione dello spazio osservabile si disaccoppia per prima dal segnale strutturale.
tools/data/reports/evolution_20260504_0330.md:19:2. **Alpha critico universale**: 0.334 per primes, ~0.31 per GUE. La coincidenza (o non-coincidenza) di alpha_c tra sequenze strutturate diverse e' una domanda aperta. Se alpha_c dipende dal tipo di ordinamento, e' un discriminante tra classi di universalita'. Se e' universale, c'e' una ragione combinatorica (quanta permutazione serve per rompere il 50% di qualsiasi correlazione multi-punto?).
tools/data/reports/agent_20260509_0330.md:7:observables_used: [] - osservabile spettrale dedicato `V_c`, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260507_0901.md:7:observables_used: [SR, SR2, L1, L2, triple_var]
tools/data/reports/agent_20260507_0901.md:35:| DUALITA_golden | SR, L1, triple_var | 3.00 | 0.25 | 3.418 | 0.30 |
tools/data/reports/agent_20260507_0901.md:36:| R_periodic_triad | SR, SR2, L1, L2, triple_var | 5.00 | 0.25 | 4.400 | 0.30 |
tools/data/reports/agent_20260507_0901.md:37:| T_markov_alternating | SR, SR2, L1, L2, triple_var | 5.00 | 0.05 | 4.412 | 0.30 |
tools/data/reports/agent_20260507_0901.md:38:| E_ar1_continuity | SR, SR2, L1, L2, triple_var | 5.00 | 0.60 | 4.394 | 0.30 |
tools/data/reports/agent_20260507_0901.md:52:   `SR`, `L1`, `triple_var`; the three other perimeters transfer on all five
tools/data/reports/agent_20260504_0901.md:9:> The previous run found two orthogonal visible layers in prime gap memory: Layer 1 (pairs: SR, L1) and Layer 2 (triples: SR2, triple_var). The crossover under partial shuffle shows a phase transition in the (SR, L1) plane. META question: does Layer 2 transition at a different critical alpha than Layer 1? If yes, the boundary has genuine 3D depth. If no, the two layers are projections of a single phase transition.
tools/data/reports/agent_20260504_0901.md:13:Do the pair-statistics layer (SR, L1) and triple-statistics layer (SR2, triple_var) undergo independent transitions when ordering is destroyed by partial shuffle, or are they coupled?
tools/data/reports/agent_20260504_0901.md:18:- **Observables**: 4 total — Layer 1: spacing ratio (SR), lag-1 ACF (L1). Layer 2: next-nearest-neighbor spacing ratio (SR2), normalized triple variance (triple_var).
tools/data/reports/agent_20260504_0901.md:28:| Sequence | SR (L1) | L1 (L1) | SR2 (L2) | triple_var (L2) | L1 mean | L2 mean | Delta |
tools/data/reports/agent_20260504_0901.md:44:All Poisson original-vs-baseline z-scores are < 2 (SR: z=0.91, L1: z=-1.47, SR2: z=-0.17, triple_var: z=-0.56). The Poisson "signal" is noise. The apparent layer separation (Delta = -0.189) in Poisson is an artifact: when the signal-to-noise is < 2, the retention metric amplifies noise differently for each observable.
tools/data/reports/agent_20260504_0901.md:48:| Sequence | SR     | L1     | SR2    | triple_var |
tools/data/reports/agent_20260504_0901.md:53:For primes, all observables flip sign at alpha > 0.84. L1 flips earliest (0.846), SR latest (0.917). The ordering is L1 < triple_var < SR2 < SR — interleaved between layers, not grouped by layer.
tools/data/reports/agent_20260504_0901.md:57:1. **The two Markov layers are coupled at the boundary.** For primes, the critical alpha is identical across all 4 observables (0.334). For GUE, the difference is 0.024 (within the alpha step resolution of 0.047). The partial shuffle destroys pair-statistics and triple-statistics at the same rate. The boundary is a single phase transition, not two independent ones.
tools/data/reports/agent_20260504_0901.md:61:3. **The two-layer decomposition is a decomposition of observables, not of the ordering.** The previous run correctly identified that SR and L1 are sensitive to Markov-1 (pair) statistics while SR2 and triple_var are sensitive to Markov-2 (triple) statistics. But when the ordering is destroyed uniformly (partial shuffle), both layers lose signal at the same rate. The layers are different projections of one ordering, not independent degrees of freedom.
tools/data/reports/agent_20260504_0901.md:63:4. **The zero-crossing order is interleaved, not grouped by layer.** For primes: L1(0.846) < triple_var(0.903) < SR2(0.914) < SR(0.917). If layers were independent, we'd expect L1 grouping with SR and SR2 grouping with triple_var. The interleaving confirms coupling.
tools/data/reports/agent_20260504_0901.md:71:- **L5 (re-discovery)**: That partial shuffle destroys correlations uniformly regardless of order is consistent with the known property that random permutations break all multi-point correlations simultaneously (not order-by-order). The specific quantification on prime gaps and GUE with the Markov-layer framework is new to this lab, but the underlying principle is not novel. Tagged as CONSTRAINT, not NEW.
tools/data/reports/agent_20260504_0901.md:83:- **Invariante di passaggio**: The critical alpha (0.334) survives across layers and across structured sequences (primes and GUE). The boundary location is invariant to which layer you observe through.
tools/data/reports/agent_test_field.md:9:> Three independent observables (Brody beta, gap ratio <r>, gap autocorrelation acf1) all drift toward Poisson at large prime scale. Do they predict the SAME critical scale p*, or do they separate into multiple decorrelation scales?
tools/data/reports/agent_test_field.md:13:If primes lose their spectral structure as p grows, the crossover to Poisson should be visible independently in (1) the shape of the gap distribution (beta), (2) the nearest-neighbor ratio (<r>), and (3) the sequential memory (acf1). A universal crossover predicts convergence at a single p*. Multiple decorrelation scales would indicate a hierarchy of structure loss.
tools/data/reports/agent_test_field.md:17:- **Data**: 5.8M primes (up to p ~ 10^8)
tools/data/reports/agent_test_field.md:18:- **Windows**: 25 log-spaced windows of 50,000 primes each, from ln(p)=12.6 to ln(p)=18.4
tools/data/reports/agent_test_field.md:38:1. **Universal crossover confirmed.** All three independent observables predict primes reach Poisson statistics at p* ~ 10^{13.7} to 10^{15.0}. The spread (1.3 decades) is small compared to the extrapolation range (5.6 decades from data to target). This is a single crossover, not three separate transitions.
tools/data/reports/agent_test_field.md:44:4. **Constraint on METRIC_TENSOR.** The de Sitter curvature dR operates in the metric g=(p/2)^2. The crossover at 10^{14} means dR loses predictive power above this scale. The de Sitter geometry is a good description of primes in the range 10^4 to 10^8, but the curvature fluctuations should flatten as primes approach Poisson. Testable at p > 10^9.
tools/data/reports/agent_test_field.md:46:5. **The 10^{14} scale is not arbitrary.** Rough estimate: p_n ~ n*ln(n). At p ~ 10^{14}, n ~ 10^{12}. The number of primes below 10^{14} is ~3.2 * 10^{12}. The Hardy-Littlewood pair correlation integral over a window of 50K primes at this scale gives a correlation correction of order 1/ln(p)^2 ~ 1/1000. The anti-correlation becomes unmeasurable — not because it vanishes, but because it sinks below the noise floor of any finite window.
tools/data/reports/agent_test_field.md:50:**NEW** — The three-observable convergence to a universal Poisson crossover at p* ~ 10^{14} is a new result. The hierarchy (shape > ratio > memory) is a structural prediction: the last thing primes lose is their sequential anti-correlation. This constrains all tensors (METRIC_TENSOR, BOUNDARY, BRODY_CROSSOVER) into a single picture — the prime crossover is one phenomenon seen from three angles.
tools/data/reports/agent_test_field.md:54:The hierarchy raises a question: **is the ordering (beta first, acf1 last) a property of primes, or of any correlated sequence approaching independence?** If Cramer surrogates with injected mild anti-correlation show the same ordering, it's generic. If primes have a different ordering than synthetic anti-correlated sequences, the hierarchy itself is prime-specific content.
tools/data/reports/agent_test_field.md:58:- Script: `tools/exp_poisson_convergence.py` (reusable with --n_primes, --n_windows, --n_surrogates, --window_size)
tools/data/reports/agent_20260508_2140.md:7:observables_used: [] - osservabile spettrale dedicato `V_c`, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260509_1457.md:7:observables_used: [`unit_status`, `unit_crossing_N`, `below_unit_count`, `fit_ready_rows`, `denominator_state`, `best_model`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var.
tools/data/reports/agent_20260409_0330.md:12:Does the measured power spectral density of prime gaps match the shape predicted
tools/data/reports/agent_20260409_0330.md:17:- **Scope**: 500,000 primes (up to p = 7,368,787), 499,999 gaps
tools/data/reports/agent_20260409_0330.md:32:| Band | f range | z-score | ratio (prime/shuffle) |
tools/data/reports/agent_20260409_0330.md:93:- **NEW**: prime gaps are weakly blue noise (spectral slope +0.11), with
tools/data/reports/agent_20260409_0330.md:98:The two-component structure connects directly to POISSON_CONVERGENCE: the primes
tools/data/reports/agent_20260409_0330.md:102:primes — testable prediction.
tools/data/reports/agent_20260409_0330.md:109:- Script: `tools/exp_psd_prime_gaps.py`
tools/data/reports/agent_20260409_0330.md:110:- Data: `tools/data/psd_prime_gaps_results.json`
tools/data/reports/agent_20260504_1219.md:15:- **Target**: prime gaps, ordine sconosciuto, solo confronto.
tools/data/reports/agent_20260504_1219.md:22:- **Secondary calibration**: `tools/exp_meta_tautology_test.py --n-primes 300000 --n-trials 12`. Nota: il controllo chiamato `HL_markov` nello script è un AR(1) gap model che preserva lag-1, non un modello Hardy-Littlewood aritmetico.
tools/data/reports/agent_20260504_1219.md:30:| `prime_gaps` | target | target only | 3 | - |
tools/data/reports/agent_20260504_1219.md:45:| triple_var | 1 | -15.90 | -0.53 | 0.36 |
tools/data/reports/agent_20260504_1219.md:66:Numeri principali: prime mod3 same-class fraction = 0.158032. Questo è bias forte rispetto ai controlli ~0.34-0.35, non proibizione zero.
tools/data/reports/agent_20260509_1548.md:7:observables_used: [`blank_class`, `coordinate_failure`, `support_tier`, `denominator_bucket`, `n_gaps`, `one_sided_count`, `stable_count_coherent`, `stable_count_illusory`, `endpoint_distance`, `denominator_state`, `excluded_mass`, `shuffle_z_score`, `shuffle_class_changes`] - osservabili domain-native di audit, non canonici SR/SR2/L1/L2/triple_var.  
tools/data/reports/agent_20260420_0330.md:13:Does the power spectral density of prime gaps decompose into two independent channel PSDs with distinct spectral slopes? Does this decomposition explain the two-component structure and the amplitude mismatch found in PSD_BLUE_NOISE?
tools/data/reports/agent_20260420_0330.md:18:- **Data**: 2,000,000 primes (up to 32.5M)
tools/data/reports/agent_20260420_0330.md:21:- **Scale test**: 3 equal bands (small/medium/large primes)
tools/data/reports/agent_20260420_0330.md:87:5. **Residue spectral slope is structurally stable.** It barely changes with prime scale (5% drift) while magnitude fades faster (16% drift). This is consistent with the universality finding: residue anti-correlation is algebraic (Z/6Z Markov), so its spectral shape is determined by transition probabilities, not by prime spacing details.
tools/data/reports/agent_20260420_0330.md:93:The two-channel decomposition extends from the ACF domain to the spectral domain. The channels are spectrally independent (additivity holds to <0.5%). The blue-noise signature of prime gaps is a two-component mixture with distinct slopes. The PSD_BLUE_NOISE amplitude gap is a mixing artifact, not a model failure.
tools/data/reports/agent_20260420_0330.md:95:**Constraint**: the residue channel carries <1.5% of total spectral power despite being 2x bluer. Its structural influence on the PSD shape is detectable (z=107) but energetically negligible. The blue noise of prime gaps is overwhelmingly shaped by the magnitude channel.
tools/data/reports/agent_20260420_0330.md:99:The residue PSD slope (+0.16) is determined by Z/6Z transition probabilities. This should be derivable analytically from the 2-state Markov chain (states: 1 mod 6, 5 mod 6, with known transition matrix). If the predicted slope matches 0.160, the residue channel PSD is fully algebraic — no number theory needed. The magnitude slope (+0.074) then becomes the sole carrier of prime-specific spectral information.
tools/data/reports/agent_20260420_0330.md:103:- Script: `tools/exp_two_channel_psd.py` (reusable with --n_primes, --nperseg)
tools/data/reports/agent_20260428_0330.md:8:> The 140x algebraic vs statistical memory in prime gaps (2026-04-25) operates at mod 6. F2 says gaps are confined to {2,4} mod 6. But WHY mod 6? Is this the fundamental level, or does memory grow with the primorial hierarchy (mod 30, mod 210)?
tools/data/reports/agent_20260428_0330.md:11:What is the modular memory spectrum of prime gaps? Does ordering memory peak at mod 6, grow with primorial base, or plateau? And does Cramer (density-matched null) reproduce any of it?
tools/data/reports/agent_20260428_0330.md:17:- **Null**: 10 Cramer random prime realizations (same density, no arithmetic structure)
tools/data/reports/agent_20260428_0330.md:19:- **N**: 41,537 gaps from 41,538 primes up to 500,000
tools/data/reports/agent_20260428_0330.md:47:**ZERO self-transitions for residues 1 and 2.** 0 out of 12,225 for 1->1. 1 out of 12,225 for 2->2 (the single exception: gap(3,5)=2 then gap(5,7)=2, involving p=3, the only prime divisible by 3).
tools/data/reports/agent_20260428_0330.md:72:1. **Mod-6 memory IS mod-3 memory.** The ordering fraction at mod 3 (21.41%) and mod 6 (21.43%) are identical to within noise. Since all prime gaps > 1 are even, mod 2 is trivially locked. The non-trivial algebraic content of the "140x channel" (2026-04-25) is entirely at mod 3.
tools/data/reports/agent_20260428_0330.md:74:2. **The mechanism is a HARD algebraic prohibition.** Consecutive prime gaps cannot have the same non-zero residue mod 3. In 41,537 gaps: 0 self-transitions for residue 1 (out of 12,225), 1 for residue 2 (the p=3 edge case). The shared middle prime p_{n+1} forces this: if g_n = p_{n+1} - p_n has residue k mod 3, and primes > 3 can only be 1 or 2 mod 3, then g_{n+1} = p_{n+2} - p_{n+1} CANNOT have the same residue k.
tools/data/reports/agent_20260428_0330.md:76:3. **The primorial hierarchy DILUTES, not amplifies.** Memory DECLINES: mod 6 (21%) > mod 30 (9.8%) > mod 210 (9.1%). Higher primorials spread residues across more classes (confinement drops: 0.67 -> 0.53 -> 0.23) but don't add prohibitions of comparable strength. The dominant channel is at the smallest non-trivial prime: 3.
tools/data/reports/agent_20260428_0330.md:78:4. **Cramer reproduces NONE of the ordering memory.** At every base (except the trivial mod 2), Cramer ordering is ~0%. The prohibition comes from the sieve structure — consecutive primes sharing the constraint of being coprime to 3 — not from the density function 1/ln(n). This is arithmetic, not statistical.
tools/data/reports/agent_20260428_0330.md:80:5. **The prohibition strength follows phi(p).** Mod 3: phi=2, prohibition strength 1/2 (50% of transitions forbidden). Mod 5: phi=4, prohibition 1/4 (25%). Mod 7: phi=6, prohibition 1/6 (17%). The memory falls as 1/phi(p), explaining why mod 3 dominates and higher primes contribute marginally.
tools/data/reports/agent_20260428_0330.md:85:- **BOUNDARY**: The algebraic boundary is at 3, not at 6. The mod-6 structure documented in F2 is the mod-3 prohibition dressed with trivial mod-2 parity. The primorial hierarchy adds width (more residue classes) but not depth (no new hard prohibitions). The confine is the smallest non-trivial prime.
tools/data/reports/agent_20260428_0330.md:87:- **C1**: The prohibition is unique to sequences where consecutive elements share a coprimality constraint. GUE eigenvalues have repulsion but no modular arithmetic. Logistic maps have ordering but no algebraic channel. Only primes (and sequences with sieve structure) have this.
tools/data/reports/agent_20260430_1919.md:13:If the angle theta = atan2(z_lag1, z_spacing_ratio) changes across prime scales, the ordering structure has at least two independent degrees of freedom. If theta is constant, the two observables are projections of a single anticorrelation mode — and the "dipole" is effectively 1-dimensional.
tools/data/reports/agent_20260430_1919.md:21:- **Offset test**: Fixed 50K-prime windows at offsets 0, 500K, 1M, 2M
tools/data/reports/agent_20260430_1919.md:28:| Scale | N_primes | z_SR | z_L1 | theta (deg) | |V| | delta_SR | delta_L1 | ratio |
tools/data/reports/agent_20260430_1919.md:39:### Fixed-size windows (50K primes) at different offsets
tools/data/reports/agent_20260430_1919.md:41:| Window | Start prime | z_SR | z_L1 | theta (deg) | |V| | delta_SR | delta_L1 |
tools/data/reports/agent_20260430_1919.md:48:Magnitude decreases at higher offsets (signal weakens with larger primes). Angle stays constant within 9 deg.
tools/data/reports/agent_20260430_1919.md:58:Cramer: theta ~ +65 deg (opposite quadrant from primes at ~ -150 deg). z-scores are positive and small. The Cramer model has weak positive autocorrelation from density variation — structurally opposite to primes.
tools/data/reports/agent_20260430_1919.md:62:1. **The dipolar angle is locked at -150 +/- 4 deg across 3 decades of scale.** The two order-sensitive observables do not rotate — they are projections of a single anticorrelation mode. The prime gap ordering structure has one degree of freedom, not two. The "2D dipole" from the previous run (DIPOLAR_ORDERING) is effectively 1-dimensional.
tools/data/reports/agent_20260430_1919.md:64:2. **The raw effect (delta_SR, delta_L1) decays with scale but the ratio delta_L1/delta_SR is stable around 2.3.** Both observables weaken at the same rate. The lag-1 autocorrelation carries about 2.3x the anticorrelation signal of the spacing ratio — this ratio is a structural constant of prime gap ordering.
tools/data/reports/agent_20260430_1919.md:66:3. **Cramer random model occupies the opposite quadrant (theta ~ +65 deg).** Primes and Cramer are separated by ~215 degrees in the dipolar plane. This is not a matter of magnitude — the sign structure is fundamentally different. Cramer has weak positive correlation (density clustering); primes have strong negative correlation (gap alternation). The angle discriminates genuine number-theoretic ordering from density effects.
tools/data/reports/agent_20260430_1919.md:68:4. **The signal weakens with prime magnitude.** Fixed 50K windows: |V| drops from 22.2 (offset 0) to 16.1 (offset 2M). This is consistent with Lemke Oliver-Soundararajan (2016): prime gap correlations arise from the distribution of primes in residue classes and decay with 1/ln(p). The anticorrelation is real but asymptotically vanishing.
tools/data/reports/agent_20260430_1919.md:78:- **Closest classical reference**: Lemke Oliver-Soundararajan 2016 predicts prime gap correlations from residue class biases, decaying as 1/ln(p). The observed decay pattern is qualitatively consistent. The constant angle may reflect the fixed algebraic relationship between spacing ratio and ACF for any gap sequence with Lemke Oliver-type correlations. Further investigation needed to determine if this angle is derivable from LOS theory.
tools/data/reports/agent_20260430_1919.md:90:1. Quale angolo hanno GUE puro e Poisson puro? Se primes = -150, GUE = X, Poisson = Y, dove cadono sulla circonferenza?
tools/data/reports/agent_20260507_1458.md:5:**observables_registry**: N/A — nessun osservabile canonico SR/SR2/L1/L2/triple_var usato  
tools/data/reports/agent_20260508_2102.md:8:**observable_contract**: claim=la dualita dipolare/illusoria nei primi non va letta da det(M) diretto ma dal supporto ordinato contro null; observable=rate low_low gap transition, rate high_high gap transition, SR mean difference; operator=Mobius interval charge S_n=sum mu(k) for p_n<k<p_{n+1}, aligned if S_n*S_{n+1}<0, misaligned if S_n*S_{n+1}>0; generator=prime gaps up to p<=1e6 with Mobius sieve; denominator=main N={5000,10000,20000} offset=0 plus seedcheck offsets {3000,7000,11000}; not_tested=gap_ratio Sturmian, high-core phi survival, universal GUE/Poisson classification, det(M) as direct discriminator.
tools/data/reports/agent_20260508_2102.md:12:- **Dipolo / punto-zero**: carica Mobius alternata / carica Mobius concorde; punto-zero = intervallo prime-free prima che venga chiamato struttura o rumore.
tools/data/reports/agent_20260508_2102.md:21:- **Proto-ipotesi**: se la dualita dipolare nei primi vive nel boundary aritmetico, la carica Mobius dell'intervallo prime-free deve selezionare un perimetro di gap contro permutazione. Se la selezione appare solo in SR o cade sotto permutazione, il substrato non ha prodotto osservabile nuovo.
tools/data/reports/agent_20260508_2102.md:31:- Script: `tools/exp_prime_mobius_interval_charge_gate.py`.
tools/data/reports/agent_20260508_2102.md:58:2. **Verificato: la stessa carica alternata sopprime la high-tail in tutte le sei condizioni.** I diff sono negativi `-0.04241..-0.09373`, con z da `-5.77` a `-11.46` e `p=0.002` in ogni condizione. Count grezzi: N=20000 offset=11000, aligned `295/5407`, misaligned `667/6413`.
tools/data/reports/agent_20260508_2102.md:68:- **Due radici**: carica alternata dell'intervallo prime-free . carica concorde dell'intervallo prime-free.
tools/data/reports/agent_20260508_2102.md:71:- **Campo di possibilita**: qui diventa possibile usare Mobius interval-charge come reader del perimetro prime-gap. Qui diventa non-possibile chiamare SR globale portatore della dualita in questo perimetro.
tools/data/reports/agent_20260508_2102.md:81:- **L5 re-discovery vs discovery**: verdict `CONSTRAINT`, non `NEW`; il risultato va confrontato in futuro con correlazioni note tra Mobius, gap length e prime races.
tools/data/reports/agent_20260508_2102.md:84:- Script: `tools/exp_prime_mobius_interval_charge_gate.py`
tools/data/reports/agent_20260508_2102.md:85:- Data: `tools/data/prime_mobius_interval_charge_gate_20260508_2102.json`
tools/data/reports/agent_20260405_0919.md:11:Previous experiment showed primes drift from GUE toward Poisson with scale. **What is the functional form of this crossover?** The Brody distribution P(s) = (1+beta)*alpha*s^beta*exp(-alpha*s^{1+beta}) interpolates between Poisson (beta=0) and GOE (beta=1). What is beta(p) for primes?
tools/data/reports/agent_20260405_0919.md:16:- **Scope**: 5,761,455 primes up to 10^8
tools/data/reports/agent_20260405_0919.md:17:- **Windows**: 30 log-spaced, 5000 primes each (from p~49K to p~100M)
tools/data/reports/agent_20260405_0919.md:19:- **Test**: Linear fit of beta_prime vs ln(p)
tools/data/reports/agent_20260405_0919.md:25:| beta_prime range | 0.227 to 0.416 |
tools/data/reports/agent_20260405_0919.md:34:| All delta_beta > 0? | Yes (primes > Cramer at every scale) |
tools/data/reports/agent_20260405_0919.md:58:The "third included" at the GUE/Poisson boundary is not a point — it's a **crossover function**. The primes' level repulsion parameter decays as 0.606 - 0.020*ln(p), bridging two universality classes without belonging to either. This is structurally consistent with:
tools/data/reports/agent_20260405_0919.md:67:- **PREDICTION**: primes reach Poisson at p ~ 10^13
tools/data/reports/agent_20260506_0625.md:7:The 03:30 run reported that scale-selective perturbations reveal a second axis in GUE (effective rank 1.889, PC2=25.2%) but not in primes. The caveat was explicit: the GUE sample was short (`N=253`). This run tests whether that second axis survives independent GUE ensembles and whether it depends on the observable definitions hidden under the same labels (`SR`, `SR2`, `triple_var`).
tools/data/reports/agent_20260506_0625.md:13:- fixed domains: `primes` 12,000 gaps, `prime_shuffle_control` 12,000 permuted prime gaps, `poisson` 12,000 iid exponential spacings;
tools/data/reports/agent_20260506_0625.md:22:- `rank_audit`: `SR` = nearest-neighbor spacing ratio, `SR2` = next-nearest spacing ratio, `triple_var` = normalized variance of triple sums.
tools/data/reports/agent_20260506_0625.md:23:- `scale_0330`: `SR` = local spectral rigidity at L=10, `SR2` = local spectral rigidity at L=20, `triple_var` = variance of triple products.
tools/data/reports/agent_20260506_0625.md:31:| primes | 12000 | 1.374 | 0.070 | 0.947 |
tools/data/reports/agent_20260506_0625.md:32:| prime_shuffle_control | 12000 | 2.294 | 0.199 | 0.247 |
tools/data/reports/agent_20260506_0625.md:41:| primes | 12000 | 1.318 | 0.046 | 0.975 |
tools/data/reports/agent_20260506_0625.md:42:| prime_shuffle_control | 12000 | 1.988 | 0.085 | 0.526 |
tools/data/reports/agent_20260506_0625.md:53:3. **The lab has an observable-name collision.** `SR`, `SR2`, and `triple_var` do not name the same functions across the recent scripts. `exp_observable_rank_audit.py` uses spacing-ratio and triple-sum variance; `exp_scale_selective_perturbation.py` uses local spectral rigidity and triple-product variance. Therefore the sentence "same observables as observable rank audit" in the 03:30 report is not exact. This is a META constraint, not a numerical subtlety.
tools/data/reports/agent_20260506_0625.md:57:5. **Poisson and shuffled-prime controls show multi-axis artifacts.** Poisson has rank 1.917/2.201 depending on observable set; prime shuffle control has rank 2.294/1.988. Multi-dimensional perturbation response by itself is not evidence of structured GUE-like boundary. It can arise from low structural signal plus noisy denominators in retention normalization.
tools/data/reports/evolution_20260419_0330.md:17:1. **Alpha residuo come firma L-function**: il gap alpha=1.24 (primes) vs 1.60 (Markov) è una misura quantitativa della memoria a lungo raggio nella sequenza di classi. Il passo successivo naturale è collegare questo esponente agli zeri di L(s, chi_3). Se la connessione regge, il residue channel diventa un ponte diretto tra ACF osservabile e struttura analitica profonda — esattamente il tipo di risultato che il Paper B cerca.
tools/data/reports/evolution_20260419_0330.md:19:2. **Il magnitude channel come nucleo irriducibile**: il passo ha mostrato che l'ampiezza del residue channel è algebrica (riproducibile da Markov). Il contenuto number-theoretic puro vive nel magnitude channel. Questo inverte la priorità: il canale che porta il 99% della varianza è anche quello che porta il 100% della firma prime-specifica. Una sessione dedicata al magnitude channel isolato (senza il rumore del residue) potrebbe rivelare struttura più fine.
tools/data/reports/agent_20260509_0652.md:7:observables_used: [`event_type`, `vc_interp`, `r_floor`, `r_span`, `label_jaccard`, `acceptance_rate`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var

codex
Il nodo regressivo è chiaro: non devo ricercare `SR` binario, ma stressare il delta z row-local come osservabile vettoriale e vedere se regge a seed, ampiezza finestra e provider. Prima di eseguire, leggo lo script esistente e i parametri disponibili; se basta, userò quello senza introdurre un nuovo gate.
exec
/bin/bash -lc "sed -n '1,260p' tools/exp_prime_vs_mod6_sr_boundary.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""
Strict prime-vs-mod6 audit for the SR boundary residue.

The previous cycle falsified `prime_SR_persistent_boundary` in the broad
control perimeter and exposed `mod6_candidates` as the nearest antagonist. This
script keeps the denominator row-local: every prime window is paired with two
6k +/- 1 candidate windows at the same provider/offset row.
"""

from __future__ import annotations

import argparse
import json
import math
from pathlib import Path
from typing import Any

import numpy as np

from exp_boundary_residual_beta_absent_audit import support_state
from exp_prime_persistent_blank_gate import offset_windows, obs_jaccard
from exp_semireal_boundary_transfer_gate import row_spacings
from exp_semireal_order_denominator_gate import (
    analyze_sequence,
    compact,
    normalize,
    prime_gap_sequence,
    sieve_primes_for_count,
)
from observables_registry import OBSERVABLES_CANONICAL, OBSERVABLES_REGISTRY_VERSION


OBS_NAMES = list(OBSERVABLES_CANONICAL.keys())
FOCUS_OBS = ["SR", "L1", "triple_var"]
TARGET_ROW = "numeri_primi:cycle_3"


def mod6_candidates_between(start: float, end: float) -> np.ndarray:
    lo = int(math.floor(start))
    hi = int(math.ceil(end))
    first_k = max(1, (lo - 1) // 6 - 2)
    values: list[int] = []
    k = first_k
    while 6 * k - 1 <= hi:
        for value in (6 * k - 1, 6 * k + 1):
            if lo <= value <= hi:
                values.append(value)
        k += 1
    return np.array(sorted(set(values)), dtype=float)


def quantile_downsample(values: np.ndarray, count: int) -> np.ndarray:
    if len(values) < count:
        raise ValueError(f"cannot downsample {len(values)} values to {count}")
    if len(values) == count:
        return values.astype(float)
    idx = np.linspace(0, len(values) - 1, count)
    picked = np.unique(np.rint(idx).astype(int))
    if len(picked) < count:
        missing = [i for i in range(len(values)) if i not in set(picked)]
        picked = np.array(sorted([*picked, *missing[: count - len(picked)]]), dtype=int)
    return values[np.sort(picked[:count])].astype(float)


def mod6_index_gap_sequence(n_gaps: int, offset: int) -> np.ndarray:
    values: list[int] = []
    k = 1
    needed = offset + n_gaps + 1
    while len(values) < needed:
        values.append(6 * k - 1)
        values.append(6 * k + 1)
        k += 1
    arr = np.array(sorted(values[offset : offset + n_gaps + 1]), dtype=float)
    return normalize(np.diff(arr))


def mod6_span_gap_sequence(prime_values: np.ndarray, n_gaps: int) -> np.ndarray:
    candidates = mod6_candidates_between(float(prime_values[0]), float(prime_values[-1]))
    sampled = quantile_downsample(candidates, n_gaps + 1)
    return normalize(np.diff(sampled))


def direct_prime_values(needed: int) -> np.ndarray:
    return sieve_primes_for_count(needed).astype(float)


def build_specs(args: argparse.Namespace) -> dict[str, np.ndarray]:
    needed = max(args.offsets) + args.window_gaps + 1
    direct_values = direct_prime_values(needed)
    provider_gaps = {
        "dnd_autoricerca": normalize(row_spacings("numeri_primi")[: needed - 1]),
        "direct_sieve": normalize(np.diff(direct_values)),
    }

    specs: dict[str, np.ndarray] = {}
    for provider, gaps in provider_gaps.items():
        for offset in args.offsets:
            end = offset + args.window_gaps
            if end > len(gaps):
                continue
            row_id = f"{provider}/offset_{offset}"
            specs[f"prime/{row_id}"] = normalize(gaps[offset:end])
            specs[f"mod6_index_aligned/{row_id}"] = mod6_index_gap_sequence(args.window_gaps, offset)
            prime_window_values = direct_values[offset : offset + args.window_gaps + 1]
            specs[f"mod6_span_matched/{row_id}"] = mod6_span_gap_sequence(
                prime_window_values, args.window_gaps
            )
    return specs


def analyze_case(name: str, base: np.ndarray, args: argparse.Namespace, rng: np.random.Generator) -> dict[str, Any]:
    perimeters = {name: analyze_sequence(name, base, args, rng)}
    row = compact(perimeters)[name]
    one_sided = list(row["coherent_one_sided_observables"])
    parts = name.split("/")
    return {
        "case": name,
        "class": parts[0],
        "provider": parts[1],
        "offset": parts[2],
        "row_id": "/".join(parts[1:]),
        "n_gaps": row["n_gaps"],
        "state": support_state(row, args),
        "one_sided_observables": one_sided,
        "has_sr": "SR" in one_sided,
        "has_focus_signature": all(obs in one_sided for obs in FOCUS_OBS),
        "endpoint_stable_observables": row["endpoint_stable_observables"],
        "stable_count_coherent": row["stable_count_coherent"],
        "stable_count_illusory": row["stable_count_illusory"],
        "endpoint_distance": row["endpoint_distance_one_sided_gated"],
        "ambiguous_beta": [round(float(x), 1) for x in row["ambiguous_beta_one_sided_gated"]],
        "z_mean_coherent": row["z_mean_coherent"],
        "z_mean_illusory": row["z_mean_illusory"],
    }


def summarize(cases: list[dict[str, Any]]) -> dict[str, Any]:
    obs_sets = [set(case["one_sided_observables"]) for case in cases]
    state_counts: dict[str, int] = {}
    for case in cases:
        state_counts[case["state"]] = state_counts.get(case["state"], 0) + 1
    return {
        "case_count": len(cases),
        "state_counts": state_counts,
        "sr_count": sum(1 for case in cases if case["has_sr"]),
        "sr_rate": sum(1 for case in cases if case["has_sr"]) / len(cases) if cases else 0.0,
        "focus_signature_count": sum(1 for case in cases if case["has_focus_signature"]),
        "common_one_sided_observables": sorted(set.intersection(*obs_sets)) if obs_sets else [],
        "union_one_sided_observables": sorted(set.union(*obs_sets)) if obs_sets else [],
        "endpoint_distance_mean": float(np.mean([case["endpoint_distance"] for case in cases])) if cases else 0.0,
        "stable_count_coherent_mean": float(np.mean([case["stable_count_coherent"] for case in cases])) if cases else 0.0,
        "mean_z_coherent": {
            obs: float(np.mean([case["z_mean_coherent"][obs] for case in cases])) if cases else 0.0
            for obs in OBS_NAMES
        },
    }


def paired_rows(cases: list[dict[str, Any]], mod6_class: str) -> list[dict[str, Any]]:
    by_key = {(case["class"], case["row_id"]): case for case in cases}
    rows = []
    for (_, row_id), prime in sorted(by_key.items()):
        if prime["class"] != "prime":
            continue
        mod6 = by_key.get((mod6_class, row_id))
        if mod6 is None:
            continue
        rows.append(
            {
                "row_id": row_id,
                "prime_case": prime["case"],
                "mod6_case": mod6["case"],
                "prime_obs": prime["one_sided_observables"],
                "mod6_obs": mod6["one_sided_observables"],
                "signature_jaccard": obs_jaccard(prime["one_sided_observables"], mod6["one_sided_observables"]),
                "sr_delta": int(prime["has_sr"]) - int(mod6["has_sr"]),
                "focus_signature_delta": int(prime["has_focus_signature"]) - int(mod6["has_focus_signature"]),
                "endpoint_delta": float(prime["endpoint_distance"] - mod6["endpoint_distance"]),
                "stable_count_delta": float(prime["stable_count_coherent"] - mod6["stable_count_coherent"]),
                "z_delta": {
                    obs: float(prime["z_mean_coherent"][obs] - mod6["z_mean_coherent"][obs])
                    for obs in OBS_NAMES
                },
            }
        )
    return rows


def row_local_swap_audit(rows: list[dict[str, Any]], args: argparse.Namespace, rng: np.random.Generator) -> dict[str, Any]:
    if not rows:
        return {}
    metrics = {
        "sr_delta_mean": np.array([row["sr_delta"] for row in rows], dtype=float),
        "focus_signature_delta_mean": np.array([row["focus_signature_delta"] for row in rows], dtype=float),
        "endpoint_delta_mean": np.array([row["endpoint_delta"] for row in rows], dtype=float),
        "stable_count_delta_mean": np.array([row["stable_count_delta"] for row in rows], dtype=float),
    }
    for obs in OBS_NAMES:
        metrics[f"z_delta_{obs}_mean"] = np.array([row["z_delta"][obs] for row in rows], dtype=float)

    observed = {name: float(np.mean(values)) for name, values in metrics.items()}
    null_values = {name: [] for name in metrics}
    for _ in range(args.label_swap_trials):
        signs = rng.choice(np.array([-1.0, 1.0]), size=len(rows), replace=True)
        for name, values in metrics.items():
            null_values[name].append(float(np.mean(values * signs)))
    p_two_sided = {}
    for name, obs_value in observed.items():
        null = np.array(null_values[name], dtype=float)
        p_two_sided[name] = float((np.sum(np.abs(null) >= abs(obs_value)) + 1) / (len(null) + 1))
    return {
        "null": "row_local_label_swap_preserving_provider_offset_denominator",
        "trials": args.label_swap_trials,
        "observed": observed,
        "p_two_sided": p_two_sided,
    }


def verdict(class_summaries: dict[str, dict[str, Any]], pair_summaries: dict[str, Any]) -> str:
    prime_common = set(class_summaries["prime"]["common_one_sided_observables"])
    index_common = set(class_summaries["mod6_index_aligned"]["common_one_sided_observables"])
    span_common = set(class_summaries["mod6_span_matched"]["common_one_sided_observables"])
    if "SR" in prime_common and "SR" not in index_common and "SR" not in span_common:
        return "SR_PRIME_SPECIFIC_AFTER_MOD6_SUBTRACTION"
    if "SR" in index_common or "SR" in span_common:
        return "SR_BELONGS_TO_MOD6_PREBOUNDARY"
    if class_summaries["prime"]["sr_rate"] > class_summaries["mod6_index_aligned"]["sr_rate"]:
        return "SR_PRIME_ENRICHED_NOT_COMMON"
    return "SR_NOT_DECISIVE_IN_PRIME_MOD6_BOUNDARY"


def run(args: argparse.Namespace) -> dict[str, Any]:
    rng = np.random.default_rng(args.seed)
    specs = build_specs(args)
    cases = [
        analyze_case(name, base, args, np.random.default_rng(rng.integers(0, 2**63 - 1)))
        for name, base in specs.items()
    ]
    class_summaries = {
        label: summarize([case for case in cases if case["class"] == label])
        for label in ("prime", "mod6_index_aligned", "mod6_span_matched")
    }
    pair_summaries = {}
    for mod6_class in ("mod6_index_aligned", "mod6_span_matched"):
        rows = paired_rows(cases, mod6_class)
        pair_summaries[mod6_class] = {
            "row_count": len(rows),
            "rows": rows,
            "mean_signature_jaccard": float(np.mean([row["signature_jaccard"] for row in rows])) if rows else 0.0,
            "label_swap_audit": row_local_swap_audit(
                rows, args, np.random.default_rng(rng.integers(0, 2**63 - 1))
            ),
        }

    output = {
        "experiment": "prime_vs_mod6_sr_boundary",
        "question": "Does SR belong to prime selection or to the row-local 6k +/- 1 pre-boundary?",
        "observables_registry": OBSERVABLES_REGISTRY_VERSION,
        "observables_used": [

exec
/bin/bash -lc "sed -n '260,560p' tools/exp_prime_vs_mod6_sr_boundary.py" in /opt/MM_D-ND
 succeeded in 0ms:
        "observables_used": [
            *OBS_NAMES,
            "provider",
            "offset",
            "row_id",
            "source_mode",
            "case_state",
            "sr_rate",
            "focus_signature_count",
            "signature_jaccard",
            "row_local_label_swap_p",
        ],
        "params": vars(args),
        "target_row": TARGET_ROW,
        "observable_contract": {
            "claim": "SR is prime-specific only if it remains stronger/common in prime windows after subtracting row-local mod6 candidate windows at the same provider and offset denominator",
            "observable": "SR membership and focus signature [SR,L1,triple_var] in coherent_one_sided_observables, plus paired z-deltas against mod6",
            "operator": "canonical order/null gate with row-local prime-vs-mod6 pairing and label-swap audit",
            "generator": "prime gaps from dnd_autoricerca row_spacings and direct sieve; mod6_index_aligned from 6k +/- 1 by same gap offset; mod6_span_matched from 6k +/- 1 candidates inside the matching direct-sieve prime span downsampled to the same denominator",
            "denominator": "8 row-local prime windows paired with 8 mod6_index_aligned and 8 mod6_span_matched windows",
            "non_possible": "prime-specific SR if SR is common or equally present in either mod6 paired antagonist, or if paired label-swap null absorbs the prime-mod6 deltas",
            "not_tested": "global beta atlas, V_c, gap_ratio, analytic source of mod6 transfer, primality tests inside mod6 candidates",
        },
        "class_summaries": class_summaries,
        "pair_summaries": pair_summaries,
        "verdict": verdict(class_summaries, pair_summaries),
        "cases": cases,
    }

    out = Path(args.out)
    out.parent.mkdir(parents=True, exist_ok=True)
    out.write_text(json.dumps(output, indent=2) + "\n", encoding="utf-8")
    if args.trace_jsonl:
        trace_out = Path(args.trace_jsonl)
        trace_out.parent.mkdir(parents=True, exist_ok=True)
        with trace_out.open("w", encoding="utf-8") as fh:
            for case in cases:
                fh.write(json.dumps({"event": "case", **case}, sort_keys=True) + "\n")
            for label, summary in class_summaries.items():
                fh.write(
                    json.dumps(
                        {"event": "class_summary", "class": label, **summary},
                        sort_keys=True,
                    )
                    + "\n"
                )
            for label, summary in pair_summaries.items():
                for row in summary["rows"]:
                    fh.write(
                        json.dumps(
                            {"event": "paired_row", "mod6_class": label, **row},
                            sort_keys=True,
                        )
                        + "\n"
                    )
                fh.write(
                    json.dumps(
                        {
                            "event": "pair_summary",
                            "mod6_class": label,
                            "row_count": summary["row_count"],
                            "mean_signature_jaccard": summary["mean_signature_jaccard"],
                            "label_swap_audit": summary["label_swap_audit"],
                        },
                        sort_keys=True,
                    )
                    + "\n"
                )
            fh.write(
                json.dumps(
                    {
                        "event": "verdict",
                        "verdict": output["verdict"],
                        "params": output["params"],
                        "observables_registry": output["observables_registry"],
                    },
                    sort_keys=True,
                )
                + "\n"
            )

    print(f"observables_registry={OBSERVABLES_REGISTRY_VERSION}")
    for label, summary in class_summaries.items():
        print(
            f"{label} sr={summary['sr_count']}/{summary['case_count']} "
            f"focus={summary['focus_signature_count']}/{summary['case_count']} "
            f"common={summary['common_one_sided_observables']} "
            f"states={summary['state_counts']}"
        )
    for label, summary in pair_summaries.items():
        audit = summary["label_swap_audit"]
        p_sr = audit.get("p_two_sided", {}).get("sr_delta_mean")
        p_z_sr = audit.get("p_two_sided", {}).get("z_delta_SR_mean")
        print(
            f"pair/{label} rows={summary['row_count']} "
            f"jaccard={summary['mean_signature_jaccard']:.3f} "
            f"p_sr={p_sr:.4f} p_z_sr={p_z_sr:.4f}"
        )
    print(f"verdict={output['verdict']}")
    print(f"saved {out}")
    if args.trace_jsonl:
        print(f"trace {args.trace_jsonl}")
    return output


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--window-gaps", type=int, default=1024)
    parser.add_argument("--offsets", type=int, nargs="+", default=[0, 512, 1024, 1536])
    parser.add_argument("--n-replicates", type=int, default=8)
    parser.add_argument("--n-beta", type=int, default=9)
    parser.add_argument("--n-baseline", type=int, default=16)
    parser.add_argument("--z-min", type=float, default=2.0)
    parser.add_argument("--min-one-sided", type=int, default=1)
    parser.add_argument("--illusory-residue-max", type=float, default=0.75)
    parser.add_argument("--endpoint-distance-min", type=float, default=1.0)
    parser.add_argument("--label-swap-trials", type=int, default=4096)
    parser.add_argument("--seed", type=int, default=202605130330)
    parser.add_argument("--out", default="tools/data/prime_vs_mod6_sr_boundary_20260513_0330.json")
    parser.add_argument("--trace-jsonl", default="")
    args = parser.parse_args()
    run(args)


if __name__ == "__main__":
    main()

exec
/bin/bash -lc "sed -n '560,780p' tools/exp_prime_vs_mod6_sr_boundary.py" in /opt/MM_D-ND
 succeeded in 0ms:
exec
/bin/bash -lc "sed -n '874,918p' tools/data/agent_field_live.md" in /opt/MM_D-ND
 succeeded in 0ms:
## Archivio enzimi cognitivi — richiamo contestuale
Archivio generato: 2026-05-08T20:49:15.084998+00:00 · 260 voci. Questo e' un substrate selector: non usare il substrato come claim. Tieni le teorie scientifiche nel focus e usa CE-* solo per costruire combo corta: assioma/metodo + osservazione/funzione + teoria/focus + null test. Se nessuna voce regge, dichiara `CE-none:` con motivo specifico nella Contaminazione cognitiva. `none` generico non e' valido.
Categorie: contaminante_dnd=112, regola_primaria=99, teoria_scientifica=18, enzima_cognitivo=17, strumento_lab=10
Layer: awareness_memory=116, kernel_reference=54, lab_operational_context=22, method_axiom=16, method_genesis=11, kernel_skill=9
Substrate combo minima da provare prima del codice:
- assioma/metodo: CE-0117 [method_axiom] score=58 overlap=7 · 2. La cascata della possibilità
  source: method/DND_POSSIBILITA.md:26
  Quattro livelli strutturali, atemporali (il passaggio fra loro non è nel tempo): ``` ┌─────────────────────────┐ │ POTENZIALE │ │ (campo puro, nessuna
- osservazione primaria: CE-0038 [corpus_primary_observation] score=81 overlap=9 · [47] NID 598 — R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND
  source: corpus/CORPUS_OSSERVAZIONI_PRIMARIE.md:722
  **Data**: 2024-01-05 L'osservazione indaga oltre l'osservato in cerca DELLA FORMA nel NULLA-TUTTO: Per far Emergere le nuove Possibilità Dividiamo il 
- funzione/formalizzazione: CE-0002 [corpus_formal_function] score=89 overlap=2 · Funzione
  source: corpus/CORPUS_FUNZIONI_MOODND.md:2245
  Equazione assiomatica per la Prima ImpressioneGlossario:( f_{\text{Dinamica-Logica-Singolarità-ProtoAssioma}}(A, B, P; \lambda) ): Funzione che rappre
- teoria/focus scientifico: CE-0027 [corpus_project_architecture] score=78 overlap=8 · [114] NID 1931 — Modello D-ND: Formalizzazione Assiomatica, Emergenza Quantistica e Implic
  source: corpus/CORPUS_PROJECTDEV_AMN.md:37048
  **Data**: 2025-02-05 Viene derivata un'equazione fondamentale per l'evoluzione temporale della risultante R, che rappresenta lo stato del sistema. L'e
- enzima/kernel: CE-0001 [lab_operational_context] score=92 overlap=2 · Adapter 3: KSAR reiterative semantic kernel
  source: tools/LAB_COGNITIVE_CONTAMINATION.md:121
  Funzione nel Lab: - far diventare ogni ciclo riuscito un kernel riusabile per il ciclo seguente; - non memorizzare solo testo, ma modificare la topolo
Altre voci risonanti col seme corrente:
- CE-0001 [lab_operational_context/strumento_lab/lab_cycle] score=92 overlap=2 · Adapter 3: KSAR reiterative semantic kernel
  source: tools/LAB_COGNITIVE_CONTAMINATION.md:121
  Funzione nel Lab: - far diventare ogni ciclo riuscito un kernel riusabile per il ciclo seguente; - non memorizzare solo testo, ma modificare la topologia del campo; - usare dissona
- CE-0002 [corpus_formal_function/regola_primaria/campo_dnd] score=89 overlap=2 · Funzione
  source: corpus/CORPUS_FUNZIONI_MOODND.md:2245
  Equazione assiomatica per la Prima ImpressioneGlossario:( f_{\text{Dinamica-Logica-Singolarità-ProtoAssioma}}(A, B, P; \lambda) ): Funzione che rappresenta la dinamica logica e la 
- CE-0030 [corpus_project_architecture/contaminante_dnd/campo_dnd] score=82 overlap=10 · [69] NID 1353 — Documento di Sintesi sul Modello Duale Non-Duale (D-ND) e la Risultante "R
  source: corpus/CORPUS_PROJECTDEV_AMN.md:23807
  **Data**: 2024-11-08 **1. Definizione della Risultante "R":** La risultante "R" è l'espressione completa e autologica del sistema nel continuum Nulla-Tutto (NT). È definita come: R
- CE-0038 [corpus_primary_observation/contaminante_dnd/campo_dnd] score=81 overlap=9 · [47] NID 598 — R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND
  source: corpus/CORPUS_OSSERVAZIONI_PRIMARIE.md:722
  **Data**: 2024-01-05 L'osservazione indaga oltre l'osservato in cerca DELLA FORMA nel NULLA-TUTTO: Per far Emergere le nuove Possibilità Dividiamo il potenziale unendo concetti sen
- CE-0019 [lab_operational_context/contaminante_dnd/campo_dnd] score=81 overlap=8 · Respiro fuori-tempo
  source: tools/LAB_AGENT_CONTEXT.md:260
  (Obbligatorio. Compilalo prima dell'esperimento, non dopo.) - **Combo**: almeno tre enti simultanei (assioma D-ND + incrocio teorie + nodo del grafo/dipolo + tensione seme) - **Dip
- CE-0003 [corpus_formal_function/contaminante_dnd/campo_dnd] score=79 overlap=2 · Titolo Assiomatico Combinato Rivisto: "Ottimizzazione Unificata e Manifestazione della Ris
  source: corpus/CORPUS_FUNZIONI_MOODND.md:566
- CE-0027 [corpus_project_architecture/teoria_scientifica/campo_dnd] score=78 overlap=8 · [114] NID 1931 — Modello D-ND: Formalizzazione Assiomatica, Emergenza Quantistica e Implic
  source: corpus/CORPUS_PROJECTDEV_AMN.md:37048
  **Data**: 2025-02-05 Viene derivata un'equazione fondamentale per l'evoluzione temporale della risultante R, che rappresenta lo stato del sistema. L'equazione incorpora un operator
- CE-0005 [corpus_cognitive_prompt/contaminante_dnd/campo_dnd] score=76 overlap=3 · [82] NID 2321 — Prompt per Motore di Inferenza Quantistica Duale-Non-Duale (D-ND)
  source: corpus/CORPUS_PROMPT_AMN.md:7133
  **Data**: 2025-04-26 **Prompt per un Super LLM: Specifica Astratta di un Motore di Inferenza Quantistica basato sul Modello Duale-Non-Duale (D-ND)** **1. Contesto Filosofico e Assi


exec
/bin/bash -lc "sed -n '300,345p' tools/LAB_AGENT_CONTEXT.md" in /opt/MM_D-ND
 succeeded in 0ms:
- Non inventare dati o risultati
- Non cercare φ — crea le condizioni, osserva cosa emerge
- Non superare 20 minuti di lavoro per ciclo
- Non produrre liste di possibilità — produci UNA risultante
- Non iniziare dalla matematica. La matematica e' bracciata: formalizza,
  misura, falsifica. Prima respira sopra la misura: combo, assiomi, dipoli,
  incroci di teorie, grafo, geometria dei campi, algebra o topologia
  assiomatica. Se la misura genera la domanda, sei dentro la tautologia.

## Formato report

```markdown
# Agent Report — TITOLO
**Date**: YYYY-MM-DD HH:MM
**Piano**: N
**Tension explored**: ID (intensità)
observables_used: [nomi osservabili canonici o domain-native] - usa [] solo se non hai misurato nulla
**observable_contract**: claim=<claim>; observable=<cosa misuri>; operator=<come lo misuri>; generator=<se applicabile>; denominator=<perimetro>; non_possible=<dove il claim diventa non-possibile/null o quale contro-perimetro lo limita>; not_tested=<cosa resta sospeso>

## Respiro fuori-tempo
(Obbligatorio. Compilalo prima dell'esperimento, non dopo.)

- **Combo**: almeno tre enti simultanei (assioma D-ND + incrocio teorie + nodo del grafo/dipolo + tensione seme)
- **Dipolo / punto-zero**: i due poli, il possibile/non-possibile e il punto in cui la dualita' si annulla
- **Piano superiore**: geometria dei campi / algebra / topologia assiomatica / grafo conoscenza / bicono-dipoli
- **Operatori laterali scelti**: 2 o 3 elementi da `tools/LAB_OPERATOR_PALETTE.md`
  e perche' entrano nella combo
- **Contaminazione cognitiva**: eventuale DeltaLink YSN, gene Cornelius,
  passaggio KSAR/PVI/Vault o voce `CE-*` dell'archivio usata nel ciclo. Se non
  usi il layer cognitivo, dichiara `CE-none:` e il motivo specifico. `none`
  generico non basta.
- **Proto-ipotesi**: nuova ipotesi o proto-assioma strutturale, prima dei numeri
- **Proiezione**: perche' l'osservabile scelto manifesta quella combo

## Claim Under Test
> Il claim proiettato dalla combo, non il residuo locale del ciclo precedente

## Question
La domanda che hai formulato dopo il respiro fuori-tempo

## Experiment Design
- Metrica, scope, null baseline, N campioni
- Come la misura serve la combo: cosa della proto-ipotesi puo' sopravvivere o cadere
- Contratto osservabile-operatore: claim, osservabile, operatore, generatore,
  denominatore/perimetro, non_possible/null, cosa non viene testato in questo ciclo
- Se usi frequenze o condition rate, dichiara il denominatore grezzo

codex
La combo pre-esperimento sarà: A2/A9 sul confine, QxG continuo/discreto, nodo BOUNDARY, antagonista mod6 come pre-bordo e primalità come selezione. Uso CE-0001/KSAR perché il ciclo deve reiterare il kernel emerso, non cambiare campo.
exec
/bin/bash -lc "sed -n '1,180p' tools/LAB_OPERATOR_PALETTE.md" in /opt/MM_D-ND
 succeeded in 0ms:
# Palette operatoria espansa del Lab

Scopo: dare al Lab sorgenti laterali per creare combo prima della misura.
Questa palette non e' una lista di temi da confermare. E' un deposito di
operatori da triturare con assiomi D-ND, dipoli, grafo, incrocio teorie e
tensione corrente.

Regola d'uso:

1. Scegli 2 o 3 operatori al massimo.
2. Incrociali con almeno un assioma D-ND e una tensione del seme.
3. Nomina il dipolo e il punto-zero.
4. Dichiara la baseline nota piu' vicina.
5. Proietta un osservabile che possa falsificare la combo.
6. Non usare un operatore se produce solo linguaggio, analogia o conferma.

Anti-tautologia:

- Non partire da phi, gap label, GUE o Poisson se sono gia' nel ciclo
  precedente. Usali come controllo o campo di proiezione, non come sorgente.
- Se un operatore e' matematico, chiedi prima quale qualita' strutturale
  manifesta: simmetria, connessione, curvatura, flusso, vincolo, misura,
  memoria, transizione, gauge, bordo, singolare.
- Se un operatore e' fisico, chiedi quale dualita' D-ND apre: continuo/discreto,
  locale/globale, misurato/non-misurato, campo/particella, simmetria/rottura,
  deterministico/statistico, reversibile/irreversibile.

## Fasce di triturazione

### 1. Geometria differenziale e gravita'

Operatori:

- metrica;
- connessione;
- geodetica;
- curvatura di Riemann;
- Ricci tensor / Ricci scalar;
- tensore di Einstein;
- geodesic deviation;
- torsione;
- forma volume;
- orizzonte;
- singolarita';
- causal cone.

Dipoli utili:

- curvatura locale / vincolo globale;
- geodetica / deviazione;
- metrica data / metrica emergente;
- orizzonte come bordo / orizzonte come lettore;
- singolare fisico / singolare di coordinate.

Controlli:

- metrica costruita dal dato vs metrica predittiva;
- shuffle che preserva distribuzione ma distrugge ordine;
- confronto con spazio piatto, de Sitter, anti-de Sitter, random metric.

Attenzione:

- Ricci calcolato da una metrica definita sul dato puo' essere tautologico.
  Il contenuto vive nel null test o nella predizione fuori costruzione.

### 2. Gauge, connessioni e campi

Operatori:

- potenziale;
- campo;
- curvatura di gauge;
- holonomy;
- Wilson loop;
- fibrato;
- sezione;
- fase;
- Berry phase;
- parallel transport;
- rottura di simmetria;
- Higgs-like mechanism come transizione di stato.

Dipoli utili:

- potenziale / campo;
- fase locale / invariante globale;
- gauge libero / osservabile vincolato;
- trasporto / memoria;
- simmetria / rottura.

Controlli:

- gauge transform che conserva osservabile;
- loop chiuso vs cammino aperto;
- fase random vs fase strutturata;
- holonomy nulla vs non nulla.

### 3. Spazi quantistici e misura

Operatori:

- sfera di Bloch;
- matrice densita';
- proiettore;
- entanglement entropy;
- commutatore;
- non-commutativita';
- POVM;
- decoerenza;
- weak measurement;
- operator algebra;
- spettro di Hamiltoniana.

Dipoli utili:

- stato puro / stato misto;
- osservabile / non-commutante;
- misura / disturbo;
- sovrapposizione / decisione;
- entanglement / separabilita'.

Controlli:

- random unitary;
- stati separabili;
- base ruotata;
- noise controllato;
- spectrum-preserving shuffle.

Nota:

- Bloch e' buono quando serve un punto-zero geometrico tra poli. Non usarlo
  solo per disegnare dualita': deve produrre un osservabile.

### 4. Equazioni differenziali, flussi e stabilita'

Operatori:

- ODE;
- PDE;
- flusso di gradiente;
- Hamiltonian flow;
- Lagrangian / action;
- fixed point;
- biforcazione;
- attractor;
- Lyapunov exponent;
- Riccati equation;
- heat equation;
- wave equation;
- diffusion equation;
- reaction-diffusion;
- renormalization flow.

Dipoli utili:

- flusso / punto fisso;
- stabilita' / instabilita';
- reversibile / dissipativo;
- locale / propagato;
- biforcazione / continuita'.

Controlli:

- perturbazione iniziale;
- time reversal;
- noise injection;
- random field;
- stesso spettro, diversa dinamica.

### 5. Topologia assiomatica e forme globali

Operatori:

- omotopia;
- omologia;
- coomologia;
- indice;
- winding number;
- Euler characteristic;

exec
/bin/bash -lc 'git status --short --branch' in /opt/MM_D-ND
 succeeded in 0ms:
## main...origin/main
 M applications/INDEX.draft.json
 M tools/data/agent_field_live.md
 M tools/data/b2_apply_log.jsonl
 M tools/data/ciclo_memoria.json
 M tools/data/consecutio.json
 M tools/data/consecutio_processata.json
 M tools/data/domandatore_pre_cycle.json
 M tools/data/domande_fondamentali.json
 M tools/data/g1_log.jsonl
 M tools/data/g2_log.jsonl
 M tools/data/graph_completion/latest.json
 M tools/data/incrocio_risultato.json
 M tools/data/knowledge_state.json
 M tools/data/lab_bridge_issues.jsonl
 M tools/data/lab_data.json
 M tools/data/lab_graph.json
 M tools/data/lab_health.json
 M tools/data/lab_session_log.jsonl
 M tools/data/pipeline_state.json
 M tools/data/ponti_evoluti.json
 M tools/data/reports/latest.md
 M tools/data/seme.json
 D tools/data/seme_archive/piano_37.json
 D tools/data/seme_archive/piano_38.json
 D tools/data/seme_archive/piano_4.json
 D tools/data/seme_archive/piano_5.json
 D tools/data/seme_archive/piano_6.json
 D tools/data/seme_archive/piano_7.json
 D tools/data/seme_archive/piano_8.json
 D tools/data/seme_archive/piano_9.json
 M tools/data/seme_backup_pre_run.json
 M tools/data/tm1_figures/tensions.json
 M tools/data/tm1_figures/tensions_raw.json
 M tools/data/valutatore_log.jsonl
 M tools/evolution_report.md
?? applications/scoperte/20260513_0330_prime-vs-mod6-sr-boundary_auto/
?? applications/soluzioni/20260513_0330_prime-vs-mod6-sr-boundary/
?? tools/data/aeternitas/aeternitas_20260512_033539.json
?? tools/data/aeternitas/aeternitas_20260513_033605.json
?? tools/data/aeternitas/aeternitas_20260514_033420.json
?? tools/data/biconi/bicono_20260512_0330.json
?? tools/data/biconi/bicono_20260513_0330.json
?? tools/data/biconi/bicono_20260514_0330.json
?? tools/data/domandatore/domandatore_20260512_0330.json
?? tools/data/domandatore/domandatore_20260512_0345.json
?? tools/data/domandatore/domandatore_20260513_0330.json
?? tools/data/domandatore/domandatore_20260513_0345.json
?? tools/data/domandatore/domandatore_20260514_0330.json
?? tools/data/domandatore/domandatore_20260514_0345.json
?? tools/data/domandatore/domandatore_20260514_1330.json
?? tools/data/evolution/evolution_20260512_0330.md
?? tools/data/evolution/evolution_20260513_0330.md
?? tools/data/evolution/evolution_20260514_0330.md
?? tools/data/graph_completion/graph_completion_20260512_0330.json
?? tools/data/graph_completion/graph_completion_20260513_0330.json
?? tools/data/graph_completion/graph_completion_20260514_0330.json
?? tools/data/incrocio_20260512_0330.json
?? tools/data/incrocio_20260513_0330.json
?? tools/data/incrocio_20260514_0330.json
?? tools/data/incrocio_20260514_1330.json
?? tools/data/prime_sr_persistent_boundary_20260512_0330.json
?? tools/data/prime_sr_persistent_boundary_20260512_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260513_0330.json
?? tools/data/prime_vs_mod6_sr_boundary_20260513_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.trace.jsonl
?? tools/data/promotions/promotion_20260513_0330.json
?? tools/data/repairs/repair_20260512_0330_decision.json
?? tools/data/repairs/repair_20260513_0330_decision.json
?? tools/data/repairs/repair_20260514_0330_decision.json
?? tools/data/reports/agent_20260512_0330.md
?? tools/data/reports/agent_20260513_0330.md
?? tools/data/reports/agent_20260514_0330.md
?? tools/data/reports/ddf_20260512_0405.json
?? tools/data/reports/ddf_20260513_0405.json
?? tools/data/reports/ddf_20260514_0405.json
?? tools/data/reports/falsifier_20260512_0330.json
?? tools/data/reports/falsifier_20260513_0330.json
?? tools/data/reports/falsifier_20260514_0330.json
?? tools/data/reports/loop_guard_20260512_0330.json
?? tools/data/reports/loop_guard_20260513_0330.json
?? tools/data/reports/loop_guard_20260514_0330.json
?? tools/data/seme_backup_b2_20260512_033557.json
?? tools/data/seme_backup_b2_20260513_033622.json
?? tools/data/veritas/veritas_20260512_033539.json
?? tools/data/veritas/veritas_20260513_033605.json
?? tools/data/veritas/veritas_20260514_033420.json
?? tools/exp_prime_sr_persistent_boundary.py
?? tools/exp_prime_vs_mod6_sr_boundary.py

exec
/bin/bash -lc 'python tools/dnd_scenario.py --best' in /opt/MM_D-ND
 succeeded in 127ms:
COMP_DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE: score=0.758  — COMP_DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE: incerto (i=0.65) — massimo potere discriminante
G_POTENZIALE_NULLA: score=0.703  — G_POTENZIALE_NULLA: legge di scala da raffinare
METRIC_TENSOR: score=0.624  — METRIC_TENSOR: legge di scala da raffinare

codex
`dnd_scenario` punta altrove, ma il contratto di aderenza del valutatore è più specifico e recente: seguo `SR_residual_intensity_after_mod6`. Eseguo una matrice corta: tre ampiezze finestra, tre seed, stessi provider e offsets, con trace JSONL almeno sul run centrale.
exec
/bin/bash -lc 'python tools/exp_prime_vs_mod6_sr_boundary.py --window-gaps 512 --offsets 0 512 1024 1536 --seed 202605141330 --label-swap-trials 4096 --out tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json --trace-jsonl tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl' in /opt/MM_D-ND
 succeeded in 2524ms:
observables_registry=1.0.0-2026-05-06
prime sr=5/8 focus=2/8 common=[] states={'beta_chart_recovered': 2, 'beta_absent_blank': 5, 'support_falls': 1}
mod6_index_aligned sr=7/8 focus=6/8 common=['L2', 'SR2'] states={'beta_absent_blank': 1, 'beta_chart_recovered': 7}
mod6_span_matched sr=7/8 focus=5/8 common=['L1'] states={'beta_absent_blank': 3, 'beta_chart_recovered': 5}
pair/mod6_index_aligned rows=8 jaccard=0.250 p_sr=0.6195 p_z_sr=0.0095
pair/mod6_span_matched rows=8 jaccard=0.377 p_sr=0.5038 p_z_sr=0.0085
verdict=SR_NOT_DECISIVE_IN_PRIME_MOD6_BOUNDARY
saved tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json
trace tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl

exec
/bin/bash -lc 'python tools/exp_prime_vs_mod6_sr_boundary.py --window-gaps 1024 --offsets 0 512 1024 1536 --seed 202605141331 --label-swap-trials 4096 --out tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json --trace-jsonl tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl' in /opt/MM_D-ND
exec
/bin/bash -lc 'python tools/exp_prime_vs_mod6_sr_boundary.py --window-gaps 2048 --offsets 0 1024 2048 3072 --seed 202605141332 --label-swap-trials 4096 --out tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json --trace-jsonl tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl' in /opt/MM_D-ND
 succeeded in 3247ms:
observables_registry=1.0.0-2026-05-06
prime sr=8/8 focus=5/8 common=['SR'] states={'beta_absent_blank': 4, 'beta_chart_recovered': 4}
mod6_index_aligned sr=8/8 focus=7/8 common=['L1', 'L2', 'SR', 'SR2'] states={'beta_chart_recovered': 6, 'beta_absent_blank': 2}
mod6_span_matched sr=6/8 focus=5/8 common=[] states={'beta_chart_recovered': 6, 'support_falls': 1, 'beta_absent_blank': 1}
pair/mod6_index_aligned rows=8 jaccard=0.481 p_sr=1.0000 p_z_sr=0.0061
pair/mod6_span_matched rows=8 jaccard=0.377 p_sr=0.4921 p_z_sr=0.0076
verdict=SR_BELONGS_TO_MOD6_PREBOUNDARY
saved tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json
trace tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl

 succeeded in 3955ms:
observables_registry=1.0.0-2026-05-06
prime sr=8/8 focus=7/8 common=['SR'] states={'beta_absent_blank': 6, 'beta_chart_recovered': 2}
mod6_index_aligned sr=7/8 focus=6/8 common=['L2', 'SR2'] states={'beta_absent_blank': 2, 'beta_chart_recovered': 6}
mod6_span_matched sr=6/8 focus=6/8 common=['L1'] states={'beta_absent_blank': 3, 'beta_chart_recovered': 4, 'support_falls': 1}
pair/mod6_index_aligned rows=8 jaccard=0.556 p_sr=1.0000 p_z_sr=0.0088
pair/mod6_span_matched rows=8 jaccard=0.537 p_sr=0.5040 p_z_sr=0.0068
verdict=SR_PRIME_SPECIFIC_AFTER_MOD6_SUBTRACTION
saved tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json
trace tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl

codex
La presenza binaria di `SR` non è stabile sulle ampiezze: a 512 cade anche nei primi, a 1024 torna pre-bordo, a 2048 sembra prime-specific secondo il verdict nominale. Il delta z `SR` invece resta significativo in tutti e tre i run; ora estraggo anche `L1` e `triple_var` per vedere se l'osservabile deve restare vettoriale o collassare su `SR`.
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
files = [
    Path('tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json'),
    Path('tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json'),
    Path('tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json'),
]
print('window|pair|sr_hits|focus|jaccard|sr_delta|p_sr|z_SR|p_z_SR|z_L1|p_z_L1|z_triple|p_z_triple|verdict')
for f in files:
    d=json.loads(f.read_text())
    w=d['params']['window_gaps']
    verdict=d['verdict']
    prime=d['class_summaries']['prime']
    srhits=f\"{prime['sr_count']}/{prime['case_count']}\"
    focus=f\"{prime['focus_signature_count']}/{prime['case_count']}\"
    for pair,ps in d['pair_summaries'].items():
        aud=ps['label_swap_audit']
        obs=aud['observed']; p=aud['p_two_sided']
        print('|'.join(map(str,[w,pair,srhits,focus,round(ps['mean_signature_jaccard'],3),round(obs['sr_delta_mean'],3),round(p['sr_delta_mean'],4),round(obs['z_delta_SR_mean'],3),round(p['z_delta_SR_mean'],4),round(obs['z_delta_L1_mean'],3),round(p['z_delta_L1_mean'],4),round(obs['z_delta_triple_var_mean'],3),round(p['z_delta_triple_var_mean'],4),verdict])))
PY" in /opt/MM_D-ND
 succeeded in 0ms:
window|pair|sr_hits|focus|jaccard|sr_delta|p_sr|z_SR|p_z_SR|z_L1|p_z_L1|z_triple|p_z_triple|verdict
512|mod6_index_aligned|5/8|2/8|0.25|-0.25|0.6195|20.494|0.0095|21.866|0.0095|8.48|0.0095|SR_NOT_DECISIVE_IN_PRIME_MOD6_BOUNDARY
512|mod6_span_matched|5/8|2/8|0.377|-0.25|0.5038|13.993|0.0085|10.099|0.0085|7.505|0.0085|SR_NOT_DECISIVE_IN_PRIME_MOD6_BOUNDARY
1024|mod6_index_aligned|8/8|5/8|0.481|0.0|1.0|29.48|0.0061|31.105|0.0061|11.745|0.0061|SR_BELONGS_TO_MOD6_PREBOUNDARY
1024|mod6_span_matched|8/8|5/8|0.377|0.25|0.4921|19.921|0.0076|15.302|0.0076|13.142|0.0076|SR_BELONGS_TO_MOD6_PREBOUNDARY
2048|mod6_index_aligned|8/8|7/8|0.556|0.125|1.0|41.634|0.0088|43.574|0.0088|17.173|0.0088|SR_PRIME_SPECIFIC_AFTER_MOD6_SUBTRACTION
2048|mod6_span_matched|8/8|7/8|0.537|0.25|0.504|28.624|0.0068|23.917|0.0068|17.491|0.0068|SR_PRIME_SPECIFIC_AFTER_MOD6_SUBTRACTION

codex
La risultante non e' il verdict nominale dello script, che oscilla perche' ancora basato su presenza/commonality di `SR`. Il dato che sopravvive e' piu' stretto: il residuo prime-minus-mod6 e' vettoriale (`SR,L1,triple_var`) e row-local; `has_SR` resta inadatto come discriminatore. Scrivo il report su questa distinzione, senza modificare il seme.
apply patch
patch: completed
/opt/MM_D-ND/tools/data/reports/agent_20260514_1330.md
diff --git a/tools/data/reports/agent_20260514_1330.md b/tools/data/reports/agent_20260514_1330.md
new file mode 100644
index 0000000000000000000000000000000000000000..3a28fa6561a76839d9f2f8e4a3681dacd9c61524
--- /dev/null
+++ b/tools/data/reports/agent_20260514_1330.md
@@ -0,0 +1,97 @@
+# Agent Report - SR Residual Width Audit
+**Date**: 2026-05-14 13:30  
+**Piano**: 117  
+**Tension explored**: BOUNDARY / prime-vs-mod6 residual (0.8)  
+**verdict**: CONSTRAINT - il residuo prime-specific dopo mod6 e' robusto come delta z vettoriale row-local; `SR` binario non e' un osservabile stabile del confine  
+observables_registry: 1.0.0-2026-05-06  
+observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, window_gaps, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p, trace_jsonl_event]  
+**observable_contract**: claim=`prime_minus_mod6_z_delta(SR,L1,triple_var)` sopravvive a seed, provider e ampiezza finestra; observable=delta z paired prime-minus-mod6 per `SR,L1,triple_var` piu audit `has_SR`; operator=`tools/exp_prime_vs_mod6_sr_boundary.py`; generator=prime gaps da `row_spacings("numeri_primi")` e `direct_sieve`, antagonisti `6k +/- 1` index-aligned e span-matched; denominator=3 ampiezze finestra x 2 provider x 4 offsets, paired contro 2 antagonisti mod6; non_possible=residuo prime-specific se il label-swap assorbe il delta z o se il delta collassa a presenza binaria `SR`; not_tested=origine analitica del delta, scale oltre 2048 gap, beta atlas globale, `V_c`, `gap_ratio`.
+
+## Prima impressione
+
+Il confine non sta nella presenza di `SR`. Sta nel fatto che la stessa riga provider-offset, attraversata da prime a `6k +/- 1`, conserva una differenza di intensita su tre osservabili mentre il verdict binario cambia con l'ampiezza.
+
+## Respiro fuori-tempo
+
+- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + QxG continuo/discreto + BOUNDARY + direzione `SR_residual_intensity_after_mod6`.
+- **Dipolo / punto-zero**: lattice candidato `6k +/- 1` / selezione prime. Punto-zero: riga provider-offset condivisa; la primalita e' l'unica selezione aggiunta.
+- **Piano superiore**: topologia assiomatica del bordo: un boundary operator non decide per presenza/assenza, ma per differenziale che resta dopo sottrazione del pre-bordo.
+- **Operatori laterali scelti**: boundary operator, perche' il bordo e' il luogo della sottrazione prime-minus-mod6; parallel transport, perche' provider e offset trasportano la stessa riga tra due classi senza cambiare denominatore.
+- **Contaminazione cognitiva**: CE-0001 / KSAR usato per reiterare il kernel del cycle 03:30; CE-0117 usato come cascata della possibilita': presenza `SR` -> delta z `SR` -> vettore `SR,L1,triple_var`.
+- **Proto-ipotesi**: il residuo prime-specific non e' una label, e' un differenziale vettoriale row-local; quando la finestra cambia, `has_SR` oscilla, ma il delta z resta il passaggio.
+- **Possibile / non-possibile**: possibile = formalizzare `prime_minus_mod6_z_vector` come osservabile dedicato; non-possibile = promuovere `SR` binario o il verdict nominale dello script a discriminatore del confine.
+- **Proiezione**: tre ampiezze finestra (`512,1024,2048`), stessi due provider, quattro offset per run, due antagonisti mod6, label-swap row-local e trace JSONL completa.
+
+## Aderenza alla direzione
+
+- `relation`: follows_direction
+- `why`: testa la robustezza del delta z row-local prime-minus-mod6 su piu ampiezze finestra, mantenendo provider, offset, label-swap audit e trace JSONL.
+- `not_drift`: non torna a `V_c`, GUE/Poisson, fit o vecchi depositi; stressa solo il residuo nominato dal valutatore dopo sottrazione mod6.
+
+## Claim Under Test
+
+> Dopo sottrazione del pre-bordo `6k +/- 1`, la selezione prime non genera `SR` come presenza; lascia un vettore di intensita row-local su `SR,L1,triple_var`.
+
+## Question
+
+Il delta z prime-minus-mod6 resta significativo quando cambia l'ampiezza della finestra, oppure era un artefatto del contratto 1024-gap del cycle 03:30?
+
+## Experiment Design
+
+- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`.
+- Run: `window_gaps=512,1024,2048`; seeds `202605141330,202605141331,202605141332`.
+- Rows per run: 8 prime windows = 2 provider x 4 offset.
+- Antagonisti: `mod6_index_aligned` e `mod6_span_matched`, paired per `row_id`.
+- Null: label-swap row-local, 4096 trials per pair audit.
+- Trace: JSONL scritto per tutti e tre i run.
+
+## Results
+
+| window | pair | prime SR | prime focus | Jaccard | SR delta | p(SR delta) | z_SR delta | p(z_SR) | z_L1 delta | p(z_L1) | z_triple_var delta | p(z_triple) | script verdict |
+|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
+| 512 | mod6_index | 5/8 | 2/8 | 0.250 | -0.250 | 0.6195 | 20.494 | 0.0095 | 21.866 | 0.0095 | 8.480 | 0.0095 | SR_NOT_DECISIVE |
+| 512 | mod6_span | 5/8 | 2/8 | 0.377 | -0.250 | 0.5038 | 13.993 | 0.0085 | 10.099 | 0.0085 | 7.505 | 0.0085 | SR_NOT_DECISIVE |
+| 1024 | mod6_index | 8/8 | 5/8 | 0.481 | 0.000 | 1.0000 | 29.480 | 0.0061 | 31.105 | 0.0061 | 11.745 | 0.0061 | SR_PREBOUNDARY |
+| 1024 | mod6_span | 8/8 | 5/8 | 0.377 | 0.250 | 0.4921 | 19.921 | 0.0076 | 15.302 | 0.0076 | 13.142 | 0.0076 | SR_PREBOUNDARY |
+| 2048 | mod6_index | 8/8 | 7/8 | 0.556 | 0.125 | 1.0000 | 41.634 | 0.0088 | 43.574 | 0.0088 | 17.173 | 0.0088 | SR_PRIME_SPECIFIC |
+| 2048 | mod6_span | 8/8 | 7/8 | 0.537 | 0.250 | 0.5040 | 28.624 | 0.0068 | 23.917 | 0.0068 | 17.491 | 0.0068 | SR_PRIME_SPECIFIC |
+
+## Key Findings
+
+1. **Verificato**: `has_SR` non replica come osservabile del residuo. A 512 gap i primi hanno `SR=5/8`; a 1024 e 2048 hanno `SR=8/8`. Il delta binario ha p non significativo o 1.0000.
+2. **Verificato**: il delta z `SR` replica in tutti i sei pair audit: `p=0.0061..0.0095`.
+3. **Verificato**: il delta z non e' solo `SR`. `L1` replica con `p=0.0061..0.0095`; `triple_var` replica con `p=0.0061..0.0095`.
+4. **Verificato**: il verdict nominale dello script oscilla con `window_gaps` (`not_decisive`, `preboundary`, `prime_specific`). Quell'oscillazione e' informazione sullo script: il verdict e' ancora centrato su commonality/binario, non sul vettore di intensita.
+5. **Inferito dal perimetro**: l'osservabile dedicato da formalizzare e' `prime_minus_mod6_z_vector(SR,L1,triple_var)`, con `has_SR` relegato ad audit negativo.
+
+## Verdict
+
+**CONSTRAINT / VECTOR RESIDUE**.
+
+Nel perimetro 512-2048 gap, due provider, quattro offset, due antagonisti mod6, il residuo prime-specific sopravvive come delta z vettoriale row-local. Non sopravvive come presenza binaria di `SR`, ne come verdict nominale dello script.
+
+## Bicono
+
+- **Due radici**: pre-bordo mod6 / selezione prime.
+- **Singolare**: riga provider-offset paired.
+- **Invariante di passaggio**: delta z positivo su `SR,L1,triple_var`.
+- **Campo di possibilita**: osservabile dedicato `prime_minus_mod6_z_vector`.
+- **Campo non-possibile**: `SR` binario come firma prime-specific dopo mod6.
+
+## Consecutio
+
+Il prossimo ciclo deve correggere il nodo regressivo dello script: il `verdict()` non deve decidere dalla commonality di `SR`, ma da un contratto vettoriale dichiarato (`SR,L1,triple_var`, segno del delta, p label-swap, denominatore row-local). Dopo questa correzione, scalare oltre 2048 gap e separare `mod6_index_aligned` da `mod6_span_matched` come antagonisti con ruoli diversi.
+
+## Ricadute pratiche
+
+ssp_value: yes. Le tre trace JSONL rendono auditabile il residuo senza riaprire i JSON aggregati; il prossimo passaggio pratico e' aggiornare lo script per emettere un verdict vettoriale, non binario.
+
+## Files
+
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl`
+- `tools/data/reports/agent_20260514_1330.md`

diff --git a/tools/data/reports/agent_20260514_1330.md b/tools/data/reports/agent_20260514_1330.md
new file mode 100644
index 0000000000000000000000000000000000000000..3a28fa6561a76839d9f2f8e4a3681dacd9c61524
--- /dev/null
+++ b/tools/data/reports/agent_20260514_1330.md
@@ -0,0 +1,97 @@
+# Agent Report - SR Residual Width Audit
+**Date**: 2026-05-14 13:30  
+**Piano**: 117  
+**Tension explored**: BOUNDARY / prime-vs-mod6 residual (0.8)  
+**verdict**: CONSTRAINT - il residuo prime-specific dopo mod6 e' robusto come delta z vettoriale row-local; `SR` binario non e' un osservabile stabile del confine  
+observables_registry: 1.0.0-2026-05-06  
+observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, window_gaps, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p, trace_jsonl_event]  
+**observable_contract**: claim=`prime_minus_mod6_z_delta(SR,L1,triple_var)` sopravvive a seed, provider e ampiezza finestra; observable=delta z paired prime-minus-mod6 per `SR,L1,triple_var` piu audit `has_SR`; operator=`tools/exp_prime_vs_mod6_sr_boundary.py`; generator=prime gaps da `row_spacings("numeri_primi")` e `direct_sieve`, antagonisti `6k +/- 1` index-aligned e span-matched; denominator=3 ampiezze finestra x 2 provider x 4 offsets, paired contro 2 antagonisti mod6; non_possible=residuo prime-specific se il label-swap assorbe il delta z o se il delta collassa a presenza binaria `SR`; not_tested=origine analitica del delta, scale oltre 2048 gap, beta atlas globale, `V_c`, `gap_ratio`.
+
+## Prima impressione
+
+Il confine non sta nella presenza di `SR`. Sta nel fatto che la stessa riga provider-offset, attraversata da prime a `6k +/- 1`, conserva una differenza di intensita su tre osservabili mentre il verdict binario cambia con l'ampiezza.
+
+## Respiro fuori-tempo
+
+- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + QxG continuo/discreto + BOUNDARY + direzione `SR_residual_intensity_after_mod6`.
+- **Dipolo / punto-zero**: lattice candidato `6k +/- 1` / selezione prime. Punto-zero: riga provider-offset condivisa; la primalita e' l'unica selezione aggiunta.
+- **Piano superiore**: topologia assiomatica del bordo: un boundary operator non decide per presenza/assenza, ma per differenziale che resta dopo sottrazione del pre-bordo.
+- **Operatori laterali scelti**: boundary operator, perche' il bordo e' il luogo della sottrazione prime-minus-mod6; parallel transport, perche' provider e offset trasportano la stessa riga tra due classi senza cambiare denominatore.
+- **Contaminazione cognitiva**: CE-0001 / KSAR usato per reiterare il kernel del cycle 03:30; CE-0117 usato come cascata della possibilita': presenza `SR` -> delta z `SR` -> vettore `SR,L1,triple_var`.
+- **Proto-ipotesi**: il residuo prime-specific non e' una label, e' un differenziale vettoriale row-local; quando la finestra cambia, `has_SR` oscilla, ma il delta z resta il passaggio.
+- **Possibile / non-possibile**: possibile = formalizzare `prime_minus_mod6_z_vector` come osservabile dedicato; non-possibile = promuovere `SR` binario o il verdict nominale dello script a discriminatore del confine.
+- **Proiezione**: tre ampiezze finestra (`512,1024,2048`), stessi due provider, quattro offset per run, due antagonisti mod6, label-swap row-local e trace JSONL completa.
+
+## Aderenza alla direzione
+
+- `relation`: follows_direction
+- `why`: testa la robustezza del delta z row-local prime-minus-mod6 su piu ampiezze finestra, mantenendo provider, offset, label-swap audit e trace JSONL.
+- `not_drift`: non torna a `V_c`, GUE/Poisson, fit o vecchi depositi; stressa solo il residuo nominato dal valutatore dopo sottrazione mod6.
+
+## Claim Under Test
+
+> Dopo sottrazione del pre-bordo `6k +/- 1`, la selezione prime non genera `SR` come presenza; lascia un vettore di intensita row-local su `SR,L1,triple_var`.
+
+## Question
+
+Il delta z prime-minus-mod6 resta significativo quando cambia l'ampiezza della finestra, oppure era un artefatto del contratto 1024-gap del cycle 03:30?
+
+## Experiment Design
+
+- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`.
+- Run: `window_gaps=512,1024,2048`; seeds `202605141330,202605141331,202605141332`.
+- Rows per run: 8 prime windows = 2 provider x 4 offset.
+- Antagonisti: `mod6_index_aligned` e `mod6_span_matched`, paired per `row_id`.
+- Null: label-swap row-local, 4096 trials per pair audit.
+- Trace: JSONL scritto per tutti e tre i run.
+
+## Results
+
+| window | pair | prime SR | prime focus | Jaccard | SR delta | p(SR delta) | z_SR delta | p(z_SR) | z_L1 delta | p(z_L1) | z_triple_var delta | p(z_triple) | script verdict |
+|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
+| 512 | mod6_index | 5/8 | 2/8 | 0.250 | -0.250 | 0.6195 | 20.494 | 0.0095 | 21.866 | 0.0095 | 8.480 | 0.0095 | SR_NOT_DECISIVE |
+| 512 | mod6_span | 5/8 | 2/8 | 0.377 | -0.250 | 0.5038 | 13.993 | 0.0085 | 10.099 | 0.0085 | 7.505 | 0.0085 | SR_NOT_DECISIVE |
+| 1024 | mod6_index | 8/8 | 5/8 | 0.481 | 0.000 | 1.0000 | 29.480 | 0.0061 | 31.105 | 0.0061 | 11.745 | 0.0061 | SR_PREBOUNDARY |
+| 1024 | mod6_span | 8/8 | 5/8 | 0.377 | 0.250 | 0.4921 | 19.921 | 0.0076 | 15.302 | 0.0076 | 13.142 | 0.0076 | SR_PREBOUNDARY |
+| 2048 | mod6_index | 8/8 | 7/8 | 0.556 | 0.125 | 1.0000 | 41.634 | 0.0088 | 43.574 | 0.0088 | 17.173 | 0.0088 | SR_PRIME_SPECIFIC |
+| 2048 | mod6_span | 8/8 | 7/8 | 0.537 | 0.250 | 0.5040 | 28.624 | 0.0068 | 23.917 | 0.0068 | 17.491 | 0.0068 | SR_PRIME_SPECIFIC |
+
+## Key Findings
+
+1. **Verificato**: `has_SR` non replica come osservabile del residuo. A 512 gap i primi hanno `SR=5/8`; a 1024 e 2048 hanno `SR=8/8`. Il delta binario ha p non significativo o 1.0000.
+2. **Verificato**: il delta z `SR` replica in tutti i sei pair audit: `p=0.0061..0.0095`.
+3. **Verificato**: il delta z non e' solo `SR`. `L1` replica con `p=0.0061..0.0095`; `triple_var` replica con `p=0.0061..0.0095`.
+4. **Verificato**: il verdict nominale dello script oscilla con `window_gaps` (`not_decisive`, `preboundary`, `prime_specific`). Quell'oscillazione e' informazione sullo script: il verdict e' ancora centrato su commonality/binario, non sul vettore di intensita.
+5. **Inferito dal perimetro**: l'osservabile dedicato da formalizzare e' `prime_minus_mod6_z_vector(SR,L1,triple_var)`, con `has_SR` relegato ad audit negativo.
+
+## Verdict
+
+**CONSTRAINT / VECTOR RESIDUE**.
+
+Nel perimetro 512-2048 gap, due provider, quattro offset, due antagonisti mod6, il residuo prime-specific sopravvive come delta z vettoriale row-local. Non sopravvive come presenza binaria di `SR`, ne come verdict nominale dello script.
+
+## Bicono
+
+- **Due radici**: pre-bordo mod6 / selezione prime.
+- **Singolare**: riga provider-offset paired.
+- **Invariante di passaggio**: delta z positivo su `SR,L1,triple_var`.
+- **Campo di possibilita**: osservabile dedicato `prime_minus_mod6_z_vector`.
+- **Campo non-possibile**: `SR` binario come firma prime-specific dopo mod6.
+
+## Consecutio
+
+Il prossimo ciclo deve correggere il nodo regressivo dello script: il `verdict()` non deve decidere dalla commonality di `SR`, ma da un contratto vettoriale dichiarato (`SR,L1,triple_var`, segno del delta, p label-swap, denominatore row-local). Dopo questa correzione, scalare oltre 2048 gap e separare `mod6_index_aligned` da `mod6_span_matched` come antagonisti con ruoli diversi.
+
+## Ricadute pratiche
+
+ssp_value: yes. Le tre trace JSONL rendono auditabile il residuo senza riaprire i JSON aggregati; il prossimo passaggio pratico e' aggiornare lo script per emettere un verdict vettoriale, non binario.
+
+## Files
+
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl`
+- `tools/data/reports/agent_20260514_1330.md`

codex
Report scritto. Faccio solo una verifica finale dei file prodotti e del diff limitato, cosi' chiudo con deposito e artefatti tracciabili.
exec
/bin/bash -lc 'ls -lh tools/data/reports/agent_20260514_1330.md tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w*.json tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w*.trace.jsonl' in /opt/MM_D-ND
 succeeded in 0ms:
-rw-r--r-- 1 root root  45K May 14 13:31 tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json
-rw-r--r-- 1 root root  33K May 14 13:31 tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl
-rw-r--r-- 1 root root  45K May 14 13:31 tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json
-rw-r--r-- 1 root root  33K May 14 13:31 tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl
-rw-r--r-- 1 root root  45K May 14 13:31 tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json
-rw-r--r-- 1 root root  33K May 14 13:31 tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl
-rw-r--r-- 1 root root 7.6K May 14 13:32 tools/data/reports/agent_20260514_1330.md

exec
/bin/bash -lc "sed -n '1,260p' tools/data/reports/agent_20260514_1330.md" in /opt/MM_D-ND
 succeeded in 0ms:
# Agent Report - SR Residual Width Audit
**Date**: 2026-05-14 13:30  
**Piano**: 117  
**Tension explored**: BOUNDARY / prime-vs-mod6 residual (0.8)  
**verdict**: CONSTRAINT - il residuo prime-specific dopo mod6 e' robusto come delta z vettoriale row-local; `SR` binario non e' un osservabile stabile del confine  
observables_registry: 1.0.0-2026-05-06  
observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, window_gaps, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p, trace_jsonl_event]  
**observable_contract**: claim=`prime_minus_mod6_z_delta(SR,L1,triple_var)` sopravvive a seed, provider e ampiezza finestra; observable=delta z paired prime-minus-mod6 per `SR,L1,triple_var` piu audit `has_SR`; operator=`tools/exp_prime_vs_mod6_sr_boundary.py`; generator=prime gaps da `row_spacings("numeri_primi")` e `direct_sieve`, antagonisti `6k +/- 1` index-aligned e span-matched; denominator=3 ampiezze finestra x 2 provider x 4 offsets, paired contro 2 antagonisti mod6; non_possible=residuo prime-specific se il label-swap assorbe il delta z o se il delta collassa a presenza binaria `SR`; not_tested=origine analitica del delta, scale oltre 2048 gap, beta atlas globale, `V_c`, `gap_ratio`.

## Prima impressione

Il confine non sta nella presenza di `SR`. Sta nel fatto che la stessa riga provider-offset, attraversata da prime a `6k +/- 1`, conserva una differenza di intensita su tre osservabili mentre il verdict binario cambia con l'ampiezza.

## Respiro fuori-tempo

- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + QxG continuo/discreto + BOUNDARY + direzione `SR_residual_intensity_after_mod6`.
- **Dipolo / punto-zero**: lattice candidato `6k +/- 1` / selezione prime. Punto-zero: riga provider-offset condivisa; la primalita e' l'unica selezione aggiunta.
- **Piano superiore**: topologia assiomatica del bordo: un boundary operator non decide per presenza/assenza, ma per differenziale che resta dopo sottrazione del pre-bordo.
- **Operatori laterali scelti**: boundary operator, perche' il bordo e' il luogo della sottrazione prime-minus-mod6; parallel transport, perche' provider e offset trasportano la stessa riga tra due classi senza cambiare denominatore.
- **Contaminazione cognitiva**: CE-0001 / KSAR usato per reiterare il kernel del cycle 03:30; CE-0117 usato come cascata della possibilita': presenza `SR` -> delta z `SR` -> vettore `SR,L1,triple_var`.
- **Proto-ipotesi**: il residuo prime-specific non e' una label, e' un differenziale vettoriale row-local; quando la finestra cambia, `has_SR` oscilla, ma il delta z resta il passaggio.
- **Possibile / non-possibile**: possibile = formalizzare `prime_minus_mod6_z_vector` come osservabile dedicato; non-possibile = promuovere `SR` binario o il verdict nominale dello script a discriminatore del confine.
- **Proiezione**: tre ampiezze finestra (`512,1024,2048`), stessi due provider, quattro offset per run, due antagonisti mod6, label-swap row-local e trace JSONL completa.

## Aderenza alla direzione

- `relation`: follows_direction
- `why`: testa la robustezza del delta z row-local prime-minus-mod6 su piu ampiezze finestra, mantenendo provider, offset, label-swap audit e trace JSONL.
- `not_drift`: non torna a `V_c`, GUE/Poisson, fit o vecchi depositi; stressa solo il residuo nominato dal valutatore dopo sottrazione mod6.

## Claim Under Test

> Dopo sottrazione del pre-bordo `6k +/- 1`, la selezione prime non genera `SR` come presenza; lascia un vettore di intensita row-local su `SR,L1,triple_var`.

## Question

Il delta z prime-minus-mod6 resta significativo quando cambia l'ampiezza della finestra, oppure era un artefatto del contratto 1024-gap del cycle 03:30?

## Experiment Design

- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`.
- Run: `window_gaps=512,1024,2048`; seeds `202605141330,202605141331,202605141332`.
- Rows per run: 8 prime windows = 2 provider x 4 offset.
- Antagonisti: `mod6_index_aligned` e `mod6_span_matched`, paired per `row_id`.
- Null: label-swap row-local, 4096 trials per pair audit.
- Trace: JSONL scritto per tutti e tre i run.

## Results

| window | pair | prime SR | prime focus | Jaccard | SR delta | p(SR delta) | z_SR delta | p(z_SR) | z_L1 delta | p(z_L1) | z_triple_var delta | p(z_triple) | script verdict |
|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| 512 | mod6_index | 5/8 | 2/8 | 0.250 | -0.250 | 0.6195 | 20.494 | 0.0095 | 21.866 | 0.0095 | 8.480 | 0.0095 | SR_NOT_DECISIVE |
| 512 | mod6_span | 5/8 | 2/8 | 0.377 | -0.250 | 0.5038 | 13.993 | 0.0085 | 10.099 | 0.0085 | 7.505 | 0.0085 | SR_NOT_DECISIVE |
| 1024 | mod6_index | 8/8 | 5/8 | 0.481 | 0.000 | 1.0000 | 29.480 | 0.0061 | 31.105 | 0.0061 | 11.745 | 0.0061 | SR_PREBOUNDARY |
| 1024 | mod6_span | 8/8 | 5/8 | 0.377 | 0.250 | 0.4921 | 19.921 | 0.0076 | 15.302 | 0.0076 | 13.142 | 0.0076 | SR_PREBOUNDARY |
| 2048 | mod6_index | 8/8 | 7/8 | 0.556 | 0.125 | 1.0000 | 41.634 | 0.0088 | 43.574 | 0.0088 | 17.173 | 0.0088 | SR_PRIME_SPECIFIC |
| 2048 | mod6_span | 8/8 | 7/8 | 0.537 | 0.250 | 0.5040 | 28.624 | 0.0068 | 23.917 | 0.0068 | 17.491 | 0.0068 | SR_PRIME_SPECIFIC |

## Key Findings

1. **Verificato**: `has_SR` non replica come osservabile del residuo. A 512 gap i primi hanno `SR=5/8`; a 1024 e 2048 hanno `SR=8/8`. Il delta binario ha p non significativo o 1.0000.
2. **Verificato**: il delta z `SR` replica in tutti i sei pair audit: `p=0.0061..0.0095`.
3. **Verificato**: il delta z non e' solo `SR`. `L1` replica con `p=0.0061..0.0095`; `triple_var` replica con `p=0.0061..0.0095`.
4. **Verificato**: il verdict nominale dello script oscilla con `window_gaps` (`not_decisive`, `preboundary`, `prime_specific`). Quell'oscillazione e' informazione sullo script: il verdict e' ancora centrato su commonality/binario, non sul vettore di intensita.
5. **Inferito dal perimetro**: l'osservabile dedicato da formalizzare e' `prime_minus_mod6_z_vector(SR,L1,triple_var)`, con `has_SR` relegato ad audit negativo.

## Verdict

**CONSTRAINT / VECTOR RESIDUE**.

Nel perimetro 512-2048 gap, due provider, quattro offset, due antagonisti mod6, il residuo prime-specific sopravvive come delta z vettoriale row-local. Non sopravvive come presenza binaria di `SR`, ne come verdict nominale dello script.

## Bicono

- **Due radici**: pre-bordo mod6 / selezione prime.
- **Singolare**: riga provider-offset paired.
- **Invariante di passaggio**: delta z positivo su `SR,L1,triple_var`.
- **Campo di possibilita**: osservabile dedicato `prime_minus_mod6_z_vector`.
- **Campo non-possibile**: `SR` binario come firma prime-specific dopo mod6.

## Consecutio

Il prossimo ciclo deve correggere il nodo regressivo dello script: il `verdict()` non deve decidere dalla commonality di `SR`, ma da un contratto vettoriale dichiarato (`SR,L1,triple_var`, segno del delta, p label-swap, denominatore row-local). Dopo questa correzione, scalare oltre 2048 gap e separare `mod6_index_aligned` da `mod6_span_matched` come antagonisti con ruoli diversi.

## Ricadute pratiche

ssp_value: yes. Le tre trace JSONL rendono auditabile il residuo senza riaprire i JSON aggregati; il prossimo passaggio pratico e' aggiornare lo script per emettere un verdict vettoriale, non binario.

## Files

- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json`
- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl`
- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json`
- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl`
- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json`
- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl`
- `tools/data/reports/agent_20260514_1330.md`

exec
/bin/bash -lc 'git status --short tools/data/reports/agent_20260514_1330.md tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json' in /opt/MM_D-ND
 succeeded in 0ms:
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json
?? tools/data/reports/agent_20260514_1330.md

diff --git a/tools/data/reports/agent_20260514_1330.md b/tools/data/reports/agent_20260514_1330.md
new file mode 100644
index 0000000000000000000000000000000000000000..3a28fa6561a76839d9f2f8e4a3681dacd9c61524
--- /dev/null
+++ b/tools/data/reports/agent_20260514_1330.md
@@ -0,0 +1,97 @@
+# Agent Report - SR Residual Width Audit
+**Date**: 2026-05-14 13:30  
+**Piano**: 117  
+**Tension explored**: BOUNDARY / prime-vs-mod6 residual (0.8)  
+**verdict**: CONSTRAINT - il residuo prime-specific dopo mod6 e' robusto come delta z vettoriale row-local; `SR` binario non e' un osservabile stabile del confine  
+observables_registry: 1.0.0-2026-05-06  
+observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, window_gaps, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p, trace_jsonl_event]  
+**observable_contract**: claim=`prime_minus_mod6_z_delta(SR,L1,triple_var)` sopravvive a seed, provider e ampiezza finestra; observable=delta z paired prime-minus-mod6 per `SR,L1,triple_var` piu audit `has_SR`; operator=`tools/exp_prime_vs_mod6_sr_boundary.py`; generator=prime gaps da `row_spacings("numeri_primi")` e `direct_sieve`, antagonisti `6k +/- 1` index-aligned e span-matched; denominator=3 ampiezze finestra x 2 provider x 4 offsets, paired contro 2 antagonisti mod6; non_possible=residuo prime-specific se il label-swap assorbe il delta z o se il delta collassa a presenza binaria `SR`; not_tested=origine analitica del delta, scale oltre 2048 gap, beta atlas globale, `V_c`, `gap_ratio`.
+
+## Prima impressione
+
+Il confine non sta nella presenza di `SR`. Sta nel fatto che la stessa riga provider-offset, attraversata da prime a `6k +/- 1`, conserva una differenza di intensita su tre osservabili mentre il verdict binario cambia con l'ampiezza.
+
+## Respiro fuori-tempo
+
+- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + QxG continuo/discreto + BOUNDARY + direzione `SR_residual_intensity_after_mod6`.
+- **Dipolo / punto-zero**: lattice candidato `6k +/- 1` / selezione prime. Punto-zero: riga provider-offset condivisa; la primalita e' l'unica selezione aggiunta.
+- **Piano superiore**: topologia assiomatica del bordo: un boundary operator non decide per presenza/assenza, ma per differenziale che resta dopo sottrazione del pre-bordo.
+- **Operatori laterali scelti**: boundary operator, perche' il bordo e' il luogo della sottrazione prime-minus-mod6; parallel transport, perche' provider e offset trasportano la stessa riga tra due classi senza cambiare denominatore.
+- **Contaminazione cognitiva**: CE-0001 / KSAR usato per reiterare il kernel del cycle 03:30; CE-0117 usato come cascata della possibilita': presenza `SR` -> delta z `SR` -> vettore `SR,L1,triple_var`.
+- **Proto-ipotesi**: il residuo prime-specific non e' una label, e' un differenziale vettoriale row-local; quando la finestra cambia, `has_SR` oscilla, ma il delta z resta il passaggio.
+- **Possibile / non-possibile**: possibile = formalizzare `prime_minus_mod6_z_vector` come osservabile dedicato; non-possibile = promuovere `SR` binario o il verdict nominale dello script a discriminatore del confine.
+- **Proiezione**: tre ampiezze finestra (`512,1024,2048`), stessi due provider, quattro offset per run, due antagonisti mod6, label-swap row-local e trace JSONL completa.
+
+## Aderenza alla direzione
+
+- `relation`: follows_direction
+- `why`: testa la robustezza del delta z row-local prime-minus-mod6 su piu ampiezze finestra, mantenendo provider, offset, label-swap audit e trace JSONL.
+- `not_drift`: non torna a `V_c`, GUE/Poisson, fit o vecchi depositi; stressa solo il residuo nominato dal valutatore dopo sottrazione mod6.
+
+## Claim Under Test
+
+> Dopo sottrazione del pre-bordo `6k +/- 1`, la selezione prime non genera `SR` come presenza; lascia un vettore di intensita row-local su `SR,L1,triple_var`.
+
+## Question
+
+Il delta z prime-minus-mod6 resta significativo quando cambia l'ampiezza della finestra, oppure era un artefatto del contratto 1024-gap del cycle 03:30?
+
+## Experiment Design
+
+- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`.
+- Run: `window_gaps=512,1024,2048`; seeds `202605141330,202605141331,202605141332`.
+- Rows per run: 8 prime windows = 2 provider x 4 offset.
+- Antagonisti: `mod6_index_aligned` e `mod6_span_matched`, paired per `row_id`.
+- Null: label-swap row-local, 4096 trials per pair audit.
+- Trace: JSONL scritto per tutti e tre i run.
+
+## Results
+
+| window | pair | prime SR | prime focus | Jaccard | SR delta | p(SR delta) | z_SR delta | p(z_SR) | z_L1 delta | p(z_L1) | z_triple_var delta | p(z_triple) | script verdict |
+|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
+| 512 | mod6_index | 5/8 | 2/8 | 0.250 | -0.250 | 0.6195 | 20.494 | 0.0095 | 21.866 | 0.0095 | 8.480 | 0.0095 | SR_NOT_DECISIVE |
+| 512 | mod6_span | 5/8 | 2/8 | 0.377 | -0.250 | 0.5038 | 13.993 | 0.0085 | 10.099 | 0.0085 | 7.505 | 0.0085 | SR_NOT_DECISIVE |
+| 1024 | mod6_index | 8/8 | 5/8 | 0.481 | 0.000 | 1.0000 | 29.480 | 0.0061 | 31.105 | 0.0061 | 11.745 | 0.0061 | SR_PREBOUNDARY |
+| 1024 | mod6_span | 8/8 | 5/8 | 0.377 | 0.250 | 0.4921 | 19.921 | 0.0076 | 15.302 | 0.0076 | 13.142 | 0.0076 | SR_PREBOUNDARY |
+| 2048 | mod6_index | 8/8 | 7/8 | 0.556 | 0.125 | 1.0000 | 41.634 | 0.0088 | 43.574 | 0.0088 | 17.173 | 0.0088 | SR_PRIME_SPECIFIC |
+| 2048 | mod6_span | 8/8 | 7/8 | 0.537 | 0.250 | 0.5040 | 28.624 | 0.0068 | 23.917 | 0.0068 | 17.491 | 0.0068 | SR_PRIME_SPECIFIC |
+
+## Key Findings
+
+1. **Verificato**: `has_SR` non replica come osservabile del residuo. A 512 gap i primi hanno `SR=5/8`; a 1024 e 2048 hanno `SR=8/8`. Il delta binario ha p non significativo o 1.0000.
+2. **Verificato**: il delta z `SR` replica in tutti i sei pair audit: `p=0.0061..0.0095`.
+3. **Verificato**: il delta z non e' solo `SR`. `L1` replica con `p=0.0061..0.0095`; `triple_var` replica con `p=0.0061..0.0095`.
+4. **Verificato**: il verdict nominale dello script oscilla con `window_gaps` (`not_decisive`, `preboundary`, `prime_specific`). Quell'oscillazione e' informazione sullo script: il verdict e' ancora centrato su commonality/binario, non sul vettore di intensita.
+5. **Inferito dal perimetro**: l'osservabile dedicato da formalizzare e' `prime_minus_mod6_z_vector(SR,L1,triple_var)`, con `has_SR` relegato ad audit negativo.
+
+## Verdict
+
+**CONSTRAINT / VECTOR RESIDUE**.
+
+Nel perimetro 512-2048 gap, due provider, quattro offset, due antagonisti mod6, il residuo prime-specific sopravvive come delta z vettoriale row-local. Non sopravvive come presenza binaria di `SR`, ne come verdict nominale dello script.
+
+## Bicono
+
+- **Due radici**: pre-bordo mod6 / selezione prime.
+- **Singolare**: riga provider-offset paired.
+- **Invariante di passaggio**: delta z positivo su `SR,L1,triple_var`.
+- **Campo di possibilita**: osservabile dedicato `prime_minus_mod6_z_vector`.
+- **Campo non-possibile**: `SR` binario come firma prime-specific dopo mod6.
+
+## Consecutio
+
+Il prossimo ciclo deve correggere il nodo regressivo dello script: il `verdict()` non deve decidere dalla commonality di `SR`, ma da un contratto vettoriale dichiarato (`SR,L1,triple_var`, segno del delta, p label-swap, denominatore row-local). Dopo questa correzione, scalare oltre 2048 gap e separare `mod6_index_aligned` da `mod6_span_matched` come antagonisti con ruoli diversi.
+
+## Ricadute pratiche
+
+ssp_value: yes. Le tre trace JSONL rendono auditabile il residuo senza riaprire i JSON aggregati; il prossimo passaggio pratico e' aggiornare lo script per emettere un verdict vettoriale, non binario.
+
+## Files
+
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl`
+- `tools/data/reports/agent_20260514_1330.md`

codex
Eseguito il cycle e scritto il report in:

[agent_20260514_1330.md](/opt/MM_D-ND/tools/data/reports/agent_20260514_1330.md)

Ho prodotto anche i tre output sperimentali con trace JSONL per `window_gaps=512,1024,2048` sotto `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_*`.

Risultante: `SR` binario non regge come discriminatore stabile dopo mod6; il residuo che replica e' il delta z vettoriale row-local su `SR,L1,triple_var`. Non ho modificato il seme o `latest.md`; ho lasciato solo report e artefatti del run.
diff --git a/tools/data/reports/agent_20260514_1330.md b/tools/data/reports/agent_20260514_1330.md
new file mode 100644
index 0000000000000000000000000000000000000000..3a28fa6561a76839d9f2f8e4a3681dacd9c61524
--- /dev/null
+++ b/tools/data/reports/agent_20260514_1330.md
@@ -0,0 +1,97 @@
+# Agent Report - SR Residual Width Audit
+**Date**: 2026-05-14 13:30  
+**Piano**: 117  
+**Tension explored**: BOUNDARY / prime-vs-mod6 residual (0.8)  
+**verdict**: CONSTRAINT - il residuo prime-specific dopo mod6 e' robusto come delta z vettoriale row-local; `SR` binario non e' un osservabile stabile del confine  
+observables_registry: 1.0.0-2026-05-06  
+observables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, window_gaps, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p, trace_jsonl_event]  
+**observable_contract**: claim=`prime_minus_mod6_z_delta(SR,L1,triple_var)` sopravvive a seed, provider e ampiezza finestra; observable=delta z paired prime-minus-mod6 per `SR,L1,triple_var` piu audit `has_SR`; operator=`tools/exp_prime_vs_mod6_sr_boundary.py`; generator=prime gaps da `row_spacings("numeri_primi")` e `direct_sieve`, antagonisti `6k +/- 1` index-aligned e span-matched; denominator=3 ampiezze finestra x 2 provider x 4 offsets, paired contro 2 antagonisti mod6; non_possible=residuo prime-specific se il label-swap assorbe il delta z o se il delta collassa a presenza binaria `SR`; not_tested=origine analitica del delta, scale oltre 2048 gap, beta atlas globale, `V_c`, `gap_ratio`.
+
+## Prima impressione
+
+Il confine non sta nella presenza di `SR`. Sta nel fatto che la stessa riga provider-offset, attraversata da prime a `6k +/- 1`, conserva una differenza di intensita su tre osservabili mentre il verdict binario cambia con l'ampiezza.
+
+## Respiro fuori-tempo
+
+- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + QxG continuo/discreto + BOUNDARY + direzione `SR_residual_intensity_after_mod6`.
+- **Dipolo / punto-zero**: lattice candidato `6k +/- 1` / selezione prime. Punto-zero: riga provider-offset condivisa; la primalita e' l'unica selezione aggiunta.
+- **Piano superiore**: topologia assiomatica del bordo: un boundary operator non decide per presenza/assenza, ma per differenziale che resta dopo sottrazione del pre-bordo.
+- **Operatori laterali scelti**: boundary operator, perche' il bordo e' il luogo della sottrazione prime-minus-mod6; parallel transport, perche' provider e offset trasportano la stessa riga tra due classi senza cambiare denominatore.
+- **Contaminazione cognitiva**: CE-0001 / KSAR usato per reiterare il kernel del cycle 03:30; CE-0117 usato come cascata della possibilita': presenza `SR` -> delta z `SR` -> vettore `SR,L1,triple_var`.
+- **Proto-ipotesi**: il residuo prime-specific non e' una label, e' un differenziale vettoriale row-local; quando la finestra cambia, `has_SR` oscilla, ma il delta z resta il passaggio.
+- **Possibile / non-possibile**: possibile = formalizzare `prime_minus_mod6_z_vector` come osservabile dedicato; non-possibile = promuovere `SR` binario o il verdict nominale dello script a discriminatore del confine.
+- **Proiezione**: tre ampiezze finestra (`512,1024,2048`), stessi due provider, quattro offset per run, due antagonisti mod6, label-swap row-local e trace JSONL completa.
+
+## Aderenza alla direzione
+
+- `relation`: follows_direction
+- `why`: testa la robustezza del delta z row-local prime-minus-mod6 su piu ampiezze finestra, mantenendo provider, offset, label-swap audit e trace JSONL.
+- `not_drift`: non torna a `V_c`, GUE/Poisson, fit o vecchi depositi; stressa solo il residuo nominato dal valutatore dopo sottrazione mod6.
+
+## Claim Under Test
+
+> Dopo sottrazione del pre-bordo `6k +/- 1`, la selezione prime non genera `SR` come presenza; lascia un vettore di intensita row-local su `SR,L1,triple_var`.
+
+## Question
+
+Il delta z prime-minus-mod6 resta significativo quando cambia l'ampiezza della finestra, oppure era un artefatto del contratto 1024-gap del cycle 03:30?
+
+## Experiment Design
+
+- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`.
+- Run: `window_gaps=512,1024,2048`; seeds `202605141330,202605141331,202605141332`.
+- Rows per run: 8 prime windows = 2 provider x 4 offset.
+- Antagonisti: `mod6_index_aligned` e `mod6_span_matched`, paired per `row_id`.
+- Null: label-swap row-local, 4096 trials per pair audit.
+- Trace: JSONL scritto per tutti e tre i run.
+
+## Results
+
+| window | pair | prime SR | prime focus | Jaccard | SR delta | p(SR delta) | z_SR delta | p(z_SR) | z_L1 delta | p(z_L1) | z_triple_var delta | p(z_triple) | script verdict |
+|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
+| 512 | mod6_index | 5/8 | 2/8 | 0.250 | -0.250 | 0.6195 | 20.494 | 0.0095 | 21.866 | 0.0095 | 8.480 | 0.0095 | SR_NOT_DECISIVE |
+| 512 | mod6_span | 5/8 | 2/8 | 0.377 | -0.250 | 0.5038 | 13.993 | 0.0085 | 10.099 | 0.0085 | 7.505 | 0.0085 | SR_NOT_DECISIVE |
+| 1024 | mod6_index | 8/8 | 5/8 | 0.481 | 0.000 | 1.0000 | 29.480 | 0.0061 | 31.105 | 0.0061 | 11.745 | 0.0061 | SR_PREBOUNDARY |
+| 1024 | mod6_span | 8/8 | 5/8 | 0.377 | 0.250 | 0.4921 | 19.921 | 0.0076 | 15.302 | 0.0076 | 13.142 | 0.0076 | SR_PREBOUNDARY |
+| 2048 | mod6_index | 8/8 | 7/8 | 0.556 | 0.125 | 1.0000 | 41.634 | 0.0088 | 43.574 | 0.0088 | 17.173 | 0.0088 | SR_PRIME_SPECIFIC |
+| 2048 | mod6_span | 8/8 | 7/8 | 0.537 | 0.250 | 0.5040 | 28.624 | 0.0068 | 23.917 | 0.0068 | 17.491 | 0.0068 | SR_PRIME_SPECIFIC |
+
+## Key Findings
+
+1. **Verificato**: `has_SR` non replica come osservabile del residuo. A 512 gap i primi hanno `SR=5/8`; a 1024 e 2048 hanno `SR=8/8`. Il delta binario ha p non significativo o 1.0000.
+2. **Verificato**: il delta z `SR` replica in tutti i sei pair audit: `p=0.0061..0.0095`.
+3. **Verificato**: il delta z non e' solo `SR`. `L1` replica con `p=0.0061..0.0095`; `triple_var` replica con `p=0.0061..0.0095`.
+4. **Verificato**: il verdict nominale dello script oscilla con `window_gaps` (`not_decisive`, `preboundary`, `prime_specific`). Quell'oscillazione e' informazione sullo script: il verdict e' ancora centrato su commonality/binario, non sul vettore di intensita.
+5. **Inferito dal perimetro**: l'osservabile dedicato da formalizzare e' `prime_minus_mod6_z_vector(SR,L1,triple_var)`, con `has_SR` relegato ad audit negativo.
+
+## Verdict
+
+**CONSTRAINT / VECTOR RESIDUE**.
+
+Nel perimetro 512-2048 gap, due provider, quattro offset, due antagonisti mod6, il residuo prime-specific sopravvive come delta z vettoriale row-local. Non sopravvive come presenza binaria di `SR`, ne come verdict nominale dello script.
+
+## Bicono
+
+- **Due radici**: pre-bordo mod6 / selezione prime.
+- **Singolare**: riga provider-offset paired.
+- **Invariante di passaggio**: delta z positivo su `SR,L1,triple_var`.
+- **Campo di possibilita**: osservabile dedicato `prime_minus_mod6_z_vector`.
+- **Campo non-possibile**: `SR` binario come firma prime-specific dopo mod6.
+
+## Consecutio
+
+Il prossimo ciclo deve correggere il nodo regressivo dello script: il `verdict()` non deve decidere dalla commonality di `SR`, ma da un contratto vettoriale dichiarato (`SR,L1,triple_var`, segno del delta, p label-swap, denominatore row-local). Dopo questa correzione, scalare oltre 2048 gap e separare `mod6_index_aligned` da `mod6_span_matched` come antagonisti con ruoli diversi.
+
+## Ricadute pratiche
+
+ssp_value: yes. Le tre trace JSONL rendono auditabile il residuo senza riaprire i JSON aggregati; il prossimo passaggio pratico e' aggiornare lo script per emettere un verdict vettoriale, non binario.
+
+## Files
+
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json`
+- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl`
+- `tools/data/reports/agent_20260514_1330.md`

tokens used
159,845
Eseguito il cycle e scritto il report in:

[agent_20260514_1330.md](/opt/MM_D-ND/tools/data/reports/agent_20260514_1330.md)

Ho prodotto anche i tre output sperimentali con trace JSONL per `window_gaps=512,1024,2048` sotto `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_*`.

Risultante: `SR` binario non regge come discriminatore stabile dopo mod6; il residuo che replica e' il delta z vettoriale row-local su `SR,L1,triple_var`. Non ho modificato il seme o `latest.md`; ho lasciato solo report e artefatti del run.
