A copy of Ken Kahn’s Logo Evolution Lab with a panel added for measuring the critic itself: does it give the same picture the same score twice, and does that matter for which variant wins?
Start here: EXPERIMENTS.md — how to run each experiment in one click. RESULTS.md has everything found so far, with the numbers.
On one batch of three evolved Mondrian variants, scored 33 times by
gemini-3-flash-preview:
selectWinner keeps the incumbent when scores are equalA second taste, wild flowers, produced no ties at all — its top two variants were 2.17 apart, against 0.47 for the Mondrian batch. So ties are not a fixed rate: they happen when variants sit closer together than the score scale can separate. Whole-number scores move in steps of 1.
judge-lab.html |
the app: Ken’s original plus the Judge Lab panel, two frozen batches built in |
logo-evolution-lab-ORIGINAL.html |
his file as downloaded, for diffing |
EXPERIMENTS.md |
the experiments, one click each |
RESULTS.md |
findings, with data and methods |
data/ |
every call ever made, including failures, plus the frozen batches |
scripts/ |
analysis, the two source modules, the build script, tests |
scripts/inject.js rebuilds judge-lab.html from the original plus the two
modules, and documents every change. There are five:
agentCritique passed the CRITIC_SYS constant, so the editable
Critic prompt box had no effect. The Modifier and Story prompts were wired up
correctly; only the Critic was not.callGemini sent thinkingLevel:'none' on Critic calls to any
non-gemini-2 model. Gemini 3 models now reject it with a 400, which breaks
scoring for the default model.</html> tag tidied away.</body>.Run node scripts/test-core.js for the 31 unit tests on the analysis maths, and
node scripts/inject.js to rebuild.
Open judge-lab.html in a browser. For a local server:
cp scripts/serve.js . && node serve.js # then http://localhost:8731/judge-lab.html