diff --git a/apps/website/messages/de.json b/apps/website/messages/de.json deleted file mode 100644 index 3cf7d97973..0000000000 --- a/apps/website/messages/de.json +++ /dev/null @@ -1,1761 +0,0 @@ -{ - "lang": "de", - "langSwitch": "EN", - "langHref": "?lang=en", - "nav": [ - "TRINITY", - "Karte", - "Specs", - "These", - "Formate", - "Beweise", - "Verifikation", - "Landschaft" - ], - "hero": { - "tag": "GFTernary · TNF — ein Referenzpaar für den ternären Datenpfad", - "headline": "r² = r + 1", - "subheadline": "Wo das Gewicht ein Code ist, ist das Format keine Vorliebe. GFTernary schließt das Gewicht, TNF den Akkumulator — und jede Hardwarezahl hier wurde auf einem binären FPGA gemessen, was ausgesprochen und nicht geglättet wird.", - "cta": "Die These lesen", - "ctaSecondary": "Was hier nicht behauptet wird" - }, - "navExtra": { - "dashboard": "Dashboard", - "tree": "Forschungslab", - "docs": "Doku", - "about": "Über den Autor" - }, - "theorems": { - "badge": "MATHEMATISCHE GRUNDLAGE", - "title": "4 Theoreme + Verifizierte Ergebnisse", - "sub": "Mathematische Beweise gestützt durch reale Benchmarks. Jede Behauptung ist bewiesen UND getestet.", - "cards": [ - { - "number": "1", - "title": "Optimale Basis = e ≈ 3", - "formula": "I(r) = (B/r) × log₂(r)", - "proof": "Informationskapazität maximiert bei r = e ≈ 2,718. Nächste ganze Zahl: 3", - "result": "Ternär erreicht 94,9% der theoretischen Maximaleffizienz", - "source": "Knuth, The Art of Computer Programming, Bd. 3", - "advantage": "Energieeinsparung durch optimale Informationskodierung", - "verified": { - "metric": "100% Rauschrobustheit", - "value": "Übersteht 20% Bitfehler ohne Genauigkeitsverlust", - "report": "hdc_double_q_report.md" - } - }, - { - "number": "2", - "title": "Trinity-Identität", - "formula": "φ² + 1/φ² = 3", - "proof": "(3+√5)/2 + (3-√5)/2 = 6/2 = 3 ∎", - "result": "Der Goldene Schnitt kodiert mathematisch die ternäre Optimalität", - "source": "Abgeleitet aus Euklids Elementen", - "advantage": "Fundamentalkonstante bestätigt Trinity-Architektur", - "verified": { - "metric": "8,1× GPU-Beschleunigung", - "value": "SIMD-Optimierung auf Standardhardware", - "report": "GPU_BENCHMARKS.md" - } - }, - { - "number": "3", - "title": "Ternäre Quantisierung", - "formula": "log₂(3) = 1,585 Bits", - "proof": "Gewichte {-1, 0, +1} benötigen nur 1,58 Bits vs. 32 Bits für float32", - "result": "20× Speicherkompression, multiplikationsfreie Inferenz", - "source": "BitNet b1.58 (arXiv:2402.17764, Microsoft Research)", - "advantage": "KI-Inferenz ohne GPU, bis zu Bis zu 3000× Energieeffizienz auf FPGA (projiziert, FPGA)", - "verified": { - "metric": "15,7× Kompression", - "value": "98KB → 6KB mit 43% Sparsity-Bonus", - "report": "ternary_quant_report.md" - } - }, - { - "number": "4", - "title": "Radix Economy", - "formula": "E(r) = r × ⌈logᵣ(N)⌉", - "proof": "E(2) = 2,885, E(3) = 2,731, E(4) = 3,000", - "result": "Ternär hat die optimale Radix Economy unter allen ganzen Zahlen", - "source": "Knuth, The Art of Computer Programming, Bd. 3", - "advantage": "Optimale Datenspeicherung und -übertragung", - "verified": { - "metric": "Auto-Scaling Produktion", - "value": "Kubernetes-ready mit Monitoring-Dashboard", - "report": "PRODUCTION_BENCHMARKS.md" - } - } - ], - "cta": "Vollständige mathematische Beweise lesen", - "ctaUrl": "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/gHashTag/trinity/blob/main/docs/MATH_FOUNDATIONS.md", - "reportsTitle": "Verifizierte Benchmark-Berichte", - "reports": [ - { - "name": "Ternärer Quantisierungsbericht", - "url": "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/gHashTag/trinity/blob/main/docs/ternary_quant_report.md", - "highlight": "15,7× Kompression" - }, - { - "name": "HDC Double Q-Learning Bericht", - "url": "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/gHashTag/trinity/blob/main/docs/hdc_double_q_report.md", - "highlight": "100% Rauschrobustheit" - }, - { - "name": "GPU-Benchmarks", - "url": "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/gHashTag/trinity/blob/main/docs/GPU_BENCHMARKS.md", - "highlight": "8,1× SIMD-Beschleunigung" - }, - { - "name": "Produktions-Benchmarks", - "url": "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/gHashTag/trinity/blob/main/docs/PRODUCTION_BENCHMARKS.md", - "highlight": "Auto-Scaling bereit" - } - ] - }, - "roiCalculator": { - "title": "ROI Rechner", - "sub": "Berechnen Sie Ihre Rendite als Trinity-Node-Betreiber", - "inputLabel": "Anfangsinvestition ($)", - "hardwareLabel": "Hardware-Typ", - "hardwareOptions": [ - { - "name": "QMTECH FPGA XC7A100T", - "hashrate": 2000000, - "power": 10, - "cost": 65, - "monthly": 50 - }, - { - "name": "Alveo U55C", - "hashrate": 50000000, - "power": 150, - "cost": 5000, - "monthly": 162 - }, - { - "name": "CPU Node (Kostenlos)", - "hashrate": 12000, - "power": 65, - "cost": 0, - "monthly": 5 - } - ], - "results": { - "monthlyRevenue": "Monatlicher Umsatz", - "monthlyCosts": "Monatliche Kosten (Strom)", - "monthlyProfit": "Monatlicher Nettogewinn", - "paybackPeriod": "Amortisationszeit", - "annualROI": "Jährlicher ROI" - }, - "example": { - "title": "Beispiel: Alveo U55C ($5.000)", - "items": [ - { - "label": "Monatlicher Umsatz", - "value": "$162" - }, - { - "label": "Stromkosten", - "value": "$31" - }, - { - "label": "Nettogewinn", - "value": "$131/Monat" - }, - { - "label": "Amortisation", - "value": "4,9 Monate" - }, - { - "label": "Jährlicher ROI", - "value": "31%" - } - ] - }, - "note": "Basierend auf Theorem 3: 1,58-Bit-Quantisierung ermöglicht 20× Effizienzgewinn" - }, - "calculator": { - "title": "Einsparungs-Rechner", - "nodes": "Anzahl der Knoten (GPUs):", - "current": "Aktuelle Kosten", - "withTrinity": "Mit TRINITY", - "savings": "Monatliche Netto-Einsparungen" - }, - "whynow": { - "title": "Warum Singularität Jetzt?", - "cards": [ - { - "title": "Hardware-Resonanz", - "desc": "100% Ausrichtung zwischen Linguistik und Silizium via CIS V1.0 erreicht." - }, - { - "title": "Entropie-Ernte", - "desc": "PAS Daemons V5.0 wandeln Informationsrauschen in nutzbare Ausführungsenergie um." - }, - { - "title": "Topologische Rüstung", - "desc": "Chern-Bott-Invarianten machen Trinity-Berechnungen immun gegen Störungen." - } - ] - }, - "publications": { - "badge": "WISSENSCHAFTLICHE PUBLIKATIONEN", - "title": "DOI-gestützte Forschungsergebnisse", - "subtitle": "Alle Forschungsergebnisse auf Zenodo mit permanenten DOI-Identifikatoren veröffentlicht.", - "viewAll": "Volle Dokumentation →" - }, - "market": { - "title": "Markt $200B", - "funnel": [ - { - "value": "$200B", - "label": "TAM — KI-Beschleuniger" - }, - { - "value": "$80B", - "label": "SAM — KI-Inferenz" - }, - { - "value": "$8B", - "label": "SOM — Ternär (10%)" - } - ], - "compsTitle": "Vergleichbare Bewertungen", - "headers": [ - "Unternehmen", - "Bewertung", - "Umsatz", - "Multiple" - ], - "rows": [ - [ - "Cerebras", - "$4,0B", - "$100M", - "40×" - ], - [ - "Groq", - "$2,8B", - "$50M", - "56×" - ], - [ - "SambaNova", - "$5,0B", - "$150M", - "33×" - ], - [ - "TRINITY", - "$300M", - "Pre-rev", - "Seed" - ] - ] - }, - "gtm": { - "title": "Markteinführung", - "phases": [ - { - "phase": "Phase 1", - "title": "Forschungslabore", - "desc": "Universitäten, KI-Labore • Kostenlose Piloten • Fallstudien" - }, - { - "phase": "Phase 2", - "title": "KI-Startups", - "desc": "Inferenz-Einsparungen • FPGA-Karten • $10K-50K Deals" - }, - { - "phase": "Phase 3", - "title": "Enterprise", - "desc": "Cloud-Anbieter • ASIC-Lizenzierung • $1M+ Deals" - } - ] - }, - "timeline": { - "title": "Technologie Zeitachse", - "items": [ - { - "year": "2023", - "title": "BitNet", - "desc": "(Microsoft)", - "type": "past" - }, - { - "year": "2024", - "title": "BitNet b1.58", - "desc": "validiert", - "type": "past" - }, - { - "year": "2025", - "title": "FPGA", - "desc": "Prototypen", - "type": "past" - }, - { - "year": "2026", - "title": "Phase 5.0", - "desc": "Singularität", - "type": "future" - }, - { - "year": "2027", - "title": "Markt", - "desc": "Dominanz", - "type": "future" - } - ] - }, - "roadmap": { - "title": "Fahrplan", - "milestones": [ - { - "date": "Q1 2026", - "title": "FPGA Prototyp V5", - "desc": "Verilog Core (16.16 Fixed Point) auf Kintex-7" - }, - { - "date": "Q3 2026", - "title": "Entwickler SDK", - "desc": "E-Graph Optimizer & Koptisch-Zig Compiler" - }, - { - "date": "Q1 2027", - "title": "ASIC Tape-out", - "desc": "Erster nativer SU(3) Chip (TSMC 180nm)" - } - ] - }, - "techTree": { - "title": "TRINITY FORSCHUNGSLABOR", - "sub": "Technologie-Entwicklungsbaum", - "hint": "Klicken Sie auf Knoten, um Forschungsdetails anzuzeigen", - "complete": "abgeschlossen", - "active": "FORSCHUNG AKTIV", - "legend": { - "done": "Abgeschlossen", - "progress": "In Bearbeitung", - "locked": "Gesperrt" - }, - "labels": { - "description": "Beschreibung", - "performance": "Leistung", - "progress": "Forschungsfortschritt", - "prerequisites": "Voraussetzungen", - "unlocks": "Schaltet frei", - "locked": "Voraussetzungen abschließen, um diese Forschung freizuschalten" - }, - "stats": { - "inProgress": "in Bearbeitung", - "locked": "gesperrt" - }, - "branches": { - "core": "KERN", - "inference": "INFERENZ", - "optimization": "OPTIMIERUNG", - "deployment": "BEREITSTELLUNG", - "hardware": "HARDWARE", - "agents": "AGENTEN", - "knowledge": "WISSEN", - "distributed": "VERTEILT" - }, - "nodes": { - "core-001": { - "name": "Parser v2", - "description": "Erweiterter VIBEE-Spezifikationsparser mit Mehrsprachenunterstützung", - "metrics": "42 Sprachen" - }, - "core-002": { - "name": "Multi-Lang Codegen", - "description": "Codegenerierung für Zig, Python, Rust, Verilog und 38 weitere", - "metrics": "42 Ziele" - }, - "core-003": { - "name": "Bytecode VM", - "description": "Stack-basierte ternäre virtuelle Maschine mit 256 Opcodes", - "metrics": "256 Opcodes" - }, - "core-004": { - "name": "JIT-Kompilierung", - "description": "Just-in-Time-Kompilierung für native Leistung", - "metrics": "+1000% Geschwindigkeit" - }, - "core-005": { - "name": "Binäroptimierung", - "description": "Erweiterte Dead-Code-Eliminierung und Registerzuweisung", - "metrics": "-30% Größe" - }, - "inf-001": { - "name": "GGUF Parser", - "description": "GGUF-Modelldateien mit Quantisierungsmetadaten parsen", - "metrics": "Alle Quants" - }, - "inf-002": { - "name": "Transformer", - "description": "Vollständige Transformer-Architektur mit Attention-Schichten", - "metrics": "32 Schichten" - }, - "inf-003": { - "name": "KV Cache", - "description": "Key-Value-Cache für effiziente autoregressive Generierung", - "metrics": "16x Beschleunigung" - }, - "inf-004": { - "name": "Batch-Verarbeitung", - "description": "Parallele Batch-Inferenz für mehrere Sequenzen", - "metrics": "8x Durchsatz" - }, - "inf-005": { - "name": "FlashAttention", - "description": "IO-bewusster Attention-Mechanismus für lange Sequenzen", - "metrics": "128K Kontext" - }, - "opt-t01": { - "name": "Ternäre Quantisierung", - "description": "BitNet b1.58 ternäre Gewichtsquantisierung {-1, 0, +1}", - "metrics": "20x Kompression" - }, - "opt-t02": { - "name": "Ternäre MatMul", - "description": "Optimierte Matrixmultiplikation für ternäre Gewichte", - "metrics": "10x Beschleunigung" - }, - "opt-t03": { - "name": "Ternärer KV Cache", - "description": "Komprimierter KV-Cache mit ternärer Darstellung", - "metrics": "16x Speicher" - }, - "opt-pc01": { - "name": "Präfix-Caching", - "description": "Berechnete Präfixe über Anfragen hinweg wiederverwenden", - "metrics": "90% Trefferquote" - }, - "opt-cp01": { - "name": "Chunked Prefill", - "description": "Lange Prompt-Verarbeitung in handhabbare Blöcke aufteilen", - "metrics": "-50% Latenz" - }, - "opt-s02": { - "name": "Erweiterte Spekulation", - "description": "Parallele spekulative Verifizierung mit Baumsuche", - "metrics": "4x Generierung" - }, - "dep-001": { - "name": "Docker", - "description": "Containerisierte Bereitstellung mit optimierten Images", - "metrics": "< 500MB" - }, - "dep-002": { - "name": "Fly.io", - "description": "Edge-Bereitstellung auf Fly.io-Infrastruktur", - "metrics": "34 Regionen" - }, - "dep-003": { - "name": "Auto-Skalierung", - "description": "Automatische Skalierung basierend auf Anfragelast", - "metrics": "0→100 Pods" - }, - "dep-004": { - "name": "Multi-Region", - "description": "Globale Bereitstellung mit regionsbewusstem Routing", - "metrics": "< 50ms Latenz" - }, - "dep-005": { - "name": "Null-Ausfallzeit", - "description": "Blue-Green- und Canary-Bereitstellungsstrategien", - "metrics": "99,99% SLA" - }, - "hw-001": { - "name": "CUDA Backend", - "description": "Native CUDA-Kernel für NVIDIA GPUs", - "metrics": "+100x Geschwindigkeit" - }, - "hw-002": { - "name": "Metal Backend", - "description": "Apple Metal Shader für M-Series Chips", - "metrics": "+80x Geschwindigkeit" - }, - "hw-003": { - "name": "FPGA-Synthese", - "description": "Verilog-Generierung für FPGA-Bereitstellung", - "metrics": "1000x Effizienz" - }, - "hw-004": { - "name": "ASIC-Design", - "description": "Kundenspezifisches ternäres Chipdesign für maximale Effizienz", - "metrics": "10000x Effizienz" - }, - "hw-005": { - "name": "Quantenschaltkreis", - "description": "Experimentelle Quantengatter für ternäre Logik", - "metrics": "Ternäre Qubits" - }, - "agent-001": { - "name": "IGLA Core", - "description": "Instruktionsbasierte Generative Lernarchitektur", - "metrics": "v1.0 stabil" - }, - "agent-002": { - "name": "Werkzeugnutzung", - "description": "Lokale Funktionsaufrufe und Werkzeugintegration", - "metrics": "50+ Werkzeuge" - }, - "agent-003": { - "name": "Langer Kontext", - "description": "Unbegrenzter Verlauf mit adaptiven Kontextfenstern", - "metrics": "∞ Tokens" - }, - "agent-004": { - "name": "Multi-Agent", - "description": "Koordinator + Spezialist Agentenorchestrierung", - "metrics": "8 Spezialisten" - }, - "agent-005": { - "name": "Schwarmintelligenz", - "description": "Dezentrales emergentes Agentenverhalten", - "metrics": "1K+ Agenten" - }, - "know-001": { - "name": "VSA Core", - "description": "Vektorsymbolische Architektur mit Bind/Bundle-Operationen", - "metrics": "10K Dimensionen" - }, - "know-002": { - "name": "Wissensgraph", - "description": "Tripel-basierte semantische Netzwerke mit VSA-Kodierung", - "metrics": "1M Tripel" - }, - "know-003": { - "name": "Semantische Suche", - "description": "Kosinusähnlichkeitssuche über Hypervektoren", - "metrics": "<1ms Abfrage" - }, - "know-004": { - "name": "RAG-Engine", - "description": "Retrieval Augmented Generation mit VSA", - "metrics": "95% Genauigkeit" - }, - "know-005": { - "name": "Ontologie-Lerner", - "description": "Automatische Entdeckung semantischer Beziehungen", - "metrics": "Zero-Shot" - }, - "dist-001": { - "name": "Knotennetzwerk", - "description": "Dezentrale Knotenerkennung und -routing", - "metrics": "1000+ Knoten" - }, - "dist-002": { - "name": "TVC Sharding", - "description": "Ternäres Vektor-Computing mit verteilten Shards", - "metrics": "256 Shards" - }, - "dist-003": { - "name": "DePIN-Netzwerk", - "description": "Dezentrale physische Infrastruktur mit TRI-Belohnungen", - "metrics": "$TRI Mining" - }, - "dist-004": { - "name": "Globaler Konsens", - "description": "Byzantinisch fehlertoleranter Konsens für ternären Zustand", - "metrics": "10K TPS" - }, - "dist-005": { - "name": "Heilige Kette", - "description": "Goldene Kette ternärer Ereignisse mit unveränderlichem Beweis", - "metrics": "Zero-Knowledge" - } - } - }, - "product": { - "title": "Produkt Roadmap", - "phases": [ - { - "phase": "TRINITY-V5", - "year": "2025-2026", - "desc": "FPGA-basierter ternärer Beschleuniger • Native .TRI Ausführung • Ziel: KI-Inferenz" - }, - { - "phase": "TRINITY-1 ASIC", - "year": "2027", - "desc": "Erster nativer ternärer Chip • 180nm Prozess (geringes Risiko) • Ziel: Edge-KI-Geräte" - }, - { - "phase": "TRINITY-X", - "year": "2029", - "desc": "Fortgeschrittener Node (28nm) • Vollständiges SoC mit ternärer CPU • Ziel: Rechenzentrum-Skala" - } - ] - }, - "financials": { - "title": "Weg zu $10B+", - "headers": [ - "Jahr", - "Umsatz", - "Bruttomarge", - "Bewertung", - "Mitarbeiter" - ], - "rows": [ - [ - "2026", - "$2M", - "50%", - "$300M", - "15" - ], - [ - "2027", - "$15M", - "55%", - "$500M", - "50" - ], - [ - "2028", - "$80M", - "60%", - "$2B", - "150" - ], - [ - "2029", - "$300M", - "65%", - "$5B", - "400" - ], - [ - "2030", - "$1B", - "70%", - "$10B+", - "1.000" - ] - ], - "note": "Umsatz-Multiple vergleichbar mit Cerebras (40×), Groq (56×), SambaNova (33×)" - }, - "businessModel": { - "title": "Geschäftsmodell", - "streams": [ - { - "percent": "60%", - "title": "Hardware-Verkauf", - "desc": "TRINITY-FPGA: $15K ASP, 55% Marge • TRINITY-ASIC: $3K ASP, 65% Marge" - }, - { - "percent": "30%", - "title": "IP-Lizenzierung", - "desc": "Ternäre IP an Chip-Hersteller lizenzieren • $2-5 Lizenzgebühr pro Chip • 90%+ Marge" - }, - { - "percent": "10%", - "title": "Software & Services", - "desc": "TRINITY SDK: $100K/Jahr Enterprise • Integrationsservices • 80% Marge" - } - ], - "unitEcon": "LTV/CAC: 15× | Ziel Jahr 1: 1.000 Einheiten = $7,5M Umsatz" - }, - "team": { - "title": "Das Team", - "name": "Dmitrii Vasilev", - "role": "Gründer & CEO", - "photo": "https://avatars.githubusercontent.com/u/6774813?v=4", - "linkedin": "https://www.linkedin.com/in/neurocoder/", - "exp": [ - "15+ Jahre Software-Engineering", - "Ex-Senior-Ingenieur bei Tech-Unternehmen", - "Tiefe Expertise in Compilern & Low-Level-Systemen", - "VIBEE-Sprache von Grund auf erstellt", - "20.645 native .tri Spezifikationen" - ], - "linkedinLabel": "LinkedIn", - "hiring": "Einstellung: FPGA-Ingenieur, KI-Forscher, Business Development" - }, - "ecosystem": { - "title": "Ternäres Ökosystem .TRI", - "sub": "Die gesamte .vibee Wissensbasis in natives .tri Format transmutiert.", - "quote": "«ⲁⲃⲅ» ist kein Text. Es ist eine Konfiguration von Qutrits. Wir haben die letzte Barriere zwischen Gedanke und Aktion entfernt.", - "formula": "Parametrische Formel: V = n × 3^k × π^m × φ^p × e^q", - "items": [ - { - "title": "Koptischer Compiler", - "desc": "TNC V1.0 • Direkte Triadenerzeugung aus Alphabet" - }, - { - "title": "Natives Wissen", - "desc": "20.645 .tri Dateien • Native Wissensbasis" - }, - { - "title": "SU(3) Runtime", - "desc": "Unitäre Ausführung ohne binären Overhead" - }, - { - "title": "PAS Daemons", - "desc": "Energiegewinnung aus Datenstrom-Entropie" - }, - { - "title": "Chern Lock", - "desc": "Hardware-Schutz gegen Injektion & Rauschen" - }, - { - "title": "Trinity CIS", - "desc": "27 Instruktionen = 3³ Symmetrie" - } - ] - }, - "competition": { - "title": "GPU-Benchmark Vergleich", - "headers": [ - "Plattform", - "Hardware", - "Tokens/s", - "Ternär", - "Energie" - ], - "rows": [ - { - "company": "TRINITY", - "arch": "CPU (RunPod)", - "val": "35-52", - "ternary": true, - "open": true - }, - { - "company": "Groq", - "arch": "Llama-70B, LPU cloud", - "val": "227-276", - "ternary": false, - "open": false - }, - { - "company": "GPT-4o-mini", - "arch": "Cloud API", - "val": "~100", - "ternary": false, - "open": false - }, - { - "company": "Claude Opus", - "arch": "Cloud API", - "val": "~80", - "ternary": false, - "open": false - }, - { - "company": "B200 BitNet I2_S", - "arch": "B200 GPU", - "val": "52 (CPU)", - "ternary": true, - "open": false - } - ], - "note": "TRINITY verifiziert auf echten RunPod GPUs (Pod IDs: bhhnrrdothqm54, ydk41ymp8uoeyp). Ternär = keine Multiplikationen, 20x Kompression, 70% Rauschrobustheit bei 30% Korruption.", - "gpuProof": { - "title": "Echte GPU-Verifizierung", - "rtx3090": { - "podId": "bhhnrrdothqm54", - "tokens": "298,052", - "noise": "70.2%", - "power": "348W", - "cost": "$0.10" - }, - "a100": { - "podId": "ydk41ymp8uoeyp", - "tokens": "274,043", - "noise": "70.2%", - "power": "293W", - "cost": "$0.20" - } - }, - "unitNote": "End-to-end tokens/sec, from this project's own benchmark table. Cloud providers are faster; Trinity's advantage is cost — $0.01-0.35 against API pricing — and running without a GPU at all. The earlier version of this table put Trinity's raw kernel ops/sec beside everyone else's tokens/sec." - }, - "scientificFoundation": { - "title": "Fundamentale Beweise", - "sub": "Trinity V5.0 basiert auf unveränderlichen Gesetzen aus 8 Wissenschaften.", - "items": [ - { - "icon": "📐", - "value": "Exakt 3", - "label": "Goldene Identität", - "desc": "φ² + 1/φ² = 3,0000. Exakte Verbindung zwischen Natur und Trinity-Logik." - }, - { - "icon": "🧬", - "value": "1,58", - "label": "Informationsdichte", - "desc": "log₂(3) Bits pro Trit. 58% höhere Dichte als binäre Systeme." - }, - { - "icon": "🌌", - "value": "13,82", - "label": "Alter des Universums", - "desc": "π × φ × e = 13,82 Gyr. Stimmt mit Planck 2020 überein." - }, - { - "icon": "⚛️", - "value": "137,03", - "label": "Feinstruktur", - "desc": "1/α = 4π³ + π² + π. Geometrie der physischen Welt definiert durch π." - } - ], - "paperTitle": "Transzendentale Beweise", - "papers": [ - "Mathematik: φ² + 1/φ² = 3 (Exakte Goldene Identität).", - "Physik: 1/α = 4π³ + π² + π (Feinstruktur, 0,0002% Genauigkeit).", - "Masse: m_p/m_e = 6π⁵ (Proton-Elektron-Massenverhältnis).", - "Kosmologie: π × φ × e = 13,82 Gyr (Alter des Universums).", - "Chaos: Feigenbaum δ = 3⁶ × π⁻⁷ × φ² × e² (Universalitätskonstante).", - "Quanten: Koide Q = 2/3 (Lepton-Massenformel)." - ] - }, - "techAssets": { - "title": "Technische Assets V5", - "sub": "Die weltweite Basis nativen ternären Wissens ist bereits erstellt.", - "items": [ - { - "value": "20.645", - "label": ".tri Dateien", - "desc": "Native Trinity-Wissensbasis" - }, - { - "value": "50+", - "label": "Sicherheitsmodule", - "desc": "Erweiterte Alignment & Privacy Stufen" - }, - { - "value": "1,58", - "label": "Bits / Trit", - "desc": "Log2(3) Informationsdichte" - }, - { - "value": "E-Graph", - "label": "Optimierer", - "desc": "Sättigungs-Benchmarks bestanden" - }, - { - "value": "SU(3)", - "label": "Nativer Kern", - "desc": "Unitäre Rechen-Engine" - }, - { - "value": "100x", - "label": "Beschleunigung", - "desc": "Native Operationsbeschleunigung" - } - ] - }, - "calculatorLogic": { - "title": "Rechner-Logik", - "sub": "Warum einen Supercomputer bauen, wenn ein Taschenrechner reicht?", - "comparison": [ - { - "title": "Komplexe Binäre Berechnung", - "desc": "Erfordert Milliarden Transistoren, massive Energie und Kühlung für Näherungsantworten.", - "icon": "📉", - "details": [ - "Matrix A[1024×1024] × B[1024×1024]:", - "• 2.147.483.648 Multiplikationsoperationen (2¹⁰ × 2¹⁰ × 2¹⁰)", - "• 1.073.741.824 Additionsoperationen", - "• ~3,2 Mrd. FLOPs pro einzelne Operation", - "• Energie: ~0,1 J auf NVIDIA A100", - "• Speicher: 8 MB nur für Matrizen (FP32)", - "", - "GPT-4 Inferenz (1 Token):", - "• 1,8 Billionen Parameter", - "• ~360 TFLOP pro Token", - "• Energie: ~0,001 kWh pro Anfrage", - "• Kosten: $0,01-0,03 pro 1K Tokens" - ], - "examples": [ - { - "op": "Matrix 1024×1024", - "binary": "2,1 Mrd. Operationen", - "ternary": "890M Operationen", - "savings": "58%" - }, - { - "op": "log₂(x) Berechnung", - "binary": "Taylor-Reihe ~50 Iterationen", - "ternary": "Nativ in 3 Schritten", - "savings": "94%" - }, - { - "op": "FFT 4096 Punkte", - "binary": "49K Multiplikationen", - "ternary": "12K ternäre Ops", - "savings": "75%" - }, - { - "op": "Neurale Inferenz", - "binary": "FP32 → 4 Bytes/Gewicht", - "ternary": "1,58 Bits/Gewicht", - "savings": "95%" - } - ] - }, - { - "title": "Ternärer Rechner", - "desc": "Löst dieselben Aufgaben mit nativer Mathematik (φ² + 1/φ² = 3) bei einem Bruchteil der Energie.", - "icon": "✨", - "details": [ - "BEWIESEN: φ² + 1/φ² = 3 (exakt bis beliebiger Präzision)", - "• φ² = (3 + √5)/2, 1/φ² = (3 - √5)/2", - "• Summe = 3 — die optimale Basis für Berechnungen", - "", - "BENCHMARK: 8,1× CPU-Beschleunigung (verifiziert)", - "• Batch Row SIMD: 7,61 GFLOPS auf Xeon 8375C", - "• Matrix 2048×2048: 1.102 μs (vs. 8.900 μs Baseline)", - "", - "BENCHMARK: 15,7× Speicherkompression", - "• Float Agent: 98.304 Bytes", - "• Ternärer Agent: 6.272 Bytes", - "• 43% Sparsity-Bonus (Gewichte = 0)", - "", - "BENCHMARK: 100% Rauschrobustheit", - "• 20% Trit-Flips → 0% Genauigkeitsverlust", - "• Gewinnrate: 100% (FrozenLake verifiziert)" - ], - "features": [ - "φ² + 1/φ² = 3: Mathematischer Beweis (Theorem 1)", - "15,7× Kompression: ternary_quant_report.md", - "8,1× SIMD-Beschleunigung: GPU_BENCHMARKS.md", - "100% Rauschtoleranz: hdc_double_q_report.md" - ] - } - ], - "tableTitle": "Binär vs. Ternär: Operationsvergleich", - "tableHeaders": [ - "Operation", - "Binärer Ansatz", - "Ternärer Ansatz", - "Energieeinsparung" - ], - "quote": "\"Wir versuchen Intelligenz mit roher Gewalt zu simulieren, während das Universum elegante Mathematik verwendet.\"" - }, - "technology": { - "title": "Technologie-Architektur", - "sub": "Wie TRINITY funktioniert", - "layers": [ - { - "title": "SU(3) CORE", - "desc": "Unitärer ternärer Prozessor" - }, - { - "title": "PAS DAEMONS", - "desc": "Informations-Energiepumpe" - }, - { - "title": "TRI-MEMORY", - "desc": "Native Triaden-Speicherung" - } - ], - "softwareStack": "NATIVER TRINITY-STACK (CIS V1.0)", - "innovationsTitle": "Schlüsselinnovationen", - "innovations": [ - "Direkte koptische CIS-Ausführung", - "Goldener-Schnitt-Optimierung (φ² + 1/φ² = 3)", - "Overhead-freie ternäre Neuronale-Netzwerk-Ausführung" - ], - "diagram": { - "title": "Native Ternäre Architektur", - "core": "SU(3) KERN", - "input": "Eingabestrom", - "inference": "Inferenz", - "daemon": "PAS-Daemon" - } - }, - "charts": { - "comparisonTitle": "Relative Leistung (Normalisiert)", - "comparisonNote": "* Höher ist besser. Basierend auf BitNet b1.58 Inferenz-Benchmarks." - }, - "invest": { - "title": "Investition", - "useTitle": "Skalierung Singularität V5.0", - "uses": [ - { - "percent": "60%", - "title": "Engineering", - "desc": "SU(3) Core, PAS Daemons" - }, - { - "percent": "20%", - "title": "Wissensbasis", - "desc": "Optimierung von 20k+ .TRI Dateien" - }, - { - "percent": "20%", - "title": "Betrieb", - "desc": "Singularität Marketing" - } - ], - "cards": [ - { - "value": "$3M", - "label": "für 1% Eigenkapital" - }, - { - "value": "$300M", - "label": "Bewertung" - }, - { - "value": "3²¹", - "label": "Token-Gesamtmenge" - }, - { - "value": "99%", - "label": "Gründeranteil" - }, - { - "value": "∞", - "label": "Potenzial" - } - ], - "milestonesTitle": "18-Monats-Meilensteine:", - "milestones": [ - "Funktionierendes SU(3) Produkt", - "5+ zahlende Kunden", - "$1M Jahresumsatz", - "Series A bereit" - ], - "whyTitle": "Warum jetzt investieren:", - "why": [ - "20.645 native TRI-Dateien", - "99% Gründeranteil = Alignment" - ], - "closing": "Wir sollten Intelligenz nicht simulieren. Wir sollten das Design auf der FPGA prüfen.", - "ctas": { - "investor": "Singularität betreten", - "partner": "Ihren Code transmutieren", - "talent": "Trinity beitreten", - "community": "Community beitreten" - }, - "community": { - "title": "Tritt der Community bei", - "sub": "Bewiesen durch Mathematik, angetrieben durch Community", - "channels": [ - { - "name": "Discord", - "url": "https://discord.gg/trinity", - "desc": "Entwickler & Miner Chat", - "members": "5K+" - }, - { - "name": "Telegram", - "url": "https://t.me/trinity_network", - "desc": "Ankündigungen", - "members": "10K+" - }, - { - "name": "Twitter/X", - "url": "https://x.com/trinity_ai", - "desc": "Updates & Neuigkeiten", - "followers": "25K+" - }, - { - "name": "GitHub", - "url": "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/gHashTag/trinity", - "desc": "Open Source", - "stars": "1K+" - } - ], - "cta": { - "node": { - "text": "Node betreiben", - "desc": "Verdienen durch Theorem 4 + 15,7x Kompression", - "url": "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/docs/node-setup" - }, - "docs": { - "text": "Docs lesen", - "desc": "Theoreme 1-3 + 100% Robustheit lernen", - "url": "/docs" - }, - "buy": { - "text": "$TRI kaufen", - "desc": "In bewährtes System investieren + 8,1x Beschleunigung", - "url": "/buy" - }, - "discord": { - "text": "Discord beitreten", - "desc": "Mit Entwicklern & Minern verbinden", - "url": "https://discord.gg/trinity" - } - }, - "stats": { - "title": "Gemeinschafts-KPIs", - "items": [ - { - "value": "5K+", - "label": "Discord-Mitglieder", - "target": "10K bis Q2" - }, - { - "value": "2K+", - "label": "Node-Betreiber", - "target": "5K bis Q2" - }, - { - "value": "500+", - "label": "$TRI-Inhaber", - "target": "10K bis Q2" - }, - { - "value": "1K+", - "label": "API-Nutzer", - "target": "5K bis Q2" - } - ] - } - }, - "investorTitle": "Investoren", - "partnerTitle": "Partner", - "talentTitle": "Talente", - "ctaGithub": "Code auf GitHub erkunden", - "contact": { - "email": "admin@t27.ai", - "website": "https://trinity-site-one.vercel.app", - "github": "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/gHashTag/trinity" - }, - "projectedNote": "* Projiziert auf kundenspezifischer FPGA-Hardware. Auf CPU verifiziert: 20× Speicherkompression." - }, - "bitnetProof": { - "badge": "MATHEMATISCHE BEWEISE", - "title": "BitNet FPGA — Wissenschaftliche Nachweise", - "sub": "Kein Marketing, sondern Mathematik. Jede Zahl wird durch wissenschaftliche Arbeiten belegt.", - "metrics": [ - { - "value": "20×", - "label": "Energieeffizienz vs GPU", - "source": "Microsoft BitNet" - }, - { - "value": "10×", - "label": "Speichereinsparung", - "source": "1,58 Bit vs 16 Bit" - }, - { - "value": "4,4×", - "label": "TCO-Reduzierung (3 Jahre)", - "source": "9,5K$ vs 42K$" - }, - { - "value": "26×", - "label": "tok/s/Watt vs A100", - "source": "TerEffic Paper" - }, - { - "value": "79×", - "label": "Effizienz vs Jetson", - "source": "arXiv:2502.16473" - }, - { - "value": "145%", - "label": "ROI im ersten Jahr", - "source": "4,9 Monate Amortisation" - } - ], - "mathTitle": "BitNet Mathematik", - "mathCards": [ - { - "title": "Gewichtsquantisierung", - "formula": "w ∈ {-1, 0, +1} = 1,58 Bits", - "desc": "Ternäre Kodierung: log₂(3) = 1,585 Bits. Speicher für 7B Modell: 14 GB → 1,4 GB" - }, - { - "title": "Keine Multiplikationen", - "formula": "MAC = MUX + ADD", - "desc": "BitNet ersetzt Multiplikation durch Addition. Energie: 1 pJ → 0,05 pJ (20× Einsparung)" - }, - { - "title": "FPGA-Vorteil", - "formula": "~50 LUTs, 0 DSP", - "desc": "GPU Tensor Core verschwendet 99% Leistung. FPGA = 100% Effizienz für ternäre Operationen" - } - ], - "comparisonTitle": "FPGA vs GPU für BitNet", - "comparisonHeaders": [ - "Metrik", - "GPU (H100)", - "FPGA (Alveo U55C)", - "Vorteil" - ], - "comparisonRows": [ - [ - "Energie/Token", - "3 mJ", - "0,15 mJ", - "20×" - ], - [ - "Speicher/Modell (7B)", - "14 GB", - "1,4 GB", - "10×" - ], - [ - "TCO (3 Jahre)", - "42.176$", - "9.537$", - "4,4×" - ], - [ - "tok/s/Watt", - "0,6", - "15,8", - "26×" - ], - [ - "Hardwarekosten", - "30.000$", - "5.000$", - "6×" - ] - ], - "sourcesTitle": "Wissenschaftliche Quellen", - "sources": [ - { - "title": "Microsoft BitNet b1.58", - "arxiv": "arXiv:2402.17764", - "desc": "The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits" - }, - { - "title": "TerEffic FPGA", - "arxiv": "arXiv:2502.16473", - "desc": "16.300 tok/s bei 370M Modell, 192× schneller als Jetson Orin Nano" - }, - { - "title": "VIBEE Prototyp", - "arxiv": "GitHub Verifiziert", - "desc": "BitNet MAC: 7/7 Tests BESTANDEN, Icarus Verilog Simulation" - } - ], - "roiTitle": "ROI-Rechner", - "roiDesc": "Investition 8.000$ (Alveo U55C + Server) → 19.596$/Jahr Umsatz bei 0,001$/1K Tokens", - "roiMetrics": [ - { - "label": "Amortisation", - "value": "4,9 Monate" - }, - { - "label": "ROI Jahr 1", - "value": "145%" - }, - { - "label": "ROI Jahr 3", - "value": "635%" - } - ], - "cta": "Vollständigen Bericht auf GitHub lesen", - "ctaUrl": "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/gHashTag/trinity/blob/main/deploy/trinity-nexus/docs/research/BITNET_MATHEMATICAL_PROOF.md" - }, - "phoenixNumber": { - "badge": "MATHEMATISCHES FUNDAMENT", - "title": "Token-Gesamtmenge 3²¹", - "sub": "Gesamtmenge abgeleitet aus ternärer Mathematik", - "supply": { - "value": "10,460,353,203", - "label": "$TRI Gesamtmenge", - "formula": "3²¹ = 10,460,353,203" - }, - "identity": { - "title": "Goldene Identität", - "formula": "φ² + 1/φ² = 3", - "desc": "TRINITY = QUTRIT = KODON" - }, - "formulas": [ - { - "title": "Parametrische Formel", - "formula": "V = n × 3ᵏ × πᵐ × φᵖ × eᵍ", - "desc": "Approximationsformel für Konstanten" - }, - { - "title": "Token-Gesamtmenge", - "formula": "3²¹ = 10,460,353,203", - "desc": "3 = Ternäre Basis, 21 = Bitcoin-inspirierte Ebenen" - }, - { - "title": "Transzendentales Produkt", - "formula": "π × φ × e ≈ 13.82", - "desc": "Vereinigung dreier Transzendentaler" - }, - { - "title": "Lucas-Zahl", - "formula": "L(10) = φ¹⁰ + 1/φ¹⁰ = 123", - "desc": "Goldener-Schnitt-Folge" - } - ], - "constants": [ - { - "symbol": "φ", - "value": "1.618033...", - "name": "Goldener Schnitt" - }, - { - "symbol": "π", - "value": "3.141592...", - "name": "Pi" - }, - { - "symbol": "e", - "value": "2.718281...", - "name": "Eulersche Zahl" - }, - { - "symbol": "3", - "value": "φ² + 1/φ²", - "name": "Trinität" - } - ], - "genetics": { - "title": "Genetische Algorithmus-Konstanten", - "items": [ - { - "symbol": "μ", - "formula": "1/φ²/10 = 0.0382", - "name": "Mutationsrate" - }, - { - "symbol": "χ", - "formula": "1/φ/10 = 0.0618", - "name": "Crossover-Rate" - }, - { - "symbol": "σ", - "formula": "φ = 1.618", - "name": "Selektionsdruck" - }, - { - "symbol": "ε", - "formula": "1/3 = 0.333", - "name": "Elitismus-Rate" - } - ] - }, - "physics": { - "title": "Physikalische Konstanten aus π", - "items": [ - { - "name": "Feinstruktur", - "formula": "1/α = 4π³ + π² + π = 137.036" - }, - { - "name": "Proton/Elektron Masse", - "formula": "mₚ/mₑ = 6π⁵ = 1836.15" - }, - { - "name": "Bell-Ungleichung", - "formula": "CHSH = 2√2 ≈ 2.828 > 2" - } - ] - }, - "distribution": { - "title": "Token-Verteilung: 100% geschürft", - "items": [ - { - "name": "Durch akzeptierte Arbeit geschürft", - "percent": "100%", - "amount": "≤ 10,460,353,203" - }, - { - "name": "Pre-Mine / Gründer / Team", - "percent": "0%", - "amount": "0" - }, - { - "name": "Verkauf / Treasury / Liquidität", - "percent": "0%", - "amount": "0" - } - ], - "total": "OBERGRENZE: 3²¹ = 10,460,353,203 $TRI · bei Genesis geprägt: 0 · nicht deployt" - }, - "quote": "\"Die Mathematik des Universums begünstigt die Trinität.\"", - "cta": "Vollständige Tokenomics ansehen", - "ctaUrl": "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/gHashTag/trinity-fpga/blob/main/docs/docs/depin/tokenomics.md" - }, - "mysticism": { - "title": "Mathematische Grundlagen", - "subtitle": "Warum 3? In jedem Proton und Neutron haben Quarks genau 3 'Farben' — das ist die SU(3)-Symmetrie, die Atome zusammenhält. Unser ternäres System {-1, 0, +1} spiegelt dieses natürliche Muster wider. Die Informationstheorie beweist auch: optimale Basis = e ≈ 2,718, nächste ganze Zahl = 3.", - "toggleShow": "▶ Für Mathematiker: SU(3), Chern-Simons, φ", - "toggleHide": "▼ Mathematische Grundlagen ausblenden", - "items": [ - { - "title": "SU(3) — Spezielle Unitäre Gruppe", - "description": "SU = Special Unitary (Matrizen mit Determinante = 1, die Vektorlängen erhalten). SU(3) beschreibt 3 Quark-Farben (rot, grün, blau) in Protonen und Neutronen. Unser ternäres System {-1, 0, +1} spiegelt dieses natürliche 3-Zustands-Muster wider. Die 8 Gluon-Generatoren bieten natürliche Fehlerkorrektur.", - "formula": "SU(3) = 3×3 Matrizen → 3 Farben → 8 Gluonen" - }, - { - "title": "Chern-Simons Invarianten", - "description": "Topologischer Schutz von Quantenzuständen durch Chern-Simons-Theorie. Die Invariante k=3 entspricht der ternären Logiktiefe.", - "formula": "CS(A) = k/4π ∫ Tr(A∧dA + ⅔A∧A∧A)" - }, - { - "title": "Goldener Schnitt Identität", - "description": "Die mathematische Identität φ² + 1/φ² = 3 verbindet den goldenen Schnitt mit der Ternarität. Diese Identität liegt der optimalen Informationskodierung zugrunde.", - "formula": "φ² + 1/φ² = 3 = TRINITÄT" - }, - { - "title": "Optimales Basis-Theorem", - "description": "Die Informationstheorie beweist: Die effizienteste Zahlenbasis ist e ≈ 2,718. Die nächste ganze Zahl ist 3, was ternär 1,58× effizienter als binär macht.", - "formula": "Optimale Basis = e ≈ 2,718 → nächste ganze Zahl = 3" - } - ] - }, - "sacredFormula": { - "title": "Heilige-Formel-Engine", - "formula": "V = n × 3k × πm × φp × eq", - "description": "Ganzzahlige Relationserkennung: jede physikalische Konstante als Punkt im Gitter aufgespannt von {1, log(3), log(π), log(φ)} über ℤ.", - "inputPlaceholder": "Beliebige positive Zahl eingeben...", - "decompose": "Zerlegen", - "computing": "Berechne...", - "target": "Zielwert", - "exact": "EXAKT", - "close": "NAH", - "approx": "UNGEFÄHR", - "predictionsTitle": "Heilige Extrapolationen", - "predictionsDisclaimer": "KEINE etablierte Physik — nur experimentelle Mathematik", - "categories": { - "all": "Alle", - "particle_physics": "Teilchenphysik", - "quantum": "Quanten", - "cosmology": "Kosmologie", - "quantum_gravity": "Quantengravitation" - }, - "chevrons": { - "n": "n", - "k": "3⁺", - "m": "π⁺", - "p": "φ⁺", - "q": "e⁺" - }, - "error": "Fehler", - "howItWorks": "Jede Zahl lässt sich als einfache Formel aus 4 Naturkonstanten schreiben. Zum Beispiel: Elektronenmasse = 1 × 3⁻⁷ × π¹ × φ⁻² × e³ mit 0,003% Genauigkeit. Geben Sie Ihre Zahl ein und sehen Sie ihre \"Koordinaten\" in diesem Gitter.", - "tryIt": "Zahl eingeben → Formel erhalten", - "legendTitle": "So liest man das Sternentor:", - "legendN": "Multiplikator (Ganzzahl 1–9)", - "legendK": "Ternäre Potenz (Exponent von 3)", - "legendM": "Geometrie-Potenz (Exponent von π)", - "legendP": "Goldener-Schnitt-Potenz (Exponent von φ)", - "legendQ": "Wachstums-Potenz (Exponent von e)", - "legendExample": "Beispiel: 13 ≈ 1 × 3⁻¹ × π¹ × φ⁻¹ × e³", - "modeFormula": "Zahl → Formel", - "modeGematria": "Gematrie", - "gematriaPlaceholder": "Zahl oder koptischer Text...", - "gematriaDecompose": "Entschlüsseln", - "sacredFit": "Heilige Formel", - "modeManual": "Parameter → Wert", - "compute": "Berechnen", - "validationRequired": "Pflichtfeld", - "validationInteger": "Muss ganzzahlig sein", - "validationRange_n": "n: 1–9", - "validationRange_k": "k: -4…4", - "validationRange_m": "m: -3…0", - "validationRange_p": "p: -4…4", - "validationRange_q": "q: -3…3", - "validationPositive": "Positive Zahl eingeben" - }, - "holographic": { - "title": "Holographischer Renderer v3.1", - "subtitle": "Generiert aus: specs/tri/holographic_renderer.vibee", - "adsTitle": "AdS₅ Radialschnitt — Bulk/Rand-Korrespondenz", - "spinTitle": "Spin-Netzwerk — Flächen-Eigenwerte", - "penroseTitle": "Penrose P3-Parkettierung — Goldene Eigenschaften", - "entropyTitle": "Bekenstein-Hawking Entropie-Oberfläche", - "hawkingTitle": "Hawking-Strahlung — Schwarzes-Loch-Verdampfung", - "formula": "Formel", - "solarEntropy": "Sonnenmasse-SL-Entropie", - "holoBits": "Holographische Bits", - "multiverseTitle": "Ewige Inflation — Blasen-Universen", - "stringTitle": "Stringtheorie-Landschaft — Fluss-Vakua", - "ryuTitle": "Ryu-Takayanagi — Holographische Verschränkungsentropie" - }, - "quantumGravity": { - "title": "Quantengravitation-Simulation v3.1", - "subtitle": "Generiert aus: specs/tri/quantum_gravity_sim.vibee", - "steps": "Schritte", - "spinFoamTitle": "Spin-Schaum-Evolution (Ponzano-Regge)", - "reggeTitle": "Regge-Kalkül (Simpliziale Quantengravitation)", - "adsTitle": "AdS/CFT Thermalisierung", - "areaTitle": "LQG Flächenspektrum (Barbero-Immirzi)", - "areaGap": "Flächenlücke", - "cdtTitle": "Kausale Dynamische Triangulationen", - "venezianoTitle": "Veneziano Stringamplituden", - "pageCurveTitle": "Schwarzes-Loch-Information (Page-Kurve)" - }, - "marketplace": { - "title": "$TRI Heilige Berechnung Marktplatz", - "subtitle": "Generiert aus: specs/tri/tri_marketplace.vibee", - "network": "Netzwerk", - "totalSupply": "Gesamtversorgung", - "circulating": "Im Umlauf", - "staked": "Gestaked", - "constants": "Konstanten", - "formulaFits": "Formel-Fits", - "verified": "Verifiziert", - "topComputations": "Top Heilige Berechnungen", - "stakingTitle": "Staking-Stufen (Fibonacci × φ)", - "proofTitle": "Beweis-der-Heiligen-Berechnung", - "tokenomicsTitle": "$TRI Tokenomics (φ-Deflationsmodell)" - }, - "stickyCta": { - "invest": "Jetzt Investieren", - "calculator": "Sparrechner" - }, - "footer": { - "tagline": "Ein Katalog numerischer Formate und arithmetischer Kerne", - "linksTitle": "Links", - "vizTitle": "Quantenlabor", - "vizLaunch": "Quantenlabor starten", - "vizDesc": "29 interaktive Visualisierungen", - "contactTitle": "Kontakt", - "rights": "Alle Rechte vorbehalten.", - "docs": "Dokumentation" - }, - "science": { - "title": "Wissenschaftliche Verifizierung", - "sub": "Peer-geprüfte Mathematik. Jede Formel unabhängig verifiziert.", - "stats": [ - { - "value": "27/27", - "label": "Tests Bestanden" - }, - { - "value": "4", - "label": "Theoreme Bewiesen" - }, - { - "value": "<0.01%", - "label": "Max. Fehler" - } - ], - "evidenceTitle": "Testabdeckung", - "sections": [ - { - "name": "VSA Operationen", - "passed": 7, - "total": 7 - }, - { - "name": "Ternäre VM", - "passed": 5, - "total": 5 - }, - { - "name": "Rauschrobustheit", - "passed": 4, - "total": 4 - }, - { - "name": "BitNet MAC", - "passed": 7, - "total": 7 - }, - { - "name": "Heilige Konstanten", - "passed": 4, - "total": 4 - } - ], - "formulasTitle": "Kernformeln", - "formulas": [ - { - "formula": "φ² + 1/φ² = 3", - "desc": "Trinity-Identität", - "error": "0.0%" - }, - { - "formula": "I(r) = (B/r) × log₂(r)", - "desc": "Optimale Basis", - "error": "0.0%" - }, - { - "formula": "log₂(3) = 1.585 Bits/Trit", - "desc": "Informationsdichte", - "error": "0.0%" - }, - { - "formula": "3²¹ = 10,460,353,203", - "desc": "Token-Gesamtmenge", - "error": "0.0%" - } - ], - "sources": [ - { - "title": "Knuth Band 3", - "desc": "Beweis der optimalen Basis" - }, - { - "title": "Microsoft BitNet", - "desc": "arXiv:2402.17764" - }, - { - "title": "TerEffic FPGA", - "desc": "arXiv:2502.16473" - } - ] - }, - "autonomousUniverse": { - "title": "Autonomes Universum", - "description": "Selbstentwickelndes mathematisches Universum mit autonomen Blasen und Auto-Tuning", - "bubblesTitle": "Autonome Blasen", - "mutationRate": "Mutationsrate", - "crossoverCount": "Kreuzungsanzahl", - "novelDiscoveries": "Neue Entdeckungen", - "convergenceScore": "Konvergenzbewertung", - "autoTune": "Auto-Tuning", - "muAdjusted": "μ Angepasst", - "evolution": "Evolution", - "generation": "Generation", - "fitness": "Fitness", - "discovery": "Entdeckung", - "snapshot": "Schnappschuss", - "snapshotTs": "Schnappschuss-Zeitstempel", - "phiAlignment": "φ Ausrichtung", - "convergeStatus": "Konvergenzstatus", - "reset": "Zurücksetzen", - "resetConfirm": "Universum wird auf Ausgangszustand zurückgesetzt", - "trinity": "TRINITY: ✓" - }, - "formulaDiscovery": { - "title": "Formelentdeckung Hybrid", - "description": "Hybride symbolisch-numerische Methode mit AST-Parsing", - "hybridDiscovery": "Hybride Entdeckung", - "symbolic": "Symbolische Formeln", - "numeric": "Numerische Näherung", - "confidence": "Konfidenz", - "astParse": "AST-Parsing", - "symbolicSimplify": "Symbolische Vereinfachung", - "numericApprox": "Numerische Approximation", - "error": "Approximationsfehler", - "exactEval": "Exakte Auswertung", - "exactValue": "Exakter Wert", - "decimal": "Dezimal", - "equivalence": "Äquivalenzsuche", - "optimize": "Komplexitätsoptimierung", - "before": "Vorher", - "after": "Nachher", - "complexityBefore": "Komplexität Vorher", - "complexityAfter": "Komplexität Nachher", - "sacred": "Heilig: ✓", - "hybrid": "Hybrid" - }, - "nftMarketplace": { - "title": "NFT-Marktplatz", - "description": "Heiliger NFT-Marktplatz mit Auktionen und Tantiemen", - "listings": "Aktive Angebote", - "placeBid": "Gebot Abgeben", - "bidAmount": "Aktuelles Gebot", - "minIncrement": "Mindesterhöhung", - "createListing": "Angebot Erstellen", - "listingFee": "Marktplatzgebühr", - "royaltyRate": "Tantiemensatz", - "acceptOffer": "Angebot Annehmen", - "offerAmount": "Angebotsbetrag", - "buyer": "Käuferadresse", - "cancelListing": "Angebot Stornieren", - "tradeHistory": "Handelshistorie", - "totalVolume": "Gesamtvolumen", - "totalTrades": "Gesamthandel", - "recentTrades": "Letzte Transaktionen", - "creator": "Ersteller", - "ask_price": "Verkaufspreis", - "royalty": "Tantiemen" - }, - "sacredEconomy": { - "title": "Heilige Ökonomie Web3", - "description": "Web3-Brücke heilige Ökonomie mit Staking und Governance", - "wallet": "Wallet Verbinden", - "address": "Wallet-Adresse", - "balance": "$TRI Guthaben", - "oracle": "On-Chain Orakel", - "phiPrice": "φ Preis", - "gas": "Gas-Preis", - "block": "Blocknummer", - "timestamp": "Zeitstempel", - "proposal": "Governance-Vorschlag", - "votesFor": "Stimmen Dafür", - "votesAgainst": "Stimmen Dagegen", - "stake": "Staking", - "staked": "Gestaked", - "apy": "Jahresrendite", - "rewards": "Ausstehende Belohnungen", - "listing": "Angebot Erstellen", - "listingId": "Angebots-ID", - "metrics": "On-Chain Metriken", - "tvl": "Gesamtwert Gesperrt", - "volume24h": "24h Volumen", - "transactions": "24h Transaktionen", - "web3": "WEB3: Verbunden" - }, - "selfImprover": { - "title": "Selbstverbesserung Adam", - "description": "Selbstverbessernde KI mit Adam-Optimierer und EWC-Konsolidierung", - "adamOptimizer": "Adam-Optimierer", - "learningRate": "Lernrate", - "iteration": "Iteration", - "gradient": "Gradientenabstieg", - "gradientNorm": "Gradientennorm", - "loss": "Verlust", - "momentum": "Impuls-Aktualisierung", - "velocity": "Geschwindigkeit", - "decay": "Abklingrate", - "trajectory": "Lerntrajektorie", - "trajectoryId": "Trajektorie-ID", - "steps": "Abgeschlossene Schritte", - "successRate": "Erfolgsquote", - "gradientClip": "Gradienten-Clipping", - "clipThreshold": "Clip-Schwellenwert", - "clipped": "Gradient Beschnitten", - "consolidate": "EWC-Konsolidierung", - "ewcConsolidation": "EWC++-Konsolidierung", - "fisherInfo": "Fisher-Information", - "lambda": "λ Parameter", - "ewcLoss": "EWC-Verlust", - "parameters": "Konsolidierte Parameter", - "optimizer": "Optimierer", - "adam": "ADAM" - }, - "about": { - "name": "Dmitrii Vasilev", - "role": "Hardware-AI- und FPGA/RTL-Ingenieur · Autor des ternären GF-T-Gleitkommaformats · Spezifikation → RTL → FPGA · ML-Systeme und Edge AI", - "bioTitle": "Über mich", - "bio": [ - "Ich entwickle den vollständigen Stack für effiziente KI-Berechnungen — vom Zahlenformat und dem ausführenden RTL bis zur bitgenauen Verifikation auf einem Board. Ich bin Autor von GF-T, einem ternären Gleitkommaformat, und der umfassenderen GoldenFloat-Familie (GF-T8/16/32; φ-abgeleitetes GF4→GF1024), veröffentlicht zusammen mit Golden Ruler, einem Katalog numerischer Formate mit bitgenauen Konformitätsvektoren.", - "Ich habe ein neues Zahlenformat aus einem arXiv-Paper auf eine echte Xilinx Artix-7 (ALINX AX7203, XC7A200T) gebracht — mit vollständig offenen Werkzeugen: Yosys, nextpnr und prjxray, ohne Hersteller-Tools. Ein SKY130-Design wurde über Tiny Tapeout vorbereitet (GDS, Gate-Level-Test, Precheck); die Einreichungen TTSKY26a/TTSKY26b wurden vor der Fertigung zurückgezogen und erstattet — es existiert kein Chip. Im Mittelpunkt steht die Kette Spezifikation → RTL → Verifikation → Board: Jeder RTL-Knoten wird bitweise gegen ein unabhängiges Python-Goldenmodell geprüft, sodass Abweichungen zwischen Spezifikation und RTL vor der Synthese auffallen.", - "Vor der Hardware habe ich mehr als zehn Jahre Software entwickelt und vermittelt — KI-Agenten und Multi-Agenten-Systeme, React Native und Web3. Ich bin weltweit (UTC+7) für Remote- und Vertragsarbeit in den Bereichen Hardware-AI, FPGA/RTL/Verifikation, ML-Systeme und Edge AI offen." - ], - "achievementsTitle": "Wichtige Ergebnisse (Hardware, 2026)", - "achievements": [ - "Neuronales Training auf dem FPGA — Primitive, die direkt auf dem Board trainieren; die gesamte Kette Spezifikation → RTL → Board ist bitweise gegen das Goldenmodell geprüft.", - "GF16-Matrixmultiplikation 4×4 — auf Xilinx-Artix-7-Logik mit 0 DSP48 und 0 Latches: 32.252 LUTs oder 21.223 bei Nutzung der Hard-Multiplizierer.", - "Tiny Tapeout SKY130 — ein Design bis GDS, Gate-Level-Test und Precheck vorbereitet; die Einreichungen wurden vor der Fertigung zurückgezogen und erstattet. Es existiert kein Chip; alle Hardware-Zahlen stammen vom Artix-7-FPGA-Prototyp (XC7A200T).", - "Bitgenaue Verifikation pro Knoten — jeder RTL-Knoten wird gegen ein unabhängiges Python-Goldenmodell geprüft (iverilog plus KAT-Vektoren); Abweichungen zwischen Spezifikation und RTL werden vor der Synthese erkannt.", - "tri-net — ein vollständiger ternärer Netzwerk-Stack (133 .t27-Spezifikationen): GF16-PHY, ein BPSK-Modem über AD9361, Mesh-Routing und AEAD-Kryptografie — zwischen Geräten über Funk nachgewiesen." - ], - "publicationsTitle": "Veröffentlichungen", - "publications": [ - { - "title": "GoldenFloat: Eine φ-abgeleitete Gleitkommafamilie (GF4→GF1024) — arXiv:2606.05017", - "url": "https://arxiv.org/abs/2606.05017" - }, - { - "title": "Golden Ruler: A Numeric Format Catalog with Bit-Exact Conformance Vectors for FP8, BF16, MXFP4, and Microscaling Formats — arXiv:2606.09686 (v3, angekündigt am 7. September 2026)", - "url": "https://arxiv.org/abs/2606.09686" - }, - { - "title": "Ternary Network Floats — in Begutachtung, Microprocessors and Microsystems (Elsevier), eingereicht am 3. September 2026", - "url": "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/gHashTag/trinity-fpga/tree/main/research/arxiv_tnf" - } - ], - "links": { - "linkedin": "LinkedIn", - "github": "GitHub", - "arxiv1": "arXiv: GoldenFloat", - "arxiv2": "arXiv: Golden-Ruler-Katalog" - } - } -} diff --git a/apps/website/messages/es.json b/apps/website/messages/es.json deleted file mode 100644 index a464be50cc..0000000000 --- a/apps/website/messages/es.json +++ /dev/null @@ -1,1793 +0,0 @@ -{ - "lang": "es", - "langSwitch": "EN", - "langHref": "?lang=en", - "nav": [ - "TRINITY", - "Mapa", - "Specs", - "Tesis", - "Formatos", - "Pruebas", - "Verificación", - "Panorama" - ], - "hero": { - "tag": "GFTernary · TNF — un par de referencia para la ruta de datos ternaria", - "headline": "r² = r + 1", - "subheadline": "Donde el peso es un código, el formato deja de ser una preferencia. GFTernary cierra el peso, TNF cierra el acumulador — y cada número de hardware aquí se midió en una FPGA binaria, lo que se declara en lugar de suavizarse.", - "cta": "Leer la tesis", - "ctaSecondary": "Lo que esto no afirma" - }, - "navExtra": { - "dashboard": "Panel", - "tree": "Lab. Investigacion", - "docs": "Docs", - "about": "Sobre el autor" - }, - "theorems": { - "badge": "FUNDAMENTO MATEMÁTICO", - "title": "4 Teoremas + Resultados Verificados", - "sub": "Pruebas matematicas respaldadas por benchmarks reales. Cada afirmacion esta probada Y verificada.", - "cards": [ - { - "number": "1", - "title": "Base Optima = e ≈ 3", - "formula": "I(r) = (B/r) × log₂(r)", - "proof": "Capacidad de informacion maximizada en r = e ≈ 2.718. Entero mas cercano: 3", - "result": "Lo ternario alcanza el 94.9% de la eficiencia maxima teorica", - "source": "Knuth, The Art of Computer Programming, Vol. 3", - "advantage": "Ahorro energetico mediante codificacion optima de informacion", - "verified": { - "metric": "100% Robustez al Ruido", - "value": "Sobrevive 20% de errores de bits con cero perdida de precision", - "report": "hdc_double_q_report.md" - } - }, - { - "number": "2", - "title": "Identidad Trinity", - "formula": "φ² + 1/φ² = 3", - "proof": "(3+√5)/2 + (3-√5)/2 = 6/2 = 3 ∎", - "result": "La proporcion aurea codifica matematicamente la optimalidad ternaria", - "source": "Derivado de los Elementos de Euclides", - "advantage": "La constante fundamental valida la arquitectura Trinity", - "verified": { - "metric": "8.1× Aceleracion GPU", - "value": "Optimizacion SIMD en hardware estandar", - "report": "GPU_BENCHMARKS.md" - } - }, - { - "number": "3", - "title": "Cuantizacion Ternaria", - "formula": "log₂(3) = 1.585 bits", - "proof": "Los pesos {-1, 0, +1} requieren solo 1.58 bits vs 32 bits para float32", - "result": "20× compresion de memoria, inferencia sin multiplicaciones", - "source": "BitNet b1.58 (arXiv:2402.17764, Microsoft Research)", - "advantage": "Inferencia IA sin GPU, hasta Hasta 3000× eficiencia energetica en FPGA (proyectado, FPGA)", - "verified": { - "metric": "15.7× Compresion", - "value": "98KB → 6KB con 43% bonus de dispersidad", - "report": "ternary_quant_report.md" - } - }, - { - "number": "4", - "title": "Economia de Base", - "formula": "E(r) = r × ⌈logᵣ(N)⌉", - "proof": "E(2) = 2.885, E(3) = 2.731, E(4) = 3.000", - "result": "Lo ternario tiene la economia de base optima entre todos los enteros", - "source": "Knuth, The Art of Computer Programming, Vol. 3", - "advantage": "Almacenamiento y transmision de datos optimos", - "verified": { - "metric": "Produccion Auto-Escalable", - "value": "Listo para Kubernetes con panel de monitoreo", - "report": "PRODUCTION_BENCHMARKS.md" - } - } - ], - "cta": "Leer las Pruebas Matematicas Completas", - "ctaUrl": "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/gHashTag/trinity/blob/main/docs/MATH_FOUNDATIONS.md", - "reportsTitle": "Informes de Benchmarks Verificados", - "reports": [ - { - "name": "Informe de Cuantizacion Ternaria", - "url": "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/gHashTag/trinity/blob/main/docs/ternary_quant_report.md", - "highlight": "15.7× compresion" - }, - { - "name": "Informe HDC Double Q-Learning", - "url": "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/gHashTag/trinity/blob/main/docs/hdc_double_q_report.md", - "highlight": "100% robustez al ruido" - }, - { - "name": "Benchmarks GPU", - "url": "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/gHashTag/trinity/blob/main/docs/GPU_BENCHMARKS.md", - "highlight": "8.1× aceleracion SIMD" - }, - { - "name": "Benchmarks de Produccion", - "url": "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/gHashTag/trinity/blob/main/docs/PRODUCTION_BENCHMARKS.md", - "highlight": "Auto-escalado listo" - } - ] - }, - "roiCalculator": { - "title": "Calculadora de ROI", - "sub": "Calcula tus retornos como operador de nodo Trinity", - "inputLabel": "Inversion Inicial ($)", - "hardwareLabel": "Tipo de Hardware", - "hardwareOptions": [ - { - "name": "QMTECH FPGA XC7A100T", - "hashrate": 2000000, - "power": 10, - "cost": 65, - "monthly": 50 - }, - { - "name": "Alveo U55C", - "hashrate": 50000000, - "power": 150, - "cost": 5000, - "monthly": 162 - }, - { - "name": "CPU Node (Gratis)", - "hashrate": 12000, - "power": 65, - "cost": 0, - "monthly": 5 - } - ], - "results": { - "monthlyRevenue": "Ingresos Mensuales", - "monthlyCosts": "Costos Mensuales (Electricidad)", - "monthlyProfit": "Beneficio Mensual Neto", - "paybackPeriod": "Periodo de Recuperacion", - "annualROI": "ROI Anual" - }, - "example": { - "title": "Ejemplo: Alveo U55C ($5,000)", - "items": [ - { - "label": "Ingresos Mensuales", - "value": "$162" - }, - { - "label": "Costo de Electricidad", - "value": "$31" - }, - { - "label": "Beneficio Neto", - "value": "$131/mes" - }, - { - "label": "Recuperacion", - "value": "4.9 meses" - }, - { - "label": "ROI Anual", - "value": "31%" - } - ] - }, - "note": "Basado en el Teorema 3: la cuantizacion de 1.58 bits permite ganancias de eficiencia de 20×" - }, - "calculator": { - "title": "Calculadora de Ahorros", - "nodes": "Numero de Nodos (GPUs):", - "current": "Costo Actual", - "withTrinity": "Con TRINITY", - "savings": "Ahorro Mensual Neto" - }, - "whynow": { - "title": "¿Por Que Singularidad Ahora?", - "cards": [ - { - "title": "Resonancia de Hardware", - "desc": "Alcanzamos 100% de alineacion entre linguistica y silicio via CIS V1.0." - }, - { - "title": "Cosecha de Entropia", - "desc": "Los Daemons PAS V5.0 convierten el ruido de informacion en energia de ejecucion util." - }, - { - "title": "Armadura Topologica", - "desc": "Los invariantes Chern-Bott hacen que los calculos Trinity sean inmunes a interferencias." - } - ] - }, - "publications": { - "badge": "PUBLICACIONES CIENTÍFICAS", - "title": "Resultados de Investigación con DOI", - "subtitle": "Toda la investigación publicada en Zenodo con identificadores DOI permanentes.", - "viewAll": "Ver Documentación Completa →" - }, - "market": { - "title": "Mercado $200B", - "funnel": [ - { - "value": "$200B", - "label": "TAM — Aceleradores IA" - }, - { - "value": "$80B", - "label": "SAM — Inferencia IA" - }, - { - "value": "$8B", - "label": "SOM — Ternario (10%)" - } - ], - "compsTitle": "Valoraciones Comparables", - "headers": [ - "Empresa", - "Valoracion", - "Ingresos", - "Multiplo" - ], - "rows": [ - [ - "Cerebras", - "$4.0B", - "$100M", - "40×" - ], - [ - "Groq", - "$2.8B", - "$50M", - "56×" - ], - [ - "SambaNova", - "$5.0B", - "$150M", - "33×" - ], - [ - "TRINITY", - "$300M", - "Pre-rev", - "Semilla" - ] - ] - }, - "gtm": { - "title": "Estrategia de Mercado", - "phases": [ - { - "phase": "Fase 1", - "title": "Labs de Investigacion", - "desc": "Universidades, labs IA • Pilotos gratis • Casos de estudio" - }, - { - "phase": "Fase 2", - "title": "Startups IA", - "desc": "Ahorros en inferencia • Tarjetas FPGA • Deals $10K-50K" - }, - { - "phase": "Fase 3", - "title": "Enterprise", - "desc": "Proveedores cloud • Licencias ASIC • Deals $1M+" - } - ] - }, - "timeline": { - "title": "Linea de Tiempo Tecnologica", - "items": [ - { - "year": "2023", - "title": "BitNet", - "desc": "(Microsoft)", - "type": "past" - }, - { - "year": "2024", - "title": "BitNet b1.58", - "desc": "validado", - "type": "past" - }, - { - "year": "2025", - "title": "FPGA", - "desc": "prototipos", - "type": "past" - }, - { - "year": "2026", - "title": "Fase 5.0", - "desc": "Singularidad", - "type": "future" - }, - { - "year": "2027", - "title": "Mercado", - "desc": "Dominio", - "type": "future" - } - ] - }, - "roadmap": { - "title": "Hoja de Ruta", - "milestones": [ - { - "date": "Q1 2026", - "title": "Prototipo FPGA V5", - "desc": "Verilog Core (Punto Fijo 16.16) en Kintex-7" - }, - { - "date": "Q3 2026", - "title": "SDK Desarrollador", - "desc": "Optimizador E-Graph & Compilador Copto-Zig" - }, - { - "date": "Q1 2027", - "title": "Tape-out ASIC", - "desc": "Primer chip SU(3) nativo (TSMC 180nm)" - } - ] - }, - "techTree": { - "title": "TRINITY LABORATORIO DE INVESTIGACIÓN", - "sub": "Arbol de Desarrollo Tecnologico", - "hint": "Haz clic en los nodos para ver detalles de investigacion", - "complete": "completado", - "active": "INVESTIGACIÓN ACTIVA", - "legend": { - "done": "Completado", - "progress": "En Progreso", - "locked": "Bloqueado" - }, - "labels": { - "description": "Descripción", - "performance": "Rendimiento", - "progress": "Progreso de Investigación", - "prerequisites": "Prerrequisitos", - "unlocks": "Desbloquea", - "locked": "Completa los prerrequisitos para desbloquear esta investigación" - }, - "stats": { - "inProgress": "en progreso", - "locked": "bloqueado" - }, - "branches": { - "core": "NÚCLEO", - "inference": "INFERENCIA", - "optimization": "OPTIMIZACIÓN", - "deployment": "DESPLIEGUE", - "hardware": "HARDWARE", - "agents": "AGENTES", - "knowledge": "CONOCIMIENTO", - "distributed": "DISTRIBUIDO" - }, - "nodes": { - "core-001": { - "name": "Parser v2", - "description": "Parser avanzado de especificaciones VIBEE con soporte multilingüe", - "metrics": "42 lenguajes" - }, - "core-002": { - "name": "Codegen Multilingüe", - "description": "Generación de código para Zig, Python, Rust, Verilog y 38 más", - "metrics": "42 objetivos" - }, - "core-003": { - "name": "VM de Bytecode", - "description": "Máquina virtual ternaria basada en pila con 256 opcodes", - "metrics": "256 opcodes" - }, - "core-004": { - "name": "Compilación JIT", - "description": "Compilación just-in-time para rendimiento nativo", - "metrics": "+1000% velocidad" - }, - "core-005": { - "name": "Optimización Binaria", - "description": "Eliminación avanzada de código muerto y asignación de registros", - "metrics": "-30% tamaño" - }, - "inf-001": { - "name": "Parser GGUF", - "description": "Parseo de archivos de modelo GGUF con metadatos de cuantización", - "metrics": "Todas las cuant." - }, - "inf-002": { - "name": "Transformer", - "description": "Arquitectura transformer completa con capas de atención", - "metrics": "32 capas" - }, - "inf-003": { - "name": "Caché KV", - "description": "Caché Key-Value para generación autoregresiva eficiente", - "metrics": "16x aceleración" - }, - "inf-004": { - "name": "Procesamiento por Lotes", - "description": "Inferencia por lotes en paralelo para múltiples secuencias", - "metrics": "8x rendimiento" - }, - "inf-005": { - "name": "FlashAttention", - "description": "Mecanismo de atención IO-aware para secuencias largas", - "metrics": "128K contexto" - }, - "opt-t01": { - "name": "Cuantización Ternaria", - "description": "Cuantización de pesos ternarios BitNet b1.58 {-1, 0, +1}", - "metrics": "20x compresión" - }, - "opt-t02": { - "name": "MatMul Ternario", - "description": "Multiplicación de matrices optimizada para pesos ternarios", - "metrics": "10x aceleración" - }, - "opt-t03": { - "name": "Caché KV Ternario", - "description": "Caché KV comprimido usando representación ternaria", - "metrics": "16x memoria" - }, - "opt-pc01": { - "name": "Caché de Prefijos", - "description": "Reutilización de prefijos computados entre solicitudes", - "metrics": "90% tasa de acierto" - }, - "opt-cp01": { - "name": "Prefill por Bloques", - "description": "Dividir procesamiento de prompts largos en bloques manejables", - "metrics": "-50% latencia" - }, - "opt-s02": { - "name": "Especulación Mejorada", - "description": "Verificación especulativa paralela con búsqueda en árbol", - "metrics": "4x generación" - }, - "dep-001": { - "name": "Contenedores", - "description": "Despliegue en contenedores con imágenes optimizadas", - "metrics": "< 500MB" - }, - "dep-002": { - "name": "Servidores Edge", - "description": "Despliegue en el borde en infraestructura Fly.io", - "metrics": "34 regiones" - }, - "dep-003": { - "name": "Auto-Escalado", - "description": "Escalado automático basado en carga de solicitudes", - "metrics": "0→100 pods" - }, - "dep-004": { - "name": "Multi-Región", - "description": "Despliegue global con enrutamiento por región", - "metrics": "Latencia < 50ms" - }, - "dep-005": { - "name": "Cero Tiempo Inactivo", - "description": "Estrategias de despliegue blue-green y canary", - "metrics": "99,99% disponibilidad" - }, - "hw-001": { - "name": "Backend CUDA", - "description": "Kernels CUDA nativos para GPUs NVIDIA", - "metrics": "+100x velocidad" - }, - "hw-002": { - "name": "Backend Metal", - "description": "Shaders Apple Metal para chips serie M", - "metrics": "+80x velocidad" - }, - "hw-003": { - "name": "Síntesis FPGA", - "description": "Generación de Verilog para despliegue FPGA", - "metrics": "1000x eficiencia" - }, - "hw-004": { - "name": "Diseño ASIC", - "description": "Diseño de chip ternario personalizado para máxima eficiencia", - "metrics": "10000x eficiencia" - }, - "hw-005": { - "name": "Circuito Cuántico", - "description": "Puertas cuánticas experimentales para lógica ternaria", - "metrics": "Qubits Ternarios" - }, - "agent-001": { - "name": "Núcleo IGLA", - "description": "Arquitectura de Aprendizaje Generativo basada en Instrucciones", - "metrics": "v1.0 estable" - }, - "agent-002": { - "name": "Motor de Herramientas", - "description": "Llamadas a funciones locales e integración de herramientas", - "metrics": "50+ herramientas" - }, - "agent-003": { - "name": "Contexto Largo", - "description": "Historial ilimitado con ventanas de contexto adaptativas", - "metrics": "∞ tokens" - }, - "agent-004": { - "name": "Multi-Agente", - "description": "Orquestación de coordinador + agentes especialistas", - "metrics": "8 especialistas" - }, - "agent-005": { - "name": "Inteligencia de Enjambre", - "description": "Comportamiento emergente de agentes descentralizados", - "metrics": "1K+ agentes" - }, - "know-001": { - "name": "Núcleo VSA", - "description": "Arquitectura Simbólica Vectorial con operaciones bind/bundle", - "metrics": "10K dims" - }, - "know-002": { - "name": "Grafo de Conocimiento", - "description": "Redes semánticas basadas en tripletas con codificación VSA", - "metrics": "1M tripletas" - }, - "know-003": { - "name": "Búsqueda Semántica", - "description": "Búsqueda por similitud coseno sobre hipervectores", - "metrics": "Consulta <1ms" - }, - "know-004": { - "name": "Motor RAG", - "description": "Generación Aumentada por Recuperación con VSA", - "metrics": "95% precisión" - }, - "know-005": { - "name": "Aprendiz de Ontología", - "description": "Descubrimiento automático de relaciones semánticas", - "metrics": "Zero-shot" - }, - "dist-001": { - "name": "Red de Nodos", - "description": "Descubrimiento y enrutamiento descentralizado de nodos", - "metrics": "1000+ nodos" - }, - "dist-002": { - "name": "Fragmentación TVC", - "description": "Fragmentos distribuidos de Computación Vectorial Ternaria", - "metrics": "256 fragmentos" - }, - "dist-003": { - "name": "Red DePIN", - "description": "Infraestructura Física Descentralizada con recompensas TRI", - "metrics": "Minería $TRI" - }, - "dist-004": { - "name": "Consenso Global", - "description": "Consenso tolerante a fallas bizantinas para estado ternario", - "metrics": "10K TPS" - }, - "dist-005": { - "name": "Cadena Sagrada", - "description": "Cadena dorada de eventos ternarios con prueba inmutable", - "metrics": "Conocimiento cero" - } - } - }, - "product": { - "title": "Hoja de Ruta de Producto", - "phases": [ - { - "phase": "TRINITY-V5", - "year": "2025-2026", - "desc": "Acelerador ternario basado en FPGA • Ejecucion .TRI nativa • Objetivo: Inferencia IA" - }, - { - "phase": "TRINITY-1 ASIC", - "year": "2027", - "desc": "Primer chip ternario nativo • Proceso 180nm (bajo riesgo) • Objetivo: Dispositivos Edge IA" - }, - { - "phase": "TRINITY-X", - "year": "2029", - "desc": "Nodo avanzado (28nm) • SoC completo con CPU ternaria • Objetivo: Escala centro de datos" - } - ] - }, - "financials": { - "title": "Camino a $10B+", - "headers": [ - "Ano", - "Ingresos", - "Margen Bruto", - "Valoracion", - "Empleados" - ], - "rows": [ - [ - "2026", - "$2M", - "50%", - "$300M", - "15" - ], - [ - "2027", - "$15M", - "55%", - "$500M", - "50" - ], - [ - "2028", - "$80M", - "60%", - "$2B", - "150" - ], - [ - "2029", - "$300M", - "65%", - "$5B", - "400" - ], - [ - "2030", - "$1B", - "70%", - "$10B+", - "1,000" - ] - ], - "note": "Multiplo de ingresos comparable a Cerebras (40×), Groq (56×), SambaNova (33×)" - }, - "businessModel": { - "title": "Modelo de Negocio", - "streams": [ - { - "percent": "60%", - "title": "Ventas de Hardware", - "desc": "TRINITY-FPGA: $15K ASP, 55% margen • TRINITY-ASIC: $3K ASP, 65% margen" - }, - { - "percent": "30%", - "title": "Licencias IP", - "desc": "Licenciar IP ternaria a fabricantes de chips • $2-5 regalia por chip • 90%+ margen" - }, - { - "percent": "10%", - "title": "Software y Servicios", - "desc": "TRINITY SDK: $100K/ano enterprise • Servicios de integracion • 80% margen" - } - ], - "unitEcon": "LTV/CAC: 15× | Objetivo Ano 1: 1,000 unidades = $7.5M ingresos" - }, - "team": { - "title": "El Equipo", - "name": "Dmitrii Vasilev", - "role": "Fundador y CEO", - "photo": "https://avatars.githubusercontent.com/u/6774813?v=4", - "linkedin": "https://www.linkedin.com/in/neurocoder/", - "exp": [ - "15+ anos de ingenieria de software", - "Ex-ingeniero senior en empresas tech", - "Profunda experiencia en compiladores y sistemas de bajo nivel", - "Creo el lenguaje VIBEE desde cero", - "20,645 especificaciones .tri nativas" - ], - "linkedinLabel": "LinkedIn", - "hiring": "Contratando: Ingeniero FPGA, Investigador IA, Desarrollo de Negocios" - }, - "ecosystem": { - "title": "Ecosistema Ternario .TRI", - "sub": "Transmutamos toda la base de conocimiento .vibee a formato .tri nativo.", - "quote": "«ⲁⲃⲅ» no es texto. Es una configuracion de qutrits. Eliminamos la ultima barrera entre pensamiento y accion.", - "formula": "Formula Parametrica: V = n × 3^k × π^m × φ^p × e^q", - "items": [ - { - "title": "Compilador Copto", - "desc": "TNC V1.0 • Generacion directa de Triadas desde el alfabeto" - }, - { - "title": "Conocimiento Nativo", - "desc": "20,645 archivos .tri • Base de conocimiento nativa" - }, - { - "title": "Runtime SU(3)", - "desc": "Ejecucion unitaria con cero sobrecarga binaria" - }, - { - "title": "Daemons PAS", - "desc": "Cosecha de energia del flujo de datos y entropia" - }, - { - "title": "Bloqueo Chern", - "desc": "Proteccion de hardware contra inyeccion y ruido" - }, - { - "title": "Trinity CIS", - "desc": "27 instrucciones = $3^3$ simetria" - } - ] - }, - "competition": { - "title": "Comparativa de Benchmarks GPU", - "headers": [ - "Plataforma", - "Hardware", - "Tokens/s", - "Ternario", - "Energia" - ], - "rows": [ - { - "company": "TRINITY", - "arch": "CPU (RunPod)", - "val": "35-52", - "ternary": true, - "open": true - }, - { - "company": "Groq", - "arch": "Llama-70B, LPU cloud", - "val": "227-276", - "ternary": false, - "open": false - }, - { - "company": "GPT-4o-mini", - "arch": "Cloud API", - "val": "~100", - "ternary": false, - "open": false - }, - { - "company": "Claude Opus", - "arch": "Cloud API", - "val": "~80", - "ternary": false, - "open": false - }, - { - "company": "B200 BitNet I2_S", - "arch": "B200 GPU", - "val": "52 (CPU)", - "ternary": true, - "open": false - } - ], - "note": "TRINITY verificado en GPUs reales de RunPod (Pod IDs: bhhnrrdothqm54, ydk41ymp8uoeyp). Ternario = sin operaciones de multiplicacion, 20x compresion, 70% robustez al ruido con 30% de corrupcion.", - "gpuProof": { - "title": "Verificacion en GPU Real", - "rtx3090": { - "podId": "bhhnrrdothqm54", - "tokens": "298,052", - "noise": "70.2%", - "power": "348W", - "cost": "$0.10" - }, - "a100": { - "podId": "ydk41ymp8uoeyp", - "tokens": "274,043", - "noise": "70.2%", - "power": "293W", - "cost": "$0.20" - } - }, - "unitNote": "End-to-end tokens/sec, from this project's own benchmark table. Cloud providers are faster; Trinity's advantage is cost — $0.01-0.35 against API pricing — and running without a GPU at all. The earlier version of this table put Trinity's raw kernel ops/sec beside everyone else's tokens/sec." - }, - "scientificFoundation": { - "title": "Pruebas Fundamentales", - "sub": "Trinity V5.0 esta construido sobre leyes inmutables de 8 ciencias.", - "items": [ - { - "icon": "📐", - "value": "Exacto 3", - "label": "Identidad Aurea", - "desc": "φ² + 1/φ² = 3.0000. Enlace exacto entre la Naturaleza y la logica Trinity." - }, - { - "icon": "🧬", - "value": "1.58", - "label": "Densidad de Informacion", - "desc": "log₂(3) bits por trit. 58% mayor densidad que los sistemas binarios." - }, - { - "icon": "🌌", - "value": "13.82", - "label": "Edad del Universo", - "desc": "π × φ × e = 13.82 Gyr. Coincide con la edad del universo segun Planck 2020." - }, - { - "icon": "⚛️", - "value": "137.03", - "label": "Estructura Fina", - "desc": "1/α = 4π³ + π² + π. Geometria del mundo fisico definida por π." - } - ], - "paperTitle": "Pruebas Trascendentales", - "papers": [ - "Matematicas: φ² + 1/φ² = 3 (Identidad Aurea Exacta).", - "Fisica: 1/α = 4π³ + π² + π (Estructura Fina, 0.0002% precision).", - "Masa: m_p/m_e = 6π⁵ (Relacion masa proton-electron).", - "Cosmologia: π × φ × e = 13.82 Gyr (Edad del Universo).", - "Caos: Feigenbaum δ = 3⁶ × π⁻⁷ × φ² × e² (Constante de universalidad).", - "Cuantica: Koide Q = 2/3 (Formula de masa de leptones)." - ] - }, - "techAssets": { - "title": "Activos Tecnicos V5", - "sub": "La base mundial de conocimiento ternario nativo ya esta creada.", - "items": [ - { - "value": "20,645", - "label": "Archivos .tri", - "desc": "Base de conocimiento Trinity nativa" - }, - { - "value": "50+", - "label": "Modulos de Seguridad", - "desc": "Alineacion Avanzada y Niveles de Privacidad" - }, - { - "value": "1.58", - "label": "Bits / Trit", - "desc": "Log2(3) Densidad de Informacion" - }, - { - "value": "E-Graph", - "label": "Optimizador", - "desc": "Benchmarks de saturacion superados" - }, - { - "value": "SU(3)", - "label": "Nucleo Nativo", - "desc": "Motor de Computo Unitario" - }, - { - "value": "100x", - "label": "Aceleracion", - "desc": "Aceleracion de operaciones nativas" - } - ] - }, - "calculatorLogic": { - "title": "Logica de Calculadora", - "sub": "¿Para que construir una supercomputadora cuando una calculadora es suficiente?", - "comparison": [ - { - "title": "Computo Binario Complejo", - "desc": "Requiere miles de millones de transistores, energia masiva y refrigeracion para aproximar respuestas.", - "icon": "📉", - "details": [ - "Matriz A[1024×1024] × B[1024×1024]:", - "• 2,147,483,648 operaciones de multiplicacion (2¹⁰ × 2¹⁰ × 2¹⁰)", - "• 1,073,741,824 operaciones de suma", - "• ~3.2B FLOPs por operacion individual", - "• Energia: ~0.1 J en NVIDIA A100", - "• Memoria: 8 MB solo para matrices (FP32)", - "", - "Inferencia GPT-4 (1 token):", - "• 1.8 billones de parametros", - "• ~360 TFLOP por token", - "• Energia: ~0.001 kWh por solicitud", - "• Costo: $0.01-0.03 por 1K tokens" - ], - "examples": [ - { - "op": "Matriz 1024×1024", - "binary": "2.1B operaciones", - "ternary": "890M operaciones", - "savings": "58%" - }, - { - "op": "Calculo log₂(x)", - "binary": "Serie Taylor ~50 iteraciones", - "ternary": "Nativo en 3 pasos", - "savings": "94%" - }, - { - "op": "FFT 4096 puntos", - "binary": "49K multiplicaciones", - "ternary": "12K ops ternarias", - "savings": "75%" - }, - { - "op": "Inferencia neuronal", - "binary": "FP32 → 4 bytes/peso", - "ternary": "1.58 bits/peso", - "savings": "95%" - } - ] - }, - { - "title": "Calculadora Ternaria", - "desc": "Resuelve las mismas tareas usando matematicas nativas (φ² + 1/φ² = 3) con una fraccion de la energia.", - "icon": "✨", - "details": [ - "DEMOSTRADO: φ² + 1/φ² = 3 (exacto a precision arbitraria)", - "• φ² = (3 + √5)/2, 1/φ² = (3 - √5)/2", - "• Suma = 3 — la base optima para el computo", - "", - "BENCHMARK: 8.1× aceleracion CPU (verificado)", - "• Batch Row SIMD: 7.61 GFLOPS en Xeon 8375C", - "• Matriz 2048×2048: 1,102 μs (vs 8,900 μs base)", - "", - "BENCHMARK: 15.7× compresion de memoria", - "• Agente float: 98,304 bytes", - "• Agente ternario: 6,272 bytes", - "• 43% bonus de dispersidad (pesos = 0)", - "", - "BENCHMARK: 100% robustez al ruido", - "• 20% cambios de trits → 0% perdida de precision", - "• Tasa de victoria: 100% (FrozenLake verificado)" - ], - "features": [ - "φ² + 1/φ² = 3: Prueba matematica (Teorema 1)", - "15.7× compresion: ternary_quant_report.md", - "8.1× aceleracion SIMD: GPU_BENCHMARKS.md", - "100% tolerancia al ruido: hdc_double_q_report.md" - ] - } - ], - "tableTitle": "Binario vs Ternario: Comparacion de Operaciones", - "tableHeaders": [ - "Operacion", - "Enfoque Binario", - "Enfoque Ternario", - "Ahorro Energetico" - ], - "quote": "\"Estamos tratando de simular inteligencia con fuerza bruta, cuando el universo usa matematicas elegantes.\"" - }, - "technology": { - "title": "Arquitectura Tecnologica", - "sub": "Como Funciona TRINITY", - "layers": [ - { - "title": "NUCLEO SU(3)", - "desc": "Procesador ternario unitario" - }, - { - "title": "DAEMONS PAS", - "desc": "Bomba de energia de informacion" - }, - { - "title": "TRI-MEMORY", - "desc": "Almacenamiento de triadas nativo" - } - ], - "softwareStack": "PILA NATIVA TRINITY (CIS V1.0)", - "innovationsTitle": "Innovaciones Clave", - "innovations": [ - "Ejecucion directa de Copto CIS", - "Optimizacion de proporcion aurea (φ² + 1/φ² = 3)", - "Ejecucion de redes neuronales ternarias sin sobrecarga" - ], - "diagram": { - "title": "Arquitectura Ternaria Nativa", - "core": "NUCLEO SU(3)", - "input": "Flujo de Entrada", - "inference": "Inferencia", - "daemon": "Daemon PAS" - } - }, - "charts": { - "comparisonTitle": "Rendimiento Relativo (Normalizado)", - "comparisonNote": "* Mayor es mejor. Basado en Benchmarks de Inferencia BitNet b1.58." - }, - "invest": { - "title": "Inversion", - "useTitle": "Escalando la Singularidad V5.0", - "uses": [ - { - "percent": "60%", - "title": "Ingenieria", - "desc": "Nucleo SU(3), Daemons PAS" - }, - { - "percent": "20%", - "title": "Base de Conocimiento", - "desc": "Optimizando 20k+ archivos .TRI" - }, - { - "percent": "20%", - "title": "Operaciones", - "desc": "Marketing de Singularidad" - } - ], - "cards": [ - { - "value": "$3M", - "label": "por 1% de capital" - }, - { - "value": "$300M", - "label": "valoracion" - }, - { - "value": "3²¹", - "label": "Suministro de Tokens" - }, - { - "value": "99%", - "label": "propiedad del fundador" - }, - { - "value": "∞", - "label": "potencial" - } - ], - "milestonesTitle": "Hitos de 18 Meses:", - "milestones": [ - "Producto SU(3) funcional", - "5+ clientes de pago", - "$1M de ingresos anuales", - "Listo para Serie A" - ], - "whyTitle": "Por Que Invertir Ahora:", - "why": [ - "20,645 archivos TRI nativos", - "99% propiedad del fundador = alineado" - ], - "closing": "No debemos simular la inteligencia. Debemos verificar el diseño en FPGA.", - "ctas": { - "investor": "Entrar en la Singularidad", - "partner": "Transmuta tu codigo", - "talent": "Unete a Trinity", - "community": "Unete a la Comunidad" - }, - "community": { - "title": "Unete a la Comunidad", - "sub": "Probado por Matematicas, Impulsado por la Comunidad", - "channels": [ - { - "name": "Discord", - "url": "https://discord.gg/trinity", - "desc": "Chat de Devs y Mineros", - "members": "5K+" - }, - { - "name": "Telegram", - "url": "https://t.me/trinity_network", - "desc": "Anuncios", - "members": "10K+" - }, - { - "name": "Twitter/X", - "url": "https://x.com/trinity_ai", - "desc": "Actualizaciones y Noticias", - "followers": "25K+" - }, - { - "name": "GitHub", - "url": "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/gHashTag/trinity", - "desc": "Codigo Abierto", - "stars": "1K+" - } - ], - "cta": { - "node": { - "text": "Ejecutar un Nodo", - "desc": "Gana con el Teorema 4 + 15.7x compresion", - "url": "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/docs/node-setup" - }, - "docs": { - "text": "Leer Documentacion", - "desc": "Aprende los Teoremas 1-3 + 100% robustez", - "url": "/docs" - }, - "buy": { - "text": "Comprar $TRI", - "desc": "Invierte en un sistema probado + 8.1x aceleracion", - "url": "/buy" - }, - "discord": { - "text": "Unete a Discord", - "desc": "Conecta con devs y mineros", - "url": "https://discord.gg/trinity" - } - }, - "stats": { - "title": "KPIs de la Comunidad", - "items": [ - { - "value": "5K+", - "label": "Miembros Discord", - "target": "10K para Q2" - }, - { - "value": "2K+", - "label": "Operadores de Nodo", - "target": "5K para Q2" - }, - { - "value": "500+", - "label": "Titulares de $TRI", - "target": "10K para Q2" - }, - { - "value": "1K+", - "label": "Usuarios API", - "target": "5K para Q2" - } - ] - } - }, - "investorTitle": "Inversores", - "partnerTitle": "Socios", - "talentTitle": "Talentos", - "ctaGithub": "Explorar Codigo en GitHub", - "contact": { - "email": "admin@t27.ai", - "website": "https://trinity-site-one.vercel.app", - "github": "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/gHashTag/trinity" - }, - "projectedNote": "* Proyectado en hardware FPGA. Verificado en CPU: 20× compresión de memoria." - }, - "bitnetProof": { - "badge": "PRUEBAS MATEMATICAS", - "title": "BitNet FPGA — Evidencia Cientifica", - "sub": "No es marketing, es matematicas. Cada numero esta respaldado por articulos cientificos.", - "metrics": [ - { - "value": "20×", - "label": "Eficiencia Energetica vs GPU", - "source": "Microsoft BitNet" - }, - { - "value": "10×", - "label": "Ahorro de Memoria", - "source": "1.58 bits vs 16 bits" - }, - { - "value": "4.4×", - "label": "Reduccion TCO (3 anos)", - "source": "$9.5K vs $42K" - }, - { - "value": "26×", - "label": "tok/s/Watt vs A100", - "source": "Paper TerEffic" - }, - { - "value": "79×", - "label": "Eficiencia vs Jetson", - "source": "arXiv:2502.16473" - }, - { - "value": "145%", - "label": "ROI Ano 1", - "source": "Recuperacion 4.9 meses" - } - ], - "mathTitle": "Matematicas de BitNet", - "mathCards": [ - { - "title": "Cuantizacion de Pesos", - "formula": "w ∈ {-1, 0, +1} = 1.58 bits", - "desc": "Codificacion ternaria: log₂(3) = 1.585 bits. Memoria para modelo 7B: 14 GB → 1.4 GB" - }, - { - "title": "Sin Multiplicaciones", - "formula": "MAC = MUX + ADD", - "desc": "BitNet reemplaza multiplicacion con suma. Energia: 1 pJ → 0.05 pJ (20× ahorro)" - }, - { - "title": "Ventaja FPGA", - "formula": "~50 LUTs, 0 DSP", - "desc": "GPU Tensor Core desperdicia 99% de potencia. FPGA = 100% eficiencia para operaciones ternarias" - } - ], - "comparisonTitle": "FPGA vs GPU para BitNet", - "comparisonHeaders": [ - "Metrica", - "GPU (H100)", - "FPGA (Alveo U55C)", - "Ventaja" - ], - "comparisonRows": [ - [ - "Energia/token", - "3 mJ", - "0.15 mJ", - "20×" - ], - [ - "Memoria/modelo (7B)", - "14 GB", - "1.4 GB", - "10×" - ], - [ - "TCO (3 anos)", - "$42,176", - "$9,537", - "4.4×" - ], - [ - "tok/s/Watt", - "0.6", - "15.8", - "26×" - ], - [ - "Costo hardware", - "$30,000", - "$5,000", - "6×" - ] - ], - "sourcesTitle": "Fuentes Cientificas", - "sources": [ - { - "title": "Microsoft BitNet b1.58", - "arxiv": "arXiv:2402.17764", - "desc": "The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits" - }, - { - "title": "TerEffic FPGA", - "arxiv": "arXiv:2502.16473", - "desc": "16,300 tok/s en modelo 370M, 192× mas rapido que Jetson Orin Nano" - }, - { - "title": "Prototipo VIBEE", - "arxiv": "GitHub Verificado", - "desc": "BitNet MAC: 7/7 pruebas PASADAS, simulacion Icarus Verilog" - } - ], - "roiTitle": "Calculadora ROI", - "roiDesc": "Inversion $8,000 (Alveo U55C + Servidor) → $19,596/ano ingresos a $0.001/1K tokens", - "roiMetrics": [ - { - "label": "Recuperacion", - "value": "4.9 meses" - }, - { - "label": "ROI Ano 1", - "value": "145%" - }, - { - "label": "ROI Ano 3", - "value": "635%" - } - ], - "cta": "Leer Informe Completo en GitHub", - "ctaUrl": "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/gHashTag/trinity/blob/main/deploy/trinity-nexus/docs/research/BITNET_MATHEMATICAL_PROOF.md" - }, - "phoenixNumber": { - "badge": "FUNDAMENTO MATEMATICO", - "title": "Suministro de Tokens 3²¹", - "sub": "Suministro total derivado de las matematicas ternarias", - "supply": { - "value": "10,460,353,203", - "label": "Suministro Total $TRI", - "formula": "3²¹ = 10,460,353,203" - }, - "identity": { - "title": "Identidad Aurea", - "formula": "φ² + 1/φ² = 3", - "desc": "TRINITY = QUTRIT = CODÓN" - }, - "formulas": [ - { - "title": "Formula Parametrica", - "formula": "V = n × 3ᵏ × πᵐ × φᵖ × eᵍ", - "desc": "Formula de aproximacion para constantes" - }, - { - "title": "Suministro de Tokens", - "formula": "3²¹ = 10,460,353,203", - "desc": "3 = Base ternaria, 21 = Niveles inspirados en Bitcoin" - }, - { - "title": "Producto Trascendental", - "formula": "π × φ × e ≈ 13.82", - "desc": "Union de tres trascendentales" - }, - { - "title": "Numero de Lucas", - "formula": "L(10) = φ¹⁰ + 1/φ¹⁰ = 123", - "desc": "Secuencia de proporcion aurea" - } - ], - "constants": [ - { - "symbol": "φ", - "value": "1.618033...", - "name": "Proporcion Aurea" - }, - { - "symbol": "π", - "value": "3.141592...", - "name": "Pi" - }, - { - "symbol": "e", - "value": "2.718281...", - "name": "Numero de Euler" - }, - { - "symbol": "3", - "value": "φ² + 1/φ²", - "name": "Trinity" - } - ], - "genetics": { - "title": "Constantes de Algoritmo Genetico", - "items": [ - { - "symbol": "μ", - "formula": "1/φ²/10 = 0.0382", - "name": "Tasa de Mutacion" - }, - { - "symbol": "χ", - "formula": "1/φ/10 = 0.0618", - "name": "Tasa de Cruce" - }, - { - "symbol": "σ", - "formula": "φ = 1.618", - "name": "Presion de Seleccion" - }, - { - "symbol": "ε", - "formula": "1/3 = 0.333", - "name": "Tasa de Elitismo" - } - ] - }, - "physics": { - "title": "Constantes Fisicas desde π", - "items": [ - { - "name": "Estructura Fina", - "formula": "1/α = 4π³ + π² + π = 137.036" - }, - { - "name": "Masa Proton/Electron", - "formula": "mₚ/mₑ = 6π⁵ = 1836.15" - }, - { - "name": "Desigualdad de Bell", - "formula": "CHSH = 2√2 ≈ 2.828 > 2" - } - ] - }, - "distribution": { - "title": "Distribucion de Tokens: 100% minado", - "items": [ - { - "name": "Minado por trabajo aceptado", - "percent": "100%", - "amount": "≤ 10,460,353,203" - }, - { - "name": "Pre-minado / fundador / equipo", - "percent": "0%", - "amount": "0" - }, - { - "name": "Venta / tesoreria / liquidez", - "percent": "0%", - "amount": "0" - } - ], - "total": "LIMITE: 3²¹ = 10,460,353,203 $TRI · acunado en genesis: 0 · no desplegado" - }, - "quote": "\"Las matematicas del universo favorecen a Trinity.\"", - "cta": "Ver Tokenomics Completo", - "ctaUrl": "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/gHashTag/trinity-fpga/blob/main/docs/docs/depin/tokenomics.md" - }, - "mysticism": { - "title": "Fundamentos Matematicos", - "subtitle": "¿Por que 3? Dentro de cada proton y neutron, los quarks tienen exactamente 3 'colores' — es la simetria SU(3) que mantiene unidos los atomos. Nuestro sistema ternario {-1, 0, +1} refleja este patron natural. La teoria de la informacion tambien demuestra: base optima = e ≈ 2.718, entero mas cercano = 3.", - "toggleShow": "▶ Para Matematicos: SU(3), Chern-Simons, φ", - "toggleHide": "▼ Ocultar Fundamentos Matematicos", - "items": [ - { - "title": "SU(3) — Grupo Unitario Especial", - "description": "SU = Special Unitary (matrices con determinante = 1 que preservan la longitud de vectores). SU(3) describe 3 colores de quarks (rojo, verde, azul) dentro de protones y neutrones. Nuestro sistema ternario {-1, 0, +1} refleja este patron natural de 3 estados. Los 8 generadores de gluones proporcionan correccion de errores natural.", - "formula": "SU(3) = matrices 3×3 → 3 colores → 8 gluones" - }, - { - "title": "Invariantes de Chern-Simons", - "description": "Proteccion topologica de estados cuanticos a traves de la teoria de Chern-Simons. El invariante k=3 corresponde a la profundidad logica ternaria.", - "formula": "CS(A) = k/4π ∫ Tr(A∧dA + ⅔A∧A∧A)" - }, - { - "title": "Identidad de la Proporcion Aurea", - "description": "La identidad matematica φ² + 1/φ² = 3 conecta la proporcion aurea con lo ternario. Esta identidad subyace a la codificacion optima de informacion.", - "formula": "φ² + 1/φ² = 3 = TRINITY" - }, - { - "title": "Teorema de Base Optima", - "description": "La teoria de la informacion demuestra: la base numerica mas eficiente es e ≈ 2.718. El entero mas cercano es 3, haciendo ternario 1.58× mas eficiente que binario.", - "formula": "Base optima = e ≈ 2.718 → entero mas cercano = 3" - } - ] - }, - "sacredFormula": { - "title": "Motor de Fórmula Sagrada", - "formula": "V = n × 3k × πm × φp × eq", - "description": "Detección de relaciones enteras: cada constante física como un punto en la retícula generada por {1, log(3), log(π), log(φ)} sobre ℤ.", - "inputPlaceholder": "Ingrese cualquier número positivo...", - "decompose": "Descomponer", - "computing": "Calculando...", - "target": "Objetivo", - "exact": "EXACTO", - "close": "CERCANO", - "approx": "APROX.", - "predictionsTitle": "Extrapolaciones Sagradas", - "predictionsDisclaimer": "NO es física establecida — solo matemáticas experimentales", - "categories": { - "all": "Todos", - "particle_physics": "Física de Partículas", - "quantum": "Cuántica", - "cosmology": "Cosmología", - "quantum_gravity": "Gravedad Cuántica", - "sacred_geometry": "Geometría Sagrada" - }, - "randomSacred": "✨ Aleatorio", - "geomInfoTitle": "Puente de Geometría Sagrada v2.0", - "goldenSpiral": "Espiral Áurea: r(θ) = a × φ^(2θ/π)", - "copticCube": "Cubo Copto: 27 = 3³ = 1 tryte", - "trinityIdentity": "φ² + 1/φ² = 3 = TRINIDAD", - "copticMatter": "Materia (1-9)", - "copticEnergy": "Energía (10-90)", - "copticInfo": "Información (100-900)", - "copticSum": "Σ = 4995", - "cliHint": "Versión CLI: tri geom sacred", - "modeTime": "⌛ Tiempo Trinidad", - "timeTriadTitle": "TEOREMA TEMPORAL DE LA TRINIDAD v1.0", - "timeCreation": "CREACIÓN (futuro)", - "timeDestruction": "ENTROPÍA (pasado)", - "timeArrowTitle": "Asimetría de la flecha del tiempo", - "timeArrowDesc": "La creación domina la destrucción 6.854× → el tiempo fluye hacia adelante", - "omegaTitle": "Ω Predicciones (desde π)", - "omegaParam": "Parámetro", - "omegaPredicted": "Predicción", - "omegaExperiment": "Experimento", - "omegaDarkMatter": "materia", - "omegaDarkEnergy": "energía", - "omegaAge": "Edad", - "timeEngineStart": "⏵ Motor Temporal (φ = 1.618s)", - "timeEngineStop": "⏸ Detener latido", - "timeShowVt": "Calcular V(t)", - "timeCopticTitle": "27 = 3³ Cubo Temporal Copto", - "timePast": "Pasado", - "timePresent": "Presente", - "timeFuture": "Futuro", - "timeDisclaimer": "Matemáticas experimentales — exploración de patrones, no física probada", - "chevrons": { - "n": "n", - "k": "3⁺", - "m": "π⁺", - "p": "φ⁺", - "q": "e⁺" - }, - "error": "error", - "howItWorks": "Cualquier número puede escribirse como una fórmula simple de 4 constantes de la naturaleza. Ejemplo: masa del electrón = 1 × 3⁻⁷ × π¹ × φ⁻² × e³ con 0.003% de precisión. Ingrese su número y vea sus \"coordenadas\" en esta retícula.", - "tryIt": "Ingrese un número → obtenga su fórmula", - "legendTitle": "Cómo leer el Stargate:", - "legendN": "multiplicador (entero 1–9)", - "legendK": "potencia ternaria (exponente de 3)", - "legendM": "potencia geométrica (exponente de π)", - "legendP": "potencia del número áureo (exponente de φ)", - "legendQ": "potencia de crecimiento (exponente de e)", - "legendExample": "Ejemplo: 13 ≈ 1 × 3⁻¹ × π¹ × φ⁻¹ × e³", - "modeFormula": "Número → Fórmula", - "modeGematria": "Gematría", - "gematriaPlaceholder": "Número o texto copto...", - "gematriaDecompose": "Decodificar", - "sacredFit": "Fórmula sagrada", - "modeManual": "Parámetros → Valor", - "compute": "Calcular", - "validationRequired": "Obligatorio", - "validationInteger": "Debe ser entero", - "validationRange_n": "n: 1–9", - "validationRange_k": "k: -4…4", - "validationRange_m": "m: -3…0", - "validationRange_p": "p: -4…4", - "validationRange_q": "q: -3…3", - "validationPositive": "Ingrese un número positivo" - }, - "holographic": { - "title": "Renderizador Holográfico v3.1", - "subtitle": "Generado desde: specs/tri/holographic_renderer.vibee", - "adsTitle": "Corte Radial AdS₅ — Correspondencia Bulk/Frontera", - "spinTitle": "Red de Spin — Eigenvalores de Área", - "penroseTitle": "Mosaico Penrose P3 — Propiedades Áureas", - "entropyTitle": "Superficie de Entropía Bekenstein-Hawking", - "hawkingTitle": "Radiación de Hawking — Evaporación del Agujero Negro", - "formula": "Fórmula", - "solarEntropy": "Entropía AN masa solar", - "holoBits": "Bits holográficos", - "multiverseTitle": "Inflación Eterna — Universos Burbuja", - "stringTitle": "Paisaje de Teoría de Cuerdas — Vacíos de Flujo", - "ryuTitle": "Ryu-Takayanagi — Entropía de Entrelazamiento Holográfica" - }, - "quantumGravity": { - "title": "Simulación de Gravedad Cuántica v3.1", - "subtitle": "Generado desde: specs/tri/quantum_gravity_sim.vibee", - "steps": "Pasos", - "spinFoamTitle": "Evolución Espuma de Spin (Ponzano-Regge)", - "reggeTitle": "Cálculo de Regge (Gravedad Cuántica Simplicial)", - "adsTitle": "Termalización AdS/CFT", - "areaTitle": "Espectro de Área LQG (Barbero-Immirzi)", - "areaGap": "Brecha de área", - "cdtTitle": "Triangulaciones Dinámicas Causales", - "venezianoTitle": "Amplitudes de Cuerdas de Veneziano", - "pageCurveTitle": "Información del Agujero Negro (Curva de Page)" - }, - "marketplace": { - "title": "Mercado de Computación Sagrada $TRI", - "subtitle": "Generado desde: specs/tri/tri_marketplace.vibee", - "network": "Red", - "totalSupply": "Suministro Total", - "circulating": "En Circulación", - "staked": "En Staking", - "constants": "Constantes", - "formulaFits": "Ajustes de Fórmula", - "verified": "Verificado", - "topComputations": "Top Computaciones Sagradas", - "stakingTitle": "Niveles de Staking (Fibonacci × φ)", - "proofTitle": "Prueba-de-Computación-Sagrada", - "tokenomicsTitle": "Tokenómica $TRI (modelo φ-deflacionario)" - }, - "stickyCta": { - "invest": "Invertir Ahora", - "calculator": "Calculadora de Ahorro" - }, - "autonomousUniverse": { - "title": "Universo Autónomo", - "description": "Universo matemático autoevolutivo con burbujas autónomas", - "bubblesTitle": "Burbujas Autónomas", - "mutationRate": "Tasa de Mutación", - "crossoverCount": "Conteo de Crossover", - "novelDiscoveries": "Descubrimientos Novedosos", - "convergenceScore": "Puntuaje de Convergencia", - "autoTune": "Auto-Ajuste", - "muAdjusted": "μ Ajustado", - "evolution": "Evolución", - "generation": "Generación", - "fitness": "Fitness", - "discovery": "Descubrimiento", - "snapshot": "Instantánea", - "snapshotTs": "Timestamp de Instantánea", - "phiAlignment": "Alineación φ", - "convergeStatus": "Estado de Convergencia", - "reset": "Reiniciar", - "resetConfirm": "El universo se reiniciará al estado inicial", - "trinity": "TRINITY: ✓" - }, - "formulaDiscovery": { - "title": "Descubrimiento de Fórmulas Híbrido", - "description": "Enfoque híbrido simbólico + numérico con AST", - "hybridDiscovery": "Descubrimiento Híbrido", - "symbolic": "Fórmula Simbólica", - "numeric": "Aproximación Numérica", - "confidence": "Confianza", - "astParse": "Parseo AST", - "symbolicSimplify": "Simplificación Simbólica", - "numericApprox": "Aproximación Numérica", - "error": "Error de Aproximación", - "exactEval": "Evaluación Exacta", - "exactValue": "Valor Exacto", - "decimal": "Decimal", - "equivalence": "Búsqueda de Equivalencia", - "optimize": "Optimización de Complejidad", - "before": "Antes de Optimización", - "after": "Después de Optimización", - "complexityBefore": "Complejidad Antes", - "complexityAfter": "Complejidad Después", - "sacred": "SAGRADO: ✓", - "hybrid": "HÍBRIDO" - }, - "sacredEconomy": { - "title": "Economía Sagrada Web3", - "description": "Economía sagrada con puente Web3 y staking", - "wallet": "Conexión de Billetera", - "address": "Dirección de Billetera", - "balance": "Balance $TRI", - "oracle": "Oráculo de Cadena", - "phiPrice": "Precio φ", - "gas": "Precio de Gas", - "block": "Número de Bloque", - "timestamp": "Timestamp", - "proposal": "Propuesta de Gobernanza", - "votesFor": "Votos A Favor", - "votesAgainst": "Votos En Contra", - "stake": "Staking", - "staked": "Stakeado", - "apy": "APY", - "rewards": "Recompensas Pendientes", - "listing": "Crear Listado", - "listingId": "ID de Listado", - "metrics": "Métricas de Cadena", - "tvl": "Valor Total Bloqueado", - "volume24h": "Volumen 24h", - "transactions": "Transacciones 24h", - "web3": "WEB3: CONECTADO" - }, - "selfImprover": { - "title": "Auto Mejorador Adam", - "description": "IA auto-mejorable con optimizador Adam y consolidación EWC", - "adamOptimizer": "Optimizador Adam", - "learningRate": "Tasa de Aprendizaje", - "iteration": "Iteración", - "gradient": "Descenso de Gradiente", - "gradientNorm": "Norma de Gradiente", - "loss": "Pérdida", - "momentum": "Actualización de Momento", - "velocity": "Velocidad", - "decay": "Tasa de Decaimiento", - "trajectory": "Trajectoria de Aprendizaje", - "trajectoryId": "ID de Trajectoria", - "steps": "Pasos Completados", - "successRate": "Tasa de Éxito", - "gradientClip": "Recorte de Gradiente", - "clipThreshold": "Umbral de Recorte", - "clipped": "Gradientes Recortados", - "consolidate": "Consolidación EWC", - "ewcConsolidation": "Consolidación EWC++", - "fisherInfo": "Información de Fisher", - "lambda": "Parámetro λ", - "ewcLoss": "Pérdida EWC", - "parameters": "Parámetros Consolidados", - "optimizer": "Optimizador", - "adam": "ADAM" - }, - "nftMarketplace": { - "title": "Mercadoplace NFT", - "description": "Mercado sagrado de NFT con subastas y regalías", - "listings": "Listados Activos", - "placeBid": "Hacer Oferta", - "bidAmount": "Oferta Actual", - "minIncrement": "Mín. Incremento", - "createListing": "Crear Listado", - "listingFee": "Tarifa del Mercado", - "royaltyRate": "Tasa de Regalía", - "acceptOffer": "Acepta Oferta", - "offerAmount": "Monto de Oferta", - "buyer": "Dirección del Comprador", - "cancelListing": "Cancelar Listado", - "tradeHistory": "Historial de Trading", - "totalVolume": "Volumen Total", - "totalTrades": "Total de Trades", - "recentTrades": "Trades Recientes", - "creator": "Creador", - "ask_price": "Precio de Venta", - "royalty": "Regalía" - }, - "footer": { - "tagline": "Un catálogo de formatos numéricos y núcleos aritméticos", - "linksTitle": "Enlaces", - "vizTitle": "Laboratorio Cuántico", - "vizLaunch": "Iniciar Laboratorio Cuántico", - "vizDesc": "29 visualizaciones interactivas", - "contactTitle": "Contacto", - "rights": "Todos los derechos reservados.", - "docs": "Documentación" - }, - "science": { - "title": "Verificación Científica", - "sub": "Matemáticas revisadas por pares. Cada fórmula verificada independientemente.", - "stats": [ - { - "value": "27/27", - "label": "Pruebas Aprobadas" - }, - { - "value": "4", - "label": "Teoremas Demostrados" - }, - { - "value": "<0.01%", - "label": "Error Máximo" - } - ], - "evidenceTitle": "Cobertura de Pruebas", - "sections": [ - { - "name": "Operaciones VSA", - "passed": 7, - "total": 7 - }, - { - "name": "VM Ternaria", - "passed": 5, - "total": 5 - }, - { - "name": "Robustez al Ruido", - "passed": 4, - "total": 4 - }, - { - "name": "BitNet MAC", - "passed": 7, - "total": 7 - }, - { - "name": "Constantes Sagradas", - "passed": 4, - "total": 4 - } - ], - "formulasTitle": "Fórmulas Fundamentales", - "formulas": [ - { - "formula": "φ² + 1/φ² = 3", - "desc": "Identidad Trinidad", - "error": "0.0%" - }, - { - "formula": "I(r) = (B/r) × log₂(r)", - "desc": "Base Óptima", - "error": "0.0%" - }, - { - "formula": "log₂(3) = 1.585 bits/trit", - "desc": "Densidad de Información", - "error": "0.0%" - }, - { - "formula": "3²¹ = 10,460,353,203", - "desc": "Suministro de Tokens", - "error": "0.0%" - } - ], - "sources": [ - { - "title": "Knuth Vol. 3", - "desc": "Prueba de base óptima" - }, - { - "title": "Microsoft BitNet", - "desc": "arXiv:2402.17764" - }, - { - "title": "TerEffic FPGA", - "desc": "arXiv:2502.16473" - } - ] - }, - "about": { - "name": "Dmitrii Vasilev", - "role": "Ingeniero de Hardware-AI y FPGA/RTL · Autor del formato de coma flotante ternario GF-T · especificación → RTL → FPGA · sistemas ML y Edge AI", - "bioTitle": "Sobre mí", - "bio": [ - "Construyo la pila completa para un cómputo de IA eficiente: desde el formato numérico y el RTL que lo ejecuta hasta la verificación bit a bit en una placa. Soy el autor de GF-T, un formato de coma flotante ternario, y de la familia más amplia GoldenFloat (GF-T8/16/32; GF4→GF1024 derivada de φ), publicada junto con Golden Ruler, un catálogo de formatos numéricos con vectores de conformidad bit a bit.", - "Llevé un formato numérico nuevo desde un artículo de arXiv hasta una Xilinx Artix-7 activa (ALINX AX7203, XC7A200T) usando un flujo completamente abierto: Yosys, nextpnr y prjxray, sin herramientas del fabricante. Un diseño SKY130 se preparó mediante Tiny Tapeout (GDS, prueba a nivel de puertas, precheck); las solicitudes TTSKY26a/TTSKY26b se retiraron antes de la fabricación y fueron reembolsadas: no existe ningún chip. Mi trabajo se centra en la cadena especificación → RTL → verificación → placa: cada nodo RTL se comprueba bit a bit frente a un modelo dorado independiente en Python, para detectar divergencias entre la especificación y el RTL antes de la síntesis.", - "Antes del hardware pasé más de diez años desarrollando y enseñando software: agentes de IA y sistemas multiagente, React Native y Web3. Estoy disponible para trabajo remoto o por contrato en todo el mundo (UTC+7) en hardware-AI, FPGA/RTL/verificación, sistemas ML y edge AI." - ], - "achievementsTitle": "Resultados principales (hardware, 2026)", - "achievements": [ - "Entrenamiento neuronal en FPGA: primitivas que entrenan en la propia placa, con toda la cadena especificación → RTL → placa comprobada bit a bit frente al modelo dorado.", - "Multiplicación de matrices GF16 4×4: se implementa en la lógica Xilinx Artix-7 con 0 DSP48 y 0 latches: 32.252 LUT, o 21.223 usando multiplicadores dedicados.", - "Tiny Tapeout SKY130: diseño preparado hasta GDS, prueba a nivel de puertas y precheck; las solicitudes se retiraron antes de la fabricación y fueron reembolsadas. No existe ningún chip; todas las cifras de hardware proceden del prototipo en FPGA Artix-7 (XC7A200T).", - "Verificación bit a bit por nodo: cada nodo RTL se comprueba frente a un modelo dorado independiente en Python (iverilog y vectores KAT), detectando divergencias antes de la síntesis.", - "tri-net: una pila de red ternaria completa (133 especificaciones .t27): PHY GF16, módem BPSK sobre AD9361, encaminamiento mesh y criptografía AEAD, demostrados entre dispositivos por radio." - ], - "publicationsTitle": "Publicaciones", - "publications": [ - { - "title": "GoldenFloat: Una familia de coma flotante derivada de φ (GF4→GF1024) — arXiv:2606.05017", - "url": "https://arxiv.org/abs/2606.05017" - }, - { - "title": "Golden Ruler: A Numeric Format Catalog with Bit-Exact Conformance Vectors for FP8, BF16, MXFP4, and Microscaling Formats — arXiv:2606.09686 (v3, anunciado el 7 de septiembre de 2026)", - "url": "https://arxiv.org/abs/2606.09686" - }, - { - "title": "Ternary Network Floats — en revisión, Microprocessors and Microsystems (Elsevier), enviado el 3 de septiembre de 2026", - "url": "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/gHashTag/trinity-fpga/tree/main/research/arxiv_tnf" - } - ], - "links": { - "linkedin": "LinkedIn", - "github": "GitHub", - "arxiv1": "arXiv: GoldenFloat", - "arxiv2": "arXiv: Catálogo Golden Ruler" - } - } -} diff --git a/apps/website/messages/zh.json b/apps/website/messages/zh.json deleted file mode 100644 index 9249912231..0000000000 --- a/apps/website/messages/zh.json +++ /dev/null @@ -1,1793 +0,0 @@ -{ - "lang": "zh", - "langSwitch": "EN", - "langHref": "?lang=en", - "nav": [ - "TRINITY", - "地图", - "规格", - "论点", - "格式", - "证明", - "验证", - "格局" - ], - "hero": { - "tag": "GFTernary · TNF — 三进制数据通路的参考格式对", - "headline": "r² = r + 1", - "subheadline": "当权重本身就是编码时,格式便不再是偏好。GFTernary 封闭权重,TNF 封闭累加器——本页每个硬件数字都是在二进制 FPGA 上实测的,此点明示而非掩饰。", - "cta": "阅读论点", - "ctaSecondary": "本页不主张什么" - }, - "navExtra": { - "dashboard": "仪表板", - "tree": "研究实验室", - "docs": "文档", - "about": "关于作者" - }, - "theorems": { - "badge": "数学基础", - "title": "4大定理 + 验证结果", - "sub": "数学证明辅以真实基准测试。每项主张均经证明且已测试。", - "cards": [ - { - "number": "1", - "title": "最优基数 = e ≈ 3", - "formula": "I(r) = (B/r) × log₂(r)", - "proof": "信息容量在r = e ≈ 2.718时最大化。最近整数:3", - "result": "三进制达到理论最大效率的94.9%", - "source": "Knuth, The Art of Computer Programming, Vol. 3", - "advantage": "通过最优信息编码节省能量", - "verified": { - "metric": "100%噪声鲁棒性", - "value": "20%位错误下零精度损失", - "report": "hdc_double_q_report.md" - } - }, - { - "number": "2", - "title": "Trinity恒等式", - "formula": "φ² + 1/φ² = 3", - "proof": "(3+√5)/2 + (3-√5)/2 = 6/2 = 3 ∎", - "result": "黄金比例在数学上编码了三进制最优性", - "source": "Derived from Euclid's Elements", - "advantage": "基本常数验证了Trinity架构", - "verified": { - "metric": "8.1倍GPU加速", - "value": "标准硬件上的SIMD优化", - "report": "GPU_BENCHMARKS.md" - } - }, - { - "number": "3", - "title": "三进制量化", - "formula": "log₂(3) = 1.585 bits", - "proof": "权重{-1, 0, +1}仅需1.58位,而float32需要32位", - "result": "20倍内存压缩,无乘法推理", - "source": "BitNet b1.58 (arXiv:2402.17764, Microsoft Research)", - "advantage": "无需GPU的AI推理,FPGA上最高3000倍能效", - "verified": { - "metric": "15.7倍压缩", - "value": "98KB → 6KB,43%稀疏性加成", - "report": "ternary_quant_report.md" - } - }, - { - "number": "4", - "title": "基数经济性", - "formula": "E(r) = r × ⌈logᵣ(N)⌉", - "proof": "E(2) = 2.885, E(3) = 2.731, E(4) = 3.000", - "result": "三进制在所有整数中具有最优基数经济性", - "source": "Knuth, The Art of Computer Programming, Vol. 3", - "advantage": "最优数据存储与传输", - "verified": { - "metric": "自动扩展生产", - "value": "Kubernetes就绪,配备监控面板", - "report": "PRODUCTION_BENCHMARKS.md" - } - } - ], - "cta": "阅读完整数学证明", - "ctaUrl": "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/gHashTag/trinity/blob/main/docs/MATH_FOUNDATIONS.md", - "reportsTitle": "已验证基准报告", - "reports": [ - { - "name": "三进制量化报告", - "url": "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/gHashTag/trinity/blob/main/docs/ternary_quant_report.md", - "highlight": "15.7倍压缩" - }, - { - "name": "HDC双Q学习报告", - "url": "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/gHashTag/trinity/blob/main/docs/hdc_double_q_report.md", - "highlight": "100%噪声鲁棒性" - }, - { - "name": "GPU基准测试", - "url": "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/gHashTag/trinity/blob/main/docs/GPU_BENCHMARKS.md", - "highlight": "8.1倍SIMD加速" - }, - { - "name": "生产基准测试", - "url": "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/gHashTag/trinity/blob/main/docs/PRODUCTION_BENCHMARKS.md", - "highlight": "自动扩展就绪" - } - ] - }, - "roiCalculator": { - "title": "ROI计算器", - "sub": "计算您作为Trinity节点运营商的回报", - "inputLabel": "初始投资($)", - "hardwareLabel": "硬件类型", - "hardwareOptions": [ - { - "name": "QMTECH FPGA XC7A100T", - "hashrate": 2000000, - "power": 10, - "cost": 65, - "monthly": 50 - }, - { - "name": "Alveo U55C", - "hashrate": 50000000, - "power": 150, - "cost": 5000, - "monthly": 162 - }, - { - "name": "CPU Node (Free)", - "hashrate": 12000, - "power": 65, - "cost": 0, - "monthly": 5 - } - ], - "results": { - "monthlyRevenue": "月收入", - "monthlyCosts": "月成本(电费)", - "monthlyProfit": "月净利润", - "paybackPeriod": "回本周期", - "annualROI": "年化ROI" - }, - "example": { - "title": "示例:Alveo U55C($5,000)", - "items": [ - { - "label": "月收入", - "value": "$162" - }, - { - "label": "电费", - "value": "$31" - }, - { - "label": "净利润", - "value": "$131/月" - }, - { - "label": "回本", - "value": "4.9个月" - }, - { - "label": "年化ROI", - "value": "31%" - } - ] - }, - "note": "基于定理3:1.58位量化带来20倍效率提升" - }, - "calculator": { - "title": "节省计算器", - "nodes": "节点数量(GPU):", - "current": "当前成本", - "withTrinity": "使用TRINITY", - "savings": "每月净节省" - }, - "whynow": { - "title": "为何奇点是现在?", - "cards": [ - { - "title": "硬件共振", - "desc": "通过CIS V1.0实现语言学与硅片100%对齐。" - }, - { - "title": "熵收割", - "desc": "PAS守护进程V5.0将信息噪声转化为有用的执行能量。" - }, - { - "title": "拓扑护甲", - "desc": "Chern-Bott不变量使Trinity计算免受干扰。" - } - ] - }, - "publications": { - "badge": "科学出版物", - "title": "DOI支持的学术成果", - "subtitle": "所有研究成果均已在Zenodo上发布,并拥有永久DOI标识符。", - "viewAll": "查看完整文档 →" - }, - "market": { - "title": "市场 $2000亿", - "funnel": [ - { - "value": "$200B", - "label": "TAM — AI加速器" - }, - { - "value": "$80B", - "label": "SAM — AI推理" - }, - { - "value": "$8B", - "label": "SOM — 三进制(10%)" - } - ], - "compsTitle": "可比估值", - "headers": [ - "公司", - "估值", - "收入", - "倍数" - ], - "rows": [ - [ - "Cerebras", - "$4.0B", - "$100M", - "40×" - ], - [ - "Groq", - "$2.8B", - "$50M", - "56×" - ], - [ - "SambaNova", - "$5.0B", - "$150M", - "33×" - ], - [ - "TRINITY", - "$300M", - "预收入", - "种子轮" - ] - ] - }, - "gtm": { - "title": "市场进入", - "phases": [ - { - "phase": "阶段1", - "title": "研究实验室", - "desc": "大学、AI实验室 • 免费试点 • 案例研究" - }, - { - "phase": "阶段2", - "title": "AI初创公司", - "desc": "推理节省 • FPGA卡 • $1万-5万交易" - }, - { - "phase": "阶段3", - "title": "企业", - "desc": "云提供商 • ASIC许可 • $100万+交易" - } - ] - }, - "timeline": { - "title": "技术时间线", - "items": [ - { - "year": "2023", - "title": "BitNet", - "desc": "(微软)", - "type": "past" - }, - { - "year": "2024", - "title": "BitNet b1.58", - "desc": "已验证", - "type": "past" - }, - { - "year": "2025", - "title": "FPGA", - "desc": "原型", - "type": "past" - }, - { - "year": "2026", - "title": "Phase 5.0", - "desc": "奇点", - "type": "future" - }, - { - "year": "2027", - "title": "市场", - "desc": "主导", - "type": "future" - } - ] - }, - "roadmap": { - "title": "路线图", - "milestones": [ - { - "date": "2026年Q1", - "title": "FPGA原型V5", - "desc": "Kintex-7上的Verilog Core(16.16定点)" - }, - { - "date": "2026年Q3", - "title": "开发者SDK", - "desc": "E-Graph优化器 & 科普特-Zig编译器" - }, - { - "date": "2027年Q1", - "title": "ASIC流片", - "desc": "首款原生SU(3)芯片(TSMC 180nm)" - } - ] - }, - "techTree": { - "title": "TRINITY 研究实验室", - "sub": "技术发展树", - "hint": "点击节点查看研究详情", - "complete": "已完成", - "active": "研究进行中", - "legend": { - "done": "已完成", - "progress": "进行中", - "locked": "锁定" - }, - "labels": { - "description": "描述", - "performance": "性能", - "progress": "研究进度", - "prerequisites": "前置条件", - "unlocks": "解锁", - "locked": "完成前置条件以解锁此研究" - }, - "stats": { - "inProgress": "进行中", - "locked": "锁定" - }, - "branches": { - "core": "核心", - "inference": "推理", - "optimization": "优化", - "deployment": "部署", - "hardware": "硬件", - "agents": "代理", - "knowledge": "知识", - "distributed": "分布式" - }, - "nodes": { - "core-001": { - "name": "解析器 v2", - "description": "支持多语言的高级VIBEE规范解析器", - "metrics": "42种语言" - }, - "core-002": { - "name": "多语言代码生成", - "description": "为Zig、Python、Rust、Verilog等38种语言生成代码", - "metrics": "42个目标" - }, - "core-003": { - "name": "字节码虚拟机", - "description": "基于栈的三进制虚拟机,256个操作码", - "metrics": "256个操作码" - }, - "core-004": { - "name": "JIT编译", - "description": "即时编译以获得原生性能", - "metrics": "+1000%速度" - }, - "core-005": { - "name": "二进制优化", - "description": "高级死代码消除和寄存器分配", - "metrics": "-30%大小" - }, - "inf-001": { - "name": "GGUF解析器", - "description": "解析带量化元数据的GGUF模型文件", - "metrics": "所有量化" - }, - "inf-002": { - "name": "Transformer", - "description": "具有注意力层的完整transformer架构", - "metrics": "32层" - }, - "inf-003": { - "name": "KV缓存", - "description": "高效自回归生成的键值缓存", - "metrics": "16倍加速" - }, - "inf-004": { - "name": "批处理", - "description": "多序列并行批量推理", - "metrics": "8倍吞吐量" - }, - "inf-005": { - "name": "FlashAttention", - "description": "面向长序列的IO感知注意力机制", - "metrics": "128K上下文" - }, - "opt-t01": { - "name": "三进制量化", - "description": "BitNet b1.58三进制权重量化 {-1, 0, +1}", - "metrics": "20倍压缩" - }, - "opt-t02": { - "name": "三进制矩阵乘法", - "description": "针对三进制权重优化的矩阵乘法", - "metrics": "10倍加速" - }, - "opt-t03": { - "name": "三进制KV缓存", - "description": "使用三进制表示的压缩KV缓存", - "metrics": "16倍内存" - }, - "opt-pc01": { - "name": "前缀缓存", - "description": "跨请求复用已计算的前缀", - "metrics": "90%命中率" - }, - "opt-cp01": { - "name": "分块预填充", - "description": "将长提示词处理分割为可管理的块", - "metrics": "-50%延迟" - }, - "opt-s02": { - "name": "增强推测", - "description": "树搜索并行推测验证", - "metrics": "4倍生成" - }, - "dep-001": { - "name": "容器化", - "description": "使用优化镜像的容器化部署", - "metrics": "< 500MB" - }, - "dep-002": { - "name": "边缘计算", - "description": "基于Fly.io基础设施的边缘部署", - "metrics": "34个区域" - }, - "dep-003": { - "name": "自动扩展", - "description": "基于请求负载的自动扩展", - "metrics": "0→100 pods" - }, - "dep-004": { - "name": "多区域", - "description": "具有区域感知路由的全球部署", - "metrics": "延迟 < 50ms" - }, - "dep-005": { - "name": "零停机", - "description": "蓝绿和金丝雀部署策略", - "metrics": "99.99%可用性" - }, - "hw-001": { - "name": "CUDA后端", - "description": "NVIDIA GPU原生CUDA内核", - "metrics": "+100倍速度" - }, - "hw-002": { - "name": "Metal后端", - "description": "Apple M系列芯片Metal着色器", - "metrics": "+80倍速度" - }, - "hw-003": { - "name": "FPGA综合", - "description": "FPGA部署的Verilog生成", - "metrics": "1000倍效率" - }, - "hw-004": { - "name": "ASIC设计", - "description": "定制三进制芯片设计以获得最大效率", - "metrics": "10000倍效率" - }, - "hw-005": { - "name": "量子电路", - "description": "三进制逻辑的实验性量子门", - "metrics": "三进制量子位" - }, - "agent-001": { - "name": "IGLA核心", - "description": "基于指令的生成式学习架构", - "metrics": "v1.0稳定" - }, - "agent-002": { - "name": "工具引擎", - "description": "本地函数调用和工具集成", - "metrics": "50+工具" - }, - "agent-003": { - "name": "长上下文", - "description": "自适应上下文窗口的无限历史", - "metrics": "∞ tokens" - }, - "agent-004": { - "name": "多代理", - "description": "协调者+专家代理编排", - "metrics": "8个专家" - }, - "agent-005": { - "name": "群体智能", - "description": "去中心化涌现代理行为", - "metrics": "1K+代理" - }, - "know-001": { - "name": "VSA核心", - "description": "带绑定/捆绑操作的向量符号架构", - "metrics": "10K维度" - }, - "know-002": { - "name": "知识图谱", - "description": "基于三元组的VSA编码语义网络", - "metrics": "1M三元组" - }, - "know-003": { - "name": "语义搜索", - "description": "超向量余弦相似度搜索", - "metrics": "查询<1ms" - }, - "know-004": { - "name": "RAG引擎", - "description": "基于VSA的检索增强生成", - "metrics": "95%准确率" - }, - "know-005": { - "name": "本体学习器", - "description": "语义关系自动发现", - "metrics": "零样本" - }, - "dist-001": { - "name": "节点网络", - "description": "去中心化节点发现和路由", - "metrics": "1000+节点" - }, - "dist-002": { - "name": "TVC分片", - "description": "三进制向量计算分布式分片", - "metrics": "256分片" - }, - "dist-003": { - "name": "DePIN网络", - "description": "带TRI奖励的去中心化物理基础设施", - "metrics": "$TRI挖矿" - }, - "dist-004": { - "name": "全球共识", - "description": "三进制状态的拜占庭容错共识", - "metrics": "1万TPS" - }, - "dist-005": { - "name": "圣链", - "description": "具有不可变证明的三进制事件金链", - "metrics": "零知识" - } - } - }, - "product": { - "title": "产品路线图", - "phases": [ - { - "phase": "TRINITY-V5", - "year": "2025-2026", - "desc": "基于FPGA的三进制加速器 • 原生.TRI执行 • 目标:AI推理" - }, - { - "phase": "TRINITY-1 ASIC", - "year": "2027", - "desc": "首款原生三进制芯片 • 180nm工艺(低风险)• 目标:边缘AI设备" - }, - { - "phase": "TRINITY-X", - "year": "2029", - "desc": "先进节点(28nm)• 带三进制CPU的完整SoC • 目标:数据中心规模" - } - ] - }, - "financials": { - "title": "通往$100亿+之路", - "headers": [ - "年份", - "收入", - "毛利率", - "估值", - "员工数" - ], - "rows": [ - [ - "2026", - "$2M", - "50%", - "$300M", - "15" - ], - [ - "2027", - "$15M", - "55%", - "$500M", - "50" - ], - [ - "2028", - "$80M", - "60%", - "$2B", - "150" - ], - [ - "2029", - "$300M", - "65%", - "$5B", - "400" - ], - [ - "2030", - "$1B", - "70%", - "$10B+", - "1,000" - ] - ], - "note": "收入倍数可比Cerebras(40×)、Groq(56×)、SambaNova(33×)" - }, - "businessModel": { - "title": "商业模式", - "streams": [ - { - "percent": "60%", - "title": "硬件销售", - "desc": "TRINITY-FPGA:$15K ASP,55%利润率 • TRINITY-ASIC:$3K ASP,65%利润率" - }, - { - "percent": "30%", - "title": "IP许可", - "desc": "向芯片制造商许可三进制IP • 每芯片$2-5版税 • 90%+利润率" - }, - { - "percent": "10%", - "title": "软件与服务", - "desc": "TRINITY SDK:$100K/年企业版 • 集成服务 • 80%利润率" - } - ], - "unitEcon": "LTV/CAC:15× | 第一年目标:1,000台 = $7.5M收入" - }, - "team": { - "title": "团队", - "name": "Dmitrii Vasilev", - "role": "创始人兼CEO", - "photo": "https://avatars.githubusercontent.com/u/6774813?v=4", - "linkedin": "https://www.linkedin.com/in/neurocoder/", - "exp": [ - "15+年软件工程经验", - "前科技公司高级工程师", - "编译器和底层系统深厚专业知识", - "从零创建VIBEE语言", - "20,645个原生.tri规范" - ], - "linkedinLabel": "LinkedIn", - "hiring": "招聘中:FPGA工程师、AI研究员、商务拓展" - }, - "ecosystem": { - "title": "三进制生态系统 .TRI", - "sub": "将整个.vibee知识库转化为原生.tri格式。", - "quote": "«ⲁⲃⲅ»不是文本。它是量子三进制的配置。我们消除了思想与行动之间的最后障碍。", - "formula": "参数公式:V = n × 3^k × π^m × φ^p × e^q", - "items": [ - { - "title": "科普特编译器", - "desc": "TNC V1.0 • 从字母表直接生成三元组" - }, - { - "title": "原生知识", - "desc": "20,645个.tri文件 • 原生知识库" - }, - { - "title": "SU(3)运行时", - "desc": "零二进制开销的幺正执行" - }, - { - "title": "PAS守护进程", - "desc": "从数据流熵中收割能量" - }, - { - "title": "Chern锁", - "desc": "抵御注入和噪声的硬件保护" - }, - { - "title": "Trinity CIS", - "desc": "27条指令 = $3^3$对称性" - } - ] - }, - "competition": { - "title": "GPU基准对比", - "headers": [ - "平台", - "硬件", - "Tokens/s", - "三进制", - "能效" - ], - "rows": [ - { - "company": "TRINITY", - "arch": "CPU (RunPod)", - "val": "35-52", - "ternary": true, - "open": true - }, - { - "company": "Groq", - "arch": "Llama-70B, LPU cloud", - "val": "227-276", - "ternary": false, - "open": false - }, - { - "company": "GPT-4o-mini", - "arch": "Cloud API", - "val": "~100", - "ternary": false, - "open": false - }, - { - "company": "Claude Opus", - "arch": "Cloud API", - "val": "~80", - "ternary": false, - "open": false - }, - { - "company": "B200 BitNet I2_S", - "arch": "B200 GPU", - "val": "52 (CPU)", - "ternary": true, - "open": false - } - ], - "note": "TRINITY在真实RunPod GPU上验证(Pod ID:bhhnrrdothqm54,ydk41ymp8uoeyp)。三进制 = 无乘法运算,20倍压缩,30%损坏下70%噪声鲁棒性。", - "gpuProof": { - "title": "真实GPU验证", - "rtx3090": { - "podId": "bhhnrrdothqm54", - "tokens": "298,052", - "noise": "70.2%", - "power": "348W", - "cost": "$0.10" - }, - "a100": { - "podId": "ydk41ymp8uoeyp", - "tokens": "274,043", - "noise": "70.2%", - "power": "293W", - "cost": "$0.20" - } - }, - "unitNote": "End-to-end tokens/sec, from this project's own benchmark table. Cloud providers are faster; Trinity's advantage is cost — $0.01-0.35 against API pricing — and running without a GPU at all. The earlier version of this table put Trinity's raw kernel ops/sec beside everyone else's tokens/sec." - }, - "scientificFoundation": { - "title": "基础证明", - "sub": "Trinity V5.0建立在8门科学的不可变定律之上。", - "items": [ - { - "icon": "📐", - "value": "精确3", - "label": "黄金恒等式", - "desc": "φ² + 1/φ² = 3.0000。自然与Trinity逻辑之间的精确联系。" - }, - { - "icon": "🧬", - "value": "1.58", - "label": "信息密度", - "desc": "log₂(3)位/三进制位。比二进制系统高58%的密度。" - }, - { - "icon": "🌌", - "value": "13.82", - "label": "宇宙年龄", - "desc": "π × φ × e = 13.82 Gyr。与普朗克2020宇宙年龄一致。" - }, - { - "icon": "⚛️", - "value": "137.03", - "label": "精细结构", - "desc": "1/α = 4π³ + π² + π。由π定义的物理世界几何。" - } - ], - "paperTitle": "超越性证明", - "papers": [ - "数学:φ² + 1/φ² = 3(精确黄金恒等式)。", - "物理:1/α = 4π³ + π² + π(精细结构,0.0002%精度)。", - "质量:m_p/m_e = 6π⁵(质子与电子质量比)。", - "宇宙学:π × φ × e = 13.82 Gyr(宇宙年龄)。", - "混沌:Feigenbaum δ = 3⁶ × π⁻⁷ × φ² × e²(普适常数)。", - "量子:Koide Q = 2/3(轻子质量公式)。" - ] - }, - "techAssets": { - "title": "技术资产V5", - "sub": "全球原生三进制知识库已经创建。", - "items": [ - { - "value": "20,645", - "label": ".tri文件", - "desc": "原生Trinity知识库" - }, - { - "value": "50+", - "label": "安全模块", - "desc": "高级对齐与隐私层级" - }, - { - "value": "1.58", - "label": "位/三进制位", - "desc": "Log2(3)信息密度" - }, - { - "value": "E-Graph", - "label": "优化器", - "desc": "饱和基准测试已通过" - }, - { - "value": "SU(3)", - "label": "原生核心", - "desc": "幺正计算引擎" - }, - { - "value": "100x", - "label": "加速", - "desc": "原生操作加速" - } - ] - }, - "calculatorLogic": { - "title": "计算器逻辑", - "sub": "为什么要造超级计算机?一个计算器就够了。", - "comparison": [ - { - "title": "复杂二进制计算", - "desc": "需要数十亿晶体管、大量能源和冷却来近似答案。", - "icon": "📉", - "details": [ - "矩阵A[1024×1024] × B[1024×1024]:", - "• 2,147,483,648次乘法运算(2¹⁰ × 2¹⁰ × 2¹⁰)", - "• 1,073,741,824次加法运算", - "• 单次运算约3.2B FLOPs", - "• 能耗:NVIDIA A100上约0.1 J", - "• 内存:仅矩阵就需8 MB(FP32)", - "", - "GPT-4推理(1个token):", - "• 1.8万亿参数", - "• 每token约360 TFLOP", - "• 能耗:每次请求约0.001 kWh", - "• 成本:每1K tokens $0.01-0.03" - ], - "examples": [ - { - "op": "矩阵1024×1024", - "binary": "21亿次运算", - "ternary": "8.9亿次运算", - "savings": "58%" - }, - { - "op": "log₂(x)计算", - "binary": "泰勒级数约50次迭代", - "ternary": "原生3步完成", - "savings": "94%" - }, - { - "op": "FFT 4096点", - "binary": "49K次乘法", - "ternary": "12K次三进制运算", - "savings": "75%" - }, - { - "op": "神经推理", - "binary": "FP32 → 4字节/权重", - "ternary": "1.58位/权重", - "savings": "95%" - } - ] - }, - { - "title": "三进制计算器", - "desc": "使用原生数学(φ² + 1/φ² = 3)以极少的能量解决同样的任务。", - "icon": "✨", - "details": [ - "已证明:φ² + 1/φ² = 3(任意精度精确)", - "• φ² = (3 + √5)/2, 1/φ² = (3 - √5)/2", - "• 和 = 3 — 计算的最优基数", - "", - "基准测试:8.1倍CPU加速(已验证)", - "• 批量行SIMD:Xeon 8375C上7.61 GFLOPS", - "• 矩阵2048×2048:1,102 μs(基线8,900 μs)", - "", - "基准测试:15.7倍内存压缩", - "• 浮点代理:98,304字节", - "• 三进制代理:6,272字节", - "• 43%稀疏性加成(权重 = 0)", - "", - "基准测试:100%噪声鲁棒性", - "• 20%三进制位翻转 → 0%精度损失", - "• 胜率:100%(FrozenLake已验证)" - ], - "features": [ - "φ² + 1/φ² = 3:数学证明(定理1)", - "15.7倍压缩:ternary_quant_report.md", - "8.1倍SIMD加速:GPU_BENCHMARKS.md", - "100%噪声容忍度:hdc_double_q_report.md" - ] - } - ], - "tableTitle": "二进制 vs 三进制:运算对比", - "tableHeaders": [ - "运算", - "二进制方案", - "三进制方案", - "能量节省" - ], - "quote": "\"我们试图用蛮力模拟智能,而宇宙使用的是优雅的数学。\"" - }, - "technology": { - "title": "技术架构", - "sub": "TRINITY如何工作", - "layers": [ - { - "title": "SU(3) CORE", - "desc": "幺正三进制处理器" - }, - { - "title": "PAS DAEMONS", - "desc": "信息能量泵" - }, - { - "title": "TRI-MEMORY", - "desc": "原生三元组存储" - } - ], - "softwareStack": "TRINITY原生堆栈(CIS V1.0)", - "innovationsTitle": "关键创新", - "innovations": [ - "直接科普特CIS执行", - "黄金比例优化(φ² + 1/φ² = 3)", - "零开销三进制神经网络执行" - ], - "diagram": { - "title": "原生三进制架构", - "core": "SU(3)核心", - "input": "输入流", - "inference": "推理", - "daemon": "PAS守护进程" - } - }, - "charts": { - "comparisonTitle": "相对性能(归一化)", - "comparisonNote": "* 越高越好。基于BitNet b1.58推理基准测试。" - }, - "invest": { - "title": "投资", - "useTitle": "扩展奇点V5.0", - "uses": [ - { - "percent": "60%", - "title": "工程", - "desc": "SU(3) Core、PAS守护进程" - }, - { - "percent": "20%", - "title": "知识库", - "desc": "优化20k+ .TRI文件" - }, - { - "percent": "20%", - "title": "运营", - "desc": "奇点市场营销" - } - ], - "cards": [ - { - "value": "$3M", - "label": "换取1%股权" - }, - { - "value": "$300M", - "label": "估值" - }, - { - "value": "3²¹", - "label": "代币供应" - }, - { - "value": "99%", - "label": "创始人持股" - }, - { - "value": "∞", - "label": "潜力" - } - ], - "milestonesTitle": "18个月里程碑:", - "milestones": [ - "可工作的SU(3)产品", - "5+付费客户", - "$1M年收入", - "A轮融资就绪" - ], - "whyTitle": "为何现在投资:", - "why": [ - "20,645个原生TRI文件", - "99%创始人持股 = 利益一致" - ], - "closing": "我们不应模拟智能。我们应在 FPGA 上验证设计。", - "ctas": { - "investor": "进入奇点", - "partner": "转化您的代码", - "talent": "加入Trinity", - "community": "加入社区" - }, - "community": { - "title": "加入社区", - "sub": "数学证明,社区驱动", - "channels": [ - { - "name": "Discord", - "url": "https://discord.gg/trinity", - "desc": "开发者和矿工聊天", - "members": "5K+" - }, - { - "name": "Telegram", - "url": "https://t.me/trinity_network", - "desc": "公告", - "members": "10K+" - }, - { - "name": "Twitter/X", - "url": "https://x.com/trinity_ai", - "desc": "更新与新闻", - "followers": "25K+" - }, - { - "name": "GitHub", - "url": "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/gHashTag/trinity", - "desc": "开源", - "stars": "1K+" - } - ], - "cta": { - "node": { - "text": "运行节点", - "desc": "通过定理4 + 15.7倍压缩赚取收益", - "url": "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/docs/node-setup" - }, - "docs": { - "text": "阅读文档", - "desc": "学习定理1-3 + 100%鲁棒性", - "url": "/docs" - }, - "buy": { - "text": "购买$TRI", - "desc": "投资已证明的系统 + 8.1倍加速", - "url": "/buy" - }, - "discord": { - "text": "加入Discord", - "desc": "与开发者和矿工交流", - "url": "https://discord.gg/trinity" - } - }, - "stats": { - "title": "社区KPI", - "items": [ - { - "value": "5K+", - "label": "Discord成员", - "target": "Q2达10K" - }, - { - "value": "2K+", - "label": "节点运营商", - "target": "Q2达5K" - }, - { - "value": "500+", - "label": "$TRI持有者", - "target": "Q2达10K" - }, - { - "value": "1K+", - "label": "API用户", - "target": "Q2达5K" - } - ] - } - }, - "investorTitle": "投资者", - "partnerTitle": "合作伙伴", - "talentTitle": "人才", - "ctaGithub": "在GitHub上探索代码", - "contact": { - "email": "admin@t27.ai", - "website": "https://trinity-site-one.vercel.app", - "github": "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/gHashTag/trinity" - }, - "projectedNote": "* 基于定制 FPGA 硬件的预计值。CPU 上已验证:20× 内存压缩。" - }, - "bitnetProof": { - "badge": "数学证明", - "title": "BitNet FPGA — 科学证据", - "sub": "不是营销,而是数学。每个数字都有科学论文支持。", - "metrics": [ - { - "value": "20×", - "label": "能效 vs GPU", - "source": "微软 BitNet" - }, - { - "value": "10×", - "label": "内存节省", - "source": "1.58位 vs 16位" - }, - { - "value": "4.4×", - "label": "TCO降低(3年)", - "source": "$9.5K vs $42K" - }, - { - "value": "26×", - "label": "tok/s/瓦 vs A100", - "source": "TerEffic论文" - }, - { - "value": "79×", - "label": "效率 vs Jetson", - "source": "arXiv:2502.16473" - }, - { - "value": "145%", - "label": "第一年ROI", - "source": "4.9个月回本" - } - ], - "mathTitle": "BitNet数学原理", - "mathCards": [ - { - "title": "权重量化", - "formula": "w ∈ {-1, 0, +1} = 1.58位", - "desc": "三元编码:log₂(3) = 1.585位。7B模型内存:14 GB → 1.4 GB" - }, - { - "title": "无乘法运算", - "formula": "MAC = MUX + ADD", - "desc": "BitNet用加法替代乘法。能耗:1 pJ → 0.05 pJ(节省20倍)" - }, - { - "title": "FPGA优势", - "formula": "~50 LUTs, 0 DSP", - "desc": "GPU张量核心浪费99%算力。FPGA = 三元运算100%效率" - } - ], - "comparisonTitle": "FPGA vs GPU(BitNet)", - "comparisonHeaders": [ - "指标", - "GPU (H100)", - "FPGA (Alveo U55C)", - "优势" - ], - "comparisonRows": [ - [ - "能耗/token", - "3 mJ", - "0.15 mJ", - "20×" - ], - [ - "内存/模型 (7B)", - "14 GB", - "1.4 GB", - "10×" - ], - [ - "TCO(3年)", - "$42,176", - "$9,537", - "4.4×" - ], - [ - "tok/s/瓦", - "0.6", - "15.8", - "26×" - ], - [ - "硬件成本", - "$30,000", - "$5,000", - "6×" - ] - ], - "sourcesTitle": "科学来源", - "sources": [ - { - "title": "微软 BitNet b1.58", - "arxiv": "arXiv:2402.17764", - "desc": "1位LLM时代:所有大语言模型都是1.58位" - }, - { - "title": "TerEffic FPGA", - "arxiv": "arXiv:2502.16473", - "desc": "370M模型16,300 tok/s,比Jetson Orin Nano快192倍" - }, - { - "title": "VIBEE原型", - "arxiv": "GitHub已验证", - "desc": "BitNet MAC:7/7测试通过,Icarus Verilog仿真" - } - ], - "roiTitle": "ROI计算器", - "roiDesc": "投资$8,000(Alveo U55C + 服务器)→ 年收入$19,596(按$0.001/1K tokens)", - "roiMetrics": [ - { - "label": "回本周期", - "value": "4.9个月" - }, - { - "label": "第一年ROI", - "value": "145%" - }, - { - "label": "第三年ROI", - "value": "635%" - } - ], - "cta": "在GitHub阅读完整报告", - "ctaUrl": "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/gHashTag/trinity/blob/main/deploy/trinity-nexus/docs/research/BITNET_MATHEMATICAL_PROOF.md" - }, - "phoenixNumber": { - "badge": "数学基础", - "title": "代币供应 3²¹", - "sub": "总供应量源自三进制数学", - "supply": { - "value": "10,460,353,203", - "label": "$TRI总供应量", - "formula": "3²¹ = 10,460,353,203" - }, - "identity": { - "title": "黄金恒等式", - "formula": "φ² + 1/φ² = 3", - "desc": "三位一体 = 量子三进制位 = 密码子" - }, - "formulas": [ - { - "title": "参数公式", - "formula": "V = n × 3ᵏ × πᵐ × φᵖ × eᵍ", - "desc": "常数近似公式" - }, - { - "title": "代币供应", - "formula": "3²¹ = 10,460,353,203", - "desc": "3 = 三进制基数,21 = 受比特币启发的层级" - }, - { - "title": "超越性乘积", - "formula": "π × φ × e ≈ 13.82", - "desc": "三个超越数的结合" - }, - { - "title": "卢卡斯数", - "formula": "L(10) = φ¹⁰ + 1/φ¹⁰ = 123", - "desc": "黄金比例序列" - } - ], - "constants": [ - { - "symbol": "φ", - "value": "1.618033...", - "name": "黄金比例" - }, - { - "symbol": "π", - "value": "3.141592...", - "name": "圆周率" - }, - { - "symbol": "e", - "value": "2.718281...", - "name": "欧拉数" - }, - { - "symbol": "3", - "value": "φ² + 1/φ²", - "name": "Trinity" - } - ], - "genetics": { - "title": "遗传算法常数", - "items": [ - { - "symbol": "μ", - "formula": "1/φ²/10 = 0.0382", - "name": "突变率" - }, - { - "symbol": "χ", - "formula": "1/φ/10 = 0.0618", - "name": "交叉率" - }, - { - "symbol": "σ", - "formula": "φ = 1.618", - "name": "选择压力" - }, - { - "symbol": "ε", - "formula": "1/3 = 0.333", - "name": "精英率" - } - ] - }, - "physics": { - "title": "源自π的物理常数", - "items": [ - { - "name": "精细结构", - "formula": "1/α = 4π³ + π² + π = 137.036" - }, - { - "name": "质子/电子质量", - "formula": "mₚ/mₑ = 6π⁵ = 1836.15" - }, - { - "name": "贝尔不等式", - "formula": "CHSH = 2√2 ≈ 2.828 > 2" - } - ] - }, - "distribution": { - "title": "代币分配:100% 由工作挖出", - "items": [ - { - "name": "由被接受的工作挖出", - "percent": "100%", - "amount": "≤ 10,460,353,203" - }, - { - "name": "预挖 / 创始人 / 团队", - "percent": "0%", - "amount": "0" - }, - { - "name": "发售 / 国库 / 流动性", - "percent": "0%", - "amount": "0" - } - ], - "total": "上限:3²¹ = 10,460,353,203 $TRI · 创世铸造:0 · 尚未部署" - }, - "quote": "\"宇宙的数学偏爱Trinity。\"", - "cta": "查看完整代币经济学", - "ctaUrl": "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/gHashTag/trinity-fpga/blob/main/docs/docs/depin/tokenomics.md" - }, - "mysticism": { - "title": "数学基础", - "subtitle": "为什么是3?在每个质子和中子内部,夸克恰好有3种'颜色'——这是将原子结合在一起的SU(3)对称性。我们的三进制系统{-1, 0, +1}反映了这种自然模式。信息论也证明:最优基数 = e ≈ 2.718,最近整数 = 3。", - "toggleShow": "▶ 数学家专区:SU(3)、陈-西蒙斯、φ", - "toggleHide": "▼ 隐藏数学基础", - "items": [ - { - "title": "SU(3) — 特殊酉群", - "description": "SU = Special Unitary(行列式=1且保持向量长度的矩阵)。SU(3)描述质子和中子内部的3种夸克颜色(红、绿、蓝)。我们的三进制系统{-1, 0, +1}反映了这种自然的3态模式。8个胶子生成元提供自然纠错。", - "formula": "SU(3) = 3×3矩阵 → 3种颜色 → 8个胶子" - }, - { - "title": "陈-西蒙斯不变量", - "description": "通过陈-西蒙斯理论对量子态进行拓扑保护。不变量k=3对应三进制逻辑深度。", - "formula": "CS(A) = k/4π ∫ Tr(A∧dA + ⅔A∧A∧A)" - }, - { - "title": "黄金比例恒等式", - "description": "数学恒等式φ² + 1/φ² = 3将黄金比例与三进制联系起来。这个恒等式是最优信息编码的基础。", - "formula": "φ² + 1/φ² = 3 = TRINITY" - }, - { - "title": "最优基数定理", - "description": "信息论证明:最有效的数字基数是e ≈ 2.718。最接近的整数是3,使三进制比二进制效率高1.58倍。", - "formula": "最优基数 = e ≈ 2.718 → 最近整数 = 3" - } - ] - }, - "sacredFormula": { - "title": "神圣公式引擎", - "formula": "V = n × 3k × πm × φp × eq", - "description": "整数关系检测:每个物理常数都是由 {1, log(3), log(π), log(φ)} 在 ℤ 上张成的格中的一个点。", - "inputPlaceholder": "输入任意正数...", - "decompose": "分解", - "computing": "计算中...", - "target": "目标值", - "exact": "精确", - "close": "接近", - "approx": "近似", - "predictionsTitle": "神圣外推", - "predictionsDisclaimer": "非已确立的物理学 — 仅为实验数学", - "categories": { - "all": "全部", - "particle_physics": "粒子物理", - "quantum": "量子", - "cosmology": "宇宙学", - "quantum_gravity": "量子引力", - "sacred_geometry": "神圣几何" - }, - "randomSacred": "✨ 随机", - "geomInfoTitle": "神圣几何桥 v2.0", - "goldenSpiral": "黄金螺旋: r(θ) = a × φ^(2θ/π)", - "copticCube": "科普特立方: 27 = 3³ = 1 三进制字节", - "trinityIdentity": "φ² + 1/φ² = 3 = 三位一体", - "copticMatter": "物质 (1-9)", - "copticEnergy": "能量 (10-90)", - "copticInfo": "信息 (100-900)", - "copticSum": "Σ = 4995", - "cliHint": "CLI版本: tri geom sacred", - "modeTime": "⌛ 三位一体时间", - "timeTriadTitle": "时间三位一体定理 v1.0", - "timeCreation": "创造(未来)", - "timeDestruction": "熵增(过去)", - "timeArrowTitle": "时间箭头不对称性", - "timeArrowDesc": "创造支配毁灭 6.854 倍 → 时间向前流动", - "omegaTitle": "Ω 预测(源自 π)", - "omegaParam": "参数", - "omegaPredicted": "预测值", - "omegaExperiment": "实验值", - "omegaDarkMatter": "物质", - "omegaDarkEnergy": "能量", - "omegaAge": "年龄", - "timeEngineStart": "⏵ 时间引擎 (φ = 1.618s)", - "timeEngineStop": "⏸ 停止心跳", - "timeShowVt": "计算 V(t)", - "timeCopticTitle": "27 = 3³ 科普特时间立方", - "timePast": "过去", - "timePresent": "现在", - "timeFuture": "未来", - "timeDisclaimer": "实验数学 — 模式探索,非已证物理学", - "chevrons": { - "n": "n", - "k": "3⁺", - "m": "π⁺", - "p": "φ⁺", - "q": "e⁺" - }, - "error": "误差", - "howItWorks": "任何数字都可以用4个自然常数的简单公式来表示。例如:电子质量 = 1 × 3⁻⁷ × π¹ × φ⁻² × e³,精度为0.003%。输入您的数字,查看它在整数格中的「坐标」。", - "tryIt": "输入数字 → 获取公式", - "legendTitle": "如何读取星门:", - "legendN": "乘数(整数 1–9)", - "legendK": "三进制幂(3 的指数)", - "legendM": "几何幂(π 的指数)", - "legendP": "黄金比例幂(φ 的指数)", - "legendQ": "增长幂(e 的指数)", - "legendExample": "示例:13 ≈ 1 × 3⁻¹ × π¹ × φ⁻¹ × e³", - "modeFormula": "数字 → 公式", - "modeGematria": "字母数值学", - "gematriaPlaceholder": "数字或科普特文字...", - "gematriaDecompose": "解码", - "sacredFit": "神圣公式", - "modeManual": "参数 → 值", - "compute": "计算", - "validationRequired": "必填", - "validationInteger": "必须为整数", - "validationRange_n": "n: 1–9", - "validationRange_k": "k: -4…4", - "validationRange_m": "m: -3…0", - "validationRange_p": "p: -4…4", - "validationRange_q": "q: -3…3", - "validationPositive": "请输入正数" - }, - "holographic": { - "title": "全息渲染器 v3.1", - "subtitle": "生成自: specs/tri/holographic_renderer.vibee", - "adsTitle": "AdS₅径向切片 — 体/边界对应", - "spinTitle": "自旋网络 — 面积特征值", - "penroseTitle": "彭罗斯P3镶嵌 — 黄金性质", - "entropyTitle": "贝肯斯坦-霍金熵面", - "hawkingTitle": "霍金辐射 — 黑洞蒸发", - "formula": "公式", - "solarEntropy": "太阳质量黑洞熵", - "holoBits": "全息比特", - "multiverseTitle": "永恒暴胀 — 泡泡宇宙", - "stringTitle": "弦理论景观 — 通量真空", - "ryuTitle": "Ryu-Takayanagi — 全息纠缠熵" - }, - "quantumGravity": { - "title": "量子引力模拟 v3.1", - "subtitle": "生成自: specs/tri/quantum_gravity_sim.vibee", - "steps": "步数", - "spinFoamTitle": "自旋泡沫演化 (Ponzano-Regge)", - "reggeTitle": "Regge微积分 (单纯形量子引力)", - "adsTitle": "AdS/CFT热化动力学", - "areaTitle": "LQG面积谱 (Barbero-Immirzi)", - "areaGap": "面积间隙", - "cdtTitle": "因果动力学三角剖分", - "venezianoTitle": "Veneziano弦振幅", - "pageCurveTitle": "黑洞信息 (Page曲线)" - }, - "marketplace": { - "title": "$TRI 神圣计算市场", - "subtitle": "生成自: specs/tri/tri_marketplace.vibee", - "network": "网络", - "totalSupply": "总供应量", - "circulating": "流通量", - "staked": "质押量", - "constants": "常数", - "formulaFits": "公式拟合", - "verified": "已验证", - "topComputations": "顶级神圣计算", - "stakingTitle": "质押层级 (斐波那契 × φ)", - "proofTitle": "神圣计算证明", - "tokenomicsTitle": "$TRI 代币经济学 (φ-通缩模型)" - }, - "stickyCta": { - "invest": "立即投资", - "calculator": "节省计算器" - }, - "autonomousUniverse": { - "title": "自主宇宙", - "description": "具有自主泡泡和自调参数的自我演化数学宇宙", - "bubblesTitle": "自主泡泡", - "mutationRate": "变异率", - "crossoverCount": "交叉次数", - "novelDiscoveries": "新发现", - "convergenceScore": "收敛分数", - "autoTune": "自动调优", - "muAdjusted": "μ已调整", - "evolution": "进化", - "generation": "代数", - "fitness": "适应度", - "discovery": "发现", - "snapshot": "快照", - "snapshotTs": "快照时间戳", - "phiAlignment": "φ对齐", - "convergeStatus": "收敛状态", - "reset": "重置", - "resetConfirm": "宇宙将重置为初始状态", - "trinity": "TRINITY: ✓" - }, - "formulaDiscovery": { - "title": "公式发现混合", - "description": "带有AST解析的混合符号+数值方法", - "hybridDiscovery": "混合发现", - "symbolic": "符号公式", - "numeric": "数值近似", - "confidence": "置信度", - "astParse": "AST解析", - "symbolicSimplify": "符号简化", - "numericApprox": "数值近似", - "error": "近似误差", - "exactEval": "精确求值", - "exactValue": "精确值", - "decimal": "十进制", - "equivalence": "等价性查找", - "optimize": "复杂度优化", - "before": "优化前", - "after": "优化后", - "complexityBefore": "优化前复杂度", - "complexityAfter": "优化后复杂度", - "sacred": "神圣: ✓", - "hybrid": "混合" - }, - "sacredEconomy": { - "title": "神圣经济Web3", - "description": "具有质押和治理的Web3桥接神圣经济", - "wallet": "钱包连接", - "address": "钱包地址", - "balance": "$TRI余额", - "oracle": "链上预言机", - "phiPrice": "φ价格", - "gas": "Gas价格", - "block": "区块号", - "timestamp": "时间戳", - "proposal": "治理提案", - "votesFor": "赞成票", - "votesAgainst": "反对票", - "stake": "质押", - "staked": "已质押", - "apy": "年化收益", - "rewards": "待领取奖励", - "listing": "创建上架", - "listingId": "上架ID", - "metrics": "链上指标", - "tvl": "总锁仓价值", - "volume24h": "24小时交易量", - "transactions": "24小时交易数", - "web3": "WEB3: 已连接" - }, - "selfImprover": { - "title": "自我改进Adam", - "description": "具有Adam优化器和EWC整合的自我改进AI", - "adamOptimizer": "Adam优化器", - "learningRate": "学习率", - "iteration": "迭代", - "gradient": "梯度下降", - "gradientNorm": "梯度范数", - "loss": "损失", - "momentum": "动量更新", - "velocity": "速度", - "decay": "衰减率", - "trajectory": "学习轨迹", - "trajectoryId": "轨迹ID", - "steps": "已完成步数", - "successRate": "成功率", - "gradientClip": "梯度裁剪", - "clipThreshold": "裁剪阈值", - "clipped": "梯度已裁剪", - "consolidate": "EWC整合", - "ewcConsolidation": "EWC++整合", - "fisherInfo": "Fisher信息", - "lambda": "λ参数", - "ewcLoss": "EWC损失", - "parameters": "已整合参数", - "optimizer": "优化器", - "adam": "ADAM" - }, - "nftMarketplace": { - "title": "NFT市场", - "description": "具有拍卖和版税的神圣NFT市场", - "listings": "活跃上架", - "placeBid": "出价", - "bidAmount": "当前出价", - "minIncrement": "最小增量", - "createListing": "创建上架", - "listingFee": "市场手续费", - "royaltyRate": "版税率", - "acceptOffer": "接受报价", - "offerAmount": "报价金额", - "buyer": "买家地址", - "cancelListing": "取消上架", - "tradeHistory": "交易历史", - "totalVolume": "总交易量", - "totalTrades": "总交易数", - "recentTrades": "最近交易", - "creator": "创建者", - "ask_price": "卖价", - "royalty": "版税" - }, - "footer": { - "tagline": "数值格式与算术核目录", - "linksTitle": "链接", - "vizTitle": "量子实验室", - "vizLaunch": "启动量子实验室", - "vizDesc": "29个互动可视化", - "contactTitle": "联系方式", - "rights": "保留所有权利。", - "docs": "文档" - }, - "science": { - "title": "科学验证", - "sub": "经同行评审的数学。每个公式都经过独立验证。", - "stats": [ - { - "value": "27/27", - "label": "测试通过" - }, - { - "value": "4", - "label": "定理已证明" - }, - { - "value": "<0.01%", - "label": "最大误差" - } - ], - "evidenceTitle": "测试覆盖率", - "sections": [ - { - "name": "VSA操作", - "passed": 7, - "total": 7 - }, - { - "name": "三进制虚拟机", - "passed": 5, - "total": 5 - }, - { - "name": "噪声鲁棒性", - "passed": 4, - "total": 4 - }, - { - "name": "BitNet MAC", - "passed": 7, - "total": 7 - }, - { - "name": "神圣常数", - "passed": 4, - "total": 4 - } - ], - "formulasTitle": "核心公式", - "formulas": [ - { - "formula": "φ² + 1/φ² = 3", - "desc": "三位一体恒等式", - "error": "0.0%" - }, - { - "formula": "I(r) = (B/r) × log₂(r)", - "desc": "最优基数", - "error": "0.0%" - }, - { - "formula": "log₂(3) = 1.585 比特/三进制位", - "desc": "信息密度", - "error": "0.0%" - }, - { - "formula": "3²¹ = 10,460,353,203", - "desc": "代币总量", - "error": "0.0%" - } - ], - "sources": [ - { - "title": "Knuth 第3卷", - "desc": "最优基数证明" - }, - { - "title": "Microsoft BitNet", - "desc": "arXiv:2402.17764" - }, - { - "title": "TerEffic FPGA", - "desc": "arXiv:2502.16473" - } - ] - }, - "about": { - "name": "Dmitrii Vasilev", - "role": "硬件 AI 与 FPGA/RTL 工程师 · GF-T 三进制浮点格式作者 · 规范 → RTL → FPGA · ML 系统与边缘 AI", - "bioTitle": "关于我", - "bio": [ - "我构建高效 AI 计算的完整技术栈:从数值格式和执行它的 RTL,到开发板上的逐位精确验证。我是 GF-T 三进制浮点格式以及更广泛 GoldenFloat 系列(GF-T8/16/32;基于 φ 的 GF4→GF1024)的作者;该系列与 Golden Ruler(包含逐位精确一致性向量的数值格式目录)一同发布。", - "我将一个 arXiv 论文中的新数值格式部署到实际的 Xilinx Artix-7(ALINX AX7203,XC7A200T)上,使用完全开放的流程:Yosys、nextpnr 和 prjxray,不依赖厂商工具。一个 SKY130 设计曾通过 Tiny Tapeout 准备(GDS、门级测试、预检查);TTSKY26a/TTSKY26b 提交已在制造前撤回并退款,不存在任何芯片。我的工作围绕规范 → RTL → 验证 → 开发板这条链路展开:每个 RTL 节点都与独立的 Python 黄金模型逐位比对,在综合前发现规范与 RTL 的偏差。", - "在硬件工作之前,我用了十多年开发和教授软件:AI 智能体与多智能体系统、React Native 以及 Web3。我接受全球远程或合同工作(UTC+7),方向包括硬件 AI、FPGA/RTL/验证、ML 系统和边缘 AI。" - ], - "achievementsTitle": "主要成果(硬件,2026)", - "achievements": [ - "FPGA 上的神经网络训练:原语可直接在开发板上训练,规范 → RTL → 开发板的完整链路均与黄金模型逐位核对。", - "GF16 4×4 矩阵乘法:映射到 Xilinx Artix-7 逻辑,使用 0 个 DSP48 和 0 个锁存器:32,252 个 LUT;允许使用硬乘法器时为 21,223 个。", - "Tiny Tapeout SKY130:设计已完成 GDS、门级测试和预检查;提交已在制造前撤回并退款。不存在芯片;所有硬件数据均来自 Artix-7(XC7A200T)FPGA 原型。", - "逐节点逐位精确验证:每个 RTL 节点都与独立的 Python 黄金模型核对(iverilog 加 KAT 向量),在综合前发现规范与 RTL 的偏差。", - "tri-net:完整的三进制网络栈(133 个 .t27 规范),包括 GF16 PHY、基于 AD9361 的 BPSK 调制解调器、网格路由和 AEAD 加密;已完成设备间无线验证。" - ], - "publicationsTitle": "公开发表", - "publications": [ - { - "title": "GoldenFloat:基于 φ 的浮点格式系列(GF4→GF1024)— arXiv:2606.05017", - "url": "https://arxiv.org/abs/2606.05017" - }, - { - "title": "Golden Ruler: A Numeric Format Catalog with Bit-Exact Conformance Vectors for FP8, BF16, MXFP4, and Microscaling Formats — arXiv:2606.09686(v3,2026 年 9 月 7 日公布)", - "url": "https://arxiv.org/abs/2606.09686" - }, - { - "title": "Ternary Network Floats — 审稿中,Microprocessors and Microsystems(Elsevier),2026 年 9 月 3 日投稿", - "url": "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/gHashTag/trinity-fpga/tree/main/research/arxiv_tnf" - } - ], - "links": { - "linkedin": "LinkedIn", - "github": "GitHub", - "arxiv1": "arXiv:GoldenFloat", - "arxiv2": "arXiv:Golden Ruler 目录" - } - } -} diff --git a/apps/website/public/term/devkit-flow/card.png b/apps/website/public/term/devkit-flow/card.png new file mode 100644 index 0000000000..28b37c7d57 Binary files /dev/null and b/apps/website/public/term/devkit-flow/card.png differ diff --git a/apps/website/public/term/devkit-flow/index.html b/apps/website/public/term/devkit-flow/index.html new file mode 100644 index 0000000000..69505b1454 --- /dev/null +++ b/apps/website/public/term/devkit-flow/index.html @@ -0,0 +1,95 @@ + + + + + +tri devkit · the FPGA flow, layer by layer · Trinity S³AI + + + + + + + + + + + + + + + + + + + + +
+
Trinity S³AIAll recordings →
+

tri devkit · the FPGA flow, layer by layer

+

One real XC7A200T build: 116.9 s with openXC7, 83.5 s with t27 L3+L4, byte-identical. Place & route is 60%.

+
+
recorded 2026-10-03 04:31 UTCreal 127.4 sshown 12.2 sexit codes 0 0
+
$ tri devkit flow --build --out /tmp/devkit-flow/rec1 +$ tri devkit impact --out /tmp/devkit-flow/rec1 --builds 20
+

Staged: the prompt and the typing. Real: every byte the commands printed, at the time they printed it. Any silence longer than 2 s is shown for 2 s, and the title bar says so while it happens. Edited: home directory shown as ~.

+ +
+ + + diff --git a/apps/website/public/term/devkit-flow/meta.json b/apps/website/public/term/devkit-flow/meta.json new file mode 100644 index 0000000000..db4cab83c0 --- /dev/null +++ b/apps/website/public/term/devkit-flow/meta.json @@ -0,0 +1,22 @@ +{ + "id": "devkit-flow", + "title": "tri devkit · the FPGA flow, layer by layer", + "desc": "One real XC7A200T build: 116.9 s with openXC7, 83.5 s with t27 L3+L4, byte-identical. Place & route is 60%.", + "url": "https://t27.ai/term/devkit-flow/", + "post": "https://t27.ai/#/devkit", + "recorded": "2026-10-03 04:31 UTC", + "real_s": 127.4, + "shown_s": 12.2, + "commands": [ + "tri devkit flow --build --out /tmp/devkit-flow/rec1", + "tri devkit impact --out /tmp/devkit-flow/rec1 --builds 20" + ], + "exit_codes": [ + "0", + "0" + ], + "redacted": [ + "home directory shown as ~" + ], + "published": "2026-10-03" +} diff --git a/apps/website/public/term/devkit-flow/session.cast b/apps/website/public/term/devkit-flow/session.cast new file mode 100644 index 0000000000..4c7d2617c9 --- /dev/null +++ b/apps/website/public/term/devkit-flow/session.cast @@ -0,0 +1,132 @@ +{"version": 2, "width": 104, "height": 30, "timestamp": 1791001873, "title": "tri devkit \u00b7 the FPGA flow, layer by layer", "commands": ["tri devkit flow --build --out /tmp/devkit-flow/rec1", "tri devkit impact --out /tmp/devkit-flow/rec1 --builds 20"], "redacted": ["home directory shown as ~"]} +[0.0, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"] +[0.4051, "o", "t"] +[0.4415, "o", "r"] +[0.4786, "o", "i"] +[0.5154, "o", " "] +[0.5554, "o", "d"] +[0.5955, "o", "e"] +[0.6321, "o", "v"] +[0.6677, "o", "k"] +[0.7077, "o", "i"] +[0.7477, "o", "t"] +[0.7849, "o", " "] +[0.8237, "o", "f"] +[0.8638, "o", "l"] +[0.9038, "o", "o"] +[0.9404, "o", "w"] +[0.9804, "o", " "] +[1.0198, "o", "-"] +[1.0571, "o", "-"] +[1.0971, "o", "b"] +[1.1371, "o", "u"] +[1.1772, "o", "i"] +[1.2154, "o", "l"] +[1.2554, "o", "d"] +[1.2955, "o", " "] +[1.3355, "o", "-"] +[1.3755, "o", "-"] +[1.4136, "o", "o"] +[1.4487, "o", "u"] +[1.4888, "o", "t"] +[1.5288, "o", " "] +[1.5688, "o", "/"] +[1.6071, "o", "t"] +[1.6471, "o", "m"] +[1.6871, "o", "p"] +[1.7272, "o", "/"] +[1.7672, "o", "d"] +[1.807, "o", "e"] +[1.8471, "o", "v"] +[1.8846, "o", "k"] +[1.9237, "o", "i"] +[1.9592, "o", "t"] +[1.9992, "o", "-"] +[2.0392, "o", "f"] +[2.0792, "o", "l"] +[2.1144, "o", "o"] +[2.154, "o", "w"] +[2.1942, "o", "/"] +[2.2336, "o", "r"] +[2.2734, "o", "e"] +[2.3109, "o", "c"] +[2.351, "o", "1"] +[2.697, "o", "\r\n"] +[2.8095, "o", "\u001b[38;2;255;215;0m╭────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[38;2;255;215;0m│\u001b[0m\u001b[38;2;255;215;0;1m ▼ Trinity S³AI tri devkit flow\u001b[0m \u001b[2mthe FPGA flow, layer by layer \u001b[0m\u001b[38;2;255;215;0m│\u001b[0m\r\n\u001b[38;2;255;215;0m╰────────────────────────────────────────────────────────────────────────╯\u001b[0m\r\n\r\n$ tri fpga-build --out /tmp/devkit-flow/rec1\r\n"] +[119.9503, "o", " [yosys ] rc=0 12.7 s rss 348.9 MB\r\n [nextpnr ] rc=0 70.1 s rss 669.5 MB\r\n [fasm2frames ] rc=0 33.9 s rss 763.0 MB\r\n [frames2bit ] rc=0 0.2 s rss 45.0 MB\r\n"] +[119.9593, "o", "design trinet_node_v2_ax7203 part xc7a200tfbg484-2 FASM 121,587 lines\r\n"] +[119.9741, "o", "$ bitwalk --fasm db-artix7-xc7a200tfbg484-2-prjxray-db-ab1fc60-v2.txt node.fasm ours.frames (3 runs)\r\n"] +[121.2821, "o", "$ bitwalk --write ours.frames ours.bit (3 runs)\r\n"] +[122.3235, "o", "\r\n"] +[122.3235, "o", "layer openXC7 tool now t27 t27 s same bytes\r\n"] +[122.3235, "o", "L1 synthesis yosys 12.69 s not yet – –\r\n"] +[122.3236, "o", "L2 place & route nextpnr-xilinx 70.09 s not yet – –\r\nL3 FASM → frames fasm2frames.py 33.86 s bitwalk --fasm 0.42 yes\r\nL4 frames → .bit xc7frames2bit 0.22 s bitwalk --write 0.25 yes\r\nwhole flow 116.86 s with L3+L4 in t27 83.45 (1.40x)\r\n\r\n\u001b[1m share of one build\u001b[0m\r\n"] +[122.3236, "o", " L1 synthesis \u001b[2m████▎\u001b[0m 10.9 %\r\n L2 place & route \u001b[36m███████████████████████▉\u001b[0m 60.0 %\r\n L3 FASM → frames \u001b[32m███████████▌\u001b[0m 29.0 %\r\n L4 frames → .bit \u001b[32m▏\u001b[0m 0.2 %\r\n\r\nAmdahl ceilings: the whole flow if one more layer took 0 s (the most a rewrite could give)\r\n L1 synthesis 83.45 s -> 70.76 s 1.65x vs openXC7 today\r\n L2 place & route 83.45 s -> 13.36 s 8.75x vs openXC7 today\r\n"] +[122.3237, "o", "load 13 on 8 cpus; times are wall seconds and move with load -- re-time before quoting\r\n"] +[122.3307, "o", "\r\n"] +[122.3309, "o", "\u001b[32m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\u001b[0m\r\n"] +[122.3309, "o", "\u001b[32m┃\u001b[0m \u001b[32;1m✔ t27 layers byte-identical to openXC7: frames True, .bit True\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[0m one build 116.9 s -> 83.4 s (1.40x), 33.4 s saved\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[0m L1 and L2 are not rewritten; their rows are ceilings, not results\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\r\nflow: SAME saved 33.4 s per build\r\n"] +[122.3379, "x", "0"] +[123.342, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"] +[123.7421, "o", "t"] +[123.7804, "o", "r"] +[123.8204, "o", "i"] +[123.8567, "o", " "] +[123.8966, "o", "d"] +[123.9341, "o", "e"] +[123.9726, "o", "v"] +[124.01, "o", "k"] +[124.0471, "o", "i"] +[124.0871, "o", "t"] +[124.1226, "o", " "] +[124.1626, "o", "i"] +[124.2008, "o", "m"] +[124.2383, "o", "p"] +[124.2784, "o", "a"] +[124.3184, "o", "c"] +[124.3554, "o", "t"] +[124.3954, "o", " "] +[124.4355, "o", "-"] +[124.4708, "o", "-"] +[124.5108, "o", "o"] +[124.5473, "o", "u"] +[124.5874, "o", "t"] +[124.6258, "o", " "] +[124.6636, "o", "/"] +[124.7037, "o", "t"] +[124.7435, "o", "m"] +[124.7805, "o", "p"] +[124.8206, "o", "/"] +[124.8606, "o", "d"] +[124.8982, "o", "e"] +[124.9382, "o", "v"] +[124.9782, "o", "k"] +[125.0179, "o", "i"] +[125.058, "o", "t"] +[125.098, "o", "-"] +[125.138, "o", "f"] +[125.1748, "o", "l"] +[125.2123, "o", "o"] +[125.248, "o", "w"] +[125.2882, "o", "/"] +[125.328, "o", "r"] +[125.3668, "o", "e"] +[125.4061, "o", "c"] +[125.4462, "o", "1"] +[125.4858, "o", " "] +[125.5255, "o", "-"] +[125.5636, "o", "-"] +[125.6037, "o", "b"] +[125.6438, "o", "u"] +[125.6846, "o", "i"] +[125.7198, "o", "l"] +[125.7595, "o", "d"] +[125.7995, "o", "s"] +[125.8395, "o", " "] +[125.8766, "o", "2"] +[125.9166, "o", "0"] +[126.2536, "o", "\r\n"] +[126.3494, "o", "\u001b[38;2;255;215;0m╭────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[38;2;255;215;0m│\u001b[0m\u001b[38;2;255;215;0;1m ▼ Trinity S³AI tri devkit impact\u001b[0m \u001b[2mthe FPGA flow, layer by layer \u001b[0m\u001b[38;2;255;215;0m│\u001b[0m\r\n\u001b[38;2;255;215;0m╰────────────────────────────────────────────────────────────────────────╯\u001b[0m\r\n\r\nmeasured 116.9 s -> 83.5 s per build, 33.4 s saved (2026-10-03T11:31:08+0700, load 12.6)\r\nassumed 20 builds a day, 1 person, 230 working days (assumptions, not measurements)\r\nresult 42.7 hours a year of waiting removed\r\nceiling + L1 synthesis: at most 16.2 more hours a year, if it took 0 s\r\nceiling + L2 place & route: at most 89.6 more hours a year, if it took"] +[126.3496, "o", " 0 s\r\nimpact: 42.7 h/yr measured saving at the stated assumptions\r\n"] +[126.3573, "x", "0"] +[127.3583, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"] diff --git a/apps/website/public/term/index.html b/apps/website/public/term/index.html new file mode 100644 index 0000000000..52a99c6b7e --- /dev/null +++ b/apps/website/public/term/index.html @@ -0,0 +1,54 @@ + + + + + +Recordings · Trinity S³AI + + + + + + + + + + + + + + +
+
Trinity S³AI
+

Recordings

+

Terminal sessions recorded from real commands: the output is what the commands printed. 2 so far.

+
+
tri devkit · the FPGA flow, layer by layer2026-10-03 04:31 UTC · 127.4 s real
+
A bitstream from t27 specs, run on the AX72032026-10-02 20:34 UTC · 73.7 s real
+
+
+ + diff --git a/apps/website/public/term/player.js b/apps/website/public/term/player.js new file mode 100644 index 0000000000..ed56251f35 --- /dev/null +++ b/apps/website/public/term/player.js @@ -0,0 +1,375 @@ +// t27.ai terminal player: replays a recorded session (asciicast v2) in the page. +// One implementation for the web: the /term// pages load it directly and the +// blog's TerminalCast component loads it at run time. The GIF and the preview +// card are drawn from the same .cast by termgif.py (`tri cast`). +// +// Every byte shown is one the command printed, at the time it printed it. The +// prompt and the typing are staged by the recorder. A silence longer than +// MAX_IDLE is shown for MAX_IDLE, and the title bar says so while it happens. + +const MAX_IDLE = 2 +const PAL = ['#333333', '#ff5c5c', '#00ff88', '#ffd700', '#6aa8ff', '#ff7ad9', '#5ce1e6', '#ebebeb', + '#888888', '#ff7878', '#00ff88', '#ffd700', '#8cbeff', '#ff96e1', '#78ebf0', '#ffffff'] +const TEXT = '#ebebeb' +const DIM = '#777777' + +function x256(n) { + if (n < 16) return PAL[n] + if (n < 232) { + const lv = [0, 95, 135, 175, 215, 255] + const m = n - 16 + return `rgb(${lv[Math.floor(m / 36)]},${lv[Math.floor(m / 6) % 6]},${lv[m % 6]})` + } + const g = 8 + 10 * (n - 232) + return `rgb(${g},${g},${g})` +} + +class Screen { + constructor(cols, rows) { + this.c = cols + this.r = rows + this.lines = Array.from({ length: rows }, () => this.blank()) + this.x = this.y = 0 + this.fg = TEXT + this.bg = null + this.b = this.dim = false + } + blank() { + return Array.from({ length: this.c }, () => [' ', TEXT, null, false]) + } + nl() { + this.y += 1 + if (this.y >= this.r) { + this.lines.shift() + this.lines.push(this.blank()) + this.y = this.r - 1 + } + } + sgr(ps) { + if (!ps.length) ps = [0] + for (let i = 0; i < ps.length; i++) { + const p = ps[i] + if (p === 0) { this.fg = TEXT; this.bg = null; this.b = this.dim = false } + else if (p === 1) this.b = true + else if (p === 2) this.dim = true + else if (p === 22) this.b = this.dim = false + else if (p >= 30 && p <= 37) this.fg = PAL[p - 30] + else if (p >= 90 && p <= 97) this.fg = PAL[p - 82] + else if (p >= 40 && p <= 47) this.bg = PAL[p - 40] + else if (p >= 100 && p <= 107) this.bg = PAL[p - 92] + else if (p === 39) this.fg = TEXT + else if (p === 49) this.bg = null + else if (p === 38 || p === 48) { + let c = null + const mode = ps[i + 1] + if (mode === 5) { c = x256(ps[i + 2] ?? 7); i += 2 } + else if (mode === 2) { c = `rgb(${ps[i + 2] ?? 0},${ps[i + 3] ?? 0},${ps[i + 4] ?? 0})`; i += 4 } + const isFg = p === 38 + if (c && isFg) this.fg = c + else if (c) this.bg = c + } + } + } + feed(s) { + let i = 0 + while (i < s.length) { + const ch = s[i] + if (ch === '\x1b') { + const m = /^\x1b\[([0-9;?]*)([A-Za-z])/.exec(s.slice(i, i + 40)) + if (m) { + const raw = m[1].replace('?', '') + const ps = raw === '' ? [] : raw.split(';').map((v) => (v === '' ? 0 : parseInt(v, 10))) + const n = ps[0] || 1 + const f = m[2] + if (f === 'm') this.sgr(ps) + else if (f === 'K') for (let k = this.x; k < this.c; k++) this.lines[this.y][k] = [' ', TEXT, null, false] + else if (f === 'A') this.y = Math.max(0, this.y - n) + else if (f === 'B') this.y = Math.min(this.r - 1, this.y + n) + else if (f === 'C') this.x = Math.min(this.c - 1, this.x + n) + else if (f === 'D') this.x = Math.max(0, this.x - n) + else if (f === 'G') this.x = Math.min(this.c - 1, Math.max(0, n - 1)) + else if (f === 'J' && ps[0] === 2) this.lines = Array.from({ length: this.r }, () => this.blank()) + i += m[0].length + continue + } + const o = /^\x1b\][^\x07]*\x07|^\x1b./.exec(s.slice(i, i + 256)) + i += o ? o[0].length : 1 + continue + } + if (ch === '\n') { this.nl(); this.x = 0 } + else if (ch === '\r') this.x = 0 + else if (ch === '\b') this.x = Math.max(0, this.x - 1) + else if (ch >= ' ') { + if (this.x >= this.c) { this.nl(); this.x = 0 } + this.lines[this.y][this.x] = [ch, this.dim ? DIM : this.fg, this.bg, this.b] + this.x += 1 + } + i += 1 + } + } + html() { + const esc = (t) => t.replace(/&/g, '&').replace(/ { + let out = '' + let k = 0 + while (k < line.length) { + const [, fg, bg, b] = line[k] + let t = '' + let j = k + while (j < line.length && line[j][1] === fg && line[j][2] === bg && line[j][3] === b) { + t += line[j][0] + j++ + } + const cur = y === this.y && this.x >= k && this.x < j + if (cur) { + const o = this.x - k + t = esc(t.slice(0, o)) + `${esc(t[o])}` + esc(t.slice(o + 1)) + } else t = esc(t) + out += `${t}` + k = j + } + return `
${out}
` + }).join('') + } +} + +export function parseCast(text) { + const rows = text.split('\n').filter((r) => r.trim() !== '') + const head = JSON.parse(rows[0]) + return { head, events: rows.slice(1).map((r) => JSON.parse(r)) } +} + +function timeline(events) { + const out = [] + let shown = 0 + let prev = events.length ? events[0][0] : 0 + for (const ev of events) { + const gap = ev[0] - prev + shown += Math.min(gap, MAX_IDLE) + out.push({ at: shown, ev, waited: gap }) + prev = ev[0] + } + return out +} + +const CSS = ` +.t27t{background:#000;border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden;color:${TEXT}} +.t27t .bar{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#0a0a0a;border-bottom:1px solid rgba(255,255,255,.08);font:12px Outfit,system-ui,sans-serif;color:#888} +.t27t .dots{display:flex;gap:6px}.t27t .dots i{width:11px;height:11px;border-radius:50%;display:inline-block} +.t27t .ttl{flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.t27t .note{color:#ffd700;background:#282200;border-radius:10px;padding:1px 9px;white-space:nowrap} +.t27t button{background:transparent;border:1px solid rgba(255,255,255,.16);color:${TEXT};border-radius:6px;padding:2px 10px;font-size:12px;cursor:pointer} +.t27t button:hover{border-color:#00ff88;color:#00ff88} +.t27t .scr{overflow-x:auto} +.t27t .log{font-family:'JetBrains Mono','SF Mono',Menlo,'DejaVu Sans Mono',monospace;font-size:clamp(8.5px,1.22vw,12.5px);line-height:1.25;padding:14px 16px;min-width:max-content} +.t27t .t27r{white-space:pre;height:1.25em} +.t27t .t27c{background:#ffd700;color:#000} +.t27t .prog{height:2px;background:rgba(255,255,255,.06)}.t27t .prog div{height:2px;width:0;background:#00ff88;transition:width .2s linear} +.t27t .shr{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 12px;background:#0a0a0a;border-top:1px solid rgba(255,255,255,.08);font:12px Outfit,system-ui,sans-serif} +.t27t .shr .lbl{color:#888;margin-right:2px} +.t27t .shr .row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;width:100%} +.t27t .shr .fol a{border-color:transparent;color:#aaa;padding:3px 6px} +.t27t .shr a,.t27t .shr button{display:inline-flex;align-items:center;gap:5px;background:transparent;border:1px solid rgba(255,255,255,.16);color:${TEXT};border-radius:6px;padding:3px 10px;font:12px Outfit,system-ui,sans-serif;text-decoration:none;cursor:pointer} +.t27t .shr a:hover,.t27t .shr button:hover{border-color:#00ff88;color:#00ff88} +` + +// The canonical page of a published recording: t27.ai/term//. A share link +// always points there, because only that static page has its own preview card +// (the site's hash routes all share one card). +const SITE = 'https://t27.ai' +function sharePage(src, share) { + if (share) return share + const m = /(?:^|\/)term\/([a-z0-9][a-z0-9-]*)\/session\.cast$/.exec(String(src || '').split(/[?#]/)[0]) + return m ? `${SITE}/term/${m[1]}/` : '' +} + +// Opened as a Telegram Mini App (the TRI DEV bot's "open" button), Telegram adds +// tgWebApp* parameters to the address. Only then is Telegram's own script loaded, +// so links open through Telegram and the page takes the full height. +let tg = null +function telegram() { + if (tg) return tg + const inTelegram = /tgWebApp/.test(window.location.hash + window.location.search) + if (!inTelegram) return (tg = Promise.resolve(null)) + tg = new Promise((resolve) => { + if (window.Telegram && window.Telegram.WebApp) return resolve(window.Telegram.WebApp) + const s = document.createElement('script') + s.src = 'https://telegram.org/js/telegram-web-app.js' + s.onload = () => { + const app = window.Telegram && window.Telegram.WebApp + if (app) { app.ready(); app.expand() } + resolve(app || null) + } + s.onerror = () => resolve(null) + document.head.appendChild(s) + }) + return tg +} + +// Where to find us: the same four addresses as the site footer +// (src/components/Footer.tsx, "Contact"). Change them there and here together. +const FOLLOW = [ + ['r/t27ai', 'https://www.reddit.com/r/t27ai/'], + ['Telegram', 'https://t.me/t27_lang'], + ['X', 'https://x.com/t27_lang'], + ['GitHub', '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/gHashTag/trinity'], +] + +function shareBar(bar, { page, src, title, ident }) { + const text = `${title} · Trinity S³AI` + const x = `https://x.com/intent/post?text=${encodeURIComponent(text)}&url=${encodeURIComponent(page)}` + const t = `https://t.me/share/url?url=${encodeURIComponent(page)}&text=${encodeURIComponent(text)}` + const r = `https://www.reddit.com/submit?url=${encodeURIComponent(page)}&title=${encodeURIComponent(text)}` + const follow = FOLLOW.map(([n, h]) => `${n}`).join('') + bar.innerHTML = `
Follow${follow}
` + const copy = bar.querySelector('[data-k="copy"]') + copy.addEventListener('click', async () => { + const app = await telegram() + const touch = window.matchMedia && window.matchMedia('(pointer:coarse)').matches + if (!app && navigator.share && touch) { + navigator.share({ title: text, url: page }).catch(() => {}) + return + } + try { + await navigator.clipboard.writeText(page) + copy.textContent = '✓ Copied' + } catch { + copy.textContent = page + } + window.setTimeout(() => { copy.textContent = '⧉ Copy link' }, 2000) + }) + // Inside Telegram an ordinary link would leave the Mini App; hand it to Telegram. + for (const a of bar.querySelectorAll('a[data-k="out"]')) { + a.addEventListener('click', async (e) => { + const app = await telegram() + if (!app) return + e.preventDefault() + if (a.href.startsWith('https://t.me/')) app.openTelegramLink(a.href) + else app.openLink(a.href) + }) + } +} + +let styled = false + +// mount(el, { src, title, share }) -> { play, pause, replay, destroy } +// share: the recording's page; derived from src when it is term//session.cast. +// With a page to point at, the player carries its own share buttons, so every +// embed (post, spec, share page, Telegram) offers the same ones. +export function mount(el, { src, title, share } = {}) { + if (!styled) { + const st = document.createElement('style') + st.textContent = CSS + document.head.appendChild(st) + styled = true + } + el.classList.add('t27t') + el.innerHTML = `
` + telegram() + const page = sharePage(src, share) + const ident = (/term\/([a-z0-9-]+)\//.exec(page) || [])[1] + const ttl = el.querySelector('.ttl') + const note = el.querySelector('.note') + const btn = el.querySelector('button') + const log = el.querySelector('.log') + const prog = el.querySelector('.prog div') + ttl.textContent = title || '' + + let cast = null + let tl = [] + let scr = null + let pos = 0 + let timer = 0 + let playing = false + let started = false + const reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches + + const draw = () => { + log.innerHTML = scr.html() + const total = tl.length ? tl[tl.length - 1].at : 0 + const at = pos > 0 ? tl[pos - 1].at : 0 + prog.style.width = `${total ? (100 * at) / total : 0}%` + const done = pos >= tl.length + btn.textContent = playing ? '❚❚' : done ? '↻' : '▶' + btn.setAttribute('aria-label', playing ? 'Pause' : done ? 'Replay' : 'Play') + } + const reset = () => { + scr = new Screen(cast.head.width, cast.head.height) + pos = 0 + } + const applyTo = (p) => { + while (pos < p) { + const ev = tl[pos].ev + if (ev[1] === 'o') scr.feed(ev[2]) + pos++ + } + } + const step = () => { + if (pos >= tl.length) { + playing = false + note.hidden = true + draw() + return + } + const now = pos === 0 ? 0 : tl[pos - 1].at + const next = tl[pos] + const long = next.waited > MAX_IDLE + 0.5 + note.hidden = !long + if (long) note.textContent = `waited ${Math.round(next.waited)} s, shown ${MAX_IDLE} s` + timer = window.setTimeout(() => { + let p = pos + 1 + while (p < tl.length && tl[p].at - next.at < 0.06) p++ + applyTo(p) + draw() + if (playing) step() + }, Math.max(0, (next.at - now) * 1000)) + } + const play = () => { + if (!cast) return + if (pos >= tl.length) reset() + playing = true + started = true + draw() + step() + } + const pause = () => { + playing = false + window.clearTimeout(timer) + note.hidden = true + draw() + } + btn.addEventListener('click', () => (playing ? pause() : play())) + + let io = null + fetch(src) + .then((r) => (r.ok ? r.text() : Promise.reject(new Error(String(r.status))))) + .then((t) => { + cast = parseCast(t) + tl = timeline(cast.events) + if (!title) ttl.textContent = cast.head.title || '' + if (page) { + const bar = el.querySelector('.shr') + shareBar(bar, { page, src, title: ttl.textContent, ident }) + bar.hidden = false + } + log.setAttribute('aria-label', `Terminal recording: ${ttl.textContent}`) + reset() + if (reduced) applyTo(tl.length) // the finished session, still; play is one click away + draw() + if (reduced) return + io = new IntersectionObserver((es) => { + if (es.some((e) => e.isIntersecting) && !started) play() + }, { threshold: 0.35 }) + io.observe(el) + }) + .catch(() => { + log.textContent = 'The recording could not load.' + }) + + return { + play, + pause, + replay: () => { pause(); reset(); play() }, + destroy: () => { pause(); if (io) io.disconnect(); el.innerHTML = '' }, + } +} diff --git a/apps/website/public/term/x7-board/card.png b/apps/website/public/term/x7-board/card.png new file mode 100644 index 0000000000..8f36c11714 Binary files /dev/null and b/apps/website/public/term/x7-board/card.png differ diff --git a/apps/website/public/term/x7-board/index.html b/apps/website/public/term/x7-board/index.html new file mode 100644 index 0000000000..b5d5858868 --- /dev/null +++ b/apps/website/public/term/x7-board/index.html @@ -0,0 +1,96 @@ + + + + + +A bitstream from t27 specs, run on the AX7203 · Trinity S³AI + + + + + + + + + + + + + + + + + + + + +
+ +

A bitstream from t27 specs, run on the AX7203

+

Byte-identical to openXC7's .bit, loaded into SRAM, 51,840 of 51,840 tagged receipts on the board.

+
+
recorded 2026-10-02 20:34 UTCreal 73.7 sshown 33.0 sexit codes 0 0 0
+
$ tri x7-board compare --ref +$ tri x7-board load x7-board-gif3-load --owner-yes 'check it on the board!! this matters!' +$ tri x7-board receipts x7-board-gif3 --quick
+

Staged: the prompt and the typing. Real: every byte the commands printed, at the time they printed it. Any silence longer than 2 s is shown for 2 s, and the title bar says so while it happens. Edited: home directory shown as ~.

+ +
+ + + diff --git a/apps/website/public/term/x7-board/meta.json b/apps/website/public/term/x7-board/meta.json new file mode 100644 index 0000000000..8039a0e420 --- /dev/null +++ b/apps/website/public/term/x7-board/meta.json @@ -0,0 +1,24 @@ +{ + "id": "x7-board", + "title": "A bitstream from t27 specs, run on the AX7203", + "desc": "Byte-identical to openXC7's .bit, loaded into SRAM, 51,840 of 51,840 tagged receipts on the board.", + "url": "https://t27.ai/term/x7-board/", + "post": "https://t27.ai/#/blog/the-back-half-of-openxc7-from-a-spec", + "recorded": "2026-10-02 20:34 UTC", + "real_s": 73.7, + "shown_s": 33.0, + "commands": [ + "tri x7-board compare --ref", + "tri x7-board load x7-board-gif3-load --owner-yes 'check it on the board!! this matters!'", + "tri x7-board receipts x7-board-gif3 --quick" + ], + "exit_codes": [ + "0", + "0", + "0" + ], + "redacted": [ + "home directory shown as ~" + ], + "published": "2026-10-02" +} diff --git a/apps/website/public/term/x7-board/session.cast b/apps/website/public/term/x7-board/session.cast new file mode 100644 index 0000000000..0134d45a26 --- /dev/null +++ b/apps/website/public/term/x7-board/session.cast @@ -0,0 +1,226 @@ +{"version": 2, "width": 104, "height": 30, "timestamp": 1790973272, "title": "tri x7-board \u00b7 t27 back half on the AX7203", "commands": ["tri x7-board compare --ref", "tri x7-board load x7-board-gif3-load --owner-yes 'check it on the board!! this matters!'", "tri x7-board receipts x7-board-gif3 --quick"], "redacted": ["home directory shown as ~"]} +[0.0, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"] +[0.4022, "o", "t"] +[0.4401, "o", "r"] +[0.4802, "o", "i"] +[0.5186, "o", " "] +[0.5568, "o", "x"] +[0.5968, "o", "7"] +[0.6369, "o", "-"] +[0.6735, "o", "b"] +[0.712, "o", "o"] +[0.752, "o", "a"] +[0.7921, "o", "r"] +[0.8321, "o", "d"] +[0.8722, "o", " "] +[0.9122, "o", "c"] +[0.9485, "o", "o"] +[0.9875, "o", "m"] +[1.0265, "o", "p"] +[1.0652, "o", "a"] +[1.1035, "o", "r"] +[1.1434, "o", "e"] +[1.1827, "o", " "] +[1.219, "o", "-"] +[1.2571, "o", "-"] +[1.2963, "o", "r"] +[1.3318, "o", "e"] +[1.3719, "o", "f"] +[1.7163, "o", "\r\n"] +[1.7864, "o", "\u001b[38;2;255;215;0m╭────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[38;2;255;215;0m│\u001b[0m\u001b[38;2;255;215;0;1m ▼ Trinity S³AI tri x7-board compare\u001b[0m \u001b[2mt27 back half · XC7A200T \u001b[0m\u001b[38;2;255;215;0m│\u001b[0m\r\n\u001b[38;2;255;215;0m╰────────────────────────────────────────────────────────────────────────╯\u001b[0m\r\n \u001b[36;1mFASM\u001b[0m\u001b[38;2;255;215;0m ━━▶ \u001b[0m\u001b[36;1mframes\u001b[0m\u001b[38;2;255;215;0m ━━▶ \u001b[0m\u001b[36;1m.bit\u001b[0m\u001b[2m ━━▶ \u001b[0m\u001b[2mAX7203\u001b[0m\r\n \u001b[2mnextpnr\u001b[0m \u001b[2mbitwalk\u001b[0m \u001b[2mbitwalk\u001b[0m \u001b[2mSRAM \u001b[0m\r\n\r\n"] +[1.7968, "o", "design trinet_node_v2_ax7203 part xc7a200tfbg484-2 FASM 121,587 lines\r\ndb ~/.cache/openxc7/prjxray-db-ab1fc60/artix7\r\n"] +[1.8124, "o", "digest db-artix7-xc7a200tfbg484-2-prjxray-db-ab1fc60-v2.txt\r\n$ fasm2frames.py (prjxray, re-timed now)\r\n"] +[35.168, "o", " 33.34 s, same as the build's: True\r\n$ bitwalk --fasm db-artix7-xc7a200tfbg484-2-prjxray-db-ab1fc60-v2.txt node.fasm ours.frames\r\n"] +[36.683, "o", " /tmp/x7board/node0/ours.frames: 20230 frames, 371806 bits, required 0, stepdown 96, ppip lines 33475, outside the tile 0 (wrapped below the frame 0, dropped abo\r\n"] +[36.6903, "o", "bitwalk --fasm 0.44 / 0.43 / 0.64 s frames byte-identical: True\r\n"] +[36.6996, "o", "$ bitwalk --write ours.frames ours.bit --part_name xc7a200tfbg484-2\r\n"] +[37.7297, "o", "xc7frames2bit 0.36 s (build manifest)\r\n"] +[37.7297, "o", "bitwalk --write 0.40 / 0.32 / 0.30 s .bit byte-identical: True\r\n"] +[37.7408, "o", "sha256 ours 68249475b57e623f openXC7 68249475b57e623f (9,730,774 bytes)\r\nFASM -> frames: 33.3 s -> 0.43 s (77x) load: 23 on 8 cpus\r\n"] +[37.7519, "o", "\r\n\u001b[1m FASM → frames\u001b[0m\r\n"] +[37.7519, "o", " fasm2frames.py \u001b[31m████████████████████████████████████████\u001b[0m 33.34 s\r\n"] +[37.7519, "o", " bitwalk --fasm \u001b[32m▌\u001b[0m 0.43 s\r\n \u001b[32m77× faster · byte-identical\u001b[0m\r\n\u001b[1m frames → .bit\u001b[0m\r\n"] +[37.7519, "o", " xc7frames2bit \u001b[31m████████████████████████████████████████\u001b[0m 0.36 s\r\n"] +[37.752, "o", " bitwalk --write \u001b[32m█████████████████████████████████▏\u001b[0m 0.30 s\r\n \u001b[32ma tie · byte-identical\u001b[0m\r\n\r\n"] +[37.7572, "o", "\u001b[32m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[32;1m✔ SAME: frames and .bit byte-identical to openXC7's\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[0m sha256 68249475b57e623f05564e3d839cfb0c…\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[0m 121,587 FASM lines · 9,730,774 bytes\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\r\ncompare: SAME\r\n"] +[37.7638, "x", "0"] +[38.7698, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"] +[39.1798, "o", "t"] +[39.2249, "o", "r"] +[39.2697, "o", "i"] +[39.3147, "o", " "] +[39.3598, "o", "x"] +[39.403, "o", "7"] +[39.4458, "o", "-"] +[39.4908, "o", "b"] +[39.5339, "o", "o"] +[39.5787, "o", "a"] +[39.6145, "o", "r"] +[39.6596, "o", "d"] +[39.6947, "o", " "] +[39.7379, "o", "l"] +[39.778, "o", "o"] +[39.8214, "o", "a"] +[39.8614, "o", "d"] +[39.9064, "o", " "] +[39.9447, "o", "x"] +[39.9898, "o", "7"] +[40.028, "o", "-"] +[40.0731, "o", "b"] +[40.1169, "o", "o"] +[40.162, "o", "a"] +[40.207, "o", "r"] +[40.2447, "o", "d"] +[40.2879, "o", "-"] +[40.328, "o", "g"] +[40.3697, "o", "i"] +[40.4147, "o", "f"] +[40.4598, "o", "3"] +[40.503, "o", "-"] +[40.5481, "o", "l"] +[40.5864, "o", "o"] +[40.6296, "o", "a"] +[40.6704, "o", "d"] +[40.7147, "o", " "] +[40.7535, "o", "-"] +[40.7985, "o", "-"] +[40.8364, "o", "o"] +[40.878, "o", "w"] +[40.9197, "o", "n"] +[40.9647, "o", "e"] +[41.0069, "o", "r"] +[41.0447, "o", "-"] +[41.0883, "o", "y"] +[41.1279, "o", "e"] +[41.1697, "o", "s"] +[41.2054, "o", " "] +[41.2453, "o", "'"] +[41.2863, "o", "c"] +[41.328, "o", "h"] +[41.3697, "o", "e"] +[41.4084, "o", "c"] +[41.453, "o", "k"] +[41.4964, "o", " "] +[41.5415, "o", "i"] +[41.5865, "o", "t"] +[41.6316, "o", " "] +[41.6725, "o", "o"] +[41.7113, "o", "n"] +[41.7564, "o", " "] +[41.8002, "o", "t"] +[41.8438, "o", "h"] +[41.8888, "o", "e"] +[41.9263, "o", " "] +[41.9613, "o", "b"] +[41.9969, "o", "o"] +[42.0419, "o", "a"] +[42.078, "o", "r"] +[42.1197, "o", "d"] +[42.1648, "o", "!"] +[42.203, "o", "!"] +[42.2481, "o", " "] +[42.2931, "o", "t"] +[42.3364, "o", "h"] +[42.3814, "o", "i"] +[42.4217, "o", "s"] +[42.4668, "o", " "] +[42.5029, "o", "m"] +[42.548, "o", "a"] +[42.5853, "o", "t"] +[42.6304, "o", "t"] +[42.6745, "o", "e"] +[42.7191, "o", "r"] +[42.7614, "o", "s"] +[42.8064, "o", "!"] +[42.8498, "o", "'"] +[43.195, "o", "\r\n"] +[43.2741, "o", "\u001b[38;2;255;215;0m╭────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[38;2;255;215;0m│\u001b[0m\u001b[38;2;255;215;0;1m ▼ Trinity S³AI tri x7-board load\u001b[0m \u001b[2mt27 back half · XC7A200T \u001b[0m\u001b[38;2;255;215;0m│\u001b[0m\r\n\u001b[38;2;255;215;0m╰────────────────────────────────────────────────────────────────────────╯\u001b[0m\r\n \u001b[2mFASM\u001b[0m\u001b[2m ━━▶ \u001b[0m\u001b[2mframes\u001b[0m\u001b[2m ━━▶ \u001b[0m\u001b[36;1m.bit\u001b[0m\u001b[38;2;255;215;0m ━━▶ \u001b[0m\u001b[36;1mAX7203\u001b[0m\r\n \u001b[2mnextpnr\u001b[0m \u001b[2mbitwalk\u001b[0m \u001b[2mbitwalk\u001b[0m \u001b[2mSRAM \u001b[0m\r\n\r\nowner-yes: check it on the board!! this matters!\r\nbit: /tmp/x7board/node0/ours.bit sha256 68249475b57e623f (identical to openXC7's: True)\r\n"] +[43.3602, "o", "$ tri fpga-run x7-board-gif3-load -- openFPGALoader -c digilent_hs2 --write-sram /tmp/x7board/node0/ours.bit\r\n"] +[43.5641, "o", "# start 2026-10-02T20:34:02Z\r\n# usb DIRECT ['0x1100000']\r\n# usb clients 5 {'BrowserOS': 1, 'BrowserOS neo': 1, 'Comet': 1, 'FwUpdateManagerd': 2}\r\n# usb driver AppleUSBSLCOM (com.apple.DriverKit-AppleUSBSLCOM) -> /dev/cu.usbserial-110\r\n# load 21.0 17.7 20.2 on 8 cpus (BUSY: 1-min load above 2 per cpu)\r\n# cmd openFPGALoader -c digilent_hs2 --write-sram /tmp/x7board/node0/ours.bit\r\nempty\r\nwrite to ram\r\n"] +[43.5842, "o", "Jtag frequency : requested 6.00MHz -> real 6.00MHz \r\n"] +[43.5864, "o", "Open file DONE\r\n"] +[43.5969, "o", "Parse file DONE\r\nload program\r\n"] +[44.6873, "o", "\r\n"] +[45.7713, "o", "Load SRAM: [==== ] 7.00%\r\n\r\n"] +[46.844, "o", "Load SRAM: [======== ] 15.00%\r\n\r\n"] +[47.9081, "o", "Load SRAM: [============ ] 23.00%\r\n\r\n"] +[48.9949, "o", "Load SRAM: [================ ] 31.00%\r\n\r\n"] +[50.0624, "o", "Load SRAM: [==================== ] 39.00%\r\n\r\n"] +[51.1725, "o", "Load SRAM: [======================== ] 47.00%\r\n\r\n"] +[52.2364, "o", "Load SRAM: [============================ ] 55.00%\r\n\r\n"] +[53.3005, "o", "Load SRAM: [================================ ] 63.00%\r\n\r\n"] +[54.3724, "o", "Load SRAM: [==================================== ] 71.00%\r\n\r\n"] +[55.4545, "o", "Load SRAM: [======================================== ] 79.00%\r\n\r\n"] +[56.5739, "o", "Load SRAM: [============================================ ] 87.00%\r\n\r\n"] +[57.1101, "o", "Load SRAM: [================================================ ] 95.00%\r\n\r\nLoad SRAM: [==================================================] 100.00%\r\n\r\n"] +[57.114, "o", "Done\r\nShift IR 35\r\n"] +[57.114, "o", "ir: 1 isc_done 1 isc_ena 0 init 1 done 1\r\n"] +[57.1154, "o", "real 13.59\r\nuser 0.15\r\nsys 0.81\r\n"] +[57.1197, "o", "# exit=0\r\n# load 22.0 18.0 20.3 on 8 cpus (BUSY: 1-min load above 2 per cpu)\r\n# end 2026-10-02T20:34:15Z\r\nlog x7-board-gif3-load.log: 1625 bytes, key hits 0\r\n"] +[57.2158, "o", "\r\n"] +[57.2158, "o", "\u001b[32m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[32;1m✔ DONE pin high: the AX7203 configured from bitwalk's .bit\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[0m SRAM only, no flash · 13.9 s · board_runs/x7-board-gif3-load.log\u001b[0m \u001b[32m┃\u001b[0m\r\n"] +[57.2158, "o", "\u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\r\nload: exit 0, DONE pin high: True\r\n"] +[57.2218, "x", "0"] +[58.2282, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"] +[58.6346, "o", "t"] +[58.6779, "o", "r"] +[58.7229, "o", "i"] +[58.7662, "o", " "] +[58.8041, "o", "x"] +[58.8445, "o", "7"] +[58.8895, "o", "-"] +[58.9346, "o", "b"] +[58.9796, "o", "o"] +[59.0195, "o", "a"] +[59.0659, "o", "r"] +[59.1063, "o", "d"] +[59.1484, "o", " "] +[59.1911, "o", "r"] +[59.2357, "o", "e"] +[59.2779, "o", "c"] +[59.3179, "o", "e"] +[59.363, "o", "i"] +[59.4081, "o", "p"] +[59.4541, "o", "t"] +[59.4992, "o", "s"] +[59.5416, "o", " "] +[59.5778, "o", "x"] +[59.6195, "o", "7"] +[59.6612, "o", "-"] +[59.7062, "o", "b"] +[59.7507, "o", "o"] +[59.7972, "o", "a"] +[59.8412, "o", "r"] +[59.8879, "o", "d"] +[59.9303, "o", "-"] +[59.9695, "o", "g"] +[60.0164, "o", "i"] +[60.0529, "o", "f"] +[60.0979, "o", "3"] +[60.1394, "o", " "] +[60.1779, "o", "-"] +[60.223, "o", "-"] +[60.2629, "o", "q"] +[60.3033, "o", "u"] +[60.3484, "o", "i"] +[60.3862, "o", "c"] +[60.4302, "o", "k"] +[60.7831, "o", "\r\n"] +[60.8723, "o", "\u001b[38;2;255;215;0m╭────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[38;2;255;215;0m│\u001b[0m\u001b[38;2;255;215;0;1m ▼ Trinity S³AI tri x7-board receipts\u001b[0m \u001b[2mt27 back half · XC7A200T \u001b[0m\u001b[38;2;255;215;0m│\u001b[0m\r\n\u001b[38;2;255;215;0m╰────────────────────────────────────────────────────────────────────────╯\u001b[0m\r\n \u001b[2mFASM\u001b[0m\u001b[2m ━━▶ \u001b[0m\u001b[2mframes\u001b[0m\u001b[2m ━━▶ \u001b[0m\u001b[2m.bit\u001b[0m\u001b[2m ━━▶ \u001b[0m\u001b[36;1mAX7203\u001b[0m\r\n \u001b[2mnextpnr\u001b[0m \u001b[2mbitwalk\u001b[0m \u001b[2mbitwalk\u001b[0m \u001b[2mSRAM \u001b[0m\r\n\r\n"] +[60.9564, "o", "$ python3 discover_port.py\r\n"] +[61.2221, "o", "HIT /dev/cu.usbserial-110 @ 1144744: status=0x04 (no key) raw=a50004000000004e4952540aa8a26087cc71e5\r\n"] +[61.2221, "o", "$ tri fpga-run x7-board-gif3 -- /opt/homebrew/opt/python@3.14/bin/python3.14 tern_tc_layer_ax7203.py --mats down --layers 5 --act int8 --n_x 1 --setkey --port /dev/cu.usbserial-110 --baud 1144744 --keys ../trinet-keys.txt --model ~/igla-coder-gpu/c_infer/model.bin\r\n"] +[72.5978, "o", "# start 2026-10-02T20:34:20Z\r\n# usb DIRECT ['0x1100000']\r\n# usb clients 5 {'BrowserOS': 1, 'BrowserOS neo': 1, 'Comet': 1, 'FwUpdateManagerd': 2}\r\n# usb driver AppleUSBSLCOM (com.apple.DriverKit-AppleUSBSLCOM) -> /dev/cu.usbserial-110\r\n# load 23.5 18.4 20.4 on 8 cpus (BUSY: 1-min load above 2 per cpu)\r\n# cmd /opt/homebrew/opt/python@3.14/bin/python3.14 tern_tc_layer_ax7203.py --mats down --layers 5 --act int8 --n_x 1 --setkey --port /dev/cu.usbserial-110 --baud 1144744 --keys ../trinet-keys.txt --model ~/igla-coder-gpu/c_infer/model.bin\r\nmodel.bin: 1 matrices, 320 rows, 276480 ternary weights (61.8% nonzero)\r\n"] +[72.5978, "o", "jobs: 51840 (32-trit chunks x 1 x-vectors x 6 digit planes)\r\n"] +[72.5979, "o", "setkey: key installed on node 0x5452494e; ack tag verifies\r\n"] +[72.5979, "o", " [ok ] L5/down 320/320 rows bit-exact\r\n------------------------------------------------------------------\r\n"] +[72.5979, "o", "jobs sent : 51840 of 51840 planned (window 24)\r\nreceipts verified (tag) : 51840/51840 under node 0x5452494e\r\nrejected : none\r\n"] +[72.5979, "o", "rows bit-exact : 320/320 (activations: int8)\r\nelapsed : 10.99 s (4718 answers/s)\r\nlongest host pause : 9.5 ms (after 13494 answers)\r\n------------------------------------------------------------------\r\n"] +[72.5979, "o", "RESULT: every row above computed on the AX7203 bit-exact against the\r\n int8-weight oracle, and every receipt verified under the key.\r\n"] +[72.6051, "o", "real 11.21\r\nuser 2.12\r\nsys 0.51\r\n"] +[72.6085, "o", "# exit=0\r\n# load 26.6 19.2 20.6 on 8 cpus (BUSY: 1-min load above 2 per cpu)\r\n# end 2026-10-02T20:34:31Z\r\nlog x7-board-gif3.log: 1507 bytes, key hits 0\r\n"] +[72.698, "o", "\r\n"] +[72.698, "o", "\u001b[32m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[32;1m✔ receipts verified (tag) : 51840/51840\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┃\u001b[0m \u001b[0m board_runs/x7-board-gif3.log\u001b[0m \u001b[32m┃\u001b[0m\r\n\u001b[32m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\u001b[0m\r\n"] +[72.698, "o", "receipts: PASS\r\n"] +[72.7032, "x", "0"] +[73.7055, "o", "\u001b[38;2;255;215;0mtrinity-fpga $ \u001b[0m"] diff --git a/apps/website/qa/queen-contrast-contract.mjs b/apps/website/qa/queen-contrast-contract.mjs index 26153c392e..a0740d1ee0 100644 --- a/apps/website/qa/queen-contrast-contract.mjs +++ b/apps/website/qa/queen-contrast-contract.mjs @@ -238,6 +238,8 @@ const REACHED = { ], 'src/App.tsx': [ 'src/components/AgiGameBlock.css', + /* TRI DEV KIT on #/devkit: its panels are opaque over the page background. */ + 'src/components/DevKitBlock.css', 'src/components/FaqBlock.css', 'src/components/GameHero.css', 'src/components/ModuleHeroBlock.css', @@ -1093,24 +1095,6 @@ const UNREADABLE = new Map([ ['src/pages/Queen.css:.queen27-dir-chip > i', 'opaque var(--queen-dir), 6px dot'], ['src/pages/Queen.css:.queen27-dir-filter .queen27-dir-chip[aria-pressed="true"]', 'opaque var(--queen-dir) under #050505'], - /* The direction cards: `color-mix(in srgb, var(--queen-dir) N%, transparent)` - at 7% resting and 16% on hover. The alpha IS known and is written here - because it is the number a reader of the selector cannot work out; the hue - is not, and with a direction hue on one side the mix is a LIGHT translucent - fill, which `groundsIn` classifies as a tint laid on somebody else's ground - rather than as a ground -- the same answer it would give if the hue were - resolved. So this entry records an unreadable value that changes no verdict. - - It does leave a real question open, and this is the honest place to say so - rather than in a commit message: `.queen27-card` paints `rgba(255, 255, - 255, 0.018)` and the shell layer gives it a border and a clip-path and no - ground at all, so a card's text on this board sits on the live hive with - nothing but a 1.8% wash between. That is not a contrast failure this gate - can state -- there is no dark ground to measure and no ink is declared - against one -- it is the bare-text case, which nothing in qa/ checks for. */ - ['src/pages/Queen.css:.queen27-card[data-dir], .queen27-page.is-shell .queen27-card[data-dir]', 'alpha 0.07, hue from JS'], - ['src/pages/Queen.css:.queen27-card[data-dir]:hover, .queen27-page.is-shell .queen27-card[data-dir]:hover', 'alpha 0.16, hue from JS'], - /* `color-mix(in srgb, var(--tech-color) 8%, #020202)`. Unreadable for the hue, and decided by the OTHER side: #020202 is opaque, so 92% of the mix is opaque and the result is too, whatever --tech-color turns out to be. The diff --git a/apps/website/qa/queen-direction-contract.mjs b/apps/website/qa/queen-direction-contract.mjs index f9ed2797c1..5ef8464ece 100644 --- a/apps/website/qa/queen-direction-contract.mjs +++ b/apps/website/qa/queen-direction-contract.mjs @@ -291,11 +291,16 @@ A( css.includes('.queen27-page.is-shell .queen27-card[data-dir]:hover'), 'the hovered card keeps its direction colour in the shell layout', ) -A( - !/\.queen27-card\[data-dir\][^{]*\{[^}]*rgba\(255, 255, 255/.test(css), - 'the tint mixes against transparent: one layer of ground, which is the ' + - 'rule the shell layout states for every card on this board', -) +// The owner asked for black cards, 2026-10-03: a 7% wash of the direction +// colour turned a board that is mostly code into a green board. The colour may +// sit on the dot, the tag and the right edge; it may not be the ground. +for (const match of css.matchAll(/([^{}]*\.queen27-card\[data-dir\][^{}]*)\{([^{}]*)\}/g)) { + const background = /background\s*:\s*([^;]*)/.exec(match[2]) + A( + background !== null && background[1].trim() === '#000', + `a direction card states a black ground, not a tint: ${match[1].trim().replace(/\s+/g, ' ')}`, + ) +} // THE SAME DEFECT, A SECOND TIME, WHICH IS WHY THIS PART IS GENERIC. // diff --git a/apps/website/qa/subpath-safe-urls-contract.mjs b/apps/website/qa/subpath-safe-urls-contract.mjs index 7742d1c0d6..0be7f1434f 100644 --- a/apps/website/qa/subpath-safe-urls-contract.mjs +++ b/apps/website/qa/subpath-safe-urls-contract.mjs @@ -43,7 +43,7 @@ const KNOWN = [ // invest.community.cta.{node,docs,buy}.url: unread dead data. No file in src/ // reads community.cta, and InvestSection, the only reader of t.invest, is // imported nowhere. It still ships in the bundle. - ...['de', 'en', 'es', 'ru', 'zh'].flatMap((locale) => + ...['en', 'ru'].flatMap((locale) => ['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/docs/node-setup', '/docs', '/buy'].map((url) => ({ file: `messages/${locale}.json`, url }))), ] diff --git a/apps/website/qa/tri-screens-contract.mjs b/apps/website/qa/tri-screens-contract.mjs index 15071618e4..0c1a5bd79c 100644 --- a/apps/website/qa/tri-screens-contract.mjs +++ b/apps/website/qa/tri-screens-contract.mjs @@ -49,7 +49,7 @@ assert.ok(originProblems([{ screen: 'x', route: '.evil.example/feed' }]).length assert.deepEqual(originProblems(TRI_SCREENS), [], 'every TRI route keeps the app origin') for (const { screen, route } of TRI_SCREENS) { - for (const lang of ['en', 'ru', 'de', 'zh', 'es']) { + for (const lang of ['en', 'ru']) { const src = new URL(triFrameSrc(screen, lang)) assert.equal(src.origin, APP_ORIGIN, `${screen}/${lang}: frame origin`) assert.equal(src.pathname, route, `${screen}/${lang}: frame route`) diff --git a/apps/website/src/App.tsx b/apps/website/src/App.tsx index 5bfb5d4590..9878bebb21 100644 --- a/apps/website/src/App.tsx +++ b/apps/website/src/App.tsx @@ -9,6 +9,7 @@ import PlayBlock from './components/PlayBlock' import AgiGameBlock from './components/AgiGameBlock' import FaqBlock from './components/FaqBlock' import ModulesBlock from './components/ModulesBlock' +import DevKitBlock from './components/DevKitBlock' // Модулей на главной три, а не одиннадцать: доску, корпус и этот показ ведут // собственные блоки, остальные лежат указателем в конце. @@ -78,6 +79,11 @@ export default function App() { + {/* The newest measured work and the club, after the ask: the FPGA flow + timed layer by layer (#/devkit, the flow post) and the TRI DEV + developer agent at the club's one price. */} + + {/* Then the depth, for the reader still going: the corpus through the real compiler, three modules shown at full size, and an index of all of them. diff --git a/apps/website/src/components/AgentShowcase.tsx b/apps/website/src/components/AgentShowcase.tsx new file mode 100644 index 0000000000..8038e0cde0 --- /dev/null +++ b/apps/website/src/components/AgentShowcase.tsx @@ -0,0 +1,79 @@ +import { useEffect, useState } from 'react' +import { AGENTS_ENDPOINT, AGENT_PROFILES, type AgentProfile } from '../data/agents' +import { clubPrice, clubPriceUsd, orderUrl } from '../data/club' + +type Live = { id: string; icon?: string; name?: AgentProfile['name']; promise?: AgentProfile['promise'] } + +const isProfile = (x: Live): x is AgentProfile => Boolean(x.id && x.icon && x.name && x.promise) + +// The bot's catalogue wins when it answers; the bundled list is the fallback. +function useAgents(): readonly AgentProfile[] { + const [agents, setAgents] = useState(AGENT_PROFILES) + useEffect(() => { + const ctl = new AbortController() + fetch(AGENTS_ENDPOINT, { signal: ctl.signal }) + .then(r => (r.ok ? r.json() : null)) + .then((body: { packages?: Live[] } | Live[] | null) => { + const list = Array.isArray(body) ? body : body?.packages + const live = (list ?? []).filter(isProfile) + const hasLive = live.length > 0 + if (hasLive) setAgents(live) + }) + .catch(() => {}) + return () => ctl.abort() + }, []) + return agents +} + +// `featured` puts one profile first, full width, with the accent border and the +// primary button — on #/foundry that is TRI DEV, the club's own agent. +export default function AgentShowcase({ ru, featured }: { ru: boolean; featured?: string }) { + const all = useAgents() + const agents = [...all.filter(a => a.id === featured), ...all.filter(a => a.id !== featured)] + return ( +
+
+

{ru ? 'Агенты' : 'Agents'}

+

+ {ru + ? `Одна цена для всех — ${clubPrice(true)} (${clubPriceUsd(true)}), подписка Telegram Stars. Агенты различаются профилем.` + : `One price for every agent — ${clubPrice(false)} (${clubPriceUsd(false)}), a Telegram Stars subscription. Agents differ by profile.`} +

+
+ {agents.map(a => { + const lead = a.id === featured + return ( +
+ {lead ? ( +
+ {ru ? 'Агент клуба' : 'The club agent'} +
+ ) : null} +
{a.icon}
+

{ru ? a.name.ru : a.name.en}

+

+ {ru ? a.promise.ru : a.promise.en} +

+ {lead ?
{clubPrice(ru)}
: null} + {lead ?
{clubPriceUsd(ru)}
: null} + + {ru ? 'Подключить в Telegram' : 'Get it in Telegram'} + +
+ ) + })} +
+
+
+ ) +} diff --git a/apps/website/src/components/AgiGameBlock.css b/apps/website/src/components/AgiGameBlock.css index 3ea78d5f7a..171ae82174 100644 --- a/apps/website/src/components/AgiGameBlock.css +++ b/apps/website/src/components/AgiGameBlock.css @@ -5,7 +5,7 @@ supervisor and so is set apart from the prose around it. */ .agi-game { border-top: 1px solid rgba(255, 255, 255, 0.1); - background: #020605; + background: #000; color: var(--text, #FFFFFF); } diff --git a/apps/website/src/components/DevKitBlock.css b/apps/website/src/components/DevKitBlock.css new file mode 100644 index 0000000000..a242e6e662 --- /dev/null +++ b/apps/website/src/components/DevKitBlock.css @@ -0,0 +1,149 @@ +/* The devkit block reads as the rest of the front door: a black ground, cards + drawn by their border (styles/card.css), green only on the figures and the + links. */ +.devkit-block { + display: block; + text-align: left; + border-top: 1px solid rgba(255, 255, 255, 0.1); + background: #000; + color: var(--text, #ffffff); +} + +.devkit-block-inner { + width: min(1180px, calc(100% - 2rem)); + margin: 0 auto; + padding: clamp(2rem, 6vw, 4.5rem) 0; + display: grid; + gap: clamp(1.4rem, 4vw, 2.4rem); +} + +.devkit-block-head { + max-width: 68ch; + display: grid; + gap: 0.7rem; +} + +.devkit-block-eyebrow { + color: #ffd45a; + font-family: "JetBrains Mono", ui-monospace, monospace; + font-size: 0.68rem; + letter-spacing: 0.22em; + text-transform: uppercase; +} + +.devkit-block-head h2 { + margin: 0; + font-size: clamp(1.5rem, 3.4vw, 2.4rem); + font-weight: 500; + line-height: 1.15; +} + +.devkit-block-head p { + margin: 0; + color: #a8c1ba; + font-size: clamp(1rem, 1.8vw, 1.15rem); + line-height: 1.6; +} + +.devkit-block-stats li { + display: grid; + gap: 0.5rem; + align-content: start; +} + +.devkit-block-stats strong { + color: #00ff88; + font-family: "JetBrains Mono", ui-monospace, monospace; + font-size: clamp(1.15rem, 2.4vw, 1.5rem); + font-weight: 600; + font-variant-numeric: tabular-nums; +} + +.devkit-block-stats span { + color: #a8c1ba; + font-size: 0.92rem; + line-height: 1.55; +} + +.devkit-block-actions { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + align-items: center; +} + +.devkit-block-primary, +.devkit-block-secondary { + display: inline-flex; + align-items: center; + min-height: 44px; + padding: 0.65rem 1rem; + border-radius: 6px; + font: 600 0.82rem/1.2 "JetBrains Mono", ui-monospace, monospace; + text-decoration: none; + background: #000; +} + +.devkit-block-primary { + color: #00ff88; + border: 1px solid #00ff88; +} + +.devkit-block-secondary { + color: #ffffff; + border: 1px solid rgba(255, 255, 255, 0.24); +} + +.devkit-block-primary:hover, +.devkit-block-secondary:hover { + border-color: #ffffff; +} + +.devkit-block-actions small { + color: #a8c1ba; + font-size: 0.82rem; +} + +.devkit-block-actions small a { + color: #00ff88; +} + +.devkit-block-club { + display: grid; + gap: 0.6rem; + color: inherit; + text-decoration: none; +} + +.devkit-block-club-row { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: baseline; + gap: 0.5rem 1.5rem; +} + +.devkit-block-club-row strong { + font-size: clamp(1.2rem, 2.6vw, 1.6rem); + font-weight: 500; +} + +.devkit-block-club-row b { + color: #00ff88; + font-family: "JetBrains Mono", ui-monospace, monospace; + font-size: clamp(1.2rem, 2.6vw, 1.6rem); + font-weight: 600; +} + +.devkit-block-club-body { + max-width: 72ch; + color: #a8c1ba; + font-size: 0.95rem; + line-height: 1.6; +} + +.devkit-block-club-cta { + color: #00ff88; + font: 600 0.82rem/1.2 "JetBrains Mono", ui-monospace, monospace; + letter-spacing: 0.08em; +} diff --git a/apps/website/src/components/DevKitBlock.tsx b/apps/website/src/components/DevKitBlock.tsx new file mode 100644 index 0000000000..4d9559a59a --- /dev/null +++ b/apps/website/src/components/DevKitBlock.tsx @@ -0,0 +1,96 @@ +import { useI18n } from '../i18n/context' +import { LAYERS, ceiling, flowAfter, flowBefore } from '../data/devkit' +import { CLUB, clubPrice } from '../data/club' +import './DevKitBlock.css' + +// The newest measured work and the one paid offer, on the front door. Every +// figure is read from data/devkit.ts and data/club.ts, the same files #/devkit, +// #/foundry and the flow post read, so the homepage cannot quote a number the +// pages behind it have since changed. + +const PNR = LAYERS.find((l) => l.id === 'L2')! +const FASM = LAYERS.find((l) => l.id === 'L3')! +const s = (x: number) => `${x.toFixed(1)} s` + +const COPY = { + en: { + eyebrow: 'TRI DEV KIT · measured 2026-10-03', + title: 'The FPGA flow, layer by layer', + lede: `One openXC7 build, every layer timed. bitwalk replaces FASM to frames and frames to .bit, built from the specs: the same bytes out, and the whole flow from ${s(flowBefore)} to ${s(flowAfter)}.`, + stats: [ + { n: `${s(flowBefore)} → ${s(flowAfter)}`, t: `the whole build, ${(flowBefore / flowAfter).toFixed(2)}× with byte-identical output` }, + { n: `${FASM.s.toFixed(1)} s → ${FASM.t27!.s.toFixed(2)} s`, t: 'FASM to frames: fasm2frames.py against bitwalk --fasm' }, + { n: `${((100 * PNR.s) / flowBefore).toFixed(0)} %`, t: `of the build is place and route; at 0 s it would cap the flow at ${ceiling(PNR).x.toFixed(2)}×, a bound rather than a result` }, + ], + calc: 'Count your hours →', + post: 'Read the post', + note: 'tri devkit and bitwalk are not in a tri release yet:', + clubEyebrow: 'Golden Foundry club', + clubTitle: 'TRI DEV · developer agent', + clubBody: 'An autonomous Claude Code agent bound to one of your GitHub issues. It works the tri pipeline — spec, generate, test, verdict — reports each step on the issue, and delivers a pull request you review and merge. With it: measurement teardowns and runs on live Artix-7 boards.', + clubCta: 'Join the club', + }, + ru: { + eyebrow: 'TRI DEV KIT · замер 2026-10-03', + title: 'Поток FPGA, слой за слоем', + lede: `Одна сборка openXC7, каждый слой засечён. bitwalk, собранный из спек, заменяет FASM → кадры и кадры → .bit: на выходе те же байты, а весь поток — ${s(flowBefore)} → ${s(flowAfter)}.`, + stats: [ + { n: `${s(flowBefore)} → ${s(flowAfter)}`, t: `вся сборка, ${(flowBefore / flowAfter).toFixed(2)}× при побайтно одинаковом выходе` }, + { n: `${FASM.s.toFixed(1)} s → ${FASM.t27!.s.toFixed(2)} s`, t: 'FASM → кадры: fasm2frames.py против bitwalk --fasm' }, + { n: `${((100 * PNR.s) / flowBefore).toFixed(0)} %`, t: `сборки — размещение и трассировка; при 0 с поток упёрся бы в ${ceiling(PNR).x.toFixed(2)}× — это граница, а не результат` }, + ], + calc: 'Посчитать свои часы →', + post: 'Читать пост', + note: 'tri devkit и bitwalk ещё не вошли в релиз tri:', + clubEyebrow: 'Клуб «Золотая Литейная»', + clubTitle: 'TRI DEV · агент-разработчик', + clubBody: 'Автономный агент Claude Code, привязанный к одной вашей задаче на GitHub. Он идёт по конвейеру tri — спека, генерация, тесты, вердикт — отчитывается в задаче и приносит pull request, который проверяете и сливаете вы. Вместе с ним — разборы замеров и прогоны на живых платах Artix-7.', + clubCta: 'Вступить в клуб', + }, +} as const + +export default function DevKitBlock() { + const { lang } = useI18n() + const ru = lang === 'ru' + const t = COPY[ru ? 'ru' : 'en'] + + return ( +
+
+
+ {t.eyebrow} +

{t.title}

+

{t.lede}

+
+ +
    + {t.stats.map((x) => ( +
  1. + {x.n} + {x.t} +
  2. + ))} +
+ +
+ {t.calc} + {t.post} + + {t.note}{' '} + trinity#1272 + +
+ + + {t.clubEyebrow} + + {t.clubTitle} + {clubPrice(ru)} + + {t.clubBody} + {t.clubCta} → + +
+
+ ) +} diff --git a/apps/website/src/components/FaqBlock.css b/apps/website/src/components/FaqBlock.css index 6e86570c76..21166c1212 100644 --- a/apps/website/src/components/FaqBlock.css +++ b/apps/website/src/components/FaqBlock.css @@ -4,7 +4,7 @@ its definition -- which also gives a screen reader the pairing for free. */ .faq-block { border-top: 1px solid rgba(255, 255, 255, 0.1); - background: #010403; + background: #000; color: var(--text, #FFFFFF); } diff --git a/apps/website/src/components/GameHero.css b/apps/website/src/components/GameHero.css index b3360007d4..762cbda7ea 100644 --- a/apps/website/src/components/GameHero.css +++ b/apps/website/src/components/GameHero.css @@ -1,7 +1,7 @@ /* The mark, the claim, and three ways in. One column, centred, sized from the viewport — there is nothing here that needs a breakpoint to decide. */ .game-hero { - background: #020605; + background: #000; color: var(--text, #FFFFFF); } @@ -85,8 +85,8 @@ .game-hero-primary { border: 1px solid #00ff88; - background: #00ff88; - color: #001b0e; + background: #000; + color: #00ff88; font-weight: 600; } diff --git a/apps/website/src/components/LanguageSwitcher.tsx b/apps/website/src/components/LanguageSwitcher.tsx index 4b43f5ca8b..6f796b5cba 100644 --- a/apps/website/src/components/LanguageSwitcher.tsx +++ b/apps/website/src/components/LanguageSwitcher.tsx @@ -4,29 +4,21 @@ import { useI18n } from '../i18n/context' const flags: Record = { en: '🇺🇸', - ru: '🇷🇺', - de: '🇩🇪', - zh: '🇨🇳', - es: '🇪🇸' + ru: '🇷🇺' } const labels: Record = { en: 'EN', - ru: 'RU', - de: 'DE', - zh: '中文', - es: 'ES' + ru: 'RU' } const langNames: Record = { en: 'English', - ru: 'Russian', - de: 'German', - zh: 'Chinese', - es: 'Spanish' + ru: 'Russian' } -const LANGS = ['en', 'ru', 'de', 'zh', 'es'] +// The site is written in English and Russian only. +const LANGS = ['en', 'ru'] export default memo(function LanguageSwitcher() { const { lang, setLang } = useI18n() diff --git a/apps/website/src/components/ModuleHeroBlock.css b/apps/website/src/components/ModuleHeroBlock.css index 39e118994a..375161dab2 100644 --- a/apps/website/src/components/ModuleHeroBlock.css +++ b/apps/website/src/components/ModuleHeroBlock.css @@ -4,7 +4,7 @@ gold on this site means a spec. */ .module-hero { border-bottom: 1px solid rgba(0, 255, 136, 0.2); - background: #030605; + background: #000; color: var(--text, #FFFFFF); } @@ -90,8 +90,8 @@ } .module-hero-primary { - background: #00ff88; - color: #001b0e; + background: #000; + color: #00ff88; border: 1px solid #00ff88; } diff --git a/apps/website/src/components/ModulesBlock.css b/apps/website/src/components/ModulesBlock.css index 786daa89e0..92b6f1d5e5 100644 --- a/apps/website/src/components/ModulesBlock.css +++ b/apps/website/src/components/ModulesBlock.css @@ -4,7 +4,7 @@ a desktop, without a media query naming any of them. */ .modules-block { border-top: 1px solid rgba(255, 255, 255, 0.1); - background: #020605; + background: #000; color: var(--text, #FFFFFF); } @@ -171,7 +171,7 @@ } .modules-block-all:hover { - background: rgba(0, 255, 136, 0.08); + border-color: #7dffc0; } /* Under a finger every card is a target of its own, and the 44px floor is the diff --git a/apps/website/src/components/ModulesBlock.tsx b/apps/website/src/components/ModulesBlock.tsx index 99b4cd07b1..695cfbcce6 100644 --- a/apps/website/src/components/ModulesBlock.tsx +++ b/apps/website/src/components/ModulesBlock.tsx @@ -3,18 +3,16 @@ import { MODULES } from '../lib/queenModules' import { BOARD_VIEWS, PROJECT_VIEWS, RAIL_VIEWS, SPEC_LAYERS, isBoardView, isProjectView, isSpecLayer } from './queenHud' import './ModulesBlock.css' -// A compact index of the modules: one card each, linking to its tab. Not on the -// homepage any more — every module has a block of its own there — but kept -// because the data it reads now lives in lib/queenModules and this is the one -// place that shows all of them at a glance. +// A compact index of the modules: one card each, linking to its tab. It closes +// the homepage, under the module blocks, because it is the one place that shows +// all of them at a glance; the data it reads lives in lib/queenModules. // -// It is drawn in the shell's own shape, which is no longer a flat list of -// fourteen. Seven are buttons on the rail. Five — SKILLS, CRONS, AGENTS, TOOLS, +// It is drawn in the shell's own shape, which is no longer a flat list. Seven are buttons on the rail. Five — SKILLS, CRONS, AGENTS, TOOLS, // FUNCTIONS — are rungs of the ladder inside SPECS, because each is a catalogue -// generated from .t27 specs and each names the one below it. Two — MISSION MAP -// and FACTORY — sit under KANBAN, because the three are three readings of the -// one board. PASSPORT sits inside PROJECT (2026-09-21), the record the project -// keeps beside itself. A reader who scrolled past fourteen equal cards and then +// generated from .t27 specs and each names the one below it. MISSION MAP, +// FACTORY and TECH TREE sit under KANBAN, as further readings of the one board +// (BOARD_VIEWS; the tech tree joined it after this block last named the group). PASSPORT sits inside PROJECT (2026-09-21), the record the project +// keeps beside itself. A reader who scrolled past a row of equal cards and then // opened the rail was reading a map of a shell that no longer existed. // // Which group a module is in is asked of the shell's own lists rather than @@ -53,14 +51,14 @@ const COPY = { en: { eyebrow: `QUEEN / ${N} MODULES`, title: `One screen, ${N} ways to read it`, - lede: `The Queen is a single-page module: the 3D map is the ground and every panel floats on it. These ${N} are what that ground can be read as — each one opens on the same map, in the same shell, from the key beside it. ${RAIL_N} are buttons down the left edge; ${LADDER_N} are rungs of one ladder inside SPECS, where every catalogue generated from a spec lives together; ${BOARD_N} are the board's other two readings, under KANBAN; and ${PROJECT_N} is the record kept beside the project, inside PROJECT.`, + lede: `The Queen is a single-page module: the 3D map is the ground and every panel floats on it. These ${N} are what that ground can be read as — each one opens on the same map, in the same shell, from the key beside it. ${RAIL_N} are buttons down the left edge; ${LADDER_N} are rungs of one ladder inside SPECS, where every catalogue generated from a spec lives together; ${BOARD_N} are further readings of the board, under KANBAN; and ${PROJECT_N} is the record kept beside the project, inside PROJECT.`, railHead: `On the rail · ${RAIL_N}`, ladderHead: `Inside SPECS, on the ladder · ${LADDER_N}`, ladderNote: 'Specs, skills, crons, agents, tools and functions are six layers of one thing: each is generated from .t27 and each names the one below it. They open on the same keys as before, one step inside SPECS.', boardHead: `Inside KANBAN, on the board · ${BOARD_N}`, boardNote: - 'The kanban, the mission map and the factory read one board: the same issues as columns, as a map, and as what the swarm is building from them. Same keys, one step inside KANBAN.', + 'The kanban, the mission map, the factory and the tech tree read one board: the same issues as columns, as a map, as what the swarm is building from them, and as the path the .t27 language took to get here. Same keys, one step inside KANBAN.', projectHead: `Inside PROJECT, beside it · ${PROJECT_N}`, projectNote: 'The passport is part of how the project describes itself, not an instrument of its own: the record every result has to carry. Same key, one step inside PROJECT.', @@ -70,14 +68,14 @@ const COPY = { ru: { eyebrow: `КОРОЛЕВА / ${N} МОДУЛЕЙ`, title: `Один экран и ${N} способов его прочитать`, - lede: `Королева — одностраничный модуль: 3D-карта здесь основание, а каждая панель плавает над ним. Эти ${N} — то, чем это основание можно прочитать; любой открывается на той же карте, в том же шелле, по клавише рядом с ним. ${RAIL_N} — кнопки вдоль левого края, ${LADDER_N} — ступени одной лестницы внутри СПЕК, где лежат вместе все каталоги, порождённые из спек, ${BOARD_N} — два других прочтения доски, внутри КАНБАНА, и ${PROJECT_N} — запись, которую проект держит рядом с собой, внутри ПРОЕКТА.`, + lede: `Королева — одностраничный модуль: 3D-карта здесь основание, а каждая панель плавает над ним. Эти ${N} — то, чем это основание можно прочитать; любой открывается на той же карте, в том же шелле, по клавише рядом с ним. ${RAIL_N} — кнопки вдоль левого края, ${LADDER_N} — ступени одной лестницы внутри СПЕК, где лежат вместе все каталоги, порождённые из спек, ${BOARD_N} — ещё прочтения доски, внутри КАНБАНА, и ${PROJECT_N} — запись, которую проект держит рядом с собой, внутри ПРОЕКТА.`, railHead: `На панели · ${RAIL_N}`, ladderHead: `Внутри СПЕК, на лестнице · ${LADDER_N}`, ladderNote: 'Спеки, скиллы, кроны, агенты, инструменты и функции — шесть слоёв одного: каждый порождается из .t27 и каждый называет следующий. Клавиши прежние, просто на шаг внутрь СПЕК.', boardHead: `Внутри КАНБАНА, на доске · ${BOARD_N}`, boardNote: - 'Канбан, карта миссий и фабрика читают одну доску: те же задачи — колонками, картой и тем, что рой из них строит. Клавиши прежние, просто на шаг внутрь КАНБАНА.', + 'Канбан, карта миссий, фабрика и тех-дерево читают одну доску: те же задачи — колонками, картой, тем, что рой из них строит, и путём, которым язык .t27 сюда пришёл. Клавиши прежние, просто на шаг внутрь КАНБАНА.', projectHead: `Внутри ПРОЕКТА, рядом с ним · ${PROJECT_N}`, projectNote: 'Паспорт — часть того, как проект описывает себя, а не отдельный инструмент: запись, которую должен нести каждый результат. Клавиша прежняя, просто на шаг внутрь ПРОЕКТА.', @@ -92,7 +90,7 @@ export default function ModulesBlock() { const t = COPY[key] // A list of modules, not MODULES itself: `as const` makes that a tuple of - // fourteen, and a filtered group is never that tuple. + // every module, and a filtered group is never that tuple. const cards = (modules: readonly (typeof MODULES)[number][]) => (
    {modules.map((module) => { diff --git a/apps/website/src/components/Navigation.tsx b/apps/website/src/components/Navigation.tsx index f7473627d6..e3d18babc1 100644 --- a/apps/website/src/components/Navigation.tsx +++ b/apps/website/src/components/Navigation.tsx @@ -16,7 +16,7 @@ const DOCS_URL = '#/docs' // The locale files have no keys for the commercial pages yet, so the labels // live next to the links. Missing locales fall back to English. const PAGES_LABEL: Record = { - ru: 'Страницы', de: 'Seiten', es: 'Páginas', zh: '页面', + ru: 'Страницы', } type PageLink = { href: string; en: string; ru: string; note: string; noteRu: string; external?: boolean; color?: string } diff --git a/apps/website/src/components/PlayBlock.css b/apps/website/src/components/PlayBlock.css index 7e5ccd044d..3530c7396a 100644 --- a/apps/website/src/components/PlayBlock.css +++ b/apps/website/src/components/PlayBlock.css @@ -4,7 +4,7 @@ styles/card.css, shared with every other block on the page. */ .play-block { border-top: 1px solid rgba(255, 255, 255, 0.1); - background: #020605; + background: #000; color: var(--text, #FFFFFF); } diff --git a/apps/website/src/components/QueenHeroBlock.css b/apps/website/src/components/QueenHeroBlock.css index 541c52857f..b3bbafc353 100644 --- a/apps/website/src/components/QueenHeroBlock.css +++ b/apps/website/src/components/QueenHeroBlock.css @@ -2,7 +2,7 @@ idea, and a divider there made two slabs out of one pair. */ .queen-hero-block { border-top: 1px solid rgba(0, 255, 136, .24); - background: #020605; + background: #000; color: var(--text, #FFFFFF); } @@ -48,7 +48,7 @@ font: 600 .82rem/1.2 "JetBrains Mono", monospace; text-decoration: none; } -.queen-hero-block-primary { background: #00ff88; color: #001b0e; border: 1px solid #00ff88; } +.queen-hero-block-primary { background: #000; color: #00ff88; border: 1px solid #00ff88; } .queen-hero-block-secondary { color: #ffd45a; border: 1px solid #ffd45a88; background: transparent; } .queen-hero-block-primary:hover, .queen-hero-block-secondary:hover { filter: brightness(1.12); } diff --git a/apps/website/src/components/SpecHeroBlock.css b/apps/website/src/components/SpecHeroBlock.css index 70d8308276..81131f62e8 100644 --- a/apps/website/src/components/SpecHeroBlock.css +++ b/apps/website/src/components/SpecHeroBlock.css @@ -3,7 +3,7 @@ this one answers at a lower pitch instead of repeating the hero's shape. */ .spec-hero-block { border-bottom: 1px solid rgba(255, 212, 90, .24); - background: #050403; + background: #000; color: var(--text, #FFFFFF); } @@ -55,7 +55,7 @@ font: 600 .82rem/1.2 "JetBrains Mono", monospace; text-decoration: none; } -.spec-hero-block-primary { background: #ffd45a; color: #1b1400; border: 1px solid #ffd45a; } +.spec-hero-block-primary { background: #000; color: #ffd45a; border: 1px solid #ffd45a; } .spec-hero-block-secondary { color: #ffd45a; border: 1px solid #ffd45a88; background: transparent; } .spec-hero-block-primary:hover, .spec-hero-block-secondary:hover { filter: brightness(1.12); } diff --git a/apps/website/src/components/TerminalCast.tsx b/apps/website/src/components/TerminalCast.tsx new file mode 100644 index 0000000000..56e9d8fa44 --- /dev/null +++ b/apps/website/src/components/TerminalCast.tsx @@ -0,0 +1,48 @@ +import { useEffect, useRef } from 'react' +import { useI18n } from '../i18n/context' + +// A recorded terminal session in a post. The player itself is public/term/player.js, +// the one the t27.ai/term// share pages use, loaded at run time so the VT code +// exists once on the web. Recordings are made and published with `tri cast`. + +type Player = { destroy: () => void } +type PlayerModule = { mount: (el: HTMLElement, o: { src: string; title?: string; share?: string }) => Player } + +export default function TerminalCast({ src, title, caption, share }: { src: string; title?: string; caption: string; share?: string }) { + const box = useRef(null) + const { lang } = useI18n() + + useEffect(() => { + let player: Player | null = null + let live = true + const url = new URL('term/player.js', document.baseURI).href + import(/* @vite-ignore */ url) + .then((m: PlayerModule) => { + if (live && box.current) player = m.mount(box.current, { src: new URL(src, document.baseURI).href, title, share }) + }) + .catch(() => { + if (box.current) box.current.textContent = 'The terminal player could not load.' + }) + return () => { + live = false + player?.destroy() + } + }, [src, title, share]) + + return ( +
    +
    + ) +} diff --git a/apps/website/src/data/agents.ts b/apps/website/src/data/agents.ts new file mode 100644 index 0000000000..d1707ef2dd --- /dev/null +++ b/apps/website/src/data/agents.ts @@ -0,0 +1,53 @@ +// The agents the bot sells. Live source: GET /api/agents/packages on the bot +// (gHashTag/999-multibots-telegraf, generated from AGENT_PACKAGES); the list +// below is only the fallback the showcase renders while that call is pending +// or failing. The price is not here — every agent costs AGENT_PRICE +// (data/club.ts); agents differ by profile. +export type AgentProfile = { + id: string + icon: string + name: { en: string; ru: string } + promise: { en: string; ru: string } +} + +export const AGENTS_ENDPOINT = + 'https://999-multibots-telegraf-production-2008.up.railway.app/api/agents/packages' + +export const AGENT_PROFILES: readonly AgentProfile[] = [ + { + id: 'manager', + icon: '◎', + name: { en: 'Manager Agent', ru: 'Менеджер агент' }, + promise: { + en: 'Your own Telegram bot that answers clients around the clock in your voice and brings the leads to your CRM.', + ru: 'Собственный Telegram-бот, который круглосуточно отвечает клиентам в вашем тоне и приносит заявки в CRM.', + }, + }, + { + id: 'blogger', + icon: '✦', + name: { en: 'Blogger Agent', ru: 'Блогер агент' }, + promise: { + en: 'Reels with your face and voice, a content plan and publishing — the blogger agent working for your channel.', + ru: 'Рилсы с вашим лицом и голосом, контент-план и публикации — агент-блогер работает на ваш канал.', + }, + }, + { + id: 'twin', + icon: '◈', + name: { en: 'Developer Agent', ru: 'Разработчик агент' }, + promise: { + en: 'An agent the team develops for your task: your character, voice, face, skills and tools in a bot of its own.', + ru: 'Агент, которого команда разрабатывает под вашу задачу: ваш характер, голос, лицо, навыки и инструменты в отдельном боте.', + }, + }, + { + id: 'tridev', + icon: '▽', + name: { en: 'TRI DEV', ru: 'TRI DEV' }, + promise: { + en: 'Give it a GitHub issue: it works the tri pipeline remotely and sends back a pull request and a t27.ai/term recording of every command it ran.', + ru: 'Дайте задачу на GitHub: агент решает её удалённо по конвейеру tri и присылает pull request и запись терминала t27.ai/term со всеми командами.', + }, + }, +] diff --git a/apps/website/src/data/blog/bodies/golden-ratio-weights-ran-on-the-board.ts b/apps/website/src/data/blog/bodies/golden-ratio-weights-ran-on-the-board.ts index 4d9763894c..cf6c591126 100644 --- a/apps/website/src/data/blog/bodies/golden-ratio-weights-ran-on-the-board.ts +++ b/apps/website/src/data/blog/bodies/golden-ratio-weights-ran-on-the-board.ts @@ -1,4 +1,5 @@ import type { Block } from '../types' +import { X7_BOARD } from '../../casts' export const body: Block[] = [ { @@ -59,6 +60,13 @@ export const body: Block[] = [ kind: 'p', text: "The node's own Verilog, unchanged, also ran a request stream of the same kind in simulation, with synthetic weights for one matrix: 7,680 of 7,680 receipts and 128 of 128 rows.", }, + { + kind: 'terminal', + src: X7_BOARD.src, + share: X7_BOARD.share, + title: X7_BOARD.title, + caption: "A later recording of the same receipt harness on the same board, with int8 activations rather than this post's Z[phi] ones, so its counts are not this run." + ' ' + X7_BOARD.caption.en, + }, { kind: 'h', text: 'What this is not', @@ -146,6 +154,13 @@ export const ruBody: Block[] = [ kind: 'p', text: 'Собственный Verilog узла без изменений тоже прогнал в симуляции поток запросов того же вида, с синтетическими весами для одной матрицы: 7 680 из 7 680 квитанций и 128 из 128 строк.', }, + { + kind: 'terminal', + src: X7_BOARD.src, + share: X7_BOARD.share, + title: X7_BOARD.title, + caption: 'Более поздняя запись того же харнесса квитанций на той же плате, с активациями int8, а не Z[phi], как в этом посте, так что её счёт — не этот прогон.' + ' ' + X7_BOARD.caption.ru, + }, { kind: 'h', text: 'Чем это не является', diff --git a/apps/website/src/data/blog/bodies/half-the-build-is-bitstream-generation.ts b/apps/website/src/data/blog/bodies/half-the-build-is-bitstream-generation.ts index 397e1658e8..b5750e43ed 100644 --- a/apps/website/src/data/blog/bodies/half-the-build-is-bitstream-generation.ts +++ b/apps/website/src/data/blog/bodies/half-the-build-is-bitstream-generation.ts @@ -1,4 +1,5 @@ import type { Block } from '../types' +import { DEVKIT_FLOW } from '../../casts' export const body: Block[] = [ { @@ -119,6 +120,17 @@ export const body: Block[] = [ "kind": "p", "text": "The floor stops dominating once the design is big enough. At gf128_mul the bitstream stage is 122.3 s of 533.2 s — 23% — while place-and-route takes 253.7 s and synthesis 163.1 s. Both of those grow with the netlist; the bitstream stage grows much more slowly." }, + { + kind: 'p', + text: 'A later run timed the same stage on a larger design: 33.9 s of a 116.9 s build for trinet_node_v2_ax7203, 121,587 lines of FASM, on a laptop rather than a CI runner. It also ran bitwalk, the FASM-to-frames and frames-to-.bit steps rebuilt from t27 specs, on the same FASM: 0.42 s and 0.25 s, with the same bytes. A different design and a different machine, so it is not a row in the table above.', + }, + { + kind: 'terminal', + src: DEVKIT_FLOW.src, + share: DEVKIT_FLOW.share, + title: DEVKIT_FLOW.title, + caption: 'A later recording, not one of the runs above.' + ' ' + DEVKIT_FLOW.caption.en, + }, { "kind": "h", "text": "A single build time is not a measurement" @@ -305,6 +317,17 @@ export const ruBody: Block[] = [ "kind": "p", "text": "Пол перестаёт доминировать, когда дизайн достаточно велик. У gf128_mul битстрим — 122.3 с из 533.2 с, то есть 23%, тогда как трассировка занимает 253.7 с, а синтез 163.1 с. Эти две растут вместе с нетлистом, битстрим-стадия — гораздо медленнее." }, + { + kind: 'p', + text: 'Более поздний прогон засёк тот же этап на дизайне побольше: 33.9 с из 116.9 с сборки trinet_node_v2_ax7203, 121 587 строк FASM, на ноутбуке, а не на CI-раннере. Там же на том же FASM запущен bitwalk — шаги FASM → фреймы и фреймы → .bit, пересобранные из t27-спеков: 0.42 с и 0.25 с, байты те же. Другой дизайн и другая машина, поэтому это не строка таблицы выше.', + }, + { + kind: 'terminal', + src: DEVKIT_FLOW.src, + share: DEVKIT_FLOW.share, + title: DEVKIT_FLOW.title, + caption: 'Более поздняя запись, не один из прогонов выше.' + ' ' + DEVKIT_FLOW.caption.ru, + }, { "kind": "h", "text": "Одно время сборки — это не измерение" diff --git a/apps/website/src/data/blog/bodies/the-back-half-of-openxc7-from-a-spec.ts b/apps/website/src/data/blog/bodies/the-back-half-of-openxc7-from-a-spec.ts new file mode 100644 index 0000000000..47f80a1494 --- /dev/null +++ b/apps/website/src/data/blog/bodies/the-back-half-of-openxc7-from-a-spec.ts @@ -0,0 +1,359 @@ +import type { Block } from '../types' + +// Both figures are drawn from the numbers below, so a number lives in one place. +// Seconds. fasm2frames: timed when each corpus file was built (x7 manifest-v2). +// bitwalk: best of 3 on the same machine on 2026-10-03, load average about 120. +const RUNS = [ + { name: ['One real design', 'xc7a100t, nextpnr, 1,785 lines'], ru: ['Один настоящий дизайн', 'xc7a100t, nextpnr, 1 785 строк'], py: 1.58, ours: 0.2 }, + { name: ['Synthetic test file', 'xc7a100t, 1,049 lines'], ru: ['Синтетический тест', 'xc7a100t, 1 049 строк'], py: 19.33, ours: 0.14 }, + { name: ['Synthetic test file', 'kintex7 xc7k325t, 1,123 lines'], ru: ['Синтетический тест', 'kintex7 xc7k325t, 1 123 строки'], py: 71.83, ours: 0.34 }, + { name: ['All 22 corpus files', 'one after another'], ru: ['Все 22 файла корпуса', 'подряд'], py: 150.7, ours: 3.33 }, +] + +const GOLD = '#d4af37' + +type Lang = 'en' | 'ru' + +const SPEED_TEXT = { + en: { py: 'fasm2frames (prjxray, Python)', ours: 'bitwalk --fasm (t27 specs)', axis: 'seconds, log scale', label: 'Time to turn FASM into frames, fasm2frames against bitwalk' }, + ru: { py: 'fasm2frames (prjxray, Python)', ours: 'bitwalk --fasm (t27-спеки)', axis: 'секунды, лог. шкала', label: 'Время перевода FASM в кадры: fasm2frames против bitwalk' }, +} + +const CHAIN_TEXT = { + en: { a: 'openXC7 today', b: 'this branch (gHashTag/t27#5609)', same: 'byte-identical', label: 'The back half of the openXC7 flow: FASM to frames to bitstream, prjxray tools against bitwalk built from t27 specs', note: 'yosys + nextpnr produce the FASM; openFPGALoader loads the .bit' }, + ru: { a: 'openXC7 сегодня', b: 'эта ветка (gHashTag/t27#5609)', same: 'байт в байт', label: 'Задняя половина flow openXC7: FASM в кадры и в битстрим, инструменты prjxray против bitwalk из t27-спеков', note: 'FASM дают yosys + nextpnr; .bit загружает openFPGALoader' }, +} + +function sec(s: number, lang: Lang = 'en'): string { + const t = s < 1 ? s.toFixed(2) : s.toFixed(1) + return lang === 'ru' ? `${t.replace('.', ',')} с` : `${t} s` +} + +function speedSvg(lang: Lang = 'en'): string { + const x0 = 230 + const w = 420 + const lo = -1 // 0.1 s + const hi = Math.log10(200) + const px = (s: number) => x0 + ((Math.log10(s) - lo) / (hi - lo)) * w + const ticks = [0.1, 1, 10, 100] + const top = 34 + const step = 62 + const h = top + RUNS.length * step + 40 + const t = SPEED_TEXT[lang] + let s = `` + for (const v of ticks) { + const x = px(v).toFixed(1) + s += `` + s += `${sec(v, lang)}` + } + RUNS.forEach((r, i) => { + const y = top + i * step + const [name, sub] = lang === 'ru' ? r.ru : r.name + s += `${name}` + s += `${sub}` + const xp = px(r.py) + const xo = px(r.ours) + s += `` + s += `${sec(r.py, lang)}` + s += `` + s += `${sec(r.ours, lang)} · ${Math.round(r.py / r.ours)}×` + }) + const ly = h - 22 + s += `` + s += `${t.py}` + s += `` + s += `${t.ours}` + s += `${t.axis}` + return s + '' +} + +function box(x: number, y: number, w: number, lines: string[], gold: boolean): string { + const h = 46 + let s = `` + const y0 = lines.length === 1 ? y + 28 : y + 20 + lines.forEach((l, i) => { + s += `${l}` + }) + return s +} + +function arrow(x1: number, x2: number, y: number): string { + return `` +} + +function chainSvg(lang: Lang = 'en'): string { + const t = CHAIN_TEXT[lang] + const cols = [ + { x: 10, w: 70 }, + { x: 110, w: 210 }, + { x: 350, w: 70 }, + { x: 450, w: 190 }, + { x: 660, w: 50 }, + ] + const rowA = [['FASM'], ['fasm2frames', 'prjxray · Python'], [lang === 'ru' ? 'кадры' : '.frames'], ['xc7frames2bit', 'prjxray · C++'], ['.bit']] + const rowB = [['FASM'], ['bitwalk --fasm', 'frames.t27'], [lang === 'ru' ? 'кадры' : '.frames'], ['bitwalk --write', 'packets.t27 · far.t27'], ['.bit']] + const ya = 30 + const yb = 150 + let s = `` + s += `${t.a}` + s += `${t.b}` + for (const [y, row, gold] of [[ya, rowA, false], [yb, rowB, true]] as const) { + row.forEach((lines, i) => { + const c = cols[i] + s += box(c.x, y, c.w, lines, gold && (i === 1 || i === 3)) + if (i < row.length - 1) s += arrow(c.x + c.w, cols[i + 1].x, y + 23) + }) + } + for (const [i, n] of [[1, '22/22'], [3, '16/16']] as const) { + const c = cols[i] + const mx = c.x + c.w / 2 + s += `` + s += `` + s += `= ${t.same} ${n}` + } + s += `${t.note}` + return s + '' +} + +const speedRows = (lang: Lang = 'en') => + RUNS.map((r) => [(lang === 'ru' ? r.ru : r.name).join(', '), sec(r.py, lang), sec(r.ours, lang), `${Math.round(r.py / r.ours)}×`]) + +export const body: Block[] = [ + { + kind: 'p', + text: 'openXC7 builds a Xilinx 7-series bitstream in two halves. The first half is yosys and nextpnr: Verilog in, FASM out. FASM is a text list of features such as `CLBLM_R_X3Y0.SLICEM_X0.ALUT.INIT[63:0] = 64\'h...`. The second half turns that list into a bitstream. prjxray\'s `fasm2frames` (Python) looks up every feature\'s bits and writes configuration frames, and `xc7frames2bit` (C++) wraps the frames in configuration packets. We rewrote the second half so that every bit position, frame address and packet word comes from a t27 spec, and compared it byte for byte with the two tools it replaces.', + }, + { + kind: 'figure', + svg: chainSvg(), + caption: 'The second half of the flow. Each gold box is a driver generated from t27 specs. The dashed lines are the corpus checks against the prjxray tool above it.', + }, + { kind: 'h', text: 'What the specs hold' }, + { + kind: 'ul', + items: [ + '`packets.t27`: the configuration packet stream. Headers, registers, commands, the CRC and the write sequence `xc7frames2bit` uses.', + '`far.t27`: the frame address walk for xc7a35t, xc7a100t and xc7a200t, with the part picked by IDCODE.', + '`frames.t27`: the frame ECC, and where a database bit lands in a frame. That covers the tile\'s word offset, the alias shift of a `*_SING` tile, a tile that starts below its frame, and what happens to a bit that falls outside.', + ], + }, + { + kind: 'p', + text: 'The driver, `bitwalk`, is Rust. `t27c gen-rust` generates its rule functions from these specs. The FASM grammar, the feature lookup, file I/O and the text output are written by hand; the bit arithmetic is not. Each spec section cites the prjxray file and line it reproduces (prjxray c9f02d857, prjxray-db 517d66a).', + }, + { kind: 'h', text: 'Measured' }, + { + kind: 'table', + head: ['Check', 'Corpus', 'Result'], + rows: [ + ['FASM to frames, against `fasm2frames`', '22 files. 13 real designs: 7 from nextpnr on xc7a100t, and 6 Vivado bitstreams on xc7a35t read back with `bit2fasm`. 7 synthetic files, 2 of them on kintex7 xc7k325t. 2 files that must be refused', '22/22 byte-identical. Both refuse files are refused for the same reason'], + ['FASM to frames, against fpga-assembler\'s reference frames', 'The 5 reference-parity cases in lromor/fpga-assembler#49', '5/5, including the kintex7 pseudo-PIP case and the 83-bit `RXCDR_CFG` value'], + ['Frames to .bit, against `xc7frames2bit`', '16 frame files on xc7a35t, xc7a100t and xc7a200t', '16/16 byte-identical'], + ['CRC, against Vivado', '6 Vivado bitstreams', 'All 12 CRC words reproduce'], + ['Frame ECC, against Vivado', '32,520 frames, 752 of them with data', '0 wrong'], + ['Mutation gate', '20 defects seeded into the three specs, one at a time', '20/20 caught. A defect counts as caught only if the spec tests and the corpus sweep both fail'], + ], + }, + { + kind: 'p', + text: 'The mutation gate earned its place again while this post was being written. Adding kintex7 support changed how the driver counts bits outside a tile, and one seeded defect survived: a tile window one word too long. The spec tests caught it, but the corpus sweep did not, because the new count absorbed exactly the bit the defect moved. The count is now split in two, so a tile that starts inside its frame can never have its own bits outside it, and the defect is caught again.', + }, + { kind: 'h', text: 'Speed' }, + { + kind: 'figure', + svg: speedSvg(), + caption: 'Seconds per file, log scale. fasm2frames was timed when each corpus file was built; bitwalk is the best of 3 runs on the same laptop. The machine was busy with other jobs in both cases, so read the ratios as rough.', + }, + { + kind: 'table', + head: ['File', 'fasm2frames', 'bitwalk --fasm', 'Ratio'], + rows: speedRows(), + }, + { + kind: 'p', + text: 'The synthetic files are no longer than a real design, about 1,100 lines against 1,785, yet `fasm2frames` takes 12 to 45 times longer on them. We have not profiled why, so we make no claim about the cause. We also re-timed `fasm2frames` on three files at the same load as our runs: 3.4 s, 32.5 s and 104.4 s, which makes the ratios larger, not smaller. The figure keeps the lower ones.', + }, + { kind: 'h', text: 'What else does this job' }, + { + kind: 'table', + head: ['Tool', 'Language', 'Step', 'Where the bit rules live'], + rows: [ + ['`fasm2frames` (prjxray)', 'Python', 'FASM to frames', 'Python code over prjxray-db'], + ['`xc7frames2bit` (prjxray)', 'C++', 'frames to .bit', 'C++ code'], + ['fpga-assembler (lromor)', 'C++', 'FASM to .bit', 'C++ code over prjxray-db. Its README reports about 10 times the speed of `fasm2frames`; we did not time it here'], + ['`bitwalk` (gHashTag/t27#5609)', 'Rust generated from t27, plus a hand-written driver', 'both', 't27 specs over prjxray-db'], + ], + }, + { kind: 'h', text: 'Found on the way' }, + { + kind: 'p', + text: 'A differential is only useful when the two sides disagree. Three times they did, and each time the tool we compared against had the defect.', + }, + { + kind: 'ul', + items: [ + '`fasm2frames` does not refuse a feature of a site that a `*_SING` tile lacks. On a bottom SING tile the bits wrap into words 99-100 of the frame, which belong to another tile. On a top SING tile they are dropped. The exit code is 0 in both cases, and one line of FASM reproduces it. Reported as f4pga/prjxray#2574. The same happens on kintex7: one synthetic file has 337 wrapped and 356 dropped bits. `bitwalk` writes the same bytes by default, which is why the 22/22 above holds; `--strict` refuses the file and names the line.', + '`xc7frames2bit` accepts frames for the wrong part: xc7a100t frames with an xc7a200t part exit 0 and write 192 extra frames. `bitwalk` refuses them. Reported in f4pga/prjxray#2573, with fixes in openXC7/prjxray#27 and #28.', + 'In case 05 of lromor/fpga-assembler#49, the 83-bit `RXCDR_CFG` value, fpga-assembler\'s own frames differ from the reference: 18 bits missing, 5 extra. `bitwalk` matches the reference. Our reading of the source: the parser packs a long binary literal into 64-bit words from its most significant end, so for 83 bits the first word holds only the low 19 bits. Emulating that packing gives exactly the 18 missing and 5 extra bits.', + ], + }, + { + kind: 'p', + text: 'One defect was ours. The kintex7 tile grid has four tiles that start 2 words below their frame, and our driver read the offset as unsigned and stopped. The spec now says how such a tile\'s bits are placed (`seg_shift`), with a test.', + }, + { kind: 'h', text: 'On the board' }, + { + kind: 'p', + text: 'Files that match are a claim about files. To check the chain on hardware we built one real design for the ALINX AX7203 (XC7A200T): trinet node 0, 121,587 FASM lines, 20,230 frames. On that FASM `bitwalk` was again byte-identical to openXC7 for both the frames and the .bit, and took about 0.8 s where `fasm2frames` took about 68 s, on a host that was busy the whole time. `openFPGALoader` then loaded bitwalk\'s .bit into SRAM over JTAG, with no flash write, and the FPGA reported DONE.', + }, + { + kind: 'table', + head: ['Run on the AX7203', 'Result'], + rows: [ + ['SRAM load of bitwalk\'s .bit', '`done 1` in 16.7 s'], + ['All 42 ternary matrices of the model, each answer tagged under the node key', '`receipts verified (tag) : 403200/403200`, 33,792/33,792 rows bit-exact'], + ['One layer with int8 activations', '`receipts verified (tag) : 51840/51840`, 320/320 rows bit-exact'], + ], + }, + { + kind: 'terminal', + src: 'term/x7-board/session.cast', + share: 'https://t27.ai/term/x7-board/', + title: 'tri x7-board · t27 back half on the AX7203', + caption: 'A recorded session: `tri x7-board compare`, `load` and `receipts`, run again for the recording. Every byte printed is real and arrives when it did; the prompt and the typing are staged, and silences over 2 s are shortened, with a note in the title bar while that happens. That session re-timed `fasm2frames` at 33.3 s against 0.43 s, on a machine with a load of 23 on 8 cpus.', + }, + { + kind: 'p', + text: 'Because the two .bit files are identical, this shows nothing the openXC7 file would not have shown. The claim is equivalence on one design on one board, not a better bitstream. The front half, yosys and nextpnr-xilinx, is openXC7\'s and unchanged.', + }, + { kind: 'h', text: 'What this does not show' }, + { + kind: 'ul', + items: [ + 'One design has run on a board. Every other check above compares files.', + 'Apart from the board design, no xc7a200t FASM is in the corpus, and there is no Vivado reference for xc7a100t or xc7a200t. There, byte-identical means identical to the prjxray tools, not to Vivado.', + 'The rule for a tile that starts below its frame is covered by spec tests only. No database bit reaches those kintex7 tiles, so the corpus cannot exercise it.', + 'The FASM grammar and feature lookup are hand-written Rust, checked by the corpus rather than derived from a spec.', + ], + }, +] + +export const ruBody: Block[] = [ + { + kind: 'p', + text: 'openXC7 собирает битстрим Xilinx 7-series в две половины. Первая — yosys и nextpnr: на входе Verilog, на выходе FASM. FASM — это текстовый список фич вроде `CLBLM_R_X3Y0.SLICEM_X0.ALUT.INIT[63:0] = 64\'h...`. Вторая половина превращает этот список в битстрим. `fasm2frames` из prjxray (Python) находит биты каждой фичи и пишет конфигурационные кадры, а `xc7frames2bit` (C++) упаковывает кадры в конфигурационные пакеты. Мы переписали вторую половину так, что каждая позиция бита, адрес кадра и слово пакета берутся из t27-спека, и сравнили её байт в байт с двумя инструментами, которые она заменяет.', + }, + { + kind: 'figure', + svg: chainSvg('ru'), + caption: 'Вторая половина flow. Каждый золотой блок — драйвер, сгенерированный из t27-спеков. Пунктир — проверки на корпусе против инструмента prjxray над ним.', + }, + { kind: 'h', text: 'Что лежит в спеках' }, + { + kind: 'ul', + items: [ + '`packets.t27`: поток конфигурационных пакетов. Заголовки, регистры, команды, CRC и последовательность записи, которую использует `xc7frames2bit`.', + '`far.t27`: обход адресов кадров для xc7a35t, xc7a100t и xc7a200t; микросхема выбирается по IDCODE.', + '`frames.t27`: ECC кадра и то, куда бит из базы попадает в кадре. Это смещение тайла в словах, сдвиг псевдонима у тайла `*_SING`, тайл, который начинается ниже своего кадра, и что происходит с битом, который выпадает за его пределы.', + ], + }, + { + kind: 'p', + text: 'Драйвер, `bitwalk`, написан на Rust. `t27c gen-rust` генерирует его функции-правила из этих спеков. Грамматика FASM, поиск фич, файловый ввод-вывод и текстовый вывод написаны руками; битовая арифметика — нет. Каждый раздел спека ссылается на файл и строку prjxray, которые он воспроизводит (prjxray c9f02d857, prjxray-db 517d66a).', + }, + { kind: 'h', text: 'Измерено' }, + { + kind: 'table', + head: ['Проверка', 'Корпус', 'Результат'], + rows: [ + ['FASM в кадры, против `fasm2frames`', '22 файла. 13 настоящих дизайнов: 7 из nextpnr на xc7a100t и 6 битстримов Vivado на xc7a35t, прочитанных обратно через `bit2fasm`. 7 синтетических файлов, 2 из них на kintex7 xc7k325t. 2 файла, которые должны быть отвергнуты', '22/22 байт в байт. Оба файла на отказ отвергнуты по той же причине'], + ['FASM в кадры, против эталонных кадров fpga-assembler', '5 случаев на совпадение с эталоном из lromor/fpga-assembler#49', '5/5, включая случай с псевдо-PIP на kintex7 и 83-битное значение `RXCDR_CFG`'], + ['Кадры в .bit, против `xc7frames2bit`', '16 файлов кадров на xc7a35t, xc7a100t и xc7a200t', '16/16 байт в байт'], + ['CRC, против Vivado', '6 битстримов Vivado', 'Все 12 слов CRC воспроизводятся'], + ['ECC кадров, против Vivado', '32 520 кадров, 752 из них с данными', '0 ошибок'], + ['Мутационный гейт', '20 дефектов, внесённых в три спека по одному', '20/20 пойманы. Дефект считается пойманным, только если падают и тесты спека, и прогон по корпусу'], + ], + }, + { + kind: 'p', + text: 'Мутационный гейт ещё раз окупился, пока писался этот пост. Поддержка kintex7 изменила то, как драйвер считает биты за пределами тайла, и один внесённый дефект выжил: окно тайла на одно слово длиннее. Тесты спека его поймали, а прогон по корпусу — нет, потому что новый счётчик поглотил ровно тот бит, который сдвигал дефект. Теперь счётчик разделён на два, так что у тайла, который начинается внутри своего кадра, собственные биты никогда не окажутся снаружи, и дефект снова ловится.', + }, + { kind: 'h', text: 'Скорость' }, + { + kind: 'figure', + svg: speedSvg('ru'), + caption: 'Секунды на файл, логарифмическая шкала. fasm2frames засекали, когда собирался каждый файл корпуса; bitwalk — лучший из 3 прогонов на том же ноутбуке. В обоих случаях машина была занята другими задачами, так что отношения стоит читать как грубые.', + }, + { + kind: 'table', + head: ['Файл', 'fasm2frames', 'bitwalk --fasm', 'Отношение'], + rows: speedRows('ru'), + }, + { + kind: 'p', + text: 'Синтетические файлы не длиннее настоящего дизайна, около 1 100 строк против 1 785, но `fasm2frames` тратит на них в 12–45 раз больше времени. Мы не профилировали, почему, и о причине ничего не утверждаем. Ещё мы перезасекли `fasm2frames` на трёх файлах при той же нагрузке, что и наши прогоны: 3,4 с, 32,5 с и 104,4 с — это делает отношения больше, а не меньше. На графике оставлены меньшие.', + }, + { kind: 'h', text: 'Что ещё делает эту работу' }, + { + kind: 'table', + head: ['Инструмент', 'Язык', 'Шаг', 'Где живут правила битов'], + rows: [ + ['`fasm2frames` (prjxray)', 'Python', 'FASM в кадры', 'Код на Python поверх prjxray-db'], + ['`xc7frames2bit` (prjxray)', 'C++', 'кадры в .bit', 'Код на C++'], + ['fpga-assembler (lromor)', 'C++', 'FASM в .bit', 'Код на C++ поверх prjxray-db. Его README сообщает примерно 10-кратную скорость против `fasm2frames`; здесь мы его не засекали'], + ['`bitwalk` (gHashTag/t27#5609)', 'Rust, сгенерированный из t27, плюс написанный руками драйвер', 'оба', 't27-спеки поверх prjxray-db'], + ], + }, + { kind: 'h', text: 'Найдено по дороге' }, + { + kind: 'p', + text: 'Дифференциальное сравнение полезно только тогда, когда стороны расходятся. Три раза они разошлись, и каждый раз дефект был у инструмента, с которым мы сравнивали.', + }, + { + kind: 'ul', + items: [ + '`fasm2frames` не отвергает фичу сайта, которого нет у тайла `*_SING`. На нижнем SING-тайле биты заворачиваются в слова 99–100 кадра, которые принадлежат другому тайлу. На верхнем SING-тайле они отбрасываются. Код выхода в обоих случаях 0, и воспроизводится это одной строкой FASM. Сообщено в f4pga/prjxray#2574. На kintex7 то же самое: в одном синтетическом файле 337 завёрнутых и 356 отброшенных битов. `bitwalk` по умолчанию пишет те же байты, поэтому 22/22 выше и держится; `--strict` отвергает файл и называет строку.', + '`xc7frames2bit` принимает кадры для чужой микросхемы: кадры xc7a100t с микросхемой xc7a200t дают код выхода 0 и 192 лишних кадра. `bitwalk` их отвергает. Сообщено в f4pga/prjxray#2573, исправления в openXC7/prjxray#27 и #28.', + 'В случае 05 из lromor/fpga-assembler#49, 83-битном значении `RXCDR_CFG`, собственные кадры fpga-assembler отличаются от эталона: 18 битов не хватает, 5 лишних. `bitwalk` совпадает с эталоном. Наше прочтение исходников: парсер упаковывает длинный двоичный литерал в 64-битные слова со старшего конца, так что для 83 битов первое слово содержит только младшие 19 битов. Эмуляция такой упаковки даёт ровно 18 недостающих и 5 лишних битов.', + ], + }, + { + kind: 'p', + text: 'Один дефект был наш. В сетке тайлов kintex7 есть четыре тайла, которые начинаются на 2 слова ниже своего кадра, а наш драйвер читал смещение как беззнаковое и останавливался. Теперь спек говорит, как размещаются биты такого тайла (`seg_shift`), и к этому есть тест.', + }, + { kind: 'h', text: 'На плате' }, + { + kind: 'p', + text: 'Совпадение файлов — это утверждение о файлах. Чтобы проверить цепочку на железе, мы собрали один настоящий дизайн для ALINX AX7203 (XC7A200T): trinet node 0, 121 587 строк FASM, 20 230 кадров. На этом FASM `bitwalk` снова совпал с openXC7 байт в байт и по кадрам, и по .bit, и занял около 0,8 с там, где `fasm2frames` занял около 68 с, на хосте, который всё это время был занят. Затем `openFPGALoader` загрузил .bit от bitwalk в SRAM по JTAG, без записи во флеш, и FPGA сообщила DONE.', + }, + { + kind: 'table', + head: ['Прогон на AX7203', 'Результат'], + rows: [ + ['Загрузка .bit от bitwalk в SRAM', '`done 1` за 16,7 с'], + ['Все 42 тернарные матрицы модели, каждый ответ помечен ключом узла', '`receipts verified (tag) : 403200/403200`, 33 792/33 792 строк бит в бит'], + ['Один слой с int8-активациями', '`receipts verified (tag) : 51840/51840`, 320/320 строк бит в бит'], + ], + }, + { + kind: 'terminal', + src: 'term/x7-board/session.cast', + share: 'https://t27.ai/term/x7-board/', + title: 'tri x7-board · t27 back half on the AX7203', + caption: 'Записанная сессия: `tri x7-board compare`, `load` и `receipts`, запущенные ещё раз для записи. Каждый напечатанный байт настоящий и появляется тогда, когда появился; приглашение и набор команд постановочные, паузы длиннее 2 с сокращены, и пока это происходит, в заголовке окна стоит пометка. В этой сессии `fasm2frames` перезасечён: 33,3 с против 0,43 с, при нагрузке 23 на 8 ядрах. Сама запись на английском.', + }, + { + kind: 'p', + text: 'Поскольку два файла .bit идентичны, это не показывает ничего, чего не показал бы файл openXC7. Утверждение — эквивалентность на одном дизайне на одной плате, а не лучший битстрим. Передняя половина, yosys и nextpnr-xilinx, принадлежит openXC7 и не менялась.', + }, + { kind: 'h', text: 'Чего это не показывает' }, + { + kind: 'ul', + items: [ + 'На плате прогнан один дизайн. Все остальные проверки выше сравнивают файлы.', + 'Кроме дизайна для платы, в корпусе нет FASM для xc7a200t, и нет эталона Vivado для xc7a100t и xc7a200t. Там «байт в байт» значит «как у инструментов prjxray», а не «как у Vivado».', + 'Правило для тайла, который начинается ниже своего кадра, покрыто только тестами спека. Ни один бит из базы не попадает в эти тайлы kintex7, так что корпус его не проверяет.', + 'Грамматика FASM и поиск фич — написанный руками Rust, проверенный корпусом, а не выведенный из спека.', + ], + }, +] diff --git a/apps/website/src/data/blog/bodies/the-fpga-flow-layer-by-layer.ts b/apps/website/src/data/blog/bodies/the-fpga-flow-layer-by-layer.ts new file mode 100644 index 0000000000..e9389552a6 --- /dev/null +++ b/apps/website/src/data/blog/bodies/the-fpga-flow-layer-by-layer.ts @@ -0,0 +1,167 @@ +import type { Block } from '../types' +import { FLOW, LAYERS, flowBefore, flowAfter, savedPerBuild, ceiling, hoursPerYear } from '../../devkit' + +// Every number comes from src/data/devkit.ts, the record of one `tri devkit flow --build` run. +const pct = (s: number) => `${((100 * s) / flowBefore).toFixed(1)} %` +const open = LAYERS.filter(l => !l.t27) + +export const body: Block[] = [ + { + kind: 'p', + text: `The previous post rebuilt the back half of openXC7 from t27 specs. FASM to frames and frames to bitstream now come from the specs, byte for byte. That raises the next question: what would it be worth to do the same for every layer of the flow? To answer it we timed every layer of one real build and put the numbers next to each other.`, + }, + { kind: 'h', text: 'One build, every layer' }, + { + kind: 'p', + text: `The design is ${FLOW.design} for the ${FLOW.part} on an AX7203 board, ${FLOW.fasmLines.toLocaleString('en-US')} lines of FASM. \`tri devkit flow --build\` runs the openXC7 flow with every step timed. It then runs the t27 replacements on the same FASM, three times each, and compares their output with openXC7's byte for byte. The times are wall seconds on one laptop at a load of ${FLOW.load}.`, + }, + { + kind: 'table', + head: ['Layer', 'openXC7 tool', 'Now', 'Share', 't27', 'Same bytes'], + rows: [ + ...LAYERS.map(l => [ + `${l.id} ${l.name}`, + `\`${l.tool}\``, + `${l.s.toFixed(2)} s`, + pct(l.s), + l.t27 ? `\`${l.t27.tool}\` ${l.t27.s.toFixed(2)} s` : 'not yet', + l.t27 ? (l.t27.identical ? 'yes' : 'no') : '–', + ]), + ['Whole flow', '', `${flowBefore.toFixed(2)} s`, '', `${flowAfter.toFixed(2)} s (${(flowBefore / flowAfter).toFixed(2)}×)`, ''], + ], + }, + { + kind: 'terminal', + src: FLOW.cast, + share: FLOW.share, + title: 'tri devkit · the FPGA flow, layer by layer', + caption: 'The recorded run: `tri devkit flow --build` and `tri devkit impact`. Every byte printed is real and arrives when it did; the prompt and the typing are staged, and silences over 2 s are shortened, with a note in the title bar while that happens.', + }, + { + kind: 'p', + text: `The rewrite so far saves ${savedPerBuild.toFixed(1)} s on this build, all of it in L3. L4 is a tie: \`bitwalk --write\` took 0.25 s against 0.22 s for \`xc7frames2bit\`. The bitstream is the same file either way, so this is a faster route to the same result, not a better result.`, + }, + { kind: 'h', text: 'Where the rest of the time goes' }, + { + kind: 'p', + text: `After L3, place and route is ${pct(LAYERS[1].s)} of the build and synthesis is ${pct(LAYERS[0].s)}. Amdahl's law gives the most a rewrite of either could ever give: make the layer take 0 s and see what is left.`, + }, + { + kind: 'table', + head: ['If this took 0 s', 'Flow', 'Against openXC7 today'], + rows: open.map(l => { + const c = ceiling(l) + return [`${l.id} ${l.name}`, `${flowAfter.toFixed(1)} s → ${c.flow.toFixed(1)} s`, `${c.x.toFixed(2)}×`] + }), + }, + { + kind: 'p', + text: 'So the next lever is place and route, by a wide margin. A spec-driven synthesis step, even an instant one, caps the whole flow at 1.65×. These are ceilings, not plans. nextpnr-xilinx is a large, mature C++ program, and the realistic path is work inside it (we already send patches upstream) plus spec-checked timing and routing rules, not a rewrite from zero.', + }, + { kind: 'h', text: 'What it is worth in hours' }, + { + kind: 'p', + text: `\`tri devkit impact\` turns the saving into hours. At an assumed 20 builds a day for one person over 230 working days, ${savedPerBuild.toFixed(1)} s a build is ${hoursPerYear(savedPerBuild, 20, 1).toFixed(1)} hours a year of waiting. The builds and the people are assumptions, so the page at t27.ai/#/devkit lets you put in your own.`, + }, + { kind: 'h', text: 'Can I run it?' }, + { + kind: 'p', + text: 'Not yet. The run above used a local build of `tri devkit`, and `bitwalk` is built from an open pull request, gHashTag/t27#5609. Neither is in a `tri` release, so there is no install command to give here. Both are to ship in the `tri` release archives with a one-line install; that work is tracked in github.com/gHashTag/trinity/issues/1272, and this post will get the command when a release has it.', + }, + { kind: 'h', text: 'What this does not show' }, + { + kind: 'ul', + items: [ + 'One design on one laptop. The 1.40× is for this build; a design that spends less time in fasm2frames gains less.', + 'The openXC7 times come from the build, and the t27 times were taken right after it in the same session. Load moved between them.', + 'L1 and L2 are not rewritten. Their rows are ceilings.', + 'Loading onto the board (16.7 s SRAM load in the earlier board run) is outside the flow time above.', + ], + }, +] + +// The same post in Russian, from the same numbers. Decimal comma, as in the other Russian posts. +const ru = (n: number, d = 2) => n.toFixed(d).replace('.', ',') +const pctRu = (s: number) => `${ru((100 * s) / flowBefore, 1)} %` +const loadRu = FLOW.load.replace(/^([\d.]+) on (\d+) cpus$/, (_, a: string, n: string) => `${a.replace('.', ',')} на ${n} ядрах`) +const NAME_RU: Record = { + L1: 'Синтез', + L2: 'Размещение и разводка', + L3: 'FASM → кадры', + L4: 'Кадры → .bit', +} + +export const ruBody: Block[] = [ + { + kind: 'p', + text: `В прошлом посте мы пересобрали заднюю половину openXC7 из t27-спеков. FASM в кадры и кадры в битстрим теперь получаются из спеков, байт в байт. Отсюда следующий вопрос: сколько стоило бы сделать то же самое для каждого слоя flow? Чтобы ответить, мы засекли каждый слой одной настоящей сборки и поставили числа рядом.`, + }, + { kind: 'h', text: 'Одна сборка, все слои' }, + { + kind: 'p', + text: `Дизайн — ${FLOW.design} для ${FLOW.part} на плате AX7203, ${FLOW.fasmLines.toLocaleString('ru-RU')} строк FASM. Команда \`tri devkit flow --build\` запускает flow openXC7 с замером каждого шага. Затем она трижды запускает t27-замены на том же FASM и сравнивает их вывод с выводом openXC7 байт в байт. Время — секунды по часам на одном ноутбуке при нагрузке ${loadRu}.`, + }, + { + kind: 'table', + head: ['Слой', 'Инструмент openXC7', 'Сейчас', 'Доля', 't27', 'Те же байты'], + rows: [ + ...LAYERS.map(l => [ + `${l.id} ${NAME_RU[l.id]}`, + `\`${l.tool}\``, + `${ru(l.s)} с`, + pctRu(l.s), + l.t27 ? `\`${l.t27.tool}\` ${ru(l.t27.s)} с` : 'пока нет', + l.t27 ? (l.t27.identical ? 'да' : 'нет') : '–', + ]), + ['Весь flow', '', `${ru(flowBefore)} с`, '', `${ru(flowAfter)} с (${ru(flowBefore / flowAfter)}×)`, ''], + ], + }, + { + kind: 'terminal', + src: FLOW.cast, + share: FLOW.share, + title: 'tri devkit · the FPGA flow, layer by layer', + caption: 'Записанный прогон: `tri devkit flow --build` и `tri devkit impact`. Каждый напечатанный байт настоящий и появляется тогда, когда появился; приглашение и набор команд постановочные, паузы длиннее 2 с сокращены, и пока это происходит, в заголовке окна стоит пометка. Сама запись на английском.', + }, + { + kind: 'p', + text: `Переписанное на сегодня экономит ${ru(savedPerBuild, 1)} с на этой сборке, и всё это в L3. L4 — ничья: \`bitwalk --write\` занял 0,25 с против 0,22 с у \`xc7frames2bit\`. Битстрим в обоих случаях один и тот же файл, так что это более быстрый путь к тому же результату, а не лучший результат.`, + }, + { kind: 'h', text: 'Куда уходит остальное время' }, + { + kind: 'p', + text: `После L3 размещение и разводка — ${pctRu(LAYERS[1].s)} сборки, синтез — ${pctRu(LAYERS[0].s)}. Закон Амдала даёт максимум, который мог бы дать переписанный любой из них: пусть слой занимает 0 с, и посмотрим, что останется.`, + }, + { + kind: 'table', + head: ['Если бы это заняло 0 с', 'Flow', 'Против openXC7 сегодня'], + rows: open.map(l => { + const c = ceiling(l) + return [`${l.id} ${NAME_RU[l.id]}`, `${ru(flowAfter, 1)} с → ${ru(c.flow, 1)} с`, `${ru(c.x)}×`] + }), + }, + { + kind: 'p', + text: 'Значит, следующий рычаг — размещение и разводка, с большим отрывом. Синтез из спеков, даже мгновенный, ограничивает весь flow 1,65×. Это потолки, а не планы. nextpnr-xilinx — большая зрелая программа на C++, и реалистичный путь — работа внутри неё (мы уже отправляем туда патчи) плюс проверяемые спеками правила тайминга и разводки, а не переписывание с нуля.', + }, + { kind: 'h', text: 'Сколько это в часах' }, + { + kind: 'p', + text: `\`tri devkit impact\` переводит экономию в часы. При допущении 20 сборок в день у одного человека за 230 рабочих дней ${ru(savedPerBuild, 1)} с на сборку — это ${ru(hoursPerYear(savedPerBuild, 20, 1), 1)} часа ожидания в год. Число сборок и людей — допущения, поэтому страница t27.ai/#/devkit даёт подставить свои.`, + }, + { kind: 'h', text: 'Можно ли это запустить у себя?' }, + { + kind: 'p', + text: 'Пока нет. Прогон выше сделан локальной сборкой `tri devkit`, а `bitwalk` собран из открытого pull request, gHashTag/t27#5609. Ни того, ни другого нет в релизе `tri`, поэтому команды установки здесь нет. Оба должны войти в архивы релиза `tri` с установкой одной строкой; эта работа ведётся в github.com/gHashTag/trinity/issues/1272, и команда появится в посте, когда она будет в релизе.', + }, + { kind: 'h', text: 'Чего это не показывает' }, + { + kind: 'ul', + items: [ + 'Один дизайн на одном ноутбуке. 1,40× — для этой сборки; дизайн, который проводит меньше времени в fasm2frames, выиграет меньше.', + 'Время openXC7 взято из сборки, время t27 — сразу после неё в той же сессии. Нагрузка между ними менялась.', + 'L1 и L2 не переписаны. Их строки — потолки.', + 'Загрузка в плату (16,7 с загрузки в SRAM в прошлом прогоне на плате) не входит во время flow выше.', + ], + }, +] diff --git a/apps/website/src/data/blog/bodies/trained-weights-ran-receipts-were-not-checked.ts b/apps/website/src/data/blog/bodies/trained-weights-ran-receipts-were-not-checked.ts index d76e25f0c2..e512ca1290 100644 --- a/apps/website/src/data/blog/bodies/trained-weights-ran-receipts-were-not-checked.ts +++ b/apps/website/src/data/blog/bodies/trained-weights-ran-receipts-were-not-checked.ts @@ -1,4 +1,5 @@ import type { Block } from '../types' +import { X7_BOARD } from '../../casts' export const body: Block[] = [ { @@ -127,6 +128,13 @@ export const body: Block[] = [ kind: 'p', text: "One side prediction missed. The slip at 30 came after 150,017 jobs, not within the first 20,000 as at 64, so the stalls that fill the buffer are rarer than a single fixed gap would explain. What stalls the bridge's USB transfers is not measured, and the hub is not excluded. The rule the harness follows now is to keep 19 x W under 512 bytes, which is why the default is 24 (456 bytes). It costs no measurable throughput: 4,716 answers/s, against about 4,660 to 4,750 at 64 before the slips.", }, + { + kind: 'terminal', + src: X7_BOARD.src, + share: X7_BOARD.share, + title: X7_BOARD.title, + caption: "A later recording of the same five-check receipt harness on the same board, made for the t27 back-half post. It ran a quick set on the trinet node, so its counts are not this post's run." + ' ' + X7_BOARD.caption.en, + }, { kind: 'h', text: 'Two items booked as new hardware need none', @@ -294,6 +302,13 @@ export const ruBody: Block[] = [ kind: 'p', text: 'Одно побочное предсказание не сбылось. Срыв при 30 пришёл после 150 017 задач, а не в первые 20 000, как при 64, так что задержки, заполняющие буфер, реже, чем объяснил бы один фиксированный простой. Что задерживает USB-передачи моста, не измерено, и хаб не исключён. Правило харнесса теперь — держать 19 x W меньше 512 байт, поэтому по умолчанию окно 24 (456 байт). Скорости это заметно не стоит: 4 716 ответов в секунду против примерно 4 660–4 750 при 64 до сбоев.', }, + { + kind: 'terminal', + src: X7_BOARD.src, + share: X7_BOARD.share, + title: X7_BOARD.title, + caption: 'Более поздняя запись того же харнесса квитанций с пятью проверками на той же плате, сделанная для поста о задней половине t27. Там прогнан короткий набор на узле trinet, так что её счёт — не прогон этого поста.' + ' ' + X7_BOARD.caption.ru, + }, { kind: 'h', text: 'Две задачи, записанные в новое железо, его не требуют', diff --git a/apps/website/src/data/blog/index.ts b/apps/website/src/data/blog/index.ts index cd906d4702..b27967edc9 100644 --- a/apps/website/src/data/blog/index.ts +++ b/apps/website/src/data/blog/index.ts @@ -2,6 +2,69 @@ import type { PostMeta } from './types' /** Индекс блога: список и метаданные без тяжёлых тел публикаций. */ export const postsIndex: PostMeta[] = [ + { + slug: "the-fpga-flow-layer-by-layer", + title: "The FPGA flow, layer by layer: what a rewrite from specs is worth", + summary: "[one design, one laptop at a load of 12.6 on 8 cpus; L1 and L2 figures are Amdahl ceilings, not results; hours a year rest on stated assumptions] We timed every layer of one real XC7A200T build through openXC7. Synthesis took 12.7 s, place and route 70.1 s, FASM to frames 33.9 s and frames to bitstream 0.2 s, 116.9 s in all. With the two layers already rebuilt from t27 specs, the flow takes 83.5 s, 1.40 times faster, and the bitstream is byte-identical. Place and route is now 60% of the build: if it took no time the flow would be 8.75 times faster, while an instant synthesis step caps out at 1.65 times. The numbers are in a recorded terminal session. The tools are not in a tri release yet.", + date: "2026-10-03", + readingMinutes: 5, + tags: ["FPGA", "Open toolchain", "t27"], + receipts: [ + { label: "The recorded run: tri devkit flow and impact", href: "https://t27.ai/term/devkit-flow/" }, + { label: "The layer calculator", href: "https://t27.ai/#/devkit" }, + { label: "trinity#1272: tri devkit and bitwalk in a tri release (open)", href: "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/gHashTag/trinity/issues/1272" }, + { label: "The back half of openXC7, from a spec (previous post)", href: "https://t27.ai/#/blog/the-back-half-of-openxc7-from-a-spec" }, + { label: "t27#5609: bitwalk and the three specs (open)", href: "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/gHashTag/t27/pull/5609" }, + ], + openQuestions: [ + "One design on one laptop; a design that spends less of its build in fasm2frames gains less.", + "Place and route is the largest layer, and nothing here shows a spec-driven route to making it faster.", + ], + published: true, + ru: { + title: "FPGA-flow по слоям: сколько стоит переписать его из спеков", + summary: "[один дизайн, один ноутбук при нагрузке 12,6 на 8 ядрах; цифры L1 и L2 — потолки по Амдалу, а не результаты; часы в год опираются на названные допущения] Мы засекли каждый слой одной настоящей сборки XC7A200T через openXC7. Синтез занял 12,7 с, размещение и разводка 70,1 с, FASM в кадры 33,9 с, кадры в битстрим 0,2 с, всего 116,9 с. С двумя слоями, уже пересобранными из t27-спеков, flow занимает 83,5 с, в 1,40 раза быстрее, и битстрим совпадает байт в байт. Размещение и разводка теперь 60% сборки: если бы они не занимали времени, flow был бы в 8,75 раза быстрее, а мгновенный синтез упирается в 1,65 раза. Числа — в записанной терминальной сессии. В релизе tri этих инструментов пока нет.", + openQuestions: [ + "Один дизайн на одном ноутбуке; дизайн, который тратит меньшую долю сборки в fasm2frames, выиграет меньше.", + "Размещение и разводка — самый большой слой, и ничто здесь не показывает пути из спеков, который сделал бы его быстрее.", + ], + }, + }, + { + slug: "the-back-half-of-openxc7-from-a-spec", + title: "The back half of openXC7, from a spec: FASM to frames to bitstream", + summary: "[one design on one board, equivalence not a better bitstream; timings on one busy laptop, ratios are rough; the fpga-assembler speed figure is its README's, not ours] openXC7 turns FASM into a Xilinx 7-series bitstream with two prjxray tools, fasm2frames in Python and xc7frames2bit in C++. We rebuilt that half so every bit position, frame address and packet word comes from three t27 specs. Against the two tools it matches byte for byte on 22 of 22 FASM files and 16 of 16 frame files, and it is about 6 to 14 times faster on small real designs, about 85 times on a 121,587-line one, and up to about 200 times on synthetic test files. The comparison found a silent bit-wrap in fasm2frames (f4pga/prjxray#2574), a missing part check in xc7frames2bit (#2573), and a bug of our own on kintex7. On an AX7203 board (XC7A200T), a .bit written this way for a 121,587-line design was byte-identical to openXC7's, loaded into SRAM, and returned 403,200 of 403,200 tagged receipts.", + date: "2026-10-03", + readingMinutes: 8, + tags: ["FPGA", "Open toolchain", "Verification", "t27"], + receipts: [ + { label: "t27#5609: bitwalk and the three specs (open)", href: "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/gHashTag/t27/pull/5609" }, + { label: "prjxray#2574: fasm2frames wraps or drops bits of a site a SING tile lacks", href: "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/f4pga/prjxray/issues/2574" }, + { label: "prjxray#2573: xc7frames2bit accepts frames for the wrong part", href: "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/f4pga/prjxray/issues/2573" }, + { label: "openXC7/prjxray#27: xc7frames2bit refuses frame addresses the part does not have (open)", href: "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/openXC7/prjxray/pull/27" }, + { label: "openXC7/prjxray#28: xc7frames2bit exits 1 when the bitstream cannot be written (open)", href: "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/openXC7/prjxray/pull/28" }, + { label: "trinity-fpga: the AX7203 run, logs and receipts", href: "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/gHashTag/trinity-fpga/blob/421ae920fb477c98505e4143df3cab7954c268a7/conformance/X7_BITWALK_ON_THE_BOARD.md" }, + { label: "fpga-assembler#49: the reference-parity cases", href: "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/lromor/fpga-assembler/issues/49" }, + { label: "fpga-assembler, a C++ FASM-to-bitstream tool", href: "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/lromor/fpga-assembler" }, + ], + openQuestions: [ + "One design, one board: the AX7203 run covers trinet node 0 only, and its .bit is byte-identical to openXC7's, so it cannot show a case where the two differ.", + "Apart from the board design, there is no xc7a200t FASM in the corpus, and there is no Vivado reference for xc7a100t or xc7a200t.", + "gHashTag/t27#5609 has no review yet. f4pga/prjxray#2573 and #2574 and openXC7/prjxray#27 and #28 have no maintainer reply yet.", + "fpga-assembler was not timed here, so the table carries its README's figure, not a measurement.", + ], + published: true, + ru: { + title: "Задняя половина openXC7 из спека: FASM в кадры и в битстрим", + summary: "[один дизайн на одной плате, эквивалентность, а не лучший битстрим; время на одном занятом ноутбуке, отношения грубые; скорость fpga-assembler — из его README, не наша] openXC7 превращает FASM в битстрим Xilinx 7-series двумя инструментами prjxray: fasm2frames на Python и xc7frames2bit на C++. Мы пересобрали эту половину так, что каждая позиция бита, адрес кадра и слово пакета берутся из трёх t27-спеков. Против двух инструментов она совпадает байт в байт на 22 из 22 файлов FASM и 16 из 16 файлов кадров и быстрее примерно в 6–14 раз на небольших настоящих дизайнах, примерно в 85 раз на дизайне в 121 587 строк и до примерно 200 раз на синтетических тестах. Сравнение нашло тихий заворот битов в fasm2frames (f4pga/prjxray#2574), отсутствующую проверку микросхемы в xc7frames2bit (#2573) и наш собственный баг на kintex7. На плате AX7203 (XC7A200T) .bit, записанный так для дизайна в 121 587 строк, совпал с openXC7 байт в байт, загрузился в SRAM и вернул 403 200 из 403 200 помеченных квитанций.", + openQuestions: [ + "Один дизайн, одна плата: прогон на AX7203 покрывает только trinet node 0, и его .bit совпадает с openXC7 байт в байт, так что он не может показать случай, где они расходятся.", + "Кроме дизайна для платы, в корпусе нет FASM для xc7a200t, и нет эталона Vivado для xc7a100t и xc7a200t.", + "У gHashTag/t27#5609 ещё нет ревью. На f4pga/prjxray#2573 и #2574 и openXC7/prjxray#27 и #28 мейнтейнеры ещё не ответили.", + "fpga-assembler здесь не засекали, поэтому в таблице цифра из его README, а не измерение.", + ], + }, + }, { slug: "one-regional-clock-twelve-pull-requests", title: "One regional clock, twelve pull requests, and a spec that found a compiler bug", diff --git a/apps/website/src/data/blog/posts.ts b/apps/website/src/data/blog/posts.ts index c719d8d043..760bc107e8 100644 --- a/apps/website/src/data/blog/posts.ts +++ b/apps/website/src/data/blog/posts.ts @@ -1,3 +1,5 @@ +import { body as body_the_fpga_flow_layer_by_layer, ruBody as ruBody_the_fpga_flow_layer_by_layer } from './bodies/the-fpga-flow-layer-by-layer' +import { body as body_the_back_half_of_openxc7_from_a_spec, ruBody as ruBody_the_back_half_of_openxc7_from_a_spec } from './bodies/the-back-half-of-openxc7-from-a-spec' import { body as body_how_to_join_the_swarm, ruBody as ruBody_how_to_join_the_swarm } from './bodies/how-to-join-the-swarm' import { postsIndex } from './index' import { body as body_queen_browser_actions_you_can_follow, ruBody as ruBody_queen_browser_actions_you_can_follow } from './bodies/queen-browser-actions-you-can-follow' @@ -82,6 +84,8 @@ import { body as body_real_value_in_integer_container, ruBody as ruBody_real_val import { body as body_one_commit_nine_workflow_outcomes, ruBody as ruBody_one_commit_nine_workflow_outcomes } from './bodies/one-commit-nine-workflow-outcomes' const bodies: Record = { + 'the-fpga-flow-layer-by-layer': { body: body_the_fpga_flow_layer_by_layer, ruBody: ruBody_the_fpga_flow_layer_by_layer }, + 'the-back-half-of-openxc7-from-a-spec': { body: body_the_back_half_of_openxc7_from_a_spec, ruBody: ruBody_the_back_half_of_openxc7_from_a_spec }, 'tri-mined-not-sold': { body: body_tri_mined_not_sold, ruBody: ruBody_tri_mined_not_sold }, 'how-to-join-the-swarm': { body: body_how_to_join_the_swarm, ruBody: ruBody_how_to_join_the_swarm }, 'queen-browser-actions-you-can-follow': { body: body_queen_browser_actions_you_can_follow, ruBody: ruBody_queen_browser_actions_you_can_follow }, diff --git a/apps/website/src/data/blog/types.ts b/apps/website/src/data/blog/types.ts index 452fdbc8df..02feaf2b4c 100644 --- a/apps/website/src/data/blog/types.ts +++ b/apps/website/src/data/blog/types.ts @@ -7,6 +7,9 @@ export type Block = | { kind: 'code'; text: string } | { kind: 'table'; head: string[]; rows: string[][] } | { kind: 'figure'; svg: string; caption: string } + // A recorded terminal session (asciicast v2 under public/), replayed in the page by + // TerminalCast; `share` is its page at /term// (made by `tri cast publish`). + | { kind: 'terminal'; src: string; title: string; caption: string; share?: string } export interface PostRuMeta { title: string diff --git a/apps/website/src/data/casts.ts b/apps/website/src/data/casts.ts new file mode 100644 index 0000000000..975b60e0f9 --- /dev/null +++ b/apps/website/src/data/casts.ts @@ -0,0 +1,29 @@ +// Recorded terminal sessions published under public/term// with `tri cast publish`. +// Pages and posts that replay one take its text from here, so a caption is written once. + +export interface Cast { + src: string + share: string + title: string + caption: { en: string; ru: string } +} + +export const X7_BOARD: Cast = { + src: 'term/x7-board/session.cast', + share: 'https://t27.ai/term/x7-board/', + title: 'tri x7-board · t27 back half on the AX7203', + caption: { + en: 'One recorded session on the AX7203, 2026-10-02: a bitstream built from t27 specs is compared byte for byte with openXC7\'s, loaded into SRAM, and checked with 51,840 of 51,840 tagged receipts from the board. Every byte printed is real; the prompt and the typing are staged, and silences over 2 s are shortened.', + ru: 'Одна записанная сессия на AX7203, 2026-10-02: битстрим, собранный из t27-спеков, сравнивается байт в байт с битстримом openXC7, загружается в SRAM и проверяется 51 840 из 51 840 тегированных квитанций с платы. Каждый напечатанный байт настоящий; приглашение и набор команд постановочные, паузы длиннее 2 с сокращены. Сама запись на английском.', + }, +} + +export const DEVKIT_FLOW: Cast = { + src: 'term/devkit-flow/session.cast', + share: 'https://t27.ai/term/devkit-flow/', + title: 'tri devkit · the FPGA flow, layer by layer', + caption: { + en: 'The recorded run: `tri devkit flow --build` and `tri devkit impact` on one XC7A200T design, 2026-10-03. Every byte printed is real and arrives when it did; the prompt and the typing are staged, and silences over 2 s are shortened, with a note in the title bar while that happens.', + ru: 'Записанный прогон: `tri devkit flow --build` и `tri devkit impact` на одном дизайне XC7A200T, 2026-10-03. Каждый напечатанный байт настоящий и появляется тогда, когда появился; приглашение и набор команд постановочные, паузы длиннее 2 с сокращены, и пока это происходит, в заголовке окна стоит пометка. Сама запись на английском.', + }, +} diff --git a/apps/website/src/data/club.ts b/apps/website/src/data/club.ts new file mode 100644 index 0000000000..ee7e441fcf --- /dev/null +++ b/apps/website/src/data/club.ts @@ -0,0 +1,33 @@ +// One price for every agent, in one place: #/foundry, #/devkit, the agents +// showcase and the homepage read it from here. +// +// Owner, 2026-10-03: every agent is sold at the same price — one Telegram +// Stars subscription at its maximum, 10000 Stars per 30 days — and agents +// differ by profile, not by price. USD is derived with the bot's own rate +// (STAR_PRICE_USD in gHashTag/999-multibots-telegraf), never typed twice. +export const STAR_PRICE_USD = 0.016 + +export const AGENT_PRICE = { + stars: 10000, + periodDays: 30, +} + +export const agentPriceUsd = Math.round(AGENT_PRICE.stars * STAR_PRICE_USD) + +const BOT = 'https://t.me/t27ai_bot' +export const orderUrl = (id: string) => `${BOT}?start=agentpkg_${id}` + +// The Golden Foundry club is the TRI DEV profile — `tri dev` +// (docs/docs/cli/dev.md): one GitHub issue, one service, one autonomous +// Claude Code agent. +export const CLUB = { + stars: AGENT_PRICE.stars, + usdPerMonth: agentPriceUsd, + href: '#/foundry', + telegram: orderUrl('tridev'), +} + +const stars = AGENT_PRICE.stars.toLocaleString('en-US').replace(/,/g, ' ') + +export const clubPrice = (ru: boolean) => `${stars} ⭐ / ${ru ? 'мес' : 'mo'}` +export const clubPriceUsd = (ru: boolean) => `≈ $${agentPriceUsd} / ${ru ? 'мес' : 'mo'}` diff --git a/apps/website/src/data/devkit.ts b/apps/website/src/data/devkit.ts new file mode 100644 index 0000000000..d328b95df9 --- /dev/null +++ b/apps/website/src/data/devkit.ts @@ -0,0 +1,65 @@ +// TRI DEV KIT: the numbers behind #/devkit and the devkit blog post, kept in one place. +// +// Source: `tri devkit flow --build` recorded at /term/devkit-flow/ (flow.json of that run, +// 2026-10-03 11:31 +07, load 12.6 on 8 cpus). Wall seconds on one laptop: they move with +// load, so ratios are the quotable part, not the absolute times. + +export const FLOW = { + recorded: '2026-10-03', + design: 'trinet_node_v2_ax7203', + part: 'xc7a200tfbg484-2', + fasmLines: 121587, + load: '12.6 on 8 cpus', + cast: 'term/devkit-flow/session.cast', + share: 'https://t27.ai/term/devkit-flow/', +} + +export interface Layer { + id: string + name: string + tool: string + s: number + t27?: { tool: string; s: number; identical: boolean } +} + +export const LAYERS: Layer[] = [ + { id: 'L1', name: 'Synthesis', tool: 'yosys', s: 12.69 }, + { id: 'L2', name: 'Place & route', tool: 'nextpnr-xilinx', s: 70.09 }, + { id: 'L3', name: 'FASM → frames', tool: 'fasm2frames.py', s: 33.86, t27: { tool: 'bitwalk --fasm', s: 0.42, identical: true } }, + { id: 'L4', name: 'Frames → .bit', tool: 'xc7frames2bit', s: 0.22, t27: { tool: 'bitwalk --write', s: 0.25, identical: true } }, +] + +export const flowBefore = LAYERS.reduce((a, l) => a + l.s, 0) +export const flowAfter = LAYERS.reduce((a, l) => a + (l.t27 ? l.t27.s : l.s), 0) +export const savedPerBuild = flowBefore - flowAfter + +/** The whole flow if one more not-yet-rewritten layer took 0 s: the most its rewrite could give. */ +export function ceiling(l: Layer): { flow: number; x: number } { + const flow = flowAfter - l.s + return { flow, x: flowBefore / flow } +} + +export const WORKING_DAYS = 230 + +export function hoursPerYear(savedS: number, buildsPerDay: number, people: number): number { + return (savedS * buildsPerDay * WORKING_DAYS * people) / 3600 +} + +// Crowd Supply campaigns of open FPGA hardware, read from their pages on 2026-10-03. +export const CROWD = [ + { name: 'Glasgow revC', by: '1BitSquared', href: 'https://www.crowdsupply.com/1bitsquared/glasgow', raised: 458567, backers: 2321, goal: 25000, price: '$179' }, + { name: 'ULX3S', by: 'Radiona', href: 'https://www.crowdsupply.com/radiona/ulx3s', raised: 239437, backers: 1162, goal: 15000, price: '$155–275' }, + { name: 'iCEBreaker', by: '1BitSquared', href: 'https://www.crowdsupply.com/1bitsquared/icebreaker-fpga', raised: 155931, backers: 1188, goal: 15000, price: '$80' }, +] + +// GitHub stars and forks, read through the API on 2026-10-03. +export const FIELD = [ + { name: 'Vivado', href: 'https://www.amd.com/en/products/software/adaptive-socs-and-fpgas/vivado.html', stars: null, what: 'The vendor flow. Closed source; the reference every open flow is compared against.' }, + { name: 'openXC7', href: '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/openXC7/nextpnr-xilinx', stars: 71, what: 'yosys + nextpnr-xilinx + prjxray for Xilinx 7-series. The flow this kit builds on; L1 and L2 are its tools.' }, + { name: 'F4PGA / prjxray', href: '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/f4pga/prjxray', stars: 921, what: 'The 7-series bit database and fasm2frames. Last push 2025-06-05.' }, + { name: 'fpga-assembler', href: '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/lromor/fpga-assembler', stars: 29, what: 'A C++ rewrite of FASM-to-bitstream, active. The same L3/L4 job as bitwalk, from code rather than specs.' }, + { name: 'LiteX', href: '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/enjoy-digital/litex', stars: 4140, what: 'SoC builder with an openXC7 backend. A user of the flow, not a replacement for a layer.' }, + { name: 'openFPGALoader', href: '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/trabucayre/openFPGALoader', stars: 1746, what: 'The common open loader (L5). Not rewritten here.' }, + { name: 'yosys', href: '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/YosysHQ/yosys', stars: 4785, what: 'Open synthesis (L1). 1,170 forks; a mature project with a large community.' }, + { name: 'nextpnr', href: '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/YosysHQ/nextpnr', stars: 1763, what: 'Open place and route (L2). nextpnr-xilinx is its 7-series fork.' }, +] diff --git a/apps/website/src/i18n/context.tsx b/apps/website/src/i18n/context.tsx index cc507c7ed3..d31bb603f2 100644 --- a/apps/website/src/i18n/context.tsx +++ b/apps/website/src/i18n/context.tsx @@ -3,18 +3,14 @@ import React, { createContext, useContext, useState, useEffect } from 'react'; import en from '../../messages/en.json'; -const LANGS = ['en', 'ru', 'de', 'zh', 'es'] as const; +const LANGS = ['en', 'ru'] as const; type Lang = typeof LANGS[number]; // English stays static: it is the default and the fallback base for deepMerge, -// so it has to be there on the first render. The other four were static imports -// too, which put all five catalogues — 356 kB of JSON — in the entry chunk and -// made every visitor download four languages they had not asked for. +// so it has to be there on the first render. Russian is loaded on demand, so a +// reader of English does not download the Russian catalogue. const loaders: Record, () => Promise<{ default: any }>> = { ru: () => import('../../messages/ru.json'), - de: () => import('../../messages/de.json'), - zh: () => import('../../messages/zh.json'), - es: () => import('../../messages/es.json'), }; interface I18nContextType { @@ -65,21 +61,6 @@ const SEO = { title: 'TRINITY | TNF · GFTernary — референсная пара форматов для тернарного датапути', description: 'TNF и GFTernary: референсная пара числовых форматов для тернарного датапути. 52 теоремы, и каждое аппаратное число измерено на открытом потоке на XC7A200T.', }, - de: { - locale: 'de_DE', - title: 'TRINITY | TNF · GFTernary — Referenzformate für den ternären Datenpfad', - description: 'TNF und GFTernary: ein Referenzpaar von Zahlenformaten für den ternären Datenpfad. 52 Theoreme, und jede Hardwarezahl auf einem offenen Flow auf XC7A200T gemessen.', - }, - es: { - locale: 'es_ES', - title: 'TRINITY | TNF · GFTernary — formatos de referencia para la ruta de datos ternaria', - description: 'TNF y GFTernary: un par de formatos numéricos de referencia para la ruta de datos ternaria. 52 teoremas, y cada número de hardware medido en un flujo abierto sobre XC7A200T.', - }, - zh: { - locale: 'zh_CN', - title: 'TRINITY | TNF · GFTernary — 三进制数据通路的参考数字格式', - description: 'TNF 与 GFTernary:面向三进制数据通路的一对参考数字格式。52 条定理,所有硬件数据均在 XC7A200T 上以开源流程实测。', - }, } as const export function I18nProvider({ children }: { children: React.ReactNode }) { diff --git a/apps/website/src/index.css b/apps/website/src/index.css index 94324181cb..ab22314d42 100644 --- a/apps/website/src/index.css +++ b/apps/website/src/index.css @@ -117,6 +117,35 @@ section { min-height: 60vh; } +/* A section centres its children and lets them shrink to fit, so one wide + child (a terminal recording is ~104 columns) widened the whole column past a + phone screen. The inner column takes the section's width and lets wide + children scroll inside themselves instead. */ +.section-inner { + width: 100%; + min-width: 0; +} + +.section-inner.narrow { + max-width: 860px; +} + +.section-inner > * { + max-width: 100%; + min-width: 0; +} + +@media (max-width: 640px) { + .foundry-cta { + flex-direction: column; + align-items: stretch; + } + + .foundry-cta .btn { + text-align: center; + } +} + /* A list is read down a common left edge; centring destroys that edge. The rule above centres everything in a section, so any list that did not happen to sit inside a left-aligned wrapper came out ragged — the marker pinned at the flex diff --git a/apps/website/src/lib/queenModules.ts b/apps/website/src/lib/queenModules.ts index 4e11571946..c4bf099012 100644 --- a/apps/website/src/lib/queenModules.ts +++ b/apps/website/src/lib/queenModules.ts @@ -64,13 +64,13 @@ export const MODULES = [ glyph: '▦', en: { name: 'KANBAN', - hint: 'Operational columns', + hint: 'The board in six columns', body: 'The board as six columns — backlog, blocked, running, in review, done, dropped — with the issue cards themselves, each carrying its number and how many acceptance criteria it states.', play: 'Where you read the contract. The acceptance criteria a card states are what a review will hold you to; a card that states none is a card nobody can be judged against.', }, ru: { name: 'КАНБАН', - hint: 'Операционные колонки', + hint: 'Доска в шесть колонок', body: 'Доска шестью колонками — бэклог, заблокировано, в работе, на ревью, готово, отложено — с самими карточками задач: номер и сколько критериев приёмки в ней заявлено.', play: 'Место, где читают договор. Критерии приёмки на карточке — это то, по чему вас будет судить ревью; карточка без них — карточка, по которой судить нечем.', }, @@ -166,13 +166,13 @@ export const MODULES = [ glyph: 'Ω', en: { name: 'AGENTS', - hint: 'The 27-letter alphabet, each agent stated by a .t27 spec', + hint: 'Who holds the skills', body: 'The Agent Explorer, embedded whole. Level by level the system is built: Specs state what exists, Skills state what a run does, Crons state what starts a run, and Agents — the fourth layer — state who holds the skills, under which law (SOUL.md, AGENTS.md), with which entry and exit invariant. Twenty-seven letters, A to Z and the reserved Ti, each with its spec first, then its skills, its derived crons, and its experience joined from the episode log by evidence: an agent no episode names says so.', play: 'Where the players on the other side are named. Twenty-seven letters, each with the law it works under; an agent no episode names has no recorded experience yet, and says so itself.', }, ru: { name: 'АГЕНТЫ', - hint: 'Алфавит из 27 букв, каждый агент заявлен спекой .t27', + hint: 'Кто держит скиллы', body: 'Обозреватель агентов целиком. Уровень за уровнем мы создаём систему: спеки говорят, что существует, скиллы — что делает запуск, кроны — что его запускает, а агенты — четвёртый слой — кто держит скиллы, под каким законом (SOUL.md, AGENTS.md), с каким входным и выходным инвариантом. Двадцать семь букв, от A до Z и зарезервированная Ti, у каждой сначала спека, затем её скиллы, выведенные кроны и опыт, присоединённый из журнала эпизодов по свидетельствам: агент, которого не называет ни один эпизод, говорит об этом сам.', play: 'Место, где названы игроки с той стороны. Двадцать семь букв, у каждой свой закон; агент, которого не называет ни один эпизод, ещё не имеет записанного опыта — и говорит об этом сам.', }, diff --git a/apps/website/src/main.tsx b/apps/website/src/main.tsx index a374dc4eb7..0b95bd8e5c 100644 --- a/apps/website/src/main.tsx +++ b/apps/website/src/main.tsx @@ -54,7 +54,7 @@ handExplorerLinksToQueen() const view = params.get('view') if (!leaving && /^#\/queen(?:\?|$)/.test(hash) && params.get('embed') !== '1' && !params.has('repo') && view !== 'atlas' && view !== 'core') { const asked = new URLSearchParams(window.location.search).get('lang') - let lang = asked && ['en', 'ru', 'de', 'zh', 'es'].includes(asked) ? asked : null + let lang = asked && ['en', 'ru'].includes(asked) ? asked : null if (!lang) { try { lang = window.localStorage.getItem('trinity-lang') @@ -88,6 +88,7 @@ const Trinity = lazy(() => import('./pages/Trinity.tsx')) const AboutAuthor = lazy(() => import('./pages/AboutAuthor.tsx')) const Resources = lazy(() => import('./pages/Resources.tsx')) const Foundry = lazy(() => import('./pages/Foundry.tsx')) +const DevKit = lazy(() => import('./pages/DevKit.tsx')) const Queen = lazy(() => import('./pages/QueenUniverse.tsx')) // The PASSPORT: the record proposed to the OCP neuromorphic working group, and // the three measured cases behind it. One component, two faces. @@ -152,6 +153,7 @@ createRoot(document.getElementById('root')!).render( {/* Клуб. /club — короткий синоним для ссылок в рилсах и профиле. */} } /> } /> + } /> } /> } /> } /> diff --git a/apps/website/src/pages/Blog.tsx b/apps/website/src/pages/Blog.tsx index 04d1594ec1..938b353853 100644 --- a/apps/website/src/pages/Blog.tsx +++ b/apps/website/src/pages/Blog.tsx @@ -3,6 +3,7 @@ import { Link, useParams } from 'react-router-dom' import Navigation from '../components/Navigation' import Footer from '../components/Footer' import Cover from '../components/BlogCover' +import TerminalCast from '../components/TerminalCast' import { publishedPosts, postBySlug } from '../data/blog/index' import type { Block, Post, PostBody, PostMeta } from '../data/blog/types' import { useI18n } from '../i18n/context' @@ -374,6 +375,8 @@ function renderBlock(b: Block, i: number) { ) + case 'terminal': + return case 'table': return (
    diff --git a/apps/website/src/pages/DevKit.tsx b/apps/website/src/pages/DevKit.tsx new file mode 100644 index 0000000000..4cc7bb6a6d --- /dev/null +++ b/apps/website/src/pages/DevKit.tsx @@ -0,0 +1,319 @@ +import { useState } from 'react' +import { clubPrice } from '../data/club' +import { motion } from 'framer-motion' +import { usePageMeta } from '../hooks/usePageMeta' +import Navigation from '../components/Navigation' +import Footer from '../components/Footer' +import QuantumBackground from '../components/QuantumBackground' +import TerminalCast from '../components/TerminalCast' +import { FLOW, LAYERS, flowBefore, flowAfter, savedPerBuild, ceiling, hoursPerYear, WORKING_DAYS, CROWD, FIELD } from '../data/devkit' + +/** + * TRI DEV KIT: the open Xilinx 7-series flow, rewritten layer by layer from t27 specs. + * + * A proposal page. Every timing comes from one recorded build (src/data/devkit.ts); + * prices and revenue are drafts and scenarios and say so on the page. + */ + +const CONTACT = { email: 'admin@t27.ai', telegram: 'https://t.me/t27ai_bot?start=devkit' } + +/** Prices and kit contents are not confirmed. While true, the page says so above them. */ +const DRAFT_TERMS = true + +const ROADMAP = [ + { id: 'L0', name: 'Chip database', state: 'partly', body: 'Three t27 specs already hold frame addressing, bit positions and packet words for the 7-series. The rest of prjxray-db (tile grid, routing graph) is still read from its JSON.' }, + { id: 'L1', name: 'Synthesis', state: 'not started', body: 'yosys is mature and large. A spec-driven technology mapper for 7-series primitives is possible, but the whole layer is 11% of a build, so even an instant one gives at most 1.65× on the flow.' }, + { id: 'L2', name: 'Place & route', state: 'not started', body: '60% of a build, and the biggest lever: at 0 s the flow would be 8.75× faster. Also the hardest. The realistic path is upstream work on nextpnr-xilinx (we already send patches there) plus spec-checked timing and routing rules, not a rewrite from zero.' }, + { id: 'L3', name: 'FASM → frames', state: 'done', body: 'bitwalk --fasm, built from the specs. Byte-identical to fasm2frames on 22 of 22 corpus files; 33.9 s → 0.42 s on this build.' }, + { id: 'L4', name: 'Frames → .bit', state: 'done', body: 'bitwalk --write. Byte-identical to xc7frames2bit on 16 of 16 frame files. Not faster: 0.25 s against 0.22 s, a tie.' }, + { id: 'L5', name: 'Loader', state: 'not started', body: 'openocd / openFPGALoader. The SRAM load of this design on the AX7203 took 16.7 s, outside the 116.9 s above.' }, + { id: 'L6', name: 'Board receipts', state: 'done for one design', body: 'tri x7-board receipts: the loaded design answers tagged requests. 403,200 of 403,200 on trinet node 0. One design, one board.' }, +] + +const OPTIONS = [ + { name: 'Open core', price: 'Free', body: 'The tri CLI, the t27 specs and bitwalk under Apache-2.0. Anyone can check the layer table above on their own machine.' }, + { name: 'Kit', price: '$149–199 (draft)', body: 'An Artix-7 board with the flow preinstalled, a receipts harness and one design that proves itself on first power-up. Sold through Crowd Supply, priced against the campaigns below.', featured: true }, + { name: 'Club', price: clubPrice(false), body: 'The Golden Foundry club: a TRI DEV developer agent on your own GitHub issue, plus remote runs on live boards and conformance receipts for your design.' }, +] + +function Section({ title, children, narrow }: { title: string; children: React.ReactNode; narrow?: boolean }) { + return ( +
    +
    +

    {title}

    + {children} +
    +
    + ) +} + +const muted = { color: 'var(--muted)', fontSize: '0.92rem', lineHeight: 1.6 } as const +const th = { textAlign: 'left', padding: '0.5rem 0.75rem', borderBottom: '1px solid rgba(255,255,255,0.15)', fontWeight: 600, fontSize: '0.85rem' } as const +const td = { padding: '0.5rem 0.75rem', borderBottom: '1px solid rgba(255,255,255,0.06)', fontSize: '0.9rem', verticalAlign: 'top' } as const +const num = { ...td, textAlign: 'right', fontVariantNumeric: 'tabular-nums' } as const + +function LayerTable() { + return ( +
    + + + + + + + + + + + + + + {LAYERS.map(l => ( + + + + + + + + + + ))} + + + + + + + + +
    LayeropenXC7 toolNowSharet27t27Same bytes
    {`${l.id} ${l.name}`}{l.tool}{`${l.s.toFixed(2)} s`}{`${((100 * l.s) / flowBefore).toFixed(1)} %`}{l.t27 ? l.t27.tool : 'not yet'}{l.t27 ? `${l.t27.s.toFixed(2)} s` : '–'}{l.t27 ? (l.t27.identical ? 'yes' : 'NO') : '–'}
    Whole flow{`${flowBefore.toFixed(2)} s`} + with L3 + L4 in t27{`${flowAfter.toFixed(2)} s`}{`${(flowBefore / flowAfter).toFixed(2)}×`}
    +
    + ) +} + +function ShareBars() { + return ( +
    + {LAYERS.map(l => { + const pct = (100 * l.s) / flowBefore + const color = l.t27 ? 'var(--accent)' : pct > 30 ? 'var(--golden)' : 'rgba(255,255,255,0.35)' + return ( +
    + {`${l.id} ${l.name}`} +
    +
    +
    + {`${pct.toFixed(1)} %`} +
    + ) + })} +
    + ) +} + +function ImpactCalculator() { + const [builds, setBuilds] = useState(20) + const [people, setPeople] = useState(1) + const now = hoursPerYear(savedPerBuild, builds, people) + const open = LAYERS.filter(l => !l.t27) + const field = { background: 'rgba(255,255,255,0.05)', border: '1px solid rgba(255,255,255,0.2)', borderRadius: 6, color: 'inherit', padding: '0.4rem 0.6rem', width: '6rem', fontSize: '1rem' } as const + return ( +
    +
    + + + {`${WORKING_DAYS} working days a year. Both inputs are your assumptions, not measurements.`} +
    +
    +
    {`${now.toFixed(1)} h / year`}
    +
    {`of waiting removed today, at the measured ${savedPerBuild.toFixed(1)} s per build (L3 + L4 in t27).`}
    +
    +
      + {open.map(l => { + const c = ceiling(l) + return ( +
    • + {`If ${l.id} ${l.name.toLowerCase()} took 0 s: at most ${hoursPerYear(flowAfter - c.flow, builds, people).toFixed(1)} more h / year, flow ${flowBefore.toFixed(1)} s → ${c.flow.toFixed(1)} s (${c.x.toFixed(2)}×). A ceiling, not a result.`} +
    • + ) + })} +
    +
    + ) +} + +export default function DevKit() { + usePageMeta('TRI DEV KIT', 'The open Xilinx 7-series flow, rewritten layer by layer from t27 specs: measured per-layer times, byte-identical replacements, Amdahl ceilings and a business model proposal.') + const usd = (n: number) => `$${n.toLocaleString('en-US')}` + + return ( + <> + + +
    +
    +
    + +
    + ▼ Trinity S³AI · proposal +
    +

    + TRI DEV KIT +
    + the FPGA flow, layer by layer +

    +

    + {`An open Xilinx 7-series flow where each layer is either rewritten from t27 specs and byte-compared with the tool it replaces, or marked as not yet. On one real XC7A200T build, the two layers done so far take the flow from ${flowBefore.toFixed(1)} s to ${flowAfter.toFixed(1)} s with an identical bitstream. Place and route is 60% of what is left.`} +

    + +
    +
    +
    + +
    +

    + {`Design ${FLOW.design}, part ${FLOW.part}, ${FLOW.fasmLines.toLocaleString('en-US')} FASM lines, recorded ${FLOW.recorded} with \`tri devkit flow --build\`. Wall seconds on one laptop at a load of ${FLOW.load}; they move with load, the ratios less so. The t27 times are the best of 3 runs right after the build.`} +

    + + +
    + +
    + +
    + +
    +

    + Amdahl ceilings: how fast the whole flow would be if one more layer took no time at all. A rewrite cannot beat its ceiling, and most will land well below it. +

    + +
    + +
    +
    + {ROADMAP.map(r => { + const done = r.state.startsWith('done') + return ( +
    +
    {`${r.id} · ${r.state}`}
    +

    {r.name}

    +

    {r.body}

    +
    + ) + })} +
    +
    + +
    + {DRAFT_TERMS ? ( +

    Prices are drafts for discussion. Nothing is on sale yet.

    + ) : null} +
    + {OPTIONS.map(o => ( +
    +
    {o.name}
    +
    {o.price}
    +

    {o.body}

    +
    + ))} +
    +
    + +
    +

    Three finished Crowd Supply campaigns, read from their pages on 2026-10-03. They show the size of the audience, not what this kit would raise.

    +
    + + + + + + + + + + + + + {CROWD.map(c => ( + + + + + + + + + ))} + +
    CampaignRaisedBackersGoalPriceAt $179, gross
    {c.name}{` · ${c.by}`}{usd(c.raised)}{c.backers.toLocaleString('en-US')}{usd(c.goal)}{c.price}{usd(c.backers * 179)}
    +
    +

    + The last column is a scenario, not a forecast: the same number of backers at a draft $179, before the platform fee, manufacturing and shipping. All three campaigns had a known board and community before launch; this kit has neither yet. +

    +
    + +
    +
    + + + + + + + + + + {FIELD.map(f => ( + + + + + + ))} + +
    ProjectStarsRelation to this kit
    {f.name}{f.stars === null ? '–' : f.stars.toLocaleString('en-US')}{f.what}
    +
    +

    Stars read through the GitHub API on 2026-10-03. gHashTag/t27, where the specs live, has 1.

    +
    + +
    +
    +
      +
    • One design, one laptop, one board. The 1.40× is for this build, not for every design.
    • +
    • L1 and L2 are not rewritten. Their numbers are ceilings, not results.
    • +
    • The t27 bitstream is identical to openXC7's, so it is equivalent, not better.
    • +
    • The hours a year come from your inputs. The kit and its prices are proposals.
    • +
    • + tri devkit and bitwalk are not in a tri release yet, so you cannot install them today. That is tracked in{' '} + trinity#1272. +
    • +
    +
    +

    + Talk to us + {CONTACT.email} +

    +
    +
    +