diff --git a/.gitignore b/.gitignore index 5e3f6474..b38986da 100644 --- a/.gitignore +++ b/.gitignore @@ -64,12 +64,19 @@ data/*.iso **/_build/ **/__pycache__/ +# Agda build artifacts +*.agdai + # Hardware/FPGA build artifacts **/obj_dir/ **/hardware/sparkle/tangnano9k/*.fs **/hardware/sparkle/tangnano9k/*.pnr.json **/hardware/sparkle/tangnano9k/*.history **/hardware/sparkle/tangnano9k/sparkle_tangnano9k.json +4-Infrastructure/hardware/tangnano9k/ +4-Infrastructure/hardware/tangnano9k_*.fs +4-Infrastructure/hardware/tangnano9k_*.json +4-Infrastructure/hardware/tangnano9k_*_pnr.json *.vcd *_tb.v *_test_vectors.json @@ -89,6 +96,10 @@ shared-data/ **/target/ tools/servo-fetch/ +# Local runtime sandboxes +**/.sandbox-home/ +**/.sandbox-tmp/ + # JavaScript build artifacts **/node_modules/ @@ -112,12 +123,72 @@ extensions/ 2-Search-Space/PINNs/ 2-Search-Space/alphageometry/ 2-Search-Space/neural-conservation-law/ +2-Search-Space/search/stract/crates/optics/testcases/samples/ 6-Documentation/papers/Downloads_from_internet/ 6-Documentation/papers/downloads/ 6-Documentation/papers/facebook_pdfs/ 6-Documentation/papers/literature/ 6-Documentation/papers/supporting-materials/ +# Generated benchmark corpora and run outputs. +3-Mathematical-Models/dna_benchmark/**/corpus/ +3-Mathematical-Models/dna_benchmark/results/ +3-Mathematical-Models/dna_benchmark/**/compressor_manifold.json +3-Mathematical-Models/dna_benchmark/**/eigenvalue_survey.json +3-Mathematical-Models/equations_parquet_tagged/*_curriculum.jsonl +3-Mathematical-Models/equations_parquet_tagged/*_receipt.json +3-Mathematical-Models/equations_parquet_tagged/*_table.csv +3-Mathematical-Models/unified_surface/cache/ + +# Generated shim/app run bundles. +4-Infrastructure/shim/erdos_surface_orchestrator/out/ +4-Infrastructure/shim/*_after.json +4-Infrastructure/shim/*_benchmarks.csv +4-Infrastructure/shim/*_before.json +4-Infrastructure/shim/*_bit.json +4-Infrastructure/shim/*_checkpoint.json +4-Infrastructure/shim/*_compression.json +4-Infrastructure/shim/*_curriculum.jsonl +4-Infrastructure/shim/*_eigenvectors.json +4-Infrastructure/shim/*_lut.json +4-Infrastructure/shim/*_manifest.jsonl +4-Infrastructure/shim/*_packages.json +4-Infrastructure/shim/*_packets.jsonl +4-Infrastructure/shim/*_pull.json +4-Infrastructure/shim/*_receipt.json +4-Infrastructure/shim/*_receipt_*.json +4-Infrastructure/shim/*_report.json +4-Infrastructure/shim/*_responses.jsonl +4-Infrastructure/shim/*_results.json +4-Infrastructure/shim/*_sft.jsonl +4-Infrastructure/shim/*_smoke.json +4-Infrastructure/shim/*_stream.bin +4-Infrastructure/shim/finance_claim_remote_bundle/ +4-Infrastructure/shim/finance_claim_lut_fixtures/claim-*/ +4-Infrastructure/shim/finance_claim_lut_fixtures/*.pdf +4-Infrastructure/shim/full_gambit_runs/ +4-Infrastructure/shim/h200_encode_dry_run/ +4-Infrastructure/shim/offload_receipts/ +4-Infrastructure/shim/parallel_metaprobe_runs/ +4-Infrastructure/shim/tang9k_pbacs_receipts/ +5-Applications/linear-native-tauri/gen/ + +# Generated hardware probe products. +4-Infrastructure/hardware/batch_results/ +4-Infrastructure/hardware/*_receipt.json +4-Infrastructure/hardware/*.png +4-Infrastructure/hardware/*.pdf +4-Infrastructure/hardware/metamanifold_prover.json + +# Local documentation exports and downloaded references. +6-Documentation/chat-log-dumps/ +6-Documentation/docs/reference-videos/ +6-Documentation/docs/x86_64_specs/*.pdf +6-Documentation/docs/x86_64_specs/*.txt +6-Documentation/reports/jupyter-books/ +6-Documentation/reports/typst/*.pdf +5-Applications/text-to-cad/models/.*/ + # Kernel module build artifacts *.ko *.mod diff --git a/5-Applications/scripts/adaptive_research_analysis.py b/5-Applications/scripts/adaptive_research_analysis.py new file mode 100644 index 00000000..9ab733fe --- /dev/null +++ b/5-Applications/scripts/adaptive_research_analysis.py @@ -0,0 +1,334 @@ +#!/usr/bin/env python3 +# /// script +# requires-python = ">=3.10" +# dependencies = ["requests", "rich"] +# /// +""" +Adaptive Research Stack Analyzer +Uses Ollama Cloud API to run a three-pass analysis: + 1. Summarize - distill key ideas from core documents + 2. Cross-link - find connections across domains + 3. Critique - identify gaps, weak claims, missing proofs + +Usage: + uv run scripts/adaptive_research_analysis.py + uv run scripts/adaptive_research_analysis.py --model gemma3:12b --out /tmp/analysis.md +""" + +import argparse +import datetime +import json +import os +import sys +import textwrap +from pathlib import Path + +import requests +from rich.console import Console +from rich.markdown import Markdown +from rich.panel import Panel +from rich.progress import Progress, SpinnerColumn, TextColumn + +# --------------------------------------------------------------------------- +# Config +# --------------------------------------------------------------------------- +RESEARCH_ROOT = Path("/home/allaun/Documents/Research Stack") +API_BASE = "https://ollama.com/v1" +API_KEY = os.environ.get("OLLAMA_API_KEY", "") +# Model priority: cogito (Cognition 671B) → qwen3-next (80B) → gemma4 (31B) → deepseek-v4-flash +DEFAULT_MODEL = "cogito-2.1:671b" +FALLBACK_CHAIN = ["qwen3-next:80b", "gemma4:31b", "deepseek-v4-flash"] + +# Key documents to feed into the analysis (relative to RESEARCH_ROOT) +CORE_DOCS = [ + "README.md", + "CONCEPTS.md", + "ARCHITECTURE.md", + "SIGNAL_THEORY_COMPENDIUM.md", + "6-Documentation/EXPLANATION_FOR_HUMANS.md", + "6-Documentation/MATH_CORE.md", + "6-Documentation/VISION_NORTH_STAR.md", + "6-Documentation/GLOSSARY.md", + "6-Documentation/FIRST_PRINCIPLES_DAG.md", + "6-Documentation/FIELD_EQUATION_COMPARISON.md", + "6-Documentation/docs/SKEPTICISM_GRADIENT_REASSESSMENT_2026-04-29.md", + "6-Documentation/docs/CLAIM_STATE_AUDIT_2026-05-05.md", + "6-Documentation/docs/IMPLEMENTATION_ATTACK_ANALYSIS.md", + "6-Documentation/docs/ENE_RESEARCH_TOPIC_CANDIDATES.md", + "6-Documentation/docs/OTOM_V1_PAPER_STRUCTURE_AND_NEXT_GEN_SIMULATOR.md", + "6-Documentation/docs/stack_solidification_staging_manifest_2026-05-10.md", + "6-Documentation/docs/cross_domain_adaptation_numeric_review.md", + "6-Documentation/docs/BAD_MATH_CLEANUP_REPORT.md", +] + +DOMAIN_DIRS = { + "Core Formalism (Lean)": "0-Core-Formalism", + "Distributed Systems": "1-Distributed-Systems", + "Search Space": "2-Search-Space", + "Mathematical Models": "3-Mathematical-Models", + "Infrastructure / FPGA": "4-Infrastructure", + "Applications": "5-Applications", + "Documentation": "6-Documentation/docs", +} + +MAX_CHARS_PER_DOC = 8_000 # truncate individual docs (DeepSeek handles large context) +MAX_CONTEXT_CHARS = 120_000 # total context fed per LLM call + +console = Console() + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def load_doc(path: Path, max_chars: int = MAX_CHARS_PER_DOC) -> str: + try: + text = path.read_text(errors="replace") + if len(text) > max_chars: + text = text[:max_chars] + f"\n\n[... truncated at {max_chars} chars ...]" + return text + except Exception as e: + return f"[Could not read {path}: {e}]" + + +def gather_context() -> str: + """Load core docs and first-file samples from each domain directory.""" + parts = [] + + # Core documents + for rel in CORE_DOCS: + p = RESEARCH_ROOT / rel + if p.exists(): + parts.append(f"\n\n---\n## FILE: {rel}\n\n{load_doc(p)}") + + # Domain directory samples — grab up to 3 .md files per domain + for domain, rel_dir in DOMAIN_DIRS.items(): + d = RESEARCH_ROOT / rel_dir + if not d.is_dir(): + continue + md_files = sorted(d.glob("*.md"))[:3] + for mdf in md_files: + rel_path = mdf.relative_to(RESEARCH_ROOT) + parts.append(f"\n\n---\n## FILE [{domain}]: {rel_path}\n\n{load_doc(mdf, 3000)}") + + combined = "\n".join(parts) + if len(combined) > MAX_CONTEXT_CHARS: + combined = combined[:MAX_CONTEXT_CHARS] + "\n\n[... context truncated ...]" + return combined + + +def chat(model: str, system: str, user: str, label: str, retries: int = 3) -> str: + """Call Ollama Cloud chat completions endpoint with retry + fallback.""" + import time + + headers = { + "Authorization": f"Bearer {API_KEY}", + "Content-Type": "application/json", + } + + models_to_try = [model] + [m for m in FALLBACK_CHAIN if m != model] + + for attempt_model in models_to_try: + payload = { + "model": attempt_model, + "messages": [ + {"role": "system", "content": system}, + {"role": "user", "content": user}, + ], + "stream": False, + "options": {"temperature": 0.3, "num_predict": 8192}, + } + for attempt in range(1, retries + 1): + with Progress( + SpinnerColumn(), + TextColumn(f"[bold cyan]{label}[/bold cyan] (model: {attempt_model}, attempt {attempt}/{retries}) ..."), + transient=True, + console=console, + ) as progress: + progress.add_task("", total=None) + try: + resp = requests.post( + f"{API_BASE}/chat/completions", + headers=headers, + json=payload, + timeout=600, + ) + except requests.exceptions.Timeout: + console.print(f"[yellow]Timeout on attempt {attempt}, retrying...[/yellow]") + time.sleep(5 * attempt) + continue + + if resp.status_code == 200: + data = resp.json() + content = data["choices"][0]["message"]["content"] + # Strip ... reasoning blocks if present + import re + content = re.sub(r".*?", "", content, flags=re.DOTALL).strip() + return content + + error_body = resp.text[:300] + if "overloaded" in error_body.lower() or resp.status_code in (503, 429): + wait = 10 * attempt + console.print(f"[yellow]Server overloaded (attempt {attempt}), waiting {wait}s...[/yellow]") + time.sleep(wait) + elif resp.status_code == 500: + console.print(f"[yellow]500 error with {attempt_model}, trying next model...[/yellow]") + break # try fallback model + else: + console.print(f"[red]API error {resp.status_code}:[/red] {error_body}") + sys.exit(1) + + console.print(f"[yellow]Exhausted retries for {attempt_model}, trying fallback...[/yellow]") + + console.print("[red]All models failed. Aborting.[/red]") + sys.exit(1) + + +# --------------------------------------------------------------------------- +# Analysis passes +# --------------------------------------------------------------------------- + +SYSTEM_BASE = """\ +You are an expert research analyst reviewing a cutting-edge research stack called OTOM \ +(One-Time Operations on Manifolds / Ultra-low-power zero-decimal data routing). \ +The stack spans Lean 4 formal proofs, FPGA hardware, distributed systems, genomics, \ +astrophysics, signal theory, and compression mathematics. \ +Be precise, technical, and honest. Do NOT hallucinate citations. \ +When you are uncertain, say so explicitly.\ +""" + + +def pass_summarize(model: str, context: str) -> str: + system = SYSTEM_BASE + """ + +Your task: SUMMARIZE. +Produce a structured executive summary of this research stack covering: +1. Core thesis and central claims +2. Mathematical foundations (key equations, structures, proof techniques) +3. Hardware targets and implementation status +4. Applied domains (compression, genomics, astrophysics, etc.) +5. Current maturity level — what is proven vs speculative +Keep each section under 250 words. Use markdown headers. +""" + user = f"Here is the research stack content:\n\n{context}\n\nProduce the structured summary now." + return chat(model, system, user, "Pass 1: Summarize") + + +def pass_crosslink(model: str, context: str, summary: str) -> str: + system = SYSTEM_BASE + """ + +Your task: CROSS-DOMAIN LINKING. +Given the research content and the summary already produced, identify: +1. Non-obvious connections between domains (e.g. genomics ↔ topology, signal theory ↔ FPGA routing) +2. Concepts that appear in multiple domains under different names (unification opportunities) +3. Mathematical structures that bridge multiple layers of the stack +4. Any surprising overlaps with known external research (mention without fabricating citations) +Format as a markdown table + narrative explanation for each link found. +""" + user = f"Summary:\n{summary}\n\n---\nFull context:\n{context}\n\nIdentify cross-domain links now." + return chat(model, system, user, "Pass 2: Cross-link") + + +def pass_critique(model: str, context: str, summary: str) -> str: + system = SYSTEM_BASE + """ + +Your task: CRITIQUE AND GAP ANALYSIS. +Be rigorous and honest. Identify: +1. Claims that lack formal proof or empirical validation — flag each clearly +2. Mathematical steps that appear hand-wavy or unjustified +3. Research gaps: important questions the stack does not yet address +4. Risks: places where the stack's assumptions could break down +5. Recommended next experiments or proof targets +Be constructive but unflinching. A weak critique is useless. +Format with severity tags: [CRITICAL], [MODERATE], [MINOR]. +""" + user = f"Summary:\n{summary}\n\n---\nFull context:\n{context}\n\nDeliver the critique now." + return chat(model, system, user, "Pass 3: Critique") + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + +def main(): + parser = argparse.ArgumentParser(description="Adaptive Research Stack Analyzer") + parser.add_argument("--model", default=DEFAULT_MODEL, + help=f"Ollama Cloud model to use (default: {DEFAULT_MODEL}, fallback chain: {FALLBACK_CHAIN})") + parser.add_argument("--out", default=None, + help="Output markdown file path (default: auto-named in Research Stack)") + parser.add_argument("--list-models", action="store_true", + help="List available Ollama Cloud models and exit") + args = parser.parse_args() + + if not API_KEY: + console.print("[red]Set OLLAMA_API_KEY before calling the Ollama Cloud API.[/red]") + sys.exit(1) + + if args.list_models: + resp = requests.get( + "https://ollama.com/api/tags", + headers={"Authorization": f"Bearer {API_KEY}"}, + timeout=30, + ) + models = [m["name"] for m in resp.json().get("models", [])] + console.print("\n".join(sorted(models))) + return + + console.rule("[bold green]Adaptive Research Stack Analyzer[/bold green]") + console.print(f"Model: [bold]{args.model}[/bold] Root: {RESEARCH_ROOT}\n") + + # --- Gather context + console.print("[dim]Gathering research documents...[/dim]") + context = gather_context() + char_count = len(context) + console.print(f"[dim]Context: {char_count:,} chars across core docs + domain samples[/dim]\n") + + # --- Three passes + summary = pass_summarize(args.model, context) + crosslink = pass_crosslink(args.model, context, summary) + critique = pass_critique(args.model, context, summary) + + # --- Assemble report + timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + report = f"""# Adaptive Research Analysis Report +*Generated: {timestamp} | Model: {args.model}* + +--- + +## Pass 1 — Executive Summary + +{summary} + +--- + +## Pass 2 — Cross-Domain Links + +{crosslink} + +--- + +## Pass 3 — Critique & Gap Analysis + +{critique} + +--- +*Analysis performed by `scripts/adaptive_research_analysis.py` using Ollama Cloud API.* +""" + + # --- Output + if args.out: + out_path = Path(args.out) + else: + date_str = datetime.datetime.now().strftime("%Y-%m-%d") + out_path = RESEARCH_ROOT / "6-Documentation" / "docs" / "reports" / f"adaptive_analysis_{date_str}.md" + out_path.parent.mkdir(parents=True, exist_ok=True) + + out_path.write_text(report) + + console.rule("[bold green]Analysis Complete[/bold green]") + console.print(f"\nReport saved to: [bold]{out_path}[/bold]\n") + console.print(Markdown(report[:6000] + ("\n\n*[report truncated for display — see file for full output]*" if len(report) > 6000 else ""))) + + +if __name__ == "__main__": + main() diff --git a/5-Applications/scripts/eigengate_paradigm_analysis.py b/5-Applications/scripts/eigengate_paradigm_analysis.py new file mode 100644 index 00000000..174b65c7 --- /dev/null +++ b/5-Applications/scripts/eigengate_paradigm_analysis.py @@ -0,0 +1,342 @@ +#!/usr/bin/env python3 +# /// script +# requires-python = ">=3.10" +# dependencies = ["requests", "rich"] +# /// +""" +EigenGate Paradigm Analysis +Re-runs the three-pass adaptive analysis (summarize / cross-link / critique) +with the EigenGate as the central lens. + +Context loaded: + - Kernel/EigenGate.lean + GateChain.lean (the new paradigm) + - HCMMR/Core.lean + Bridge.lean + Manifest.lean (the old Gate typeclass) + - HCMMR/Laws/ (14, 15, 15E, 16, 17, 18) + - HCMMR/Kernels/ (RecamanFieldStep, FAMMScarMemory, PrimeGearCache, SNRAnomalyDetector) + - HCMMR/v0_2_Roadmap.md + - Core/ layer (FoldedPointManifold, UnderverseZeroLayer, QuantumFoamBoundary, + S3CProjectedGeodesicResolution, PathEpigeneticManifold) + - FAMM.lean, ReceiptCore.lean, FixedPoint.lean (substrate) + +The three passes ask: + 1. SUMMARIZE — what does the EigenGate paradigm actually unify? + 2. CROSS-LINK — where does ∥G·s − s∥ ≤ τ naturally appear across all kernels/laws? + 3. CRITIQUE — what is still hand-wavy, what must be proven, what is the migration plan? +""" + +import datetime +import os +import re +import sys +import time +from pathlib import Path + +import requests +from rich.console import Console +from rich.markdown import Markdown +from rich.progress import Progress, SpinnerColumn, TextColumn + +RESEARCH_ROOT = Path("/home/allaun/Documents/Research Stack") +LEAN_ROOT = RESEARCH_ROOT / "0-Core-Formalism/lean/Semantics/Semantics" +API_BASE = "https://ollama.com/v1" +API_KEY = os.environ.get("OLLAMA_API_KEY", "") +DEFAULT_MODEL = "cogito-2.1:671b" +FALLBACK_CHAIN = ["qwen3-next:80b", "gemma4:31b", "deepseek-v4-flash"] + +MAX_PER_FILE = 10_000 # chars per lean file (they're dense) +MAX_CONTEXT = 110_000 # total context chars + +console = Console() + +# --------------------------------------------------------------------------- +# Files to load — ordered by conceptual priority +# --------------------------------------------------------------------------- +LEAN_FILES = [ + # ── New paradigm kernel ────────────────────────────────────────────── + "Kernel/EigenGate.lean", + "Kernel/GateChain.lean", + + # ── Old Gate typeclass (what needs migrating) ───────────────────── + "HCMMR/Core.lean", + "HCMMR/Bridge.lean", + "HCMMR/Manifest.lean", + + # ── Laws (old Gate pattern) ────────────────────────────────────────── + "HCMMR/Laws/Law14_Motion.lean", + "HCMMR/Laws/Law15_Field.lean", + "HCMMR/Laws/Law15E_SignalDetection.lean", + "HCMMR/Laws/Law16_Entropy.lean", + "HCMMR/Laws/Law17_Observer.lean", + "HCMMR/Laws/Law18_Constants.lean", + + # ── Kernels ────────────────────────────────────────────────────────── + "HCMMR/Kernels/RecamanFieldStep.lean", + "HCMMR/Kernels/FAMMScarMemory.lean", + "HCMMR/Kernels/PrimeGearCache.lean", + "HCMMR/Kernels/SNRAnomalyDetector.lean", + + # ── Core substrate ─────────────────────────────────────────────────── + "Core/FoldedPointManifold.lean", + "Core/UnderverseZeroLayer.lean", + "Core/QuantumFoamBoundary.lean", + "Core/S3CProjectedGeodesicResolution.lean", + "Core/PathEpigeneticManifold.lean", +] + +EXTRA_DOCS = [ + # Roadmap and substrate prose + "HCMMR/v0_2_Roadmap.md", + "0-Core-Formalism/lean/Semantics/Semantics/FAMM.lean", +] + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def load(path: Path, max_chars: int = MAX_PER_FILE) -> str: + try: + text = path.read_text(errors="replace") + if len(text) > max_chars: + text = text[:max_chars] + f"\n-- [truncated at {max_chars} chars]" + return text + except Exception as e: + return f"-- [could not read {path}: {e}]" + + +def gather_context() -> str: + parts = [] + for rel in LEAN_FILES: + p = LEAN_ROOT / rel + label = f"LEAN: {rel}" + parts.append(f"\n\n---\n## {label}\n\n```lean\n{load(p)}\n```") + + for rel in EXTRA_DOCS: + p = RESEARCH_ROOT / rel + label = f"DOC: {rel}" + parts.append(f"\n\n---\n## {label}\n\n{load(p, 6000)}") + + combined = "\n".join(parts) + if len(combined) > MAX_CONTEXT: + combined = combined[:MAX_CONTEXT] + "\n\n-- [context truncated]" + return combined + + +def chat(model: str, system: str, user: str, label: str, retries: int = 3) -> str: + headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"} + models_to_try = [model] + [m for m in FALLBACK_CHAIN if m != model] + + for attempt_model in models_to_try: + payload = { + "model": attempt_model, + "messages": [ + {"role": "system", "content": system}, + {"role": "user", "content": user}, + ], + "stream": False, + "options": {"temperature": 0.2, "num_predict": 8192}, + } + for attempt in range(1, retries + 1): + with Progress(SpinnerColumn(), + TextColumn(f"[bold cyan]{label}[/bold cyan] ({attempt_model}, try {attempt}) ..."), + transient=True, console=console) as p: + p.add_task("", total=None) + try: + resp = requests.post(f"{API_BASE}/chat/completions", + headers=headers, json=payload, timeout=600) + except requests.exceptions.Timeout: + console.print(f"[yellow]Timeout, retrying...[/yellow]") + time.sleep(5 * attempt) + continue + + if resp.status_code == 200: + content = resp.json()["choices"][0]["message"]["content"] + content = re.sub(r".*?", "", content, flags=re.DOTALL).strip() + return content + + body = resp.text[:300] + if "overloaded" in body.lower() or resp.status_code in (429, 503): + wait = 12 * attempt + console.print(f"[yellow]Overloaded, waiting {wait}s...[/yellow]") + time.sleep(wait) + elif resp.status_code == 500: + console.print(f"[yellow]500 on {attempt_model}, trying fallback...[/yellow]") + break + else: + console.print(f"[red]API error {resp.status_code}:[/red] {body}") + sys.exit(1) + console.print(f"[yellow]Exhausted retries for {attempt_model}[/yellow]") + + console.print("[red]All models failed.[/red]") + sys.exit(1) + +# --------------------------------------------------------------------------- +# System prompt — shared across all three passes +# --------------------------------------------------------------------------- +SYSTEM = """\ +You are an expert in formal verification (Lean 4), type theory, and physics-informed \ +computation. You are reviewing the HCMMR (Hyper-Coherent Morphic Meta-Recursion) \ +research stack on its `distilled` branch. + +The stack is undergoing a PARADIGM SHIFT. The old system used a flat `Gate` struct \ +(name, required, score, verdict). The new paradigm is the `Eigengate`: + + structure Eigengate (α : Type) where + operator : α → α -- G: the operator whose fixed points encode the law + residual : α → Q0_16 -- ∥G·s − s∥, normalised to [0,1) + threshold : Q0_16 -- τ: max admissible residual + +The central doctrine: EVERY physical law, routing decision, and compression check \ +is an eigenstate condition ∥G·s − s∥ ≤ τ. The full physical universe is the \ +intersection of λ=1 eigenspaces for all required gate operators simultaneously. + +The migration is INCOMPLETE. EigenGate.lean and GateChain.lean exist but are not \ +imported by anything. All Laws (14–18) still use the old Gate struct. The kernels \ +(RecamanFieldStep, FAMMScarMemory, PrimeGearCache, SNRAnomalyDetector) also use old Gate. \ +LawRecovery.lean (concrete eigengate constructors for each physical law) was never written. + +Be precise, rigorous, and honest. Do not hallucinate. Flag uncertainty explicitly.\ +""" + +# --------------------------------------------------------------------------- +# Pass 1 — Summarize what the EigenGate paradigm actually unifies +# --------------------------------------------------------------------------- +PASS1_SYS = SYSTEM + """ + +YOUR TASK: PARADIGM SUMMARY. +Given all the Lean source files, answer: +1. What does the Eigengate pattern (`∥G·s − s∥ ≤ τ`) actually unify across the stack? + List every law/kernel and state what G, s, and the residual would be in each case. +2. What is the relationship between the old `Gate` struct and `Eigengate`? + Are they isomorphic? Can one be mechanically derived from the other? +3. What does `Semantics.Kernel.EigenGate` currently prove that the old HCMMR/Core does not? +4. What is the correct `α` type for each of the six laws (14, 15K, 15A-D, 15E, 16, 17, 18)? + Be specific — what Lean type carries the state? +5. Where does the Recamán kernel fit in the eigengate picture? + What is G for a Recamán field step? + +Use markdown headers per section. Be concrete — reference actual line numbers and +struct fields from the source files where relevant. +""" + +# --------------------------------------------------------------------------- +# Pass 2 — Cross-link: where does ∥G·s − s∥ naturally appear already? +# --------------------------------------------------------------------------- +PASS2_SYS = SYSTEM + """ + +YOUR TASK: CROSS-DOMAIN EIGENGATE DETECTION. +Scan all the Lean files in the context. For each file/module, identify: +1. Any existing computation that already computes something of the form ∥G·s − s∥ + (even if not named that way). What is G? What is s? What is the residual value? +2. Any existing `residual`, `score`, `epsilon`, or `delta` computation that could + directly become the `residual : α → Q0_16` field of an Eigengate. +3. Any existing operator/transform that maps a state to a new state — these are + candidate `operator : α → α` fields. +4. Places where the old Gate struct's `score` field is set to a formula (not just + a constant `Q16_16.one`) — these are the richest migration candidates. + +Format as a table: | Module | Existing computation | Candidate G | Candidate residual | Migration difficulty | +Then give a prioritized migration order (easiest → hardest) with reasoning. +""" + +# --------------------------------------------------------------------------- +# Pass 3 — Critique and concrete migration plan +# --------------------------------------------------------------------------- +PASS3_SYS = SYSTEM + """ + +YOUR TASK: CRITIQUE AND CONCRETE MIGRATION PLAN. +Be rigorous. Identify: + +A) ARCHITECTURAL CRITIQUE + [CRITICAL/MODERATE/MINOR] — what is wrong or incomplete in the current design? + Pay special attention to: + - The type parameter `α` in `Eigengate (α : Type)` — is it flexible enough? + The Laws need different α types (TrajectoryPoint, KahlerState, MaxwellField, etc.) + Can a single GateChain hold gates over different α? If not, how must GateChain change? + - The `score` function `1/(1+r)` — is this the right proximity measure for all laws? + - FAMM's `expNeg` — if it's a stub, what breaks? + - PrimeGearCache's silent cache-miss (returns Q16_16.one with no receipt) — severity? + - RecamanFieldStep's untested gate-reject path — what scenario does this cover? + - SNRAnomalyDetector's dead `dopplerDrift` branch — is it needed? + +B) CONCRETE MIGRATION PLAN + Write the exact 5-step plan to complete the paradigm migration: + Step 1: What to add to Semantics.lean (exact import lines) + Step 2: What LawRecovery.lean must contain (list each law's G, α, residual formula) + Step 3: Which kernels need a new `toEigengate` adapter function and what it looks like + Step 4: What new theorems are needed to prove the old Gate and new Eigengate are equivalent + Step 5: What the v0.2 build should look like when complete (job count, zero errors) + +C) WHAT NOT TO DO + Flag any tempting-but-wrong approaches that the previous agent sessions considered + and should be avoided. +""" + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- +def main(): + if not API_KEY: + console.print("[red]Set OLLAMA_API_KEY before calling the Ollama Cloud API.[/red]") + sys.exit(1) + + console.rule("[bold green]EigenGate Paradigm Analysis[/bold green]") + console.print(f"Model: [bold]{DEFAULT_MODEL}[/bold] Fallbacks: {FALLBACK_CHAIN}\n") + + console.print("[dim]Loading Lean source files and docs...[/dim]") + context = gather_context() + console.print(f"[dim]Context: {len(context):,} chars[/dim]\n") + + summary = chat(DEFAULT_MODEL, PASS1_SYS, + f"Lean source files:\n\n{context}\n\nProduce the paradigm summary.", + "Pass 1: Paradigm Summary") + + crosslink = chat(DEFAULT_MODEL, PASS2_SYS, + f"Summary from Pass 1:\n{summary}\n\n---\nLean source files:\n\n{context}\n\nDetect eigengate patterns.", + "Pass 2: Cross-link Detection") + + critique = chat(DEFAULT_MODEL, PASS3_SYS, + f"Summary:\n{summary}\n\nCross-links:\n{crosslink}\n\n---\nLean source files:\n\n{context}\n\nDeliver critique and migration plan.", + "Pass 3: Critique + Migration Plan") + + timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + report = f"""# EigenGate Paradigm Analysis +*Generated: {timestamp} | Model: {DEFAULT_MODEL}* + +> **Context:** This analysis re-examines the HCMMR `distilled` branch through the lens +> of the incomplete `Eigengate (α : Type)` paradigm migration. The old `Gate` struct +> (HCMMR/Core.lean) and the new `Eigengate` (Kernel/EigenGate.lean) coexist but are +> disconnected. This report determines what the migration requires and how to complete it. + +--- + +## Pass 1 — What the EigenGate Paradigm Unifies + +{summary} + +--- + +## Pass 2 — Where ∥G·s − s∥ Already Appears in the Codebase + +{crosslink} + +--- + +## Pass 3 — Critique & Concrete Migration Plan + +{critique} + +--- +*Generated by `scripts/eigengate_paradigm_analysis.py`* +""" + + date_str = datetime.datetime.now().strftime("%Y-%m-%d") + out = RESEARCH_ROOT / "6-Documentation" / "docs" / "reports" / f"eigengate_paradigm_analysis_{date_str}.md" + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(report) + + console.rule("[bold green]Complete[/bold green]") + console.print(f"\nReport: [bold]{out}[/bold]\n") + console.print(Markdown(report[:8000] + ("\n\n*[truncated — see file]*" if len(report) > 8000 else ""))) + +if __name__ == "__main__": + main()