# PreyLab F07/F09 evolutionary trials ## Search operator and ownership `population.js:mutateGenome` is the natural division/propagule mutation operator. Each applicable family locus is attempted independently at the dish's `mutationRate` (default 0.12). A continuous attempted mutation adds a uniform signed delta no greater than `mutationStep × (max−min)`; the default step is 0.06. Ordinary bounds clamp; circular phase/color loci wrap modulo one; integer release programs move one supported choice in either direction and clamp at 0 or 8. Mutation chance 0 copies inherited alleles. The genome normalizer retains zero and negative values with nullish defaults. New v4 algae genomes now include the supported `photoGlowThreshold` default so first reproduction does not silently add that allele. A v3-or-earlier archive retains its historical raw genotype reference and continues through the existing one-time migrations. Manual CRISPR edits, curated starter differences and built-in inoculation variation are distinct from this natural operator. At default 0.12 per locus the expected attempts per daughter are 7.80 in flagellar algae (65 loci), 6.24–6.36 in most swimming families (52–53 loci), 5.52 in amoeboid/surface families (46), 5.16 in passive drifters (43), and 5.28 in attached cells (44). These are attempted loci, not effective changes, expressed phenotype shifts or established lineages. `mutationTelemetry` separately counts attempts, effective allele changes and numerical phenotype changes by locus, with no unbounded per-birth history. The ordinary lineage records retain changed alleles and ancestry under their existing cap. An allele with a supported function but no `phenotype()` number change appears in effective changes, not the numerical phenotype count. Algal contact recombination picks each differing non-pigment locus from either parent with a 50% draw (forcing one differing inheritance if none is drawn); pigment channels mix from expressed colors. Categorical loci are inherited whole. The restricted acquired-DNA list and natural mutation are distinct pathways. New dishes expose chance and step separately in Presets and Settings → Population. Protocol JSON v2 owns both; legacy protocol v1 imports at the historical 0.06 step. Existing schema-16 dishes migrate to schema 17 with that step, retaining their chance, organisms and resources. DNA and catalog genomes remain v4 because mutation policy belongs to a dish, not to a genotype. Toxin and passive odor rules are unchanged. ## Reproduce the bounded checks Run `node scripts/run-preylab-evolution-trials.mjs` from the project root. It writes `preylab/evidence/f07-f09-trials.json`. The runner never opens a user dish or writes to the archive. It uses five fixed seeds for each mutation-only and mixed-population comparison, 160 sequential operator generations, and fixed 6,500-step/130-second ecology horizons. There is no early success stop. It compares default chance/step (0.12/0.06), lower chance (0.03/0.06), and larger step (0.12/0.12). Natural-population founders begin as 18 equal-resource algae with zero light and chemical capacity; mutation is enabled only for the evolutionary arm. Ecology tradeoff arms have mutation off, six founders at each restrained/intermediate/high level, equal initial body mineral (0.35) and usable energy (60) per alga, zero reserve and coat. The defense condition adds one real grazer. Support birth quota and forced support death are disabled, automatic replenishment is off, and the 128 living-cell numerical ceiling remains. The output records initial settings, actual cell counts, births/deaths, refusals, lineage contribution, energy/mass, accounting residuals, mutation counters, and 20 ms step timing. It reports censored paths as unobserved, not impossible. The mixed tradeoffs compare reserve investment under steady/cycling light, propulsion under steady/crowded nutrients, defensive alarm apparatus with/without a grazer, and periodic organic output under steady/cycling light. A smaller separate-population reserve comparison checks whether common competition changes the ranking. These are finite-horizon artificial-dish observations, not universal fitness rankings. Actual expenditure is recorded from controller rates and chemical-release events, while F08 accounting checks whole-dish finite fuel. A balanced residual does not validate every ecological assumption. ## Measured reachability (Windows Node, 2026-10-21) The matrix contains 15 mutation-only operator lineages (five seeds for each policy, 160 sequential generations) and 15 ordinary de novo population runs (five seeds per policy, 6,500 steps/130 simulated seconds). The population starts with 18 algae bearing zero light apparatus and a disabled light program; no target genotype was inserted. Operator counts below aggregate five lineages. “Numeric expression” is a change in fields returned by `phenotype()`, so functional regulator or compound changes may not appear in that column. The four milestone columns count lineages that reached the condition at least once. | Policy (chance/maximum step) | Attempted / effective / numeric-expression changes | Capacity >0 | Program on | Signed organic response crosses zero | Capacity + power + program | | --- | ---: | ---: | ---: | ---: | ---: | | Historical default .12/.06 | 6,294 / 5,840 / 1,480 | 5/5 | 5/5 | 1/5 | 5/5 | | Lower chance .03/.06 | 1,616 / 1,388 / 332 | 4/5 | 5/5 | 0/5 | 4/5 | | Larger step .12/.12 | 6,294 / 5,813 / 1,471 | 5/5 | 5/5 | 2/5 | 5/5 | A sequential 160-generation operator is a search-space probe, not a population lineage with survival. The separate de novo ecology arms produced 32, 32 and 34 divisions across five runs respectively; only generation 1 was reached in most runs and generation 2 in one larger-step run. Final living cells with new emission capacity numbered 2, 0 and 2 respectively. No new light-program carrier, signed response crossing or coupled apparatus/program carrier survived to the 130-second endpoint in any of these 15 runs. This is **censored ecological establishment**, not evidence that those changes cannot arise through ordinary reproduction. The historical default remains the new-dish default; these runs do not justify changing it. A deliberately introduced coupled positive control, clearly excluded from de novo counts, lit through the ordinary biological-light mechanism and left 6 and 12 inheriting descendants in two 130-second runs, with balanced whole-dish accounting (`evidence/f07-f09-positive-control.json`). ## Measured ecological tradeoffs Each mixed condition has five seeds, six founders at each allele level, mutation off and 130 simulated seconds. Cells start with the **same actual** 0.35 body mineral and 60 usable energy, but trait-dependent mature construction targets and upkeep differ; some high-investment founders must acquire more material before division. Birth counts are totals per level across five dishes. Most conditions had zero deaths, so this horizon measures early funded division more than long-run survival. “Crowded” reduces finite initial nutrients to 55% of the fixture amount; it is not a geometric crowd trial. The grazer condition has one extra 65-energy consumer. | Trait axis and condition | Low / intermediate / high births | Active chemical material by level | Interpretation limited to this horizon | | --- | ---: | ---: | --- | | Reserve, steady light | 8 / 2 / 0 | — | Higher reserve investment delayed division. | | Reserve, day/night | 14 / 6 / 0 | — | No reserve advantage observed in one 120-second cycle. | | Propulsion, steady light | 8 / 8 / 16 | — | Higher drive made more offspring despite higher measured swim expense. | | Propulsion, reduced finite nutrients | 0 / 2 / 12 | — | Higher drive again made more offspring; target access and movement costs both matter. | | Alarm production, steady light | 16 / 12 / 0 | 0 / .2408 / .456 | High output paid more and made fewer offspring. | | Alarm production, one grazer | 10 / 14 / 2 | 0 / .248 / .3856 | Intermediate output had more births; this does not establish protection or a stable advantage. | | Organic release gain, steady light | 6 / 4 / 8 | .07128 / .348 / .7104 | No monotonic reproductive result. | | Organic release gain, day/night | 2 / 14 / 10 | .06864 / .3474 / .6948 | Intermediate output had more births, without proof of receiver benefit. | Alarm and organic founders used the supported **periodic** program to make active secretion observable. They released 3.57092 material units across the corrected 20 chemical-arm runs and spent 71.4184 usable energy units on those releases (20 energy per material unit); passive food odor was excluded from that tally. The release material also leaves organism stores through the ordinary chemical field. These are deliberately costly signal comparisons, not evidence that a receiver interpreted the signal advantageously. Across three separate-population reserve replicates, steady-light births were 22/6/0 and day/night births 18/4/0 for low/intermediate/high. Reserve disadvantage therefore persisted without mixed competition under this short setup. The model does not show a context-dependent reserve win here. All 73 ordinary matrix runs were balanced by the F08 report; the maximum absolute residual was 2.43×10⁻⁹, and none hit the numerical cell cap. This is numerical source/sink evidence, not a complete ecological validation. Total measured model wall time for those runs was about 432 seconds on the local Windows/Node host, with a maximum single run about 7.05 seconds; rendering/browser FPS and physical-phone performance were not measured. `f07-f09-trials.json` combines the unchanged reserve/propulsion/separate arms from the first 6,500-step matrix, corrected chemical arms from `f07-f09-chemical-arms.json`, and the evolution trait-distribution rerun from `f07-f09-evolution-only.json`; all use the same five fixed seeds and horizon. `node scripts/assemble-preylab-evolution-evidence.mjs` reproduces that merge. The earlier 4,000-step pilot (`f07-f09-trials-80s-pilot.json`) had no births and is retained as a censored discovery run. ## Compatibility and local verification `test/preylab-evolvability.test.mjs` covers bounded chance/step behavior, categorical programs, signed and zero starters, zero-mutation copying, protocol v1/v2 and idempotent schema-16 migration. Combined regulation, accounting, integrity and evolvability tests passed 23/23; design-reference checks passed 10/10; `npm run build` passed. Local Lucee/MySQL archive `149b0288-ea36-4e4f-8e22-00f7176fa308` preserved population schema 17, 12% step, 30 lineage records, 89 attempted/67 effective mutations, organism identities and finite resources across POST, GET, guarded revision POST and GET. Numeric resource differences were under 10⁻⁸ after CFML serialization; an ordinary post-reload step ran without offline catch-up. The browser Presets panel displayed distinct 12% chance and 6% step fields; changing the step to 12% updated the next-dish preview without changing the current dish. This was an in-app browser check, not physical-phone validation. Remaining limits: 130 seconds includes only one or two natural generations and cannot establish rarity or long-run mutation load. The positive control demonstrates function and heritability after deliberate introduction. Chemical release comparisons did not prove receiver-mediated benefit. More cycles, matched tissue maturity and receptor-positive/negative populations are the next bounded trials. No new balancing penalty, reward, gene, hidden rescue resource or toxin policy was added.