Files
onion-mc/analysis/audit/dupes2.py
T
logan 611a1a5952 docs: client-perf analysis, bench harness and work journal
Everything the next agent needs to run the Phase 2 optimisation loop on a
machine that can launch the client:

- analysis/client-perf/: LEVERS (ranked levers + corrections), BENCH-MATRIX
  (world, scenes, config IDs, blocks B0-B14 with decision rules),
  PLAYER-TUNING, SPAWN-TUNING, research briefs, the jar scanner and its
  output, observed default configs, and proposed-configs/ (build.py
  generates tiers and bench variants and fails on unknown keys;
  apply_variant.py applies a variant and merges options.txt).
- analysis/client-perf/bench/onion-bench/: bench-world datapack (scene
  teleports, Create grid, mob pen, sound storm, 120 s teleport tour).
- analysis/audit/: the static recipe/dependency audit, including gen_fixes.py,
  which generates the shipped Paxi datapack and was never tracked.
- phase0/: per-machine measurement harness (Steam Deck, 7700K/1060,
  6700K/1080 Ti).
- .pi/journal.md: running work log; read it first.

All of it is packwizignored, so nothing here ships to players.
2026-10-14 18:15:32 -04:00

30 lines
1.4 KiB
Python

import pickle,collections,re,json
D=pickle.load(open("data.pkl","rb")); A=pickle.load(open("active.pkl","rb")); tc=A["tagcache"]
models=D["models"]
name={}
for k,v in D["lang"].items():
_,ns,p=k.split("."); name.setdefault(ns+":"+p,v[0][1])
spec=collections.defaultdict(set)
for t,s in tc.items():
if t.startswith("c:") and "/" in t and len(s)<=8:
for i in s: spec[i].add(t)
new=set("""extradelight moredelight rusticdelight dungeonsdelight frightsdelight fruitsdelight minersdelight veggiesdelight overweight_farming barbequesdelight fishermans_haven fowlplay etched music_disc_maker too_many_bows mermod tarotcards chalk charta comforts petcemetery friendsandfoes""".split())
def norm(n): return re.sub(r'[^a-z]','',n.lower())
by=collections.defaultdict(set)
for i,n in name.items():
if i in models and isinstance(n,str) and "spawn_egg" not in i and not i.startswith(("sophisticated",)):
by[norm(n)].add(i)
# also group by registry path
for i in models:
p=i.split(":")[1]
if len(p)>3: by["path:"+p].add(i)
seen=set()
for k,s in sorted(by.items()):
nss={i.split(":")[0] for i in s}
if len(nss)<2 or "minecraft" in nss or not (nss&new): continue
key=frozenset(s)
if key in seen: continue
seen.add(key)
s=sorted(s); common=set.intersection(*[spec.get(i,set()) for i in s])
print(("UNIFIED " if common else "SPLIT ")+name.get(s[0],s[0])+": "+", ".join(s)+((" via "+",".join(sorted(common))) if common else ""))