Perslis Defense
PERSLIS DEFENSE · EVOLUTION · FAIL-FIRST

It writes its own rules.

That is what separates Peel from other symbolic systems. A rule engine or an expert system runs rules that people write and people maintain; when the world changes, someone has to rewrite them. Peel writes its own. Every failure is logged and explained, Peel proposes one new rule, tests it head-to-head, and if it wins clearly it writes the rule out — in plain words, with the failures that earned it — and learns from it from then on.

It is a weightless model with a fail-first architecture: no neural network, no retraining, no data centre. It starts from a small hand-written base; every rule after that, it writes itself. It gets better by failing.

Recorded in real time: the DOOM console while the brain evolves. Roll over it to magnify. Bottom right, rules generalised from the trace: rules it wrote itself from its own failures — nobody typed them in.

How it starts: we write the first rules with you

  1. We write the starter rules together, until there is enough for a jump-off. Before anything evolves, we write rules for the job with you — how to move, what to avoid, what it may never do — and keep writing until the brain can run the job on its own, even badly. That is the jump-off: from there its own failures start teaching it. You sign off on the set.
  2. Then evolution takes over. Every failure after that is explained, tested head-to-head and turned into a new rule on top of the ones you agreed — and it can never loosen the ones marked as limits.
  3. Write it once, every drone gets it. The brain is one sealed file. The starter set written for one drone is the starter set for every drone in the fleet, and what one proves the rest can inherit.

No blank brain evolves on its own. With no rules written, it cannot do the job at all, so there is nothing to test a change against and nothing to learn from — so we always write rules first, until there is enough for a jump-off. Every game on this page began that way: hand-written rules, then evolution on top. Sharing a rule book across a real fleet has not been shown yet; moving a brain between two tank games has.

A weightless model

A neural modelWhat it knows is billions of weights. Learning something new means retraining them in a data centre. Nobody can point to the weight that made a decision.
PeelWhat it knows is explicit state: the situations it has been in, what it tried, what happened, and the rules it wrote. Learning means adding or cutting a rule, on the machine. Every rule cites the failures that earned it.

A fail-first architecture

Most AITrained before it ships, then frozen. A failure in the field waits for the next retraining cycle, and most AI is trained to avoid showing you its failures at all.
PeelBuilt on failure. Each one is explained, one change is tested head-to-head against it, and the change is kept only if it wins clearly — then Peel writes it into its own rule book, during the mission.

A failure it has explained, tested and turned into a rule is a failure it does not repeat the same way. In Fallout, with learning on, the same save and the same seed went from 80 deaths an hour to 15.

Feed it your failures

Your programs are already sitting on the most valuable training data there is: every failed recon mission, every crashed drone, every incident report. Tens of thousands of drone failures are not a write-off — they are the rulebook for the machine you actually need.

We use your failures to map the cards. Every decision the system makes is picked from a set of cards — situation, the moves allowed there, what each move led to before. Your failure records are what we map those cards from: each failure tells the system what to do next time it is in that situation. The more failures on record, the more cards we can map, and the more we have to turn into a fail-first system that works.

  1. Send the record. Mission logs, telemetry, sensor tracks, debriefs, crash and maintenance data — in whatever old format it lives in.
  2. It plans out what went wrong. For every failed mission it lays out what happened, why, and what should have been learned — a written after-action plan, tied to the records that show it.
  3. It turns the lessons into rules. Each lesson becomes a rule, tested head-to-head and kept only if it wins clearly — and the next machine starts with all of them on day one, including weapons-capable platforms under human command.

We have done this once from a public record: 8,219 US federal crash and incident reports on automated vehicles became 15 driving rules, each tied to the records that earned it; 6 are enforced so far. Military recon and drone failure data have not been run yet — that is the next step.

Where those 15 rules came from →

How a failure becomes a rule

  1. It fails. A death, a crash, a stall, a hit it didn’t see coming. Every one is logged with the situation it happened in.
  2. It explains the failure. The trace walks back through what it saw and what it chose.
  3. It proposes one change. One. Not a retrain, not a new model: one rule, one weight on a choice, one behaviour cut.
  4. It fights itself. The old way and the new way run head-to-head on the same level and the same seed, over and over.
  5. It keeps only clear winners. Kept only if it wins clearly over the repeated runs (z ≥ 2). Thrown out if it loses (z ≤ −1). Everything else stays not proven.
  6. It writes it down. The kept rule goes into a rule book you can open and read, with the failures that earned it.
PROOF · GAME BY GAME

The evolution of learning, in every game we run.

13 lanes, extracted from each one’s own evidence files on 2026-09-29 16:24. 7 show the brain getting better; the rest are flat, mixed or not learners at all — and they are here too. A section that only ever shows improvement would be a highlight reel, not proof.

A frame from Doom

Doommixed

On E1M5 route progress more than doubled with the pilot's parameters unchanged (z +7.88), while we landed fixes to the lane in the same window. On E1M3 it is flat at both skills.

Learned or built by us? mixed. Mostly built by us. The pilot's parameters did not change (v2 on all 80 control attempts) and the evolver kept 0 of its 8 candidates here. In the same window our ledger records 51 human changes to the lane (44 fixes, 6 added primitives, 1 authored invariant); 17 name E1M5 (1190d66, 1c28a66, 1f91f18, 2db50f8, 325869e, 384f4ff …). How much of the rise is its own memory and how much is these fixes was not measured.

route progress (mean per block) by blocks of control attempts: E1M5 · normal skill 0.2 → 0.68; E1M3 · normal skill 0.42 → 0.33; E1M3 · hard skill 0.08 → 0.0600.340.68E1M5 · normal skill 0.68E1M3 · normal skill 0.33E1M3 · hard skill 0.06blocks of control attemptsroute progress (mean per block)
  • climbed E1M1 → E1M2 → E1M4 quickly; E1M3 took 335 attempts
  • no exit on E1M5 yet
  • orders, weapons and the hazard floor run live in the console

evidence: doom-floor/evidence/evolve/doom-s1/attempts.jsonl

A frame from Fallout (1997)

Fallout (1997)learns, then plateaus

XP 300 → 2,660 and a level gained from its own play. Learning on vs off, same save and seed, 12 minutes each: 15 vs 80 deaths per hour.

Learned or built by us? mixed. XP: mixed — 112 commits of ours to fallout-floor landed while this XP was earned; the lane keeps no intervention ledger, so the split is not recorded. Deaths per hour A/B: learned — both arms ran the same code, save and seed; only the learning switch differed.

experience points held by hours of play (logged): XP 300 → 2,66001,3302,660XP 2,660hours of play (logged)experience points helddeaths per hour (A/B, 12 min each): learning on · live memory 15; learning off · live memory 80; learning on · empty memory 30; learning off · empty memory 80learning on · live memory15learning off · live memory80learning on · empty memory30learning off · empty memory80deaths per hour (A/B, 12 min each)
  • 11 campaign steps completed by the pilot
  • now stalled on one quest for many hours — shown, not hidden

evidence: fallout-floor/maps/journal.json

Drone course (MuJoCo)learns

Best clean lap 39.4 s → 27.8 s over 87 rounds. From held-out starts: learned 10/10 clean laps with 0 contacts; fresh 0/10 with 18.

Learned or built by us? learned. Learned: the loop accepted 17 of the 86 changes it proposed and rejected the rest. We wrote the kinds of change it may try (altitude and speed per block) and the cost it scores (drone-floor b5e5a69); no human change is recorded between rounds (the whole run was committed in b5e5a69; rounds carry no timestamps).

best clean lap (s) by round: lap 39 → 2802039lap 28roundbest clean lap (s)
  • at chase speeds of 2–3 m/s the learned route still gets stuck or crashes

evidence: drone-floor/evidence/trial_rounds.jsonl

BZFlaglearns, still loses

Net kills per minute against BZFlag's own AI: v2 -1.17, v3 -0.43, v4 -0.26; v0, a never-fires reference, -2.05. v2 is hand-written; v3 and v4 are the loop's promotions, each passed a paired test. It still loses.

Learned or built by us? mixed. Mixed. v2 is hand-written by us. The v2 → v4 gain is the loop's own promotions (v3 = v2+dodge_miss_m=6.0, v4 = v3+juke=False), each kept by a paired test. Between its first trial and v4 we committed 8 changes to the loop's forensics, gene menu and scoring (6f76e6a, 4640940, 3744c9f, c7944b5, 5fd7e3b, 27a115d, 07a04e2, 96259ea); they shaped what it tried, not the values it kept.

net kills per minute vs BZFlag's AI: v0 reference (1 match) -2.05; v2 (8 matches) -1.17; v3 (1 match) -0.43; v4 (3 matches) -0.26v0 reference (1 match)-2.05v2 (8 matches)-1.17v3 (1 match)-0.43v4 (3 matches)-0.26net kills per minute vs BZFlag's AI
  • our pilot drives through the client's autopilot hook — the on-screen label is BZFlag's
  • after v4, 24 more trials were never proven and the loop stopped itself

evidence: bzflag-floor/evidence/pilots/evolution.jsonl

The eye (BZFlag frames)learns, not in a straight line

Six rounds of the eye learning to witness targets on the same 7,863 frames. Recall fell while false confirmations fell; only the last round passed the gate.

Learned or built by us? built by us. Built by us. Each round is a feature we added to the eye (the round names above); the frames and the gate stayed fixed. Commits 30401f2, 809380b, 33fbf3b, 26ebf85 in bzflag-floor.

recall (%) by learning round: recall 96 → 9804998gate 98recall 98learning roundrecall (%)
roundrecallfalse confirmationsgate
first witness96.1%1.14%fail
+ glow clues79.5%0.53%fail
+ shots masked78.3%0.15%fail
+ engine flags78.3%0.15%fail
+ decision trees92.7%0.23%fail
+ turret layout98.4%0.46%PASS
  • gate: recall ≥ 98% and false confirmations ≤ 0.5%

evidence: bzflag-floor/evidence/eye-gate/evolution-teacher4.json

BattleZone (Atari)improves by transfer and pruning

A brain trained in BZFlag, moved into BattleZone: 33,575 vs the native rules' 28,600 over 80 seeds. Pruned with proof: 48,588 vs 29,275 on 80 fresh seeds.

Learned or built by us? mixed. Transfer (+17%): built by us. The brain moved is bzflag-v2, the hand-written BZFlag pilot, through an export and body adapter we wrote (vdsg-brain 429e34b); nothing was learned in BattleZone for that number. Pruned: mixed. We wrote the pruning procedure (737c2f8); what it cut was decided by its own usage census and knockout tests, on v4, which carries two loop promotions from BZFlag.

mean score, 80 fresh seeds: native rules 29,275; transferred brain 28,975; transferred + pruned 48,588native rules29,275transferred brain28,975transferred + pruned48,588mean score, 80 fresh seeds
  • the second export (v4) was even with the native rules on fresh seeds — transfer is not automatic
  • the evolver's own parameter search promoted nothing here

evidence: vdsg-brain/evidence/battlezone/transfer.jsonl

Space Invaders (Atari, raw pixels)up, then down

Mean score 162 with no rules → 276 at its best → 247 at 100 episodes. More rules is not always better.

Learned or built by us? attribution not recorded. Attribution not recorded: this lane keeps no intervention ledger, so the share learned vs built by us cannot be stated.

mean score, 12 held-out seeds by episodes of experience: score 162 → 2470138276score 247episodes of experiencemean score, 12 held-out seeds
  • Freeway runs the same mechanism and loses 12% — published, not tuned away

evidence: invaders-floor/web/curve.json

Doom · the evolver's own ledgerstrict

42 changes proposed by the system to itself; 1 earned promotion. The rest were rejected or stayed not proven — including our own Peel-trace floor.

Learned or built by us? learned. Learned: the promotion (t11 (EXPLORE_DRY 0 → 1, z 2.26)) was proposed and kept by the evolver's own paired test. The gene values it can try were added by us (doom-floor 5cb8477, a6943e9).

changes: promoted 1; rejected 9; not proven 31; inert 1promoted1rejected9not proven31inert1changes
  • promotion needs z ≥ 2 in paired attempts on the same level and seed
  • rejection at z ≤ −1

evidence: doom-floor/evidence/evolve/doom-s1/rounds.jsonl

GoldenEye 007 (N64)flat

Progress on Dam stays near 0.06; 0 of 72 attempts survived. It did invent and promote 2 tactics over the rules' default.

Learned or built by us? learned. The 2 tactics: learned — invented and kept by the lane's own paired tests. Our ledger records no GoldenEye-specific fix while these attempts ran, but 39 human changes to the shared Doom harness it runs on.

route progress by blocks of 10 control attempts: Dam 0.06 → 0.0600.030.07Dam 0.06blocks of 10 control attemptsroute progress
  • promoted: “keep aim on the target” (z 2.03)
  • promoted: “strafe away from the target, keep aim on the target, fire when on target” (z 2.13)

evidence: goldeneye-floor (lane home)/evidence/evolve/goldeneye-dam-s3-doom/attempts.jsonl

A frame from Robot Tank (Atari)

Robot Tank (Atari)rules, not learning

Hand-written rules against random play: 5.67 vs 2.33 tanks destroyed (6 held-out games each). A comparison between arms, not a learning curve.

enemy tanks destroyed: rules 5.67; random 2.33; never fire 0rules5.67random2.33never fire0enemy tanks destroyed

evidence: robotank-floor/evidence/eval.jsonl

Quake III (OpenArena)not shown

Replaying maps with the memory from the first pass: t = 2.02, p = 0.079. Learning is not shown, and we say so.

  • the floor under the bots caused lava deaths in v1 before it was fixed

evidence: quake-floor/RESULTS.md

A frame from Gorillas (QBasic, 1991)

Gorillas (QBasic, 1991)no learning trend

The physics solver hits first time; the learner that brackets its throws hit 2 of 10 and shows no trend.

  • the real GORILLA.BAS, driven through a tap we added to it

evidence: gorillas-floor/tests/fixtures/throws.json

Wolfenstein 3Dno learning record

Rules and navigation only: it plays through levels, but this lane keeps no evidence memory yet.

evidence: wolf-floor/wolf_floor/console.py

Game names and imagery belong to their owners and are shown for research commentary. Frames are from our own runs.

Everything Perslis