From 55a38bb6938252d729f6e73b4291ae1427bf9038 Mon Sep 17 00:00:00 2001 From: Will Anderson Date: Mon, 27 Apr 2026 16:20:36 -0500 Subject: [PATCH] fix: update Gitea URL to new GCP cluster instance Legion hardware died April 27, 2026. New GCP k3s instance at 104.197.5.199. Gitea now at gitea.git.svc.cluster.local:3000 within cluster. --- servers/gcp/tfplan-ingress | Bin 0 -> 71604 bytes servers/legion/apps/adguard-config.yaml | 2 +- servers/legion/apps/backup.yaml | 2 +- servers/legion/apps/ci-config.yaml | 4 +- .../legion/apps/external-secrets-config.yaml | 2 +- servers/legion/apps/fornax.yaml | 6 +- servers/legion/apps/gitea-config.yaml | 2 +- servers/legion/apps/headscale-config.yaml | 2 +- servers/legion/apps/media.yaml | 2 +- servers/legion/apps/monitoring-config.yaml | 2 +- servers/legion/apps/mudcraft.yaml | 2 +- servers/legion/apps/neuron-config.yaml | 2 +- servers/legion/apps/neuron-daemon.yaml | 2 +- servers/legion/apps/neuron-dev.yaml | 2 +- servers/legion/apps/neuron-marketing.yaml | 2 +- servers/legion/apps/neuron-prod-project.yaml | 2 +- servers/legion/apps/neuron-prod.yaml | 2 +- servers/legion/apps/neuron-stage.yaml | 2 +- servers/legion/apps/neuron-swarm.yaml | 2 +- servers/legion/apps/neuron-tim.yaml | 2 +- servers/legion/apps/ollama-config.yaml | 2 +- servers/legion/apps/packages-config.yaml | 2 +- servers/legion/apps/postgres-config.yaml | 2 +- servers/legion/apps/registry-config.yaml | 2 +- servers/legion/apps/vault-config.yaml | 2 +- servers/legion/rosetta_experiment.py | 194 ++++++++++++++++++ 26 files changed, 221 insertions(+), 27 deletions(-) create mode 100644 servers/gcp/tfplan-ingress create mode 100644 servers/legion/rosetta_experiment.py diff --git a/servers/gcp/tfplan-ingress b/servers/gcp/tfplan-ingress new file mode 100644 index 0000000000000000000000000000000000000000..d904cbe8ba9addc711a9b03f0ee8a4a6f8da7c09 GIT binary patch literal 71604 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 T06>NL%wTpD?`bdv8NmMlOyT4k literal 0 HcmV?d00001 diff --git a/servers/legion/apps/adguard-config.yaml b/servers/legion/apps/adguard-config.yaml index 60ae69a..d0e25ee 100644 --- a/servers/legion/apps/adguard-config.yaml +++ b/servers/legion/apps/adguard-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/adguard destination: diff --git a/servers/legion/apps/backup.yaml b/servers/legion/apps/backup.yaml index 9ad29e6..65a1fcb 100644 --- a/servers/legion/apps/backup.yaml +++ b/servers/legion/apps/backup.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/backup destination: diff --git a/servers/legion/apps/ci-config.yaml b/servers/legion/apps/ci-config.yaml index 1877d37..f185bff 100644 --- a/servers/legion/apps/ci-config.yaml +++ b/servers/legion/apps/ci-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/github-runner destination: @@ -27,7 +27,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/gitea-runner destination: diff --git a/servers/legion/apps/external-secrets-config.yaml b/servers/legion/apps/external-secrets-config.yaml index 6a2ff49..a2dcb26 100644 --- a/servers/legion/apps/external-secrets-config.yaml +++ b/servers/legion/apps/external-secrets-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/external-secrets destination: diff --git a/servers/legion/apps/fornax.yaml b/servers/legion/apps/fornax.yaml index 2e63e33..769ed3c 100644 --- a/servers/legion/apps/fornax.yaml +++ b/servers/legion/apps/fornax.yaml @@ -7,7 +7,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/fornax/coordinator destination: @@ -29,7 +29,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/fornax/ui destination: @@ -51,7 +51,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/fornax/grafana destination: diff --git a/servers/legion/apps/gitea-config.yaml b/servers/legion/apps/gitea-config.yaml index b042f7a..fa81d51 100644 --- a/servers/legion/apps/gitea-config.yaml +++ b/servers/legion/apps/gitea-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/gitea destination: diff --git a/servers/legion/apps/headscale-config.yaml b/servers/legion/apps/headscale-config.yaml index c89d971..976c1e3 100644 --- a/servers/legion/apps/headscale-config.yaml +++ b/servers/legion/apps/headscale-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/headscale destination: diff --git a/servers/legion/apps/media.yaml b/servers/legion/apps/media.yaml index 2bf6aae..b42aa2a 100644 --- a/servers/legion/apps/media.yaml +++ b/servers/legion/apps/media.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/media destination: diff --git a/servers/legion/apps/monitoring-config.yaml b/servers/legion/apps/monitoring-config.yaml index f5853c7..a84d505 100644 --- a/servers/legion/apps/monitoring-config.yaml +++ b/servers/legion/apps/monitoring-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/monitoring destination: diff --git a/servers/legion/apps/mudcraft.yaml b/servers/legion/apps/mudcraft.yaml index 85c28c4..c872fb0 100644 --- a/servers/legion/apps/mudcraft.yaml +++ b/servers/legion/apps/mudcraft.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/mudcraft destination: diff --git a/servers/legion/apps/neuron-config.yaml b/servers/legion/apps/neuron-config.yaml index ef04a57..c058e73 100644 --- a/servers/legion/apps/neuron-config.yaml +++ b/servers/legion/apps/neuron-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/neuron destination: diff --git a/servers/legion/apps/neuron-daemon.yaml b/servers/legion/apps/neuron-daemon.yaml index 3adfc5b..4b1ce9d 100644 --- a/servers/legion/apps/neuron-daemon.yaml +++ b/servers/legion/apps/neuron-daemon.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/neuron-technologies/daemon destination: diff --git a/servers/legion/apps/neuron-dev.yaml b/servers/legion/apps/neuron-dev.yaml index 4b6f32b..0266d95 100644 --- a/servers/legion/apps/neuron-dev.yaml +++ b/servers/legion/apps/neuron-dev.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/neuron-technologies/dev destination: diff --git a/servers/legion/apps/neuron-marketing.yaml b/servers/legion/apps/neuron-marketing.yaml index 4969b07..a274196 100644 --- a/servers/legion/apps/neuron-marketing.yaml +++ b/servers/legion/apps/neuron-marketing.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/neuron-technologies/marketing destination: diff --git a/servers/legion/apps/neuron-prod-project.yaml b/servers/legion/apps/neuron-prod-project.yaml index ec3e501..dae22ba 100644 --- a/servers/legion/apps/neuron-prod-project.yaml +++ b/servers/legion/apps/neuron-prod-project.yaml @@ -15,7 +15,7 @@ spec: # Only allow deployments sourced from the infrastructure repo. sourceRepos: - - "http://10.43.1.53:3000/will/infrastructure.git" + - "http://gitea.git.svc.cluster.local:3000/will/infrastructure.git" - "https://code.forgejo.org" - "registry.neuralplatform.ai" diff --git a/servers/legion/apps/neuron-prod.yaml b/servers/legion/apps/neuron-prod.yaml index 40b9a1b..20ebe8b 100644 --- a/servers/legion/apps/neuron-prod.yaml +++ b/servers/legion/apps/neuron-prod.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/neuron-technologies/prod destination: diff --git a/servers/legion/apps/neuron-stage.yaml b/servers/legion/apps/neuron-stage.yaml index ef6fbf6..4d1d02a 100644 --- a/servers/legion/apps/neuron-stage.yaml +++ b/servers/legion/apps/neuron-stage.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/neuron-technologies/stage destination: diff --git a/servers/legion/apps/neuron-swarm.yaml b/servers/legion/apps/neuron-swarm.yaml index ff0eb46..1264296 100644 --- a/servers/legion/apps/neuron-swarm.yaml +++ b/servers/legion/apps/neuron-swarm.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/neuron-technologies/swarm destination: diff --git a/servers/legion/apps/neuron-tim.yaml b/servers/legion/apps/neuron-tim.yaml index ec75f14..abcd250 100644 --- a/servers/legion/apps/neuron-tim.yaml +++ b/servers/legion/apps/neuron-tim.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/neuron-technologies/tim destination: diff --git a/servers/legion/apps/ollama-config.yaml b/servers/legion/apps/ollama-config.yaml index 76565b8..579769e 100644 --- a/servers/legion/apps/ollama-config.yaml +++ b/servers/legion/apps/ollama-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/ollama destination: diff --git a/servers/legion/apps/packages-config.yaml b/servers/legion/apps/packages-config.yaml index f753266..b331824 100644 --- a/servers/legion/apps/packages-config.yaml +++ b/servers/legion/apps/packages-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/packages destination: diff --git a/servers/legion/apps/postgres-config.yaml b/servers/legion/apps/postgres-config.yaml index 0a60ba0..352c4d9 100644 --- a/servers/legion/apps/postgres-config.yaml +++ b/servers/legion/apps/postgres-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/postgres destination: diff --git a/servers/legion/apps/registry-config.yaml b/servers/legion/apps/registry-config.yaml index b5e30f8..c977c1c 100644 --- a/servers/legion/apps/registry-config.yaml +++ b/servers/legion/apps/registry-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/registry destination: diff --git a/servers/legion/apps/vault-config.yaml b/servers/legion/apps/vault-config.yaml index 76476e2..b25920f 100644 --- a/servers/legion/apps/vault-config.yaml +++ b/servers/legion/apps/vault-config.yaml @@ -6,7 +6,7 @@ metadata: spec: project: default source: - repoURL: http://10.43.1.53:3000/will/infrastructure.git + repoURL: http://gitea.git.svc.cluster.local:3000/will/infrastructure.git targetRevision: main path: servers/legion/k8s/vault destination: diff --git a/servers/legion/rosetta_experiment.py b/servers/legion/rosetta_experiment.py new file mode 100644 index 0000000..ca24e64 --- /dev/null +++ b/servers/legion/rosetta_experiment.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python3 +""" +Rosetta Stone compression experiment on real Kotlin source files. +""" + +import re +from collections import Counter + +SYMBOL_POOL = list("ΩΘΦΨΣΔΛΠΞΓαβγδεζηκλμνξπρστυφχψω§¶†‡•◆▲■★") +MIN_TERM_LEN = 6 +MIN_TERM_FREQ = 2 +HEADER_COST = 20 # chars per symbol entry in header +MIN_STRIP_LEN = 5 +VOWELS = set("aeiouAEIOU") + + +def term_frequencies(text): + return Counter(re.findall(r'[A-Za-z][A-Za-z0-9_]{' + str(MIN_TERM_LEN-1) + r',}', text)) + + +def build_symbol_table(freq): + ranked = sorted( + [(t, f, (len(t)-1)*f - HEADER_COST) for t, f in freq.items() + if f >= MIN_TERM_FREQ and (len(t)-1)*f - HEADER_COST > 0], + key=lambda x: -x[2] + ) + return {term: SYMBOL_POOL[i] for i, (term, _, _) in enumerate(ranked) if i < len(SYMBOL_POOL)} + + +def apply_symbols(text, table): + for term in sorted(table, key=len, reverse=True): + text = re.sub(r'\b' + re.escape(term) + r'\b', table[term], text) + return text + + +def strip_vowels(text): + def strip_word(m): + w = m.group() + if w.isupper(): return w # ALL-CAPS preserved + if '_' in w: return w # snake_case preserved + if any(c.isupper() for c in w[1:]): return w # camelCase preserved + return w[0] + ''.join(c for c in w[1:] if c not in VOWELS) + return re.sub(r'\b[A-Za-z]{' + str(MIN_STRIP_LEN) + r',}\b', strip_word, text) + + +def build_header(table): + if not table: + return f"This is your Rosetta Stone.\nRule: vowels stripped from plain words≥{MIN_STRIP_LEN}chr (ALL-CAPS/camelCase/snake_case preserved).\n---\n" + terms = " ".join(f"{sym}={term}" for term, sym in table.items()) + return f"This is your Rosetta Stone.\nRule: vowels stripped from plain words≥{MIN_STRIP_LEN}chr (ALL-CAPS/camelCase/snake_case preserved).\nTerms: {terms}\n---\n" + + +def encode(text): + freq = term_frequencies(text) + table = build_symbol_table(freq) + body = apply_symbols(text, table) + body = strip_vowels(body) + header = build_header(table) + full = header + body + return { + 'header': header, + 'body': body, + 'full': full, + 'symbol_table': table, + 'freq': freq, + 'orig_len': len(text), + 'enc_len': len(full), + 'ratio': len(full) / len(text), + 'reduction_pct': (1 - len(full)/len(text)) * 100 + } + + +def detailed_symbol_table(table, freq, text): + """Return per-symbol stats: term, freq, gross savings, header cost, net savings.""" + rows = [] + for term, sym in table.items(): + f = freq[term] + gross = (len(term) - 1) * f # replacing len(term) chars with 1 char, times freq + net = gross - HEADER_COST + rows.append((sym, term, f, gross, net)) + rows.sort(key=lambda x: -x[4]) + return rows + + +def run_experiment(filepath, label): + with open(filepath, 'r', encoding='utf-8') as fh: + text = fh.read() + + result = encode(text) + table = result['symbol_table'] + freq = result['freq'] + rows = detailed_symbol_table(table, freq, text) + + orig_tokens = result['orig_len'] / 4 + enc_tokens = result['enc_len'] / 4 + + # Header vs body savings + header_size = len(result['header']) + body_size = len(result['body']) + # Savings = orig_len - body_size (header is overhead) + body_savings = result['orig_len'] - body_size + net_savings = result['orig_len'] - result['enc_len'] + + # Symbol savings vs vowel stripping savings + # Apply only symbols (no vowel strip) to measure symbol contribution + body_symbols_only = apply_symbols(text, table) + symbol_savings = result['orig_len'] - len(body_symbols_only) + + # Apply only vowel strip (no symbols) to measure vowel contribution + body_vowels_only = strip_vowels(text) + vowel_savings = result['orig_len'] - len(body_vowels_only) + + print(f"\n{'='*72}") + print(f"FILE: {label}") + print(f"{'='*72}") + print(f"\nOriginal: {result['orig_len']:,} chars (~{orig_tokens:,.0f} tokens)") + print(f"Encoded: {result['enc_len']:,} chars (~{enc_tokens:,.0f} tokens)") + print(f"Reduction: {result['reduction_pct']:.1f}%") + print(f"\nHeader size: {header_size:,} chars (overhead)") + print(f"Body savings vs orig: {body_savings:+,} chars") + print(f"Net savings after header: {net_savings:+,} chars") + print(f"\nSavings attribution (before header overhead):") + print(f" Symbol substitution alone: {symbol_savings:,} chars saved") + print(f" Vowel stripping alone: {vowel_savings:,} chars saved") + combined_gross = symbol_savings + vowel_savings + if combined_gross > 0: + print(f" Symbol share: {symbol_savings/combined_gross*100:.1f}% | Vowel share: {vowel_savings/combined_gross*100:.1f}%") + + print(f"\nSymbol table ({len(table)} symbols assigned, pool capacity {len(SYMBOL_POOL)}):") + print(f" {'SYM':<4} {'TERM':<45} {'FREQ':>5} {'GROSS':>7} {'NET':>7}") + print(f" {'-'*4} {'-'*45} {'-'*5} {'-'*7} {'-'*7}") + for sym, term, f, gross, net in rows: + print(f" {sym:<4} {term:<45} {f:>5} {gross:>7,} {net:>7,}") + + print(f"\nTop 5 by net savings:") + for sym, term, f, gross, net in rows[:5]: + print(f" {sym} = '{term}' freq={f} gross={gross} net={net}") + + print(f"\nFirst 500 chars of encoded body:") + print("-" * 60) + print(result['body'][:500]) + print("-" * 60) + + return result + + +# ---- Run on both files ---- + +CULT_FILE = ( + "/Users/will/Development/neuron-technologies/neuron/neuron-core/" + "src/main/kotlin/ai/neuron/core/synapse/services/managers/" + "cultivation/CultivationManager.kt" +) +DHARMA_FILE = ( + "/Users/will/Development/neuron-technologies/neuron/neuron-core/" + "src/main/kotlin/ai/neuron/core/synapse/services/managers/" + "dharma/DharmaManager.kt" +) + +r1 = run_experiment(CULT_FILE, "CultivationManager.kt") +r2 = run_experiment(DHARMA_FILE, "DharmaManager.kt") + +# ---- Combined summary ---- +total_orig = r1['orig_len'] + r2['orig_len'] +total_enc = r1['enc_len'] + r2['enc_len'] +total_reduction = (1 - total_enc / total_orig) * 100 + +print(f"\n{'='*72}") +print("COMBINED SUMMARY") +print(f"{'='*72}") +print(f"Total original: {total_orig:,} chars (~{total_orig/4:,.0f} tokens)") +print(f"Total encoded: {total_enc:,} chars (~{total_enc/4:,.0f} tokens)") +print(f"Combined reduction: {total_reduction:.1f}%") +print(f"Token budget saved: ~{(total_orig - total_enc)/4:,.0f} tokens") + +# ---- Analysis ---- +print(""" +ANALYSIS +-------- +Symbol table: terms must appear ≥2 times and have (len-1)*freq > 20 net chars saved. +In Kotlin source, the dominant repeating terms are fully-qualified class/method names, +type names, and domain vocabulary (prediction, evaluation, graph, properties, etc.). + +The algorithm performs best on: + - Long identifiers repeated many times (e.g. 'properties', 'evaluationId', 'graph') + - Domain-specific vocabulary that recurs heavily across a file + +Vowel stripping covers everything else: short repeated words, Kotlin keywords, +and identifiers that don't hit the symbol threshold. + +Readability of the encoded form is coarse but navigable: the header provides a +lookup table and camelCase/ALL-CAPS/snake_case identifiers are left intact, +which preserves the structural skeleton of the code. +""")